From 09bf6077af311222122a6471935d36b1104bf184 Mon Sep 17 00:00:00 2001 From: andrej Date: Fri, 14 Nov 2025 19:24:09 -0700 Subject: [PATCH 01/40] add materialize runtime sequence pass --- include/aie/Dialect/AIEX/IR/AIEX.td | 3 +- .../aie/Dialect/AIEX/Transforms/AIEXPasses.h | 2 + .../aie/Dialect/AIEX/Transforms/AIEXPasses.td | 17 + .../AIEMaterializeRuntimeSequences.cpp | 309 ++++++++++++++++++ lib/Dialect/AIEX/Transforms/CMakeLists.txt | 1 + 5 files changed, 330 insertions(+), 2 deletions(-) create mode 100644 lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp diff --git a/include/aie/Dialect/AIEX/IR/AIEX.td b/include/aie/Dialect/AIEX/IR/AIEX.td index c7eceffd48b..46f34a80cb4 100644 --- a/include/aie/Dialect/AIEX/IR/AIEX.td +++ b/include/aie/Dialect/AIEX/IR/AIEX.td @@ -534,8 +534,7 @@ def AIE_SelectOp: AIEX_Op<"select", []>, Results<(outs Index)> { def AIE_ConfigureOp: AIEX_Op<"configure", [ HasParent<"AIE::RuntimeSequenceOp">, NoTerminator -]>, - Results<(outs Index:$result)> +]> { let summary = "Set up a configuration (program memories, stream switches, etc.) on the NPU device."; let arguments = ( diff --git a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h index dc48a1df963..bc709f38e82 100644 --- a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h +++ b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h @@ -33,6 +33,8 @@ std::unique_ptr> createAIEXToStandardPass(); std::unique_ptr> createAIEMaterializeBDChainsPass(); std::unique_ptr> +createAIEMaterializeRuntimeSequencesPass(); +std::unique_ptr> createAIEAssignRuntimeSequenceBDIDsPass(); std::unique_ptr> createAIEDMATasksToNPUPass(); diff --git a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td index 990f45af4a5..b47a007f0d4 100644 --- a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td +++ b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td @@ -160,6 +160,23 @@ def AIEMaterializeBDChains : Pass<"aie-materialize-bd-chains", "AIE::DeviceOp"> ]; } +def AIEMaterializeRuntimeSequences : Pass<"aie-materialize-runtime-sequences", "AIE::DeviceOp"> { + let summary = "Turn `aiex.configure` into configuration primitives and inline `aiex.run` calls"; + let description = [{ + Turns top-level `aiex.configure` into load PDI firmware instructions that set up the requested configuration. + + Inlines calls to other runtime sequences using `aiex.run` into the calling runtime sequence, resolving references within them to the device containing the definition. + + This pass requires ObjectFIFOs to be lowered first; apply the ObjectFIFO stateful transform before applying this pass. + }]; + + let constructor = "xilinx::AIEX::createAIEMaterializeRuntimeSequencesPass()"; + let dependentDialects = [ + "xilinx::AIE::AIEDialect", + "xilinx::AIEX::AIEXDialect", + ]; +} + def AIEAssignRuntimeSequenceBDIDs : Pass<"aie-assign-runtime-sequence-bd-ids", "AIE::DeviceOp"> { let summary = "Assign IDs to Buffer Descriptors Configured in the Runtime Sequence"; diff --git a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp new file mode 100644 index 00000000000..2a9fd3241bc --- /dev/null +++ b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp @@ -0,0 +1,309 @@ +//===- AIEMaterializeRuntimeSequence.cpp -------------------------*- C++ -*-===// +// +// This file is licensed under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// (c) Copyright 2025 Advanced Micro Devices Inc. +// +//===----------------------------------------------------------------------===// + +#include "aie/Dialect/AIE/IR/AIEDialect.h" +#include "aie/Dialect/AIEX/IR/AIEXDialect.h" +#include "aie/Dialect/AIEX/Transforms/AIEXPasses.h" +#include "aie/Targets/AIERT.h" +#include "aie/Conversion/AIEToConfiguration/AIEToConfiguration.h" + +#include "mlir/Pass/Pass.h" +#include "mlir/IR/PatternMatch.h" +#include "mlir/IR/IRMapping.h" +#include "mlir/Transforms/DialectConversion.h" +#include "mlir/Transforms/GreedyPatternRewriteDriver.h" +#include "mlir/Transforms/WalkPatternRewriteDriver.h" +#include "mlir/Dialect/Arith/IR/Arith.h" + +#define DEBUG_TYPE "aie-materialize-runtime-sequence" + +using namespace mlir; +using namespace xilinx; +using namespace xilinx::AIEX; + +struct RuntimeCallGraphCyclicityAnalysis { + AnalysisManager &analysisManager; + + // if invalid, analysis failed and results should not be considered + bool isValid = false; + + // Call graph is cyclic + bool isCyclic = false; + + RuntimeCallGraphCyclicityAnalysis(Operation *op, AnalysisManager &am) + : analysisManager(am) + { + RuntimeSequenceOp runtimeSequenceOp = llvm::dyn_cast(op); + if (!runtimeSequenceOp) { + op->emitError("RuntimeCallGraphCyclicityAnalysis can only be called on aiex.runtime_sequence operations."); + return; + } + llvm::SetVector visited = {}; + llvm::SetVector todo; + for (RunOp runOp : runtimeSequenceOp.getOps()) { + todo.insert(runOp); + } + while(!todo.empty()) { + RunOp curOp = todo.pop_back_val(); + if (RuntimeSequenceOp calleeRuntimeSequence = curOp.getCalleeRuntimeSequenceOp()) { + if (visited.contains(calleeRuntimeSequence)) { + continue; + } + visited.insert(calleeRuntimeSequence); + for (RunOp runOp : calleeRuntimeSequence.getOps()) { + todo.insert(runOp); + } + } + } + isCyclic = visited.contains(runtimeSequenceOp); + isValid = true; + } +}; + +// Turn aie.configure @device into aie.run %.. @configure +// TODO: add check that liveness of two aie.configures do not overlap +// (i.e., when we configure A, then configure B, cannot call runtime sequence of A after configuring B) +// TODO: add code to remove repeated @configure ops +struct InsertLoadPdiForConfigurePattern : RewritePattern { + + InsertLoadPdiForConfigurePattern(MLIRContext *context, PatternBenefit benefit = 1) + : RewritePattern(ConfigureOp::getOperationName(), benefit, context) {} + + LogicalResult + matchAndRewrite(Operation *op, + PatternRewriter &rewriter) const override { + ConfigureOp configureOp = llvm::dyn_cast(op); + if (!configureOp) { + return failure(); + } + + // LoadPDI resets the whole device, hence cannot do partial reconfiguration; + // therefore, this only supports top-level configure ops + if (!llvm::isa(configureOp->getParentOp())) { + return failure(); + } + + AIE::DeviceOp referencedDevice = configureOp.getReferencedDeviceOp(); + if (!referencedDevice) { + configureOp.emitError("Referenced symbol is not a device"); + return failure(); + } + + Block &configureBlock = configureOp.getBody().front(); + rewriter.setInsertionPointToStart(&configureBlock); + rewriter.create( + configureOp.getLoc(), + FlatSymbolRefAttr::get(referencedDevice.getSymNameAttr()) + ); + + return success(); + } +}; + + +// Inlines the definitions of all symbols referenced in the given operation +// at the current insertion point in the given rewriter, unless the symbol +// definition is in the "previouslyInlinedSymbolMap" map. While inlining, +// symbols will be renamed to have a unique name. +// The callback function is called for each symbol definition found. If it +// returns false, inlining is aborted and an error is emitted. +LogicalResult inlineReferencedSymbolDefinitions( + PatternRewriter &rewriter, + Operation *op, + Operation *lookupFrom, + IRMapping argMap, + llvm::DenseMap &previouslyInlinedSymbolMap, + llvm::function_ref symbolDefValidator) { + MLIRContext *ctx = op->getContext(); + for (NamedAttribute namedAttr : op->getAttrs()) { + Attribute attr = namedAttr.getValue(); + auto newAttr = attr.replace( + [&](SymbolRefAttr oldSymbolRef) { + SymbolRefAttr newSymbolRef; + if (!previouslyInlinedSymbolMap.count(oldSymbolRef)) { + llvm::StringRef oldName = oldSymbolRef.getRootReference().getValue(); + std::string uniqueName = oldName.str(); + unsigned uniquingCounter = 0; + while (SymbolTable::lookupNearestSymbolFrom(op, StringAttr::get(ctx, uniqueName))) { + uniqueName = oldName.str() + "_" + std::to_string(uniquingCounter); + uniquingCounter++; + } + newSymbolRef = SymbolRefAttr::get(ctx, uniqueName); + previouslyInlinedSymbolMap[oldSymbolRef] = newSymbolRef; + + // Add the new symbol definition + Operation *symbolDefOp = SymbolTable::lookupNearestSymbolFrom(lookupFrom, oldSymbolRef); + if (!symbolDefValidator(symbolDefOp)) { + return std::make_pair(newSymbolRef, WalkResult::interrupt()); + } + Operation *clonedSymbolDefOp = rewriter.clone(*symbolDefOp, argMap); + clonedSymbolDefOp->setAttr(SymbolTable::getSymbolAttrName(), StringAttr::get(ctx, uniqueName)); + } else { + newSymbolRef = previouslyInlinedSymbolMap[oldSymbolRef]; + } + return std::make_pair(newSymbolRef, WalkResult::advance()); + }); + if (!newAttr) { + return failure(); + } + op->setAttr(namedAttr.getName(), newAttr); + } + return success(); +} + +struct InlineRuntimeCallsPattern : RewritePattern { + + InlineRuntimeCallsPattern(MLIRContext *ctx) + : RewritePattern(RunOp::getOperationName(), PatternBenefit(1), + ctx) {} + + LogicalResult matchAndRewrite(Operation *op, + PatternRewriter &rewriter) const override { + // matching logic + RunOp runOp = llvm::dyn_cast(op); + if (!runOp) { + return failure(); + } + AIE::DeviceOp calleeDevice = runOp.getCalleeDeviceOp(); + RuntimeSequenceOp calleeRuntimeSequence = runOp.getCalleeRuntimeSequenceOp(); + if (!calleeDevice || !calleeRuntimeSequence) { + return failure(); + } + if (!calleeRuntimeSequence.getOps().empty()) { + return failure(); + } + + // rewrite logic + Region &calleeBody = calleeRuntimeSequence.getBody(); + AIE::DeviceOp callerDevice = op->getParentOfType(); + if (!callerDevice) { + runOp.emitError() << "needs to be in a DeviceOp"; + return failure(); + } + Region &callerDeviceBody = callerDevice.getBodyRegion(); + IRMapping argMap; + ValueRange values = runOp.getArgs(); + for (unsigned i = 0, n = calleeBody.getNumArguments(); i < n; i++) { + BlockArgument arg = calleeBody.getArgument(i); + Value val = values[i]; + if(arg.getType() != val.getType()) { + return runOp.emitOpError() << "argument " << i << " type mismatch: " + << " expected " << arg.getType() + << " but got " << val.getType(); + } + argMap.map(arg, val); + } + llvm::DenseMap previouslyInlinedSymbolMap; + rewriter.setInsertionPoint(runOp); + mlir::OpBuilder::InsertPoint clonedOpInsertionPoint = rewriter.saveInsertionPoint(); + mlir::Block &callerDeviceBodyFirstBlock = callerDeviceBody.front(); + mlir::OpBuilder::InsertPoint clonedSymbolInsertionPoint(&callerDeviceBodyFirstBlock, callerDeviceBodyFirstBlock.begin()); + for (Operation &op : calleeBody.getOps()) { + rewriter.restoreInsertionPoint(clonedOpInsertionPoint); + Operation *clonedOp = rewriter.clone(op, argMap); + clonedOpInsertionPoint = rewriter.saveInsertionPoint(); + + rewriter.restoreInsertionPoint(clonedSymbolInsertionPoint); + if (failed(inlineReferencedSymbolDefinitions( + rewriter, clonedOp, calleeRuntimeSequence.getOperation(), argMap, previouslyInlinedSymbolMap, + [&](Operation *symbolDefOp) { + if (!llvm::isa(symbolDefOp)) { + runOp.emitError() << "referenced symbol '" + << symbolDefOp->getAttrOfType(SymbolTable::getSymbolAttrName()).getValue() + << "' must be a ShimDMAAllocationOp, but got: " + << symbolDefOp->getName().getStringRef(); + return false; + } + return true; + }))) { + return failure(); + } + clonedSymbolInsertionPoint = rewriter.saveInsertionPoint(); + } + + rewriter.eraseOp(runOp); + + return success(); + } +}; + +struct AIEMaterializeRuntimeSequencesPass + : AIEMaterializeRuntimeSequencesBase { + void runOnOperation() override { + AIE::DeviceOp deviceOp = getOperation(); + + // Turn aie.configure to aie.run @configure + for (RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { + AnalysisManager am = getAnalysisManager().nest(runtimeSequenceOp); + RuntimeCallGraphCyclicityAnalysis cyclicity = am.getAnalysis(); + if (!cyclicity.isValid) { + return signalPassFailure(); + } + if (cyclicity.isCyclic) { + runtimeSequenceOp.emitError("Runtime sequence contains a cycle"); + return signalPassFailure(); + } + RewritePatternSet patterns(&getContext()); + patterns.insert(&getContext()); + walkAndApplyPatterns(runtimeSequenceOp, std::move(patterns)); + } + + // Greedily inline all runtime sequences that can be inlined; + // this will start with runtime sequences that do not call other runtime + // sequences (leaves); once their callers inline them, the callers can + // be inlined as well, and so on + MLIRContext *ctx = &getContext(); + AIE::DeviceOp device = getOperation(); + GreedyRewriteConfig rewriter_config = GreedyRewriteConfig(); + rewriter_config.setRegionSimplificationLevel( + GreedySimplifyRegionLevel::Disabled); + + RewritePatternSet patterns(ctx); + patterns.insert(ctx); + if (failed(applyPatternsGreedily(device, std::move(patterns), rewriter_config))) { + signalPassFailure(); + } + + // Flatten the IR: hoist all operations inside aiex.configure to be direct + // children of the runtime sequence, preserving order + for (RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { + SmallVector configureOps; + for (ConfigureOp configureOp : runtimeSequenceOp.getOps()) { + configureOps.push_back(configureOp); + } + + IRRewriter rewriter(ctx); + for (ConfigureOp configureOp : configureOps) { + Block &configureBlock = configureOp.getBody().front(); + + // Collect all operations in the configure block + SmallVector opsToHoist; + for (Operation &op : configureBlock) { + opsToHoist.push_back(&op); + } + + // Hoist operations to be right before the configure op + rewriter.setInsertionPoint(configureOp); + for (Operation *op : opsToHoist) { + op->moveBefore(configureOp); + } + + // Erase the now-empty configure op + rewriter.eraseOp(configureOp); + } + } + + } +}; + +std::unique_ptr> +AIEX::createAIEMaterializeRuntimeSequencesPass() { + return std::make_unique(); +} diff --git a/lib/Dialect/AIEX/Transforms/CMakeLists.txt b/lib/Dialect/AIEX/Transforms/CMakeLists.txt index aebe62d7732..c0dffbe3d23 100644 --- a/lib/Dialect/AIEX/Transforms/CMakeLists.txt +++ b/lib/Dialect/AIEX/Transforms/CMakeLists.txt @@ -15,6 +15,7 @@ add_mlir_dialect_library(AIEXTransforms AIELowerMemcpy.cpp AIEDmaToNpu.cpp AIEMaterializeBDChains.cpp + AIEMaterializeRuntimeSequences.cpp AIEAssignRuntimeSequenceBDIDs.cpp AIEDMATasksToNPU.cpp AIESubstituteShimDMAAllocations.cpp From d74b2d2db5718044489f8aaf36a7c9add1bf5f39 Mon Sep 17 00:00:00 2001 From: andrej Date: Fri, 14 Nov 2025 19:46:47 -0700 Subject: [PATCH 02/40] Apply materialize runtime sequences pass to whole module, since it requires cross-device access --- .../aie/Dialect/AIEX/Transforms/AIEXPasses.h | 2 +- .../aie/Dialect/AIEX/Transforms/AIEXPasses.td | 2 +- .../AIEMaterializeRuntimeSequences.cpp | 116 +++++++++--------- 3 files changed, 62 insertions(+), 58 deletions(-) diff --git a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h index bc709f38e82..3b5de93e46d 100644 --- a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h +++ b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h @@ -32,7 +32,7 @@ std::unique_ptr> createAIEDmaToNpuPass(); std::unique_ptr> createAIEXToStandardPass(); std::unique_ptr> createAIEMaterializeBDChainsPass(); -std::unique_ptr> +std::unique_ptr> createAIEMaterializeRuntimeSequencesPass(); std::unique_ptr> createAIEAssignRuntimeSequenceBDIDsPass(); diff --git a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td index b47a007f0d4..a4f2ade7b65 100644 --- a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td +++ b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td @@ -160,7 +160,7 @@ def AIEMaterializeBDChains : Pass<"aie-materialize-bd-chains", "AIE::DeviceOp"> ]; } -def AIEMaterializeRuntimeSequences : Pass<"aie-materialize-runtime-sequences", "AIE::DeviceOp"> { +def AIEMaterializeRuntimeSequences : Pass<"aie-materialize-runtime-sequences", "mlir::ModuleOp"> { let summary = "Turn `aiex.configure` into configuration primitives and inline `aiex.run` calls"; let description = [{ Turns top-level `aiex.configure` into load PDI firmware instructions that set up the requested configuration. diff --git a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp index 2a9fd3241bc..8e27d83e8c6 100644 --- a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp @@ -237,73 +237,77 @@ struct InlineRuntimeCallsPattern : RewritePattern { struct AIEMaterializeRuntimeSequencesPass : AIEMaterializeRuntimeSequencesBase { void runOnOperation() override { - AIE::DeviceOp deviceOp = getOperation(); - - // Turn aie.configure to aie.run @configure - for (RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { - AnalysisManager am = getAnalysisManager().nest(runtimeSequenceOp); - RuntimeCallGraphCyclicityAnalysis cyclicity = am.getAnalysis(); - if (!cyclicity.isValid) { - return signalPassFailure(); - } - if (cyclicity.isCyclic) { - runtimeSequenceOp.emitError("Runtime sequence contains a cycle"); - return signalPassFailure(); - } - RewritePatternSet patterns(&getContext()); - patterns.insert(&getContext()); - walkAndApplyPatterns(runtimeSequenceOp, std::move(patterns)); - } + ModuleOp moduleOp = getOperation(); - // Greedily inline all runtime sequences that can be inlined; - // this will start with runtime sequences that do not call other runtime - // sequences (leaves); once their callers inline them, the callers can - // be inlined as well, and so on - MLIRContext *ctx = &getContext(); - AIE::DeviceOp device = getOperation(); - GreedyRewriteConfig rewriter_config = GreedyRewriteConfig(); - rewriter_config.setRegionSimplificationLevel( - GreedySimplifyRegionLevel::Disabled); - - RewritePatternSet patterns(ctx); - patterns.insert(ctx); - if (failed(applyPatternsGreedily(device, std::move(patterns), rewriter_config))) { - signalPassFailure(); - } + // Process each device in the module + for (AIE::DeviceOp deviceOp : moduleOp.getOps()) { - // Flatten the IR: hoist all operations inside aiex.configure to be direct - // children of the runtime sequence, preserving order - for (RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { - SmallVector configureOps; - for (ConfigureOp configureOp : runtimeSequenceOp.getOps()) { - configureOps.push_back(configureOp); + // Turn aie.configure to aie.run @configure + for (RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { + AnalysisManager am = getAnalysisManager().nest(deviceOp).nest(runtimeSequenceOp); + RuntimeCallGraphCyclicityAnalysis cyclicity = am.getAnalysis(); + if (!cyclicity.isValid) { + return signalPassFailure(); + } + if (cyclicity.isCyclic) { + runtimeSequenceOp.emitError("Runtime sequence contains a cycle"); + return signalPassFailure(); + } + RewritePatternSet patterns(&getContext()); + patterns.insert(&getContext()); + walkAndApplyPatterns(runtimeSequenceOp, std::move(patterns)); } - - IRRewriter rewriter(ctx); - for (ConfigureOp configureOp : configureOps) { - Block &configureBlock = configureOp.getBody().front(); - - // Collect all operations in the configure block - SmallVector opsToHoist; - for (Operation &op : configureBlock) { - opsToHoist.push_back(&op); + + // Greedily inline all runtime sequences that can be inlined; + // this will start with runtime sequences that do not call other runtime + // sequences (leaves); once their callers inline them, the callers can + // be inlined as well, and so on + MLIRContext *ctx = &getContext(); + GreedyRewriteConfig rewriter_config = GreedyRewriteConfig(); + rewriter_config.setRegionSimplificationLevel( + GreedySimplifyRegionLevel::Disabled); + + RewritePatternSet patterns(ctx); + patterns.insert(ctx); + if (failed(applyPatternsGreedily(deviceOp, std::move(patterns), rewriter_config))) { + signalPassFailure(); + } + + // Flatten the IR: hoist all operations inside aiex.configure to be direct + // children of the runtime sequence, preserving order + for (RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { + SmallVector configureOps; + for (ConfigureOp configureOp : runtimeSequenceOp.getOps()) { + configureOps.push_back(configureOp); } - // Hoist operations to be right before the configure op - rewriter.setInsertionPoint(configureOp); - for (Operation *op : opsToHoist) { - op->moveBefore(configureOp); + IRRewriter rewriter(ctx); + for (ConfigureOp configureOp : configureOps) { + Block &configureBlock = configureOp.getBody().front(); + + // Collect all operations in the configure block + SmallVector opsToHoist; + for (Operation &op : configureBlock) { + opsToHoist.push_back(&op); + } + + // Hoist operations to be right before the configure op + rewriter.setInsertionPoint(configureOp); + for (Operation *op : opsToHoist) { + op->moveBefore(configureOp); + } + + // Erase the now-empty configure op + rewriter.eraseOp(configureOp); } - - // Erase the now-empty configure op - rewriter.eraseOp(configureOp); } - } + + } // end for each device } }; -std::unique_ptr> +std::unique_ptr> AIEX::createAIEMaterializeRuntimeSequencesPass() { return std::make_unique(); } From a4a8d6b70e531a1caba898347dd2c6f1c59d1a2a Mon Sep 17 00:00:00 2001 From: andrej Date: Fri, 14 Nov 2025 20:52:44 -0700 Subject: [PATCH 03/40] add operation to pass arguments between runtime sequences --- include/aie/Dialect/AIEX/IR/AIEX.td | 56 ++++++++ include/aie/Dialect/AIEX/IR/AIEXDialect.h | 7 + lib/Dialect/AIEX/IR/AIEXDialect.cpp | 143 ++++++++++++++++++++ lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp | 24 +++- 4 files changed, 226 insertions(+), 4 deletions(-) diff --git a/include/aie/Dialect/AIEX/IR/AIEX.td b/include/aie/Dialect/AIEX/IR/AIEX.td index 46f34a80cb4..2051bce7484 100644 --- a/include/aie/Dialect/AIEX/IR/AIEX.td +++ b/include/aie/Dialect/AIEX/IR/AIEX.td @@ -579,6 +579,62 @@ def AIE_RunOp: AIEX_Op<"run", [HasParent<"ConfigureOp">]> { }]; } +def AIE_ArgSliceOp: AIEX_Op<"arg_slice", [ + Pure, + ParentOneOf<["RuntimeSequenceOp", "ConfigureOp"]> +]>, Results<(outs AnyMemRef:$result)> { + let summary = "Create a slice of a runtime sequence argument with an offset"; + let description = [{ + The `arg_slice` operation creates a reference to a slice of a runtime sequence argument, + or another `arg_slice`, with a specified offset and length. + + This operation is used to handle cases where runtime sequences are called from other + runtime sequences, and their argument indices need to be tracked back to the original + firmware call argument indices. It also allows adding offsets to these arguments. + + The offset and length are specified as multiples of the input memref's element type. + + The operation verifies that: + - The slice (offset + length) does not exceed the size of the input memref + - The result memref has the same total number of bytes as the slice length + - Element types can differ between input and result as long as the byte sizes match + - Both input and result memrefs have static shapes + + Example: + ```mlir + // Create a slice from element 4 to 8 (bytes 16-32) of a 4x4xi32 memref + // Results in a 2x2xi32 memref (4 elements * 4 bytes = 16 bytes) + %slice = aiex.arg_slice %input_arg[4:8] : memref<4x4xi32> -> memref<2x2xi32> + + // Chain slices together - offsets are relative to the immediate input + %slice2 = aiex.arg_slice %slice[0:2] : memref<2x2xi32> -> memref<2xi32> + ``` + }]; + + let arguments = ( + ins AnyMemRef:$input, + I64Attr:$offset, + I64Attr:$length + ); + + let results = (outs AnyMemRef:$result); + + let assemblyFormat = [{ + $input custom($offset, $length) attr-dict `:` type($input) `->` type($result) + }]; + + let extraClassDeclaration = [{ + // Get the end offset in bytes (converts element offset to bytes) + int64_t getEndOffset(); + + // Trace back through the chain of arg_slices to find the original argument + // and compute the cumulative offset in bytes + std::pair getRootArgumentAndOffset(); + }]; + + let hasVerifier = 1; +} + def AIE_NpuDmaMemcpyNdOp: AIEX_Op<"npu.dma_memcpy_nd", [ AttrSizedOperandSegments, MyOffsetSizeAndStrideOpInterface diff --git a/include/aie/Dialect/AIEX/IR/AIEXDialect.h b/include/aie/Dialect/AIEX/IR/AIEXDialect.h index 884c2c8c264..8441dabe5b5 100644 --- a/include/aie/Dialect/AIEX/IR/AIEXDialect.h +++ b/include/aie/Dialect/AIEX/IR/AIEXDialect.h @@ -49,6 +49,13 @@ verifyStridesWraps(mlir::Operation *forOp, llvm::SmallVector hardwareStrides, bool skipTransformationChecks = false); +mlir::ParseResult parseArgSliceRange(mlir::AsmParser &parser, + mlir::IntegerAttr &offset, + mlir::IntegerAttr &length); + +void printArgSliceRange(mlir::AsmPrinter &printer, mlir::Operation *op, + mlir::IntegerAttr offset, mlir::IntegerAttr length); + } // namespace AIEX } // namespace xilinx diff --git a/lib/Dialect/AIEX/IR/AIEXDialect.cpp b/lib/Dialect/AIEX/IR/AIEXDialect.cpp index 025680ff8e2..dd820d9865a 100644 --- a/lib/Dialect/AIEX/IR/AIEXDialect.cpp +++ b/lib/Dialect/AIEX/IR/AIEXDialect.cpp @@ -52,6 +52,43 @@ void AIEXDialect::initialize() { #define GET_OP_CLASSES #include "aie/Dialect/AIEX/IR/AIEX.cpp.inc" +// Custom parser for ArgSliceOp range syntax: [offset:end] +// Offsets are in element counts (multiples of input element type) +ParseResult xilinx::AIEX::parseArgSliceRange(AsmParser &parser, + IntegerAttr &offset, + IntegerAttr &length) { + int64_t offsetValue, endValue; + + if (parser.parseLSquare() || + parser.parseInteger(offsetValue) || + parser.parseColon() || + parser.parseInteger(endValue) || + parser.parseRSquare()) + return failure(); + + if (offsetValue < 0) { + return parser.emitError(parser.getCurrentLocation(), + "offset must be non-negative"); + } + + if (endValue <= offsetValue) { + return parser.emitError(parser.getCurrentLocation(), + "end must be greater than offset"); + } + + int64_t lengthValue = endValue - offsetValue; + offset = parser.getBuilder().getI64IntegerAttr(offsetValue); + length = parser.getBuilder().getI64IntegerAttr(lengthValue); + return success(); +} + +// Custom printer for ArgSliceOp range syntax: [offset:end] +void xilinx::AIEX::printArgSliceRange(AsmPrinter &printer, Operation *op, + IntegerAttr offset, IntegerAttr length) { + int64_t endValue = offset.getInt() + length.getInt(); + printer << "[" << offset.getInt() << ":" << endValue << "]"; +} + /* Return the correct values to write to the hardware registers to configure strides and wraps given the input user-facing strides and wraps. @@ -985,3 +1022,109 @@ LogicalResult AIEX::RunOp::verify() { } return failure(); } + +//===----------------------------------------------------------------------===// +// ArgSliceOp +//===----------------------------------------------------------------------===// + +int64_t AIEX::ArgSliceOp::getEndOffset() { + // Convert element offset to bytes + auto inputType = cast(getInput().getType()); + unsigned elemSizeInBits = inputType.getElementType().getIntOrFloatBitWidth(); + int64_t elemSizeInBytes = elemSizeInBits / 8; + + int64_t endOffsetInElements = getOffset() + getLength(); + return endOffsetInElements * elemSizeInBytes; +} + +std::pair AIEX::ArgSliceOp::getRootArgumentAndOffset() { + mlir::Value current = getInput(); + int64_t cumulativeOffsetInBytes = 0; + + auto currentInputType = cast(current.getType()); + unsigned elemSizeInBytes = currentInputType.getElementType().getIntOrFloatBitWidth() / 8; + cumulativeOffsetInBytes = getOffset() * elemSizeInBytes; + + // Trace back through the chain of arg_slices + while (auto parentSlice = current.getDefiningOp()) { + auto parentInputType = cast(parentSlice.getInput().getType()); + unsigned parentElemSizeInBytes = parentInputType.getElementType().getIntOrFloatBitWidth() / 8; + cumulativeOffsetInBytes += parentSlice.getOffset() * parentElemSizeInBytes; + current = parentSlice.getInput(); + } + + return {current, cumulativeOffsetInBytes}; +} + +LogicalResult AIEX::ArgSliceOp::verify() { + if (getLength() <= 0) { + return emitOpError("length must be positive, got ") << getLength(); + } + + // Verify that the input is either a block argument or another arg_slice + mlir::Value input = getInput(); + if (!isa(input) && + !input.getDefiningOp()) { + return emitOpError( + "input must be either a runtime sequence argument or another arg_slice"); + } + + // If input is a block argument, verify it belongs to a RuntimeSequenceOp + if (auto blockArg = dyn_cast(input)) { + auto *parentOp = blockArg.getOwner()->getParentOp(); + if (!isa(parentOp)) { + return emitOpError( + "input block argument must belong to a RuntimeSequenceOp"); + } + } + + // Verify memref constraints + auto inputType = dyn_cast(input.getType()); + auto resultType = dyn_cast(getResult().getType()); + + if (!inputType || !resultType) { + return emitOpError("input and result must be memref types"); + } + + // Calculate sizes + auto inputElemType = inputType.getElementType(); + auto resultElemType = resultType.getElementType(); + + int64_t inputElemSizeInBytes = inputElemType.getIntOrFloatBitWidth() / 8; + int64_t resultElemSizeInBytes = resultElemType.getIntOrFloatBitWidth() / 8; + + // Calculate total sizes + if (!inputType.hasStaticShape()) { + return emitOpError("input memref must have static shape"); + } + if (!resultType.hasStaticShape()) { + return emitOpError("result memref must have static shape"); + } + + int64_t inputNumElements = inputType.getNumElements(); + int64_t resultNumElements = resultType.getNumElements(); + + int64_t resultSizeInBytes = resultNumElements * resultElemSizeInBytes; + + // Note: offset and length are stored as element counts relative to input element type + + // Verify that slice does not exceed input bounds (in elements) + int64_t endOffset = getOffset() + getLength(); + if (endOffset > inputNumElements) { + return emitOpError("slice end (offset + length = ") + << endOffset << " elements) exceeds input memref size (" + << inputNumElements << " elements)"; + } + + // Verify that result size in bytes matches the slice length in bytes + // length is in input elements, so convert to bytes + int64_t sliceSizeInBytes = getLength() * inputElemSizeInBytes; + if (resultSizeInBytes != sliceSizeInBytes) { + return emitOpError("result memref size (") + << resultSizeInBytes << " bytes) must match slice length (" + << sliceSizeInBytes << " bytes = " << getLength() + << " elements * " << inputElemSizeInBytes << " bytes/element)"; + } + + return success(); +} diff --git a/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp b/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp index 16794a3f3fe..abf492d08f2 100644 --- a/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp @@ -284,24 +284,40 @@ struct DmaToNpuPattern : OpConversionPattern { return failure(); } - // arg_idx - AIE::RuntimeSequenceOp seq_op = - op->getParentOfType(); + // arg_idx and offset handling for memref or arg_slice + AIEX::RuntimeSequenceOp seq_op = + op->getParentOfType(); if (!seq_op) { op->emitOpError("NpuDmaMemcpyNdOps must have RuntimeSequenceOp parent at " "time of lowering."); return failure(); } + + // Handle both direct block arguments and arg_slice operations + mlir::Value rootMemref = memref; + int64_t argSliceOffset = 0; + + if (auto argSliceOp = memref.getDefiningOp()) { + // Trace back through arg_slice chain to find root argument and cumulative offset + auto [root, cumulativeOffset] = argSliceOp.getRootArgumentAndOffset(); + rootMemref = root; + argSliceOffset = cumulativeOffset; + } + + // Find the argument index of the root memref Block &entryBB = seq_op.getBody().front(); int arg_idx = -1; for (int i = 0, e = entryBB.getNumArguments(); i < e; i++) { - if (entryBB.getArgument(i) == memref) { + if (entryBB.getArgument(i) == rootMemref) { arg_idx = i; break; } } if (arg_idx < 0) return failure(); + + // Add the arg_slice offset to the existing offset + offset += argSliceOffset; // bd_id bd_id = IntegerAttr::get(i32ty, op.getId()); From 59caee304fadd66b8ab6f0b715000d0e44e40217 Mon Sep 17 00:00:00 2001 From: andrej Date: Fri, 21 Nov 2025 13:56:32 -0700 Subject: [PATCH 04/40] update materialize runtime sequences pass --- include/aie/Dialect/AIE/IR/AIEOps.td | 1 + lib/Dialect/AIE/IR/AIEDialect.cpp | 35 +++++++++++++ .../AIEMaterializeRuntimeSequences.cpp | 43 ++++++++-------- python/compiler/aiecc/main.py | 50 +++++++++---------- 4 files changed, 82 insertions(+), 47 deletions(-) diff --git a/include/aie/Dialect/AIE/IR/AIEOps.td b/include/aie/Dialect/AIE/IR/AIEOps.td index d00361b35fb..3bc214a41d1 100644 --- a/include/aie/Dialect/AIE/IR/AIEOps.td +++ b/include/aie/Dialect/AIE/IR/AIEOps.td @@ -2160,6 +2160,7 @@ def AIE_RuntimeSequenceOp : AIE_Op<"runtime_sequence", [ static llvm::StringRef getDefaultRuntimeSequenceName() { return "sequence"; } static RuntimeSequenceOp getForSymbolInDevice(DeviceOp module, llvm::StringRef symbol); static RuntimeSequenceOp getForSymbolInDeviceOrError(DeviceOp module, llvm::StringRef symbol); + llvm::LogicalResult verifyBeforeMaterialization(); }]; let extraClassDefinition = [{ }]; diff --git a/lib/Dialect/AIE/IR/AIEDialect.cpp b/lib/Dialect/AIE/IR/AIEDialect.cpp index ec618b85b24..9b4e4581f7f 100644 --- a/lib/Dialect/AIE/IR/AIEDialect.cpp +++ b/lib/Dialect/AIE/IR/AIEDialect.cpp @@ -2479,6 +2479,41 @@ RuntimeSequenceOp::getForSymbolInDeviceOrError(DeviceOp deviceOp, return runtimeSequenceOp; } +LogicalResult RuntimeSequenceOp::verifyBeforeMaterialization() { + // Check that all symbol references within the runtime sequence + // are either to ShimDMAAllocationOp, DeviceOp or another RuntimeSequenceOp; + // these are the only symbols that can be lowered with the NPU passes + auto result = (*this)->walk([&](Operation *op) { + for (NamedAttribute namedAttr : op->getAttrs()) { + Attribute attr = namedAttr.getValue(); + auto walkResult = attr.walk([&](SymbolRefAttr symbolRef) { + Operation *symbolDefOp = SymbolTable::lookupNearestSymbolFrom(*this, symbolRef); + if (symbolDefOp && + !llvm::isa(symbolDefOp) && + !llvm::isa(symbolDefOp) && + !llvm::isa(symbolDefOp)) { + op->emitOpError() << "references symbol '" + << symbolRef.getRootReference().getValue() + << "' which must be either a ShimDMAAllocationOp, DeviceOp or RuntimeSequenceOp, but got: " + << symbolDefOp->getName().getStringRef(); + return WalkResult::interrupt(); + } + return WalkResult::advance(); + }); + if (walkResult.wasInterrupted()) { + return WalkResult::interrupt(); + } + } + return WalkResult::advance(); + }); + + if (result.wasInterrupted()) { + return failure(); + } + + return success(); +} + // Include implementations for custom attributes #define GET_ATTRDEF_CLASSES #include "aie/Dialect/AIE/IR/AIEAttrs.cpp.inc" diff --git a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp index 8e27d83e8c6..6857cda9ab7 100644 --- a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp @@ -119,8 +119,7 @@ LogicalResult inlineReferencedSymbolDefinitions( Operation *op, Operation *lookupFrom, IRMapping argMap, - llvm::DenseMap &previouslyInlinedSymbolMap, - llvm::function_ref symbolDefValidator) { + llvm::DenseMap &previouslyInlinedSymbolMap) { MLIRContext *ctx = op->getContext(); for (NamedAttribute namedAttr : op->getAttrs()) { Attribute attr = namedAttr.getValue(); @@ -140,7 +139,7 @@ LogicalResult inlineReferencedSymbolDefinitions( // Add the new symbol definition Operation *symbolDefOp = SymbolTable::lookupNearestSymbolFrom(lookupFrom, oldSymbolRef); - if (!symbolDefValidator(symbolDefOp)) { + if (!symbolDefOp) { return std::make_pair(newSymbolRef, WalkResult::interrupt()); } Operation *clonedSymbolDefOp = rewriter.clone(*symbolDefOp, argMap); @@ -212,17 +211,7 @@ struct InlineRuntimeCallsPattern : RewritePattern { rewriter.restoreInsertionPoint(clonedSymbolInsertionPoint); if (failed(inlineReferencedSymbolDefinitions( - rewriter, clonedOp, calleeRuntimeSequence.getOperation(), argMap, previouslyInlinedSymbolMap, - [&](Operation *symbolDefOp) { - if (!llvm::isa(symbolDefOp)) { - runOp.emitError() << "referenced symbol '" - << symbolDefOp->getAttrOfType(SymbolTable::getSymbolAttrName()).getValue() - << "' must be a ShimDMAAllocationOp, but got: " - << symbolDefOp->getName().getStringRef(); - return false; - } - return true; - }))) { + rewriter, clonedOp, calleeRuntimeSequence.getOperation(), argMap, previouslyInlinedSymbolMap))) { return failure(); } clonedSymbolInsertionPoint = rewriter.saveInsertionPoint(); @@ -242,7 +231,14 @@ struct AIEMaterializeRuntimeSequencesPass // Process each device in the module for (AIE::DeviceOp deviceOp : moduleOp.getOps()) { - // Turn aie.configure to aie.run @configure + // Verify all runtime sequences before materialization + for (RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { + if (failed(runtimeSequenceOp.verifyBeforeMaterialization())) { + return signalPassFailure(); + } + } + + // Check for cycles in runtime sequence calls for (RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { AnalysisManager am = getAnalysisManager().nest(deviceOp).nest(runtimeSequenceOp); RuntimeCallGraphCyclicityAnalysis cyclicity = am.getAnalysis(); @@ -253,9 +249,6 @@ struct AIEMaterializeRuntimeSequencesPass runtimeSequenceOp.emitError("Runtime sequence contains a cycle"); return signalPassFailure(); } - RewritePatternSet patterns(&getContext()); - patterns.insert(&getContext()); - walkAndApplyPatterns(runtimeSequenceOp, std::move(patterns)); } // Greedily inline all runtime sequences that can be inlined; @@ -267,16 +260,24 @@ struct AIEMaterializeRuntimeSequencesPass rewriter_config.setRegionSimplificationLevel( GreedySimplifyRegionLevel::Disabled); - RewritePatternSet patterns(ctx); - patterns.insert(ctx); - if (failed(applyPatternsGreedily(deviceOp, std::move(patterns), rewriter_config))) { + RewritePatternSet patterns_0(ctx); + patterns_0.insert(ctx); + if (failed(applyPatternsGreedily(deviceOp, std::move(patterns_0), rewriter_config))) { signalPassFailure(); } + // Insert LoadPDI ops for each aiex.configure op + for (RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { + RewritePatternSet patterns_1(ctx); + patterns_1.insert(ctx); + walkAndApplyPatterns(runtimeSequenceOp, std::move(patterns_1)); + } + // Flatten the IR: hoist all operations inside aiex.configure to be direct // children of the runtime sequence, preserving order for (RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { SmallVector configureOps; + for (ConfigureOp configureOp : runtimeSequenceOp.getOps()) { configureOps.push_back(configureOp); } diff --git a/python/compiler/aiecc/main.py b/python/compiler/aiecc/main.py index a4475e32e73..8000559daaf 100644 --- a/python/compiler/aiecc/main.py +++ b/python/compiler/aiecc/main.py @@ -148,15 +148,19 @@ def _create_aie_lower_to_llvm_pipeline( AIE_LOWER_TO_LLVM = _create_aie_lower_to_llvm_pipeline # pipeline to lower and legalize runtime sequence for NPU -NPU_LOWERING_PIPELINE = Pipeline().Nested( - "aie.device", +NPU_LOWERING_PIPELINE = ( Pipeline() - .add_pass("aie-materialize-bd-chains") - .add_pass("aie-substitute-shim-dma-allocations") - .add_pass("aie-assign-runtime-sequence-bd-ids") - .add_pass("aie-dma-tasks-to-npu") - .add_pass("aie-dma-to-npu") - .add_pass("aie-lower-set-lock"), + .add_pass("aie-materialize-runtime-sequences") + .Nested( + "aie.device", + Pipeline() + .add_pass("aie-materialize-bd-chains") + .add_pass("aie-substitute-shim-dma-allocations") + .add_pass("aie-assign-runtime-sequence-bd-ids") + .add_pass("aie-dma-tasks-to-npu") + .add_pass("aie-dma-to-npu") + .add_pass("aie-lower-set-lock"), + ) ) @@ -373,11 +377,9 @@ def create_device_id_mapping(devices): return device_to_id -def assign_load_pdi_ids(mlir_module_str, device_to_id_mapping): +def assign_load_pdi_ids(module, device_to_id_mapping): """Transform symbolic aiex.npu.load_pdi references to numeric IDs""" - with Context() as context, Location.unknown(): - module = Module.parse(mlir_module_str) - + with module.context as context, Location.unknown(): for runtime_seq in find_ops( module.operation, lambda o: isinstance(o.operation.opview, aiexdialect.RuntimeSequenceOp), @@ -399,8 +401,6 @@ def assign_load_pdi_ids(mlir_module_str, device_to_id_mapping): IntegerType.get_signless(32, context=context), pdi_id ) - return str(module) - def set_elf_file_for_core(core, path): with InsertionPoint.at_block_terminator( @@ -979,9 +979,9 @@ async def generate_full_elf_config_json( "PDIs": [], } - pdi_id = device_to_id_mapping[device_name] - pdi_filename = self.pdi_file_name(device_name) - kernel_entry["PDIs"].append({"id": pdi_id, "PDI_file": pdi_filename}) + for other_device_name, other_pdi_id in device_to_id_mapping.items(): + pdi_filename = self.pdi_file_name(other_device_name) + kernel_entry["PDIs"].append({"id": other_pdi_id, "PDI_file": pdi_filename}) for seq_op, seq_name in sequences: insts_filename = self.npu_insts_file_name(device_name, seq_name) @@ -1607,15 +1607,6 @@ async def run_flow(self): sys.exit(1) aie_target, aie_peano_target = aie_targets[0], aie_peano_targets[0] - # Handle full ELF generation configuration - if opts.generate_full_elf: - device_to_id_mapping = create_device_id_mapping(devices) - self.mlir_module_str = assign_load_pdi_ids( - self.mlir_module_str, device_to_id_mapping - ) - transformed_mlir_path = self.prepend_tmp("input_with_pdi_ids.mlir") - await write_file_async(self.mlir_module_str, transformed_mlir_path) - pass_pipeline = INPUT_WITH_ADDRESSES_PIPELINE( opts.alloc_scheme, opts.dynamic_objFifos, @@ -1717,6 +1708,13 @@ async def run_flow(self): npu_insts_file, self.opts.verbose, ) + if opts.generate_full_elf: + device_to_id_mapping = create_device_id_mapping(devices) + assign_load_pdi_ids( + npu_insts_module, device_to_id_mapping + ) + transformed_mlir_path = self.prepend_tmp("npu_insts_with_pid_ids.mlir") + await write_file_async(str(npu_insts_module), transformed_mlir_path) self.progress_bar.update(task3, advance=1) # 4.) Generate compilation artifacts for each device From 04f1db22d6683fd6115c944f2860bbc7b39348e4 Mon Sep 17 00:00:00 2001 From: andrej Date: Fri, 21 Nov 2025 16:41:56 -0700 Subject: [PATCH 05/40] inline referenced SSA values for materializeRuntimeSequences pass --- .../AIEMaterializeRuntimeSequences.cpp | 185 +++++++++++++++++- 1 file changed, 175 insertions(+), 10 deletions(-) diff --git a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp index 6857cda9ab7..d32018988d8 100644 --- a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp @@ -107,19 +107,130 @@ struct InsertLoadPdiForConfigurePattern : RewritePattern { } }; +// Collects all external SSA values referenced by an operation (and its nested +// operations). +// 1. Collects SSA values from the operation's operands. +// 2. Recursively walks through all operations in the operation's regions. +// 3. For each nested operation, collects SSA values from its operands. +// 4. Skips values that are already in argMap or defined within the operation. +void collectReferencedSSAValues(Operation *op, + const IRMapping &argMap, + llvm::SetVector &referencedValues) { + + // Collect SSA values from the operation's direct operands. + for (Value operand : op->getOperands()) { + if (!argMap.contains(operand)) { + referencedValues.insert(operand); + } + } + + // Recursively collect SSA values from nested operations in all regions. + for (Region ®ion : op->getRegions()) { + region.walk([&](Operation *nestedOp) { + for (Value operand : nestedOp->getOperands()) { + if (argMap.contains(operand)) { + return; + } + Operation *defOp = operand.getDefiningOp(); + if (defOp && op->isProperAncestor(defOp)) { + return; + } + + referencedValues.insert(operand); + } + }); + } +} + +// Copies SSA value definitions into the caller device. +// Currently, only `aie.tile` operations are supported. +// Updates argMap to map old values to new/existing values. +LogicalResult copyReferencedSSAValues( + PatternRewriter &rewriter, + const llvm::SetVector &referencedValues, + AIE::DeviceOp callerDevice, + IRMapping &argMap, + mlir::OpBuilder::InsertPoint &clonedSymbolInsertionPoint, + Operation *errorReportOp) { + + for (Value referencedValue : referencedValues) { + Operation *definingOp = referencedValue.getDefiningOp(); + if (!definingOp) { + return errorReportOp->emitError() + << "Referenced value is not defined by an operation"; + } + + if (auto tileOp = llvm::dyn_cast(definingOp)) { + int col = tileOp.getCol(); + int row = tileOp.getRow(); + + // Check if a tile with matching col/row already exists in the caller device + AIE::TileOp existingTile = nullptr; + for (AIE::TileOp tile : callerDevice.getOps()) { + if (tile.getCol() == col && tile.getRow() == row) { + existingTile = tile; + break; + } + } + + if (existingTile) { + // Verify that all attributes match + if (tileOp->getAttrDictionary() != existingTile->getAttrDictionary()) { + // Filter out result type attributes and symbol attributes for comparison + auto filterAttrs = [](DictionaryAttr dict) -> DictionaryAttr { + SmallVector filteredAttrs; + for (auto namedAttr : dict) { + StringRef name = namedAttr.getName().getValue(); + if (name != "col" && name != "row") { + filteredAttrs.push_back(namedAttr); + } + } + return DictionaryAttr::get(dict.getContext(), filteredAttrs); + }; + + DictionaryAttr tileAttrs = filterAttrs(tileOp->getAttrDictionary()); + DictionaryAttr existingAttrs = filterAttrs(existingTile->getAttrDictionary()); + + if (tileAttrs != existingAttrs) { + return errorReportOp->emitError() + << "aie.tile(" << col << ", " << row + << ") already exists in the device with different attributes"; + } + } + // Use the existing tile + argMap.map(referencedValue, existingTile.getResult()); + } else { + // Clone the tile operation into the caller device + rewriter.restoreInsertionPoint(clonedSymbolInsertionPoint); + Operation *clonedTile = rewriter.clone(*tileOp); + argMap.map(referencedValue, clonedTile->getResult(0)); + clonedSymbolInsertionPoint = rewriter.saveInsertionPoint(); + } + + } else { + return errorReportOp->emitError() + << "Referenced SSA value defined by unsupported operation type: " + << definingOp->getName().getStringRef() + << ". Currently only aie.tile operations are supported."; + } + } + + return success(); +} -// Inlines the definitions of all symbols referenced in the given operation +// Inlines the definitions of all symbols referenced in the given operation // at the current insertion point in the given rewriter, unless the symbol // definition is in the "previouslyInlinedSymbolMap" map. While inlining, // symbols will be renamed to have a unique name. -// The callback function is called for each symbol definition found. If it -// returns false, inlining is aborted and an error is emitted. +// Also copies in SSA values referenced by the inlined symbol definitions. LogicalResult inlineReferencedSymbolDefinitions( PatternRewriter &rewriter, Operation *op, Operation *lookupFrom, IRMapping argMap, - llvm::DenseMap &previouslyInlinedSymbolMap) { + llvm::DenseMap &previouslyInlinedSymbolMap, + AIE::DeviceOp callerDevice, + mlir::OpBuilder::InsertPoint &clonedSymbolInsertionPoint) { MLIRContext *ctx = op->getContext(); for (NamedAttribute namedAttr : op->getAttrs()) { Attribute attr = namedAttr.getValue(); @@ -144,11 +255,27 @@ LogicalResult inlineReferencedSymbolDefinitions( } Operation *clonedSymbolDefOp = rewriter.clone(*symbolDefOp, argMap); clonedSymbolDefOp->setAttr(SymbolTable::getSymbolAttrName(), StringAttr::get(ctx, uniqueName)); + + // Collect SSA values referenced by the symbol definition operation + llvm::SetVector symbolReferencedValues; + collectReferencedSSAValues(symbolDefOp, argMap, symbolReferencedValues); + + // Copy SSA values referenced by the symbol definition + if (failed(copyReferencedSSAValues(rewriter, symbolReferencedValues, + callerDevice, argMap, + clonedSymbolInsertionPoint, op))) { + return std::make_pair(newSymbolRef, WalkResult::interrupt()); + } + + Operation *clonedSymbolDefOp = rewriter.clone(*symbolDefOp, argMap); + clonedSymbolDefOp->setAttr(SymbolTable::getSymbolAttrName(), + StringAttr::get(ctx, uniqueName)); } else { newSymbolRef = previouslyInlinedSymbolMap[oldSymbolRef]; } return std::make_pair(newSymbolRef, WalkResult::advance()); - }); + } + ); if (!newAttr) { return failure(); } @@ -180,6 +307,9 @@ struct InlineRuntimeCallsPattern : RewritePattern { } // rewrite logic + + // Get caller and callee bodies. The callee body will be inlined into the + // caller body at the point of the RunOp. Region &calleeBody = calleeRuntimeSequence.getBody(); AIE::DeviceOp callerDevice = op->getParentOfType(); if (!callerDevice) { @@ -187,6 +317,8 @@ struct InlineRuntimeCallsPattern : RewritePattern { return failure(); } Region &callerDeviceBody = callerDevice.getBodyRegion(); + + // The argMap maps callee arguments to caller SSA values. IRMapping argMap; ValueRange values = runOp.getArgs(); for (unsigned i = 0, n = calleeBody.getNumArguments(); i < n; i++) { @@ -199,11 +331,41 @@ struct InlineRuntimeCallsPattern : RewritePattern { } argMap.map(arg, val); } - llvm::DenseMap previouslyInlinedSymbolMap; - rewriter.setInsertionPoint(runOp); - mlir::OpBuilder::InsertPoint clonedOpInsertionPoint = rewriter.saveInsertionPoint(); + + // The callee body may reference SSA values and symbols that are defined + // in the callee device (outside the callee runtime sequence). We will + // inline a supported set of these and error otherwise. + + // Collect SSA values referenced in the callee not defined by the callee and and not in the argMap. + llvm::SetVector referencedValues; + for (Operation &op : calleeBody.getOps()) { + collectReferencedSSAValues(&op, argMap, referencedValues); + } + llvm::SetVector filteredValues; + for (Value val : referencedValues) { + if (val.getParentRegion() != &calleeBody) { + filteredValues.insert(val); + } + } + referencedValues = std::move(filteredValues); + + // Copy the operations that define these SSA values into the caller device mlir::Block &callerDeviceBodyFirstBlock = callerDeviceBody.front(); - mlir::OpBuilder::InsertPoint clonedSymbolInsertionPoint(&callerDeviceBodyFirstBlock, callerDeviceBodyFirstBlock.begin()); + mlir::OpBuilder::InsertPoint clonedSymbolInsertionPoint( + &callerDeviceBodyFirstBlock, callerDeviceBodyFirstBlock.begin()); + if (failed(copyReferencedSSAValues(rewriter, referencedValues, + callerDevice, argMap, + clonedSymbolInsertionPoint, runOp))) { + return failure(); + } + + // Now, also inline symbol definitions referenced in the callee body; + // this may pull in additional SSA values referenced by the symbol definitions. + rewriter.setInsertionPoint(runOp); + mlir::OpBuilder::InsertPoint clonedOpInsertionPoint = + rewriter.saveInsertionPoint(); + llvm::DenseMap previouslyInlinedSymbolMap; + rewriter.restoreInsertionPoint(clonedOpInsertionPoint); for (Operation &op : calleeBody.getOps()) { rewriter.restoreInsertionPoint(clonedOpInsertionPoint); Operation *clonedOp = rewriter.clone(op, argMap); @@ -211,12 +373,15 @@ struct InlineRuntimeCallsPattern : RewritePattern { rewriter.restoreInsertionPoint(clonedSymbolInsertionPoint); if (failed(inlineReferencedSymbolDefinitions( - rewriter, clonedOp, calleeRuntimeSequence.getOperation(), argMap, previouslyInlinedSymbolMap))) { + rewriter, clonedOp, calleeRuntimeSequence.getOperation(), argMap, + previouslyInlinedSymbolMap, callerDevice, + clonedSymbolInsertionPoint))) { return failure(); } clonedSymbolInsertionPoint = rewriter.saveInsertionPoint(); } + // The aiex.run op has been inlined; erase it. rewriter.eraseOp(runOp); return success(); From f8d8dec3fe5dbe67b6323a9e8499d1c671726ae6 Mon Sep 17 00:00:00 2001 From: andrej Date: Fri, 21 Nov 2025 17:03:26 -0700 Subject: [PATCH 06/40] add support for arg slices to dma task lowering --- .../AIEX/Transforms/AIEDMATasksToNPU.cpp | 39 ++++++++++++++----- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/lib/Dialect/AIEX/Transforms/AIEDMATasksToNPU.cpp b/lib/Dialect/AIEX/Transforms/AIEDMATasksToNPU.cpp index 18aaed93724..18941b854b6 100644 --- a/lib/Dialect/AIEX/Transforms/AIEDMATasksToNPU.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEDMATasksToNPU.cpp @@ -184,18 +184,41 @@ struct AIEDMATasksToNPUPass : AIEDMATasksToNPUBase { uint64_t register_addr = target_model.getDmaBdAddress(tile.getCol(), tile.getRow(), bd_id) + target_model.getDmaBdAddressOffset(tile.getCol(), tile.getRow()); - if (mlir::BlockArgument buf_arg = - llvm::dyn_cast(buf)) { + + if (llvm::isa(buf) || + buf.getDefiningOp()) { if (!target_model.isShimNOCTile(tile.getCol(), tile.getRow())) { return bd_op->emitOpError("DDR memory (runtime input arguments) can " "only be referred to on shim tiles."); } + + mlir::BlockArgument buf_arg = nullptr; + int64_t offset = 0; + if (mlir::BlockArgument the_buf_arg = + llvm::dyn_cast(buf)) { + buf_arg = the_buf_arg; + } else if (AIEX::ArgSliceOp arg_slice_op = buf.getDefiningOp()) { + // Trace back through arg_slice chain to find root argument and cumulative + // offset + auto [root_value, the_offset] = arg_slice_op.getRootArgumentAndOffset(); + if (mlir::BlockArgument the_buf_arg = + llvm::dyn_cast(root_value)) { + buf_arg = the_buf_arg; + offset = the_offset; + } else { + return bd_op->emitOpError( + "arg_slice chain must trace back to a block argument, but " + "found a value defined by ") + << root_value.getDefiningOp()->getName(); + } + } + unsigned arg_idx = buf_arg.getArgNumber(); - int64_t offset = bd_op.getOffsetInBytes(); + offset += bd_op.getOffsetInBytes(); NpuAddressPatchOp::create(builder, bd_op.getLoc(), - /*addr*/ register_addr, - /*arg_idx*/ arg_idx, - /*arg_plus*/ offset); + /*addr*/ register_addr, + /*arg_idx*/ arg_idx, + /*arg_plus*/ offset); } else if (AIE::BufferOp buffer = llvm::dyn_cast(buf.getDefiningOp())) { uint64_t buf_addr; @@ -209,9 +232,7 @@ struct AIEDMATasksToNPUPass : AIEDMATasksToNPUBase { NpuWrite32Op::create(builder, bd_op.getLoc(), register_addr, buf_addr, nullptr, nullptr, nullptr); } else { - return bd_op->emitOpError("Buffer argument must be either a constant " - "aie.buffer or a runtime " - "sequence input argument."); + return bd_op->emitOpError("Buffer argument must be a constant aie.buffer, a runtime sequence input argument, or an arg_slice op."); } return success(); } From bdecf4a56df1129aad20deb2853ca5ffcb8b89e9 Mon Sep 17 00:00:00 2001 From: andrej Date: Fri, 21 Nov 2025 19:27:18 -0700 Subject: [PATCH 07/40] fix insertion point of SSA values --- .../AIEMaterializeRuntimeSequences.cpp | 45 ++++++++++++++----- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp index d32018988d8..a89178c6673 100644 --- a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp @@ -150,7 +150,7 @@ LogicalResult copyReferencedSSAValues( const llvm::SetVector &referencedValues, AIE::DeviceOp callerDevice, IRMapping &argMap, - mlir::OpBuilder::InsertPoint &clonedSymbolInsertionPoint, + mlir::OpBuilder::InsertPoint &clonedSSAInsertionPoint, Operation *errorReportOp) { for (Value referencedValue : referencedValues) { @@ -197,14 +197,22 @@ LogicalResult copyReferencedSSAValues( << ") already exists in the device with different attributes"; } } + // Use the existing tile + rewriter.restoreInsertionPoint(clonedSSAInsertionPoint); + if (!existingTile->isBeforeInBlock(&*rewriter.getInsertionPoint())) { + rewriter.moveOpBefore(existingTile, + clonedSSAInsertionPoint.getBlock(), + clonedSSAInsertionPoint.getPoint()); + rewriter.setInsertionPointAfter(existingTile); + } argMap.map(referencedValue, existingTile.getResult()); } else { // Clone the tile operation into the caller device - rewriter.restoreInsertionPoint(clonedSymbolInsertionPoint); + rewriter.restoreInsertionPoint(clonedSSAInsertionPoint); Operation *clonedTile = rewriter.clone(*tileOp); argMap.map(referencedValue, clonedTile->getResult(0)); - clonedSymbolInsertionPoint = rewriter.saveInsertionPoint(); + clonedSSAInsertionPoint = rewriter.saveInsertionPoint(); } } else { @@ -230,7 +238,7 @@ LogicalResult inlineReferencedSymbolDefinitions( IRMapping argMap, llvm::DenseMap &previouslyInlinedSymbolMap, AIE::DeviceOp callerDevice, - mlir::OpBuilder::InsertPoint &clonedSymbolInsertionPoint) { + mlir::OpBuilder::InsertPoint &clonedDefOpsInsertionPoint) { MLIRContext *ctx = op->getContext(); for (NamedAttribute namedAttr : op->getAttrs()) { Attribute attr = namedAttr.getValue(); @@ -273,7 +281,25 @@ LogicalResult inlineReferencedSymbolDefinitions( } else { newSymbolRef = previouslyInlinedSymbolMap[oldSymbolRef]; } - return std::make_pair(newSymbolRef, WalkResult::advance()); + + // Collect SSA values referenced by the symbol definition operation + llvm::SetVector symbolReferencedValues; + collectReferencedSSAValues(symbolDefOp, argMap, symbolReferencedValues); + + // Copy SSA values referenced by the symbol definition + if (failed(copyReferencedSSAValues(rewriter, symbolReferencedValues, + callerDevice, argMap, + clonedDefOpsInsertionPoint, op))) { + return std::make_pair(newSymbolRef, WalkResult::interrupt()); + } + + //rewriter.restoreInsertionPoint(clonedDefOpsInsertionPoint); + Operation *clonedSymbolDefOp = rewriter.clone(*symbolDefOp, argMap); + clonedSymbolDefOp->setAttr(SymbolTable::getSymbolAttrName(), + StringAttr::get(ctx, uniqueName)); + //clonedDefOpsInsertionPoint = rewriter.saveInsertionPoint(); + } else { + newSymbolRef = previouslyInlinedSymbolMap[oldSymbolRef]; } ); if (!newAttr) { @@ -351,11 +377,11 @@ struct InlineRuntimeCallsPattern : RewritePattern { // Copy the operations that define these SSA values into the caller device mlir::Block &callerDeviceBodyFirstBlock = callerDeviceBody.front(); - mlir::OpBuilder::InsertPoint clonedSymbolInsertionPoint( + mlir::OpBuilder::InsertPoint clonedDefOpsInsertPoint( &callerDeviceBodyFirstBlock, callerDeviceBodyFirstBlock.begin()); if (failed(copyReferencedSSAValues(rewriter, referencedValues, callerDevice, argMap, - clonedSymbolInsertionPoint, runOp))) { + clonedDefOpsInsertPoint, runOp))) { return failure(); } @@ -365,20 +391,17 @@ struct InlineRuntimeCallsPattern : RewritePattern { mlir::OpBuilder::InsertPoint clonedOpInsertionPoint = rewriter.saveInsertionPoint(); llvm::DenseMap previouslyInlinedSymbolMap; - rewriter.restoreInsertionPoint(clonedOpInsertionPoint); for (Operation &op : calleeBody.getOps()) { rewriter.restoreInsertionPoint(clonedOpInsertionPoint); Operation *clonedOp = rewriter.clone(op, argMap); clonedOpInsertionPoint = rewriter.saveInsertionPoint(); - rewriter.restoreInsertionPoint(clonedSymbolInsertionPoint); if (failed(inlineReferencedSymbolDefinitions( rewriter, clonedOp, calleeRuntimeSequence.getOperation(), argMap, previouslyInlinedSymbolMap, callerDevice, - clonedSymbolInsertionPoint))) { + clonedDefOpsInsertPoint))) { return failure(); } - clonedSymbolInsertionPoint = rewriter.saveInsertionPoint(); } // The aiex.run op has been inlined; erase it. From f3e436d1e43fbcedf381dfe9d096132a357b490d Mon Sep 17 00:00:00 2001 From: andrej Date: Fri, 21 Nov 2025 19:42:56 -0700 Subject: [PATCH 08/40] add test --- test/npu-xrt/reconfigure/Makefile | 29 ++++++ test/npu-xrt/reconfigure/aie.mlir | 128 +++++++++++++++++++++++++ test/npu-xrt/reconfigure/end_goal.mlir | 74 ++++++++++++++ test/npu-xrt/reconfigure/run.lit | 8 ++ test/npu-xrt/reconfigure/test.cpp | 93 ++++++++++++++++++ 5 files changed, 332 insertions(+) create mode 100644 test/npu-xrt/reconfigure/Makefile create mode 100644 test/npu-xrt/reconfigure/aie.mlir create mode 100644 test/npu-xrt/reconfigure/end_goal.mlir create mode 100644 test/npu-xrt/reconfigure/run.lit create mode 100644 test/npu-xrt/reconfigure/test.cpp diff --git a/test/npu-xrt/reconfigure/Makefile b/test/npu-xrt/reconfigure/Makefile new file mode 100644 index 00000000000..53ed9565a30 --- /dev/null +++ b/test/npu-xrt/reconfigure/Makefile @@ -0,0 +1,29 @@ + +aie.elf: aie.mlir + aiecc.py -v --generate-full-elf --no-xchesscc --no-xbridge aie.mlir + +test: test.cpp + clang -o test test.cpp -std=c++17 -lstdc++ -I/opt/xilinx/xrt/include -L/opt/xilinx/xrt/lib -lxrt_core -lxrt_coreutil + +.PHONY: baboo +baboo: + aie-opt \ + --pass-pipeline="builtin.module(aie-materialize-runtime-sequences,aie.device(aie-materialize-bd-chains,aie-substitute-shim-dma-allocations,aie-assign-runtime-sequence-bd-ids,aie-dma-tasks-to-npu,aie-dma-to-npu,aie-lower-set-lock))" \ + broken-aie.mlir.prj/pipeline_outputs/04_aie-assign-runtime-sequence-bd-ids.mlir \ + -o npu_insts.mlir + +.PHONY: babee +babee: + aie-translate --aie-npu-to-binary npu_insts.mlir --aie-device-name main --aie-sequence-name sequence -o main_sequence.bin + +.PHONY: babony +babony: + aiebu-asm -t aie2_config -j /scratch/roesti/mlir-aie/test/npu-xrt/reconfigure/config.json -o aie.elf + +.PHONY: run +run: test aie.elf + ./test + +.PHONY: clean +clean: + rm -rf test aie.mlir.prj aie.elf \ No newline at end of file diff --git a/test/npu-xrt/reconfigure/aie.mlir b/test/npu-xrt/reconfigure/aie.mlir new file mode 100644 index 00000000000..e847303347e --- /dev/null +++ b/test/npu-xrt/reconfigure/aie.mlir @@ -0,0 +1,128 @@ +// (c) Copyright 2025 Advanced Micro Devices, Inc. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +module { + + aie.device(npu2) @main { + + aiex.runtime_sequence @sequence(%arg : memref<512xi32>) { + + %c3_i32 = arith.constant 3 : i32 + + aiex.configure @add_two { + %arg1 = aiex.arg_slice %arg[0:4] : memref<512xi32> -> memref<4xi32> + aiex.run @sequence (%arg1) : (memref<4xi32>) + %arg2 = aiex.arg_slice %arg[12:16] : memref<512xi32> -> memref<4xi32> + aiex.run @sequence (%arg2) : (memref<4xi32>) + } + + aiex.configure @add_three { + %arg1 = aiex.arg_slice %arg[4:8] : memref<512xi32> -> memref<4xi32> + aiex.run @sequence (%arg1) : (memref<4xi32>) + %arg2 = aiex.arg_slice %arg[12:16] : memref<512xi32> -> memref<4xi32> + aiex.run @sequence (%arg2) : (memref<4xi32>) + } + + } + + } + + aie.device(npu2) @add_two { + + %t00 = aie.tile(0, 0) + %t02 = aie.tile(0, 2) + + aie.objectfifo @objfifo_in (%t00, {%t02}, 1 : i32) : !aie.objectfifo> + aie.objectfifo @objfifo_out(%t02, {%t00}, 1 : i32) : !aie.objectfifo> + + aie.core(%t02) { + %c0 = arith.constant 0 : index + %c1 = arith.constant 1 : index + %c2 = arith.constant 2 : index + %c2_i32 = arith.constant 2 : i32 + %c8 = arith.constant 8 : index + %c4 = arith.constant 4 : index + %c_intmax = arith.constant 0xFFFFFE : index + + scf.for %niter = %c0 to %c_intmax step %c1 { + %subview_in = aie.objectfifo.acquire @objfifo_in (Consume, 1) : !aie.objectfifosubview> + %subview_out = aie.objectfifo.acquire @objfifo_out(Produce, 1) : !aie.objectfifosubview> + %elem_in = aie.objectfifo.subview.access %subview_in [0] : !aie.objectfifosubview> -> memref<4xi32> + %elem_out = aie.objectfifo.subview.access %subview_out[0] : !aie.objectfifosubview> -> memref<4xi32> + scf.for %i = %c0 to %c4 step %c1 { + %0 = memref.load %elem_in[%i] : memref<4xi32> + %1 = arith.addi %0, %c2_i32 : i32 + memref.store %1, %elem_out[%i] : memref<4xi32> + } + aie.objectfifo.release @objfifo_in (Consume, 1) + aie.objectfifo.release @objfifo_out(Produce, 1) + } + aie.end + } + + aiex.runtime_sequence @sequence(%a : memref<4xi32>) { + + %t_in = aiex.dma_configure_task_for @objfifo_in { + aie.dma_bd(%a : memref<4xi32>, 0, 4) + aie.end + } + %t_out = aiex.dma_configure_task_for @objfifo_out { + aie.dma_bd(%a: memref<4xi32>, 0, 4) + aie.end + } {issue_token = true} + aiex.dma_start_task(%t_in) + aiex.dma_start_task(%t_out) + aiex.dma_await_task(%t_out) + } + + } + + aie.device(npu2) @add_three { + + %t00 = aie.tile(0, 0) + %t02 = aie.tile(0, 2) + + aie.objectfifo @objfifo_in (%t00, {%t02}, 1 : i32) : !aie.objectfifo> + aie.objectfifo @objfifo_out(%t02, {%t00}, 1 : i32) : !aie.objectfifo> + + aie.core(%t02) { + %c0 = arith.constant 0 : index + %c1 = arith.constant 1 : index + %c2 = arith.constant 2 : index + %c3_i32 = arith.constant 3 : i32 + %c8 = arith.constant 8 : index + %c4 = arith.constant 4 : index + %c_intmax = arith.constant 0xFFFFFE : index + + scf.for %niter = %c0 to %c_intmax step %c1 { + %subview_in = aie.objectfifo.acquire @objfifo_in (Consume, 1) : !aie.objectfifosubview> + %subview_out = aie.objectfifo.acquire @objfifo_out(Produce, 1) : !aie.objectfifosubview> + %elem_in = aie.objectfifo.subview.access %subview_in [0] : !aie.objectfifosubview> -> memref<4xi32> + %elem_out = aie.objectfifo.subview.access %subview_out[0] : !aie.objectfifosubview> -> memref<4xi32> + scf.for %i = %c0 to %c4 step %c1 { + %0 = memref.load %elem_in[%i] : memref<4xi32> + %1 = arith.addi %0, %c3_i32 : i32 + memref.store %1, %elem_out[%i] : memref<4xi32> + } + aie.objectfifo.release @objfifo_in (Consume, 1) + aie.objectfifo.release @objfifo_out(Produce, 1) + } + aie.end + } + + aiex.runtime_sequence @sequence(%a : memref<4xi32>) { + + %t_in = aiex.dma_configure_task_for @objfifo_in { + aie.dma_bd(%a : memref<4xi32>, 0, 4) + aie.end + } + %t_out = aiex.dma_configure_task_for @objfifo_out { + aie.dma_bd(%a: memref<4xi32>, 0, 4) + aie.end + } {issue_token = true} + aiex.dma_start_task(%t_in) + aiex.dma_start_task(%t_out) + aiex.dma_await_task(%t_out) + } + + } +} diff --git a/test/npu-xrt/reconfigure/end_goal.mlir b/test/npu-xrt/reconfigure/end_goal.mlir new file mode 100644 index 00000000000..21e297ab2b4 --- /dev/null +++ b/test/npu-xrt/reconfigure/end_goal.mlir @@ -0,0 +1,74 @@ +// (c) Copyright 2025 Advanced Micro Devices, Inc. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +module { + aie.device(npu2) @main { + + aiex.runtime_sequence @sequence(%a : memref<512xi32>) { + + %c2_i32 = arith.constant 2 : i32 + %c3_i32 = arith.constant 3 : i32 + + aiex.configure @add_n(%c2_i32) { + %arg = aiex.arg_slice %a[0..4] : memref<512xi32> -> memref<4xi32> + aiex.run @sequence (%arg) : (memref<4xi32>) + } + + aiex.configure @add_n(%c3_i32) { + %arg = aiex.arg_slice %a[4..8] : memref<512xi32> -> memref<4xi32> + aiex.run @sequence (%arg) : (memref<4xi32>) + } + + } + + } + + aie.device(npu2) @add_n(%c_n_i32 : i32) { + + %t00 = aie.tile(0, 0) + %t02 = aie.tile(0, 2) + + aie.objectfifo @objfifo_in (%t00, {%t02}, 1 : i32) : !aie.objectfifo> + aie.objectfifo @objfifo_out(%t02, {%t00}, 1 : i32) : !aie.objectfifo> + + aie.core(%t02) { + %c0 = arith.constant 0 : index + %c1 = arith.constant 1 : index + %c2 = arith.constant 2 : index + %c8 = arith.constant 8 : index + %c4 = arith.constant 4 : index + %c_intmax = arith.constant 0xFFFFFE : index + + scf.for %niter = %c0 to %c_intmax step %c1 { + %subview_in = aie.objectfifo.acquire @objfifo_in (Consume, 1) : !aie.objectfifosubview> + %subview_out = aie.objectfifo.acquire @objfifo_out(Produce, 1) : !aie.objectfifosubview> + %elem_in = aie.objectfifo.subview.access %subview_in [0] : !aie.objectfifosubview> -> memref<4xi32> + %elem_out = aie.objectfifo.subview.access %subview_out[0] : !aie.objectfifosubview> -> memref<4xi32> + scf.for %i = %c0 to %c4 step %c1 { + %0 = memref.load %elem_in[%i] : memref<4xi32> + %1 = arith.addi %0, %c_n_i32 : i32 + memref.store %1, %elem_out[%i] : memref<4xi32> + } + aie.objectfifo.release @objfifo_in (Consume, 1) + aie.objectfifo.release @objfifo_out(Produce, 1) + } + aie.end + } + + aiex.runtime_sequence @sequence(%a : memref<512xi32>) { + + %t_in = aiex.dma_configure_task_for @objfifo_in { + aie.dma_bd(%a : memref<512xi32>, 0, 512) + aie.end + } + %t_out = aiex.dma_configure_task_for @objfifo_out { + aie.dma_bd(%a: memref<512xi32>, 0, 512) + aie.end + } {issue_token = true} + aiex.dma_start_task(%t_in) + aiex.dma_start_task(%t_out) + aiex.dma_await_task(%t_out) + } + + } + +} diff --git a/test/npu-xrt/reconfigure/run.lit b/test/npu-xrt/reconfigure/run.lit new file mode 100644 index 00000000000..4bd3f0372b4 --- /dev/null +++ b/test/npu-xrt/reconfigure/run.lit @@ -0,0 +1,8 @@ +// (c) Copyright 2025 Advanced Micro Devices, Inc. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// REQUIRES: ryzen_ai_npu2, peano +// +// RUN: %PYTHON aiecc.py -v --generate-full-elf --no-xchesscc --no-xbridge %S/aie.mlir +// RUN: clang -o test %S/test_elf.cpp -std=c++17 -lstdc++ %xrt_flags +// RUN: ./test diff --git a/test/npu-xrt/reconfigure/test.cpp b/test/npu-xrt/reconfigure/test.cpp new file mode 100644 index 00000000000..ae4c70fe131 --- /dev/null +++ b/test/npu-xrt/reconfigure/test.cpp @@ -0,0 +1,93 @@ +// (c) Copyright 2025 Advanced Micro Devices, Inc. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#define DTYPE int32_t + +constexpr size_t DATA_COUNT = 16; +constexpr size_t BUF_SIZE = DATA_COUNT * sizeof(DTYPE); + +int main(int argc, const char *argv[]) { + // Set up input data + srand(1726250518); + std::vector vec_in(DATA_COUNT); + for (int i = 0; i < vec_in.size(); i++) { + vec_in[i] = DTYPE(i); + } + + // Set up XRT + unsigned int device_index = 0; + auto device = xrt::device(device_index); + // The name format here is : from the config.json + std::string kernelName = "main:sequence"; + xrt::elf ctx_elf{"aie.elf"}; + xrt::hw_context context = xrt::hw_context(device, ctx_elf); + auto kernel = xrt::ext::kernel(context, kernelName); + xrt::bo bo_inout = xrt::ext::bo{device, BUF_SIZE}; + + // Set up kernel run + char *buf_inout = bo_inout.map(); + memcpy(buf_inout, vec_in.data(), BUF_SIZE); + bo_inout.sync(XCL_BO_SYNC_BO_TO_DEVICE); + auto run = xrt::run(kernel); + run.set_arg(0, bo_inout); + + // Run + auto t_start = std::chrono::high_resolution_clock::now(); + run.start(); + run.wait2(); + auto t_stop = std::chrono::high_resolution_clock::now(); + bo_inout.sync(XCL_BO_SYNC_BO_FROM_DEVICE); + + // Validate output + std::vector vec_out(DATA_COUNT); + std::vector vec_ref(DATA_COUNT); + memcpy(vec_out.data(), buf_inout, BUF_SIZE); + for (int i = 0; i < 4; i++) { + vec_ref[i] = vec_in[i] + 2; + } + for (int i = 4; i < 8; i++) { + vec_ref[i] = vec_in[i] + 3; + } + for (int i = 8; i < 12; i++) { + vec_ref[i] = vec_in[i]; + } + for (int i = 12; i < 16; i++) { + vec_ref[i] = vec_in[i] + 2 + 3; + } + bool outputs_correct = (vec_out == vec_ref); + + // Report results + float time = + std::chrono::duration_cast(t_stop - t_start) + .count(); + std::cout << "Elapsed time for all kernel executions: " << std::fixed + << std::setprecision(0) << std::setw(8) << time << " μs" + << std::endl; + if (outputs_correct) { + std::cout << "PASS!" << std::endl; + } else { + for (int i = 0; i < DATA_COUNT; i++) { + std::cout << "in: " << std::setw(12) << vec_in[i] << ", " + << "out: " << std::setw(12) << vec_out[i] + << ", ref: " << std::setw(12) << vec_ref[i] << std::endl; + } + std::cout << "Fail." << std::endl; + } + + return (outputs_correct ? 0 : 1); +} From 8cdc9b4b49292b4e458695e28eed0c1685e8fc94 Mon Sep 17 00:00:00 2001 From: andrej Date: Sat, 22 Nov 2025 16:04:59 -0700 Subject: [PATCH 09/40] add SwiGLU evaluation example --- .../reconfiguration/instructions.md | 94 +++++++ .../reconfiguration/kernels/mul.cc | 42 +++ .../reconfiguration/kernels/mv.cc | 78 ++++++ .../reconfiguration/kernels/silu.cc | 53 ++++ .../reconfiguration/operators/eltwise_mul.py | 206 +++++++++++++++ .../operators/matrix_vector_mul.py | 141 ++++++++++ .../reconfiguration/operators/silu.py | 212 ++++++++++++++++ .../reconfiguration/run_benchmarks.sh | 36 +++ .../reconfiguration/swiglu/README.md | 96 +++++++ .../fused_transactions_loadpdi/Makefile | 58 +++++ .../combine_mlir.py | 167 ++++++++++++ .../fused_transactions_loadpdi/test.cpp | 148 +++++++++++ .../swiglu/generate_reference.py | 42 +++ .../reconfiguration/swiglu/runlist/Makefile | 74 ++++++ .../reconfiguration/swiglu/runlist/test.cpp | 234 +++++++++++++++++ .../swiglu/separate_xclbins/Makefile | 66 +++++ .../swiglu/separate_xclbins/test.cpp | 240 ++++++++++++++++++ .../reconfiguration/visualize_results.py | 174 +++++++++++++ 18 files changed, 2161 insertions(+) create mode 100644 programming_examples/reconfiguration/instructions.md create mode 100644 programming_examples/reconfiguration/kernels/mul.cc create mode 100644 programming_examples/reconfiguration/kernels/mv.cc create mode 100644 programming_examples/reconfiguration/kernels/silu.cc create mode 100644 programming_examples/reconfiguration/operators/eltwise_mul.py create mode 100644 programming_examples/reconfiguration/operators/matrix_vector_mul.py create mode 100644 programming_examples/reconfiguration/operators/silu.py create mode 100755 programming_examples/reconfiguration/run_benchmarks.sh create mode 100644 programming_examples/reconfiguration/swiglu/README.md create mode 100644 programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/Makefile create mode 100644 programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/combine_mlir.py create mode 100644 programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/test.cpp create mode 100644 programming_examples/reconfiguration/swiglu/generate_reference.py create mode 100644 programming_examples/reconfiguration/swiglu/runlist/Makefile create mode 100644 programming_examples/reconfiguration/swiglu/runlist/test.cpp create mode 100644 programming_examples/reconfiguration/swiglu/separate_xclbins/Makefile create mode 100644 programming_examples/reconfiguration/swiglu/separate_xclbins/test.cpp create mode 100755 programming_examples/reconfiguration/visualize_results.py diff --git a/programming_examples/reconfiguration/instructions.md b/programming_examples/reconfiguration/instructions.md new file mode 100644 index 00000000000..74d43bdc4ff --- /dev/null +++ b/programming_examples/reconfiguration/instructions.md @@ -0,0 +1,94 @@ +You will implement code that generates three variants of a SwiGLU operator and host test code in three subfolders: + + - `separate_xclbins` + - `runlist` + - `fused_transactions` + +Each will implement a sequence of operations (kernels) run on the NPU device. Your job is to generate +(a) a Makefile that compiles the necessary artifacts for each of the above variants (xclbins, combined xclbins and ELF) +(b) testing code (a test.cpp) that invokes that code a number of iterations and times those runs +(c) a script that runs all variants, collects the timing information, and stores results to a CSV +(d) a script that visualizes the above results in a plot and writes some statistics out to stdout comparing the approaches. + +Write the Makefiles so they are somewhat reusable for similar-enough operators. At the top of the makefile, add variables for the kernel names, and output and input file names. You may assume future operators will have the same number of xclbins, so it's fine to hard code that (but make it easy to copy-paste and add more if needed). + +Make the `test.cpp` similarly reusable: Hard-code some of the assumptions (number of kernels/operations in the sequence), but allow for some flexibility/make the code easy to edit if we need to add more kernels or more buffers. + +Model your implementation after the code examples, simplifying and being more concise where possible. Don't add unnecessary comments. + +# Code examples + +## SwiGLU-specific example + +- `swiglu_runlist_build_commands.sh` shows an example of how the SwiGLU kernels and xclbins can be compiled into a combined xclbin. An operator compiled like this can be used in a runlist. You will have to adapt this code to work with the current directory structure (kernels in kernels dir, Python files in operators dir) and adjust, based on the below examples, for the other non-runlist variants. + +## Separate xclbin example + +- `/test/npu-xrt/add_one_two/run.lit` - shows the compilation commands needed to create the xclbins +- `/test/npu-xrt/add_one_two/test.cpp` - host code for running a single xclbin. You can skip the "get the kernel from the xclbin" verification part. + +## Runlist example + +- `/test/npu-xrt/add_one_two_runlist/run.lit` - compilation commands -- similar to the above for SwiGLU +- `/test/npu-xrt/add_one_two_runlist/test.cpp` shows some code on how to create host C++ code that invokes an example as compiled for the runlist. Note however that you can skip the "get the kernel from the xclbin" part -- that really doesn't do much, since it just checks whether a kernel of the given string name is in the xclbin. Instead, just use the given string names directly. + +## Fused transactions example + +This one is the most different; rater than an xclbin, there will be a single ELF file. To compile that ELF file, you will have to combine multiple MLIR files, give the devices in them different names, and create a new device called @main (name can be left off for main as it is the default) that uses aiex.configure instructions, does the proper buffer slicing and calls into the other devices runtimes. Don't manually combine the MLIR files; write a script that does this. + +- `/test/npu-xrt/reconfigure/aie.mlir` -- required input MLIR structure (note different devices, aiex.configure, aiex.run and aiex.arg_slice) +- `/test/npu-xrt/reconfigure/test.cpp` -- how to call such a "full ELF" flow fused transaction example +- `/test/npu-xrt/reconfigure/Makefile` -- how to build for this example. The Makefile is the most up-to-date; don't look at `run.lit` here as it might be misleading. + +For this approach, I'd also like you to just create one large in/out buffer that is passed in to the main runtime sequence. Then slice it into appropriate-sized subslices in both the `test.cpp` and the `aie.mlir`. + +# Runtime Setup for SwiGLU (Decode) + +The following are the concrete kernels to call from the `test.cpp` and what buffers need to be allocated. + +Assume the following concrete parameters. +In the code, define these once as a constant, then use that constant. + + - embedding_dim = 2048 + - hidden_dim = 8192 + +Also define: + - dtype: std::bfloat16_t + +then use sizeof(dtype) to determine the byte size of buffers. + +## Required buffers + +The following are the buffers required by the kernels, with buffer names and shapes listed. +All data is in bfloat16, i.e. 2 bytes per element. +For buffer allocation, these should be allocated as a "flat" sequential row-major buffer (i.e. product of shape). + + - "input" (embedding_dim, ) + - "weights_1", (embedding_dim, hidden_dim, ) + - "weights_2", (embedding_dim, hidden_dim, ) + - "weights_3", (hidden_dim, embedding_dim, ) + - "left", (hidden_dim, ) + - "left_swished", (hidden_dim, ) + - "right", (hidden_dim, ) + - "intermediate", (hidden_dim, ) + - "output", (embedding_dim, ) + +## Kernels + +These correspond to individual xclbins if compiled separately, or to different kernels within one xclbin if chained together using `--xclbin-input` (in that case use the last xclbin of the chain which will contain all others). + + - "swiglu_gemv_1" + - "swiglu_silu" + - "swiglu_eltwise_mul" + - "swiglu_gemv_2" + +## Runlist (sequence of operations) + +The operations need to be run in this sequence. +The format of the following is kernel_name, argument buffer 1, argument buffer 2, argument buffer 3, ... + + - "swiglu_gemv_1", "weights_1", "input", "left" + - "swiglu_gemv_1", "weights_2", "input", "right" + - "swiglu_silu", "left", "left_swished" + - "swiglu_eltwise_mul", "left_swished", "right", "intermediate" + - "swiglu_gemv_2", "weights_3", "intermediate", "output" diff --git a/programming_examples/reconfiguration/kernels/mul.cc b/programming_examples/reconfiguration/kernels/mul.cc new file mode 100644 index 00000000000..cd0e25e8d05 --- /dev/null +++ b/programming_examples/reconfiguration/kernels/mul.cc @@ -0,0 +1,42 @@ +// SPDX-FileCopyrightText: Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +#include "aie_kernel_utils.h" + +#include +#include +#include +#include +#include + +template void eltwise_mul(T_in *a, T_in *b, T_out *c, int size) +{ + for (int i = 0; i < size; i++) { + c[i] = a[i] * b[i]; + } +} + +template void eltwise_vmul(T_in *a, T_in *b, T_out *c, int size) +{ + + event0(); + for (int i = 0; i < size; i += 16) { + auto A = aie::load_v<16>(a + i); + auto B = aie::load_v<16>(b + i); + auto C = aie::mul(A, B).template to_vector(); + aie::store_v(c + i, C); + } + event1(); +} + +extern "C" { + +void eltwise_mul_bf16_scalar(bfloat16 *a_in, bfloat16 *b_in, bfloat16 *c_out, int size) +{ + eltwise_mul(a_in, b_in, c_out, size); +} +void eltwise_mul_bf16_vector(bfloat16 *a_in, bfloat16 *b_in, bfloat16 *c_out, int size) +{ + eltwise_vmul(a_in, b_in, c_out, size); +} +} // extern "C" diff --git a/programming_examples/reconfiguration/kernels/mv.cc b/programming_examples/reconfiguration/kernels/mv.cc new file mode 100644 index 00000000000..db53093639e --- /dev/null +++ b/programming_examples/reconfiguration/kernels/mv.cc @@ -0,0 +1,78 @@ +// SPDX-FileCopyrightText: Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +#define NOCPP + +#include +#include +#include +#include + +#define REL_WRITE 0 +#define REL_READ 1 + +#include "aie_kernel_utils.h" + +#include + +void matvec_scalar(uint32_t m, uint32_t k, uint32_t row_offset, bfloat16 *a, bfloat16 *b, bfloat16 *c) +{ + for (uint32_t row = 0; row < m; row++) { + float acc = 0; + for (uint32_t i = 0; i < k; i++) { + acc += a[row * k + i] * b[i]; + } + c[row + row_offset * m] = static_cast(acc); + } +} + +template +void matvec_vectorized(uint32_t m, + uint32_t k, + uint32_t row_offset, + const bfloat16 *__restrict a, + const bfloat16 *__restrict b, + bfloat16 *__restrict c) +{ + ::aie::set_rounding(aie::rounding_mode::conv_even); + c += row_offset * m; + bfloat16 *c_end = c + m; + const bfloat16 *b_end = b + k; + for (; c < c_end; c++) { + aie::accum acc = aie::zeros(); + // The following two pragmas enable pipelining the zero-overhead loop, but they do assume that k is at least + // two. This assumption should hold for any useful use of this function; if k were one, this would be a simple + // scalar multiplication of a vector. + AIE_LOOP_MIN_ITERATION_COUNT(2) + for (const bfloat16 *__restrict b_cur = b; b_cur < b_end; b_cur += r, a += r) { + aie::vector a_vec = aie::load_v(a); + aie::vector b_vec = aie::load_v(b_cur); + acc = aie::mac(acc, a_vec, b_vec); + } + *c = static_cast(aie::reduce_add(acc.template to_vector())); + } +} + +extern "C" { + +void matvec_scalar_bf16_bf16(uint32_t m, + uint32_t k, + uint32_t row_offset, + bfloat16 *a_in, + bfloat16 *b_in, + bfloat16 *c_out) +{ + matvec_scalar(m, k, row_offset, a_in, b_in, c_out); +} + +void matvec_vectorized_bf16_bf16(uint32_t m, + uint32_t k, + uint32_t row_offset, + bfloat16 *a_in, + bfloat16 *b_in, + bfloat16 *c_out) +{ + matvec_vectorized<64>(m, k, row_offset, a_in, b_in, c_out); +} + +} // extern "C" \ No newline at end of file diff --git a/programming_examples/reconfiguration/kernels/silu.cc b/programming_examples/reconfiguration/kernels/silu.cc new file mode 100644 index 00000000000..0d1e12caec1 --- /dev/null +++ b/programming_examples/reconfiguration/kernels/silu.cc @@ -0,0 +1,53 @@ +// SPDX-FileCopyrightText: Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +#include "aie_kernel_utils.h" + +#include +#include + +using namespace aie; + +void silu_tanh_approx_bf16(bfloat16 *restrict input_vector, bfloat16 *restrict output_vector, const int32_t vector_size) +{ + event0(); + + int num_elems = vector_size; + auto it_in = aie::begin_restrict_vector<16>((bfloat16 *)input_vector); + auto it_out = aie::begin_restrict_vector<16>((bfloat16 *)output_vector); + + aie::vector input; + aie::vector output; + aie::vector register_0_5 = aie::broadcast(0.5f); + aie::vector register_1 = aie::broadcast(1.0f); + AIE_PREPARE_FOR_PIPELINING + AIE_LOOP_MIN_ITERATION_COUNT(64) + for (int i = 0; i < num_elems; i += 16) { + // Load input vector + input = *it_in++; + + // Compute tanh approximation + auto half_x = aie::mul(input, register_0_5); + auto tanh_half_x = aie::tanh(half_x.to_vector()); + auto tanh_half_x_approx = aie::add(tanh_half_x, register_1); + aie::vector sigmoid_approx = aie::mul(tanh_half_x_approx, register_0_5); + // Compute output: x * tanh_approx + auto mul_output = aie::mul(input, sigmoid_approx); + + // Store output vector + *it_out++ = mul_output.to_vector(); + } + + event1(); + + return; +} + +extern "C" { + +void silu_bf16(bfloat16 *restrict input, bfloat16 *restrict output, int input_size) +{ + silu_tanh_approx_bf16(input, output, input_size); +} + +} // extern "C" diff --git a/programming_examples/reconfiguration/operators/eltwise_mul.py b/programming_examples/reconfiguration/operators/eltwise_mul.py new file mode 100644 index 00000000000..88ae1e318f6 --- /dev/null +++ b/programming_examples/reconfiguration/operators/eltwise_mul.py @@ -0,0 +1,206 @@ +# SPDX-FileCopyrightText: Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +from ml_dtypes import bfloat16 +from pathlib import Path +import numpy as np +import argparse +import sys + +from aie.iron import Kernel, ObjectFifo, Program, Runtime, Worker +from aie.iron.placers import SequentialPlacer +from aie.iron.device import NPU1, NPU2 +from aie.helpers.taplib.tap import TensorAccessPattern +from aie.iron.controlflow import range_ + + +def my_eltwise_mul(dev, num_elements, num_columns, num_channels, tile_size, trace_size): + per_tile_elements = 4096 if tile_size > 4096 else tile_size + n = per_tile_elements * num_columns + if num_elements % n != 0: + raise ValueError( + f"Number of elements ({num_elements}) must be a multiple of {n}." + ) + N_div_n = num_elements // n + chunk = num_elements // num_columns + dtype = bfloat16 + + # Define tensor types + tensor_ty = np.ndarray[(num_elements,), np.dtype[dtype]] + tile_ty = np.ndarray[(per_tile_elements,), np.dtype[dtype]] + + # AIE-array data movement with object fifos (one per column, not per channel) + of_in1s = [ObjectFifo(tile_ty, name=f"in1_{i}") for i in range(num_columns)] + of_in2s = [ObjectFifo(tile_ty, name=f"in2_{i}") for i in range(num_columns)] + of_outs = [ObjectFifo(tile_ty, name=f"out_{i}") for i in range(num_columns)] + + # AIE Core Function declaration + eltwise_mul_bf16_vector = Kernel( + "eltwise_mul_bf16_vector", "mul.o", [tile_ty, tile_ty, tile_ty, np.int32] + ) + + # Define a task that will run on a compute tile + def core_body(of_in1, of_in2, of_out, eltwise_mul): + # Number of sub-vector "tile" iterations + for _ in range_(N_div_n): + elem_in1 = of_in1.acquire(1) + elem_in2 = of_in2.acquire(1) + elem_out = of_out.acquire(1) + eltwise_mul(elem_in1, elem_in2, elem_out, per_tile_elements) + of_in1.release(1) + of_in2.release(1) + of_out.release(1) + + # Create a worker to run the task on a compute tile (one per column) + my_workers = [ + Worker( + core_body, + [ + of_in1s[i].cons(), + of_in2s[i].cons(), + of_outs[i].prod(), + eltwise_mul_bf16_vector, + ], + ) + for i in range(num_columns) + ] + + # Create a TensorAccessPattern for each column + # to describe the data movement + # The pattern chops the data in equal chunks + # and moves them in parallel across the columns + taps = [ + TensorAccessPattern( + (1, num_elements), + chunk * i, # Start offset for column i + [1, 1, 1, chunk], + [0, 0, 0, 1], + ) + for i in range(num_columns) + ] + + # Runtime operations to move data to/from the AIE-array + rt = Runtime() + with rt.sequence(tensor_ty, tensor_ty, tensor_ty) as (A, B, C): + rt.start(*my_workers) + + # Initialize a group for parallel drain tasks, with fill resources free'd when drains complete. + tg = rt.task_group() + + # Fill the input objectFIFOs with data + for i in range(num_columns): + rt.fill( + of_in1s[i].prod(), + A, + taps[i], + task_group=tg, + ) + rt.fill( + of_in2s[i].prod(), + B, + taps[i], + task_group=tg, + ) + # Drain the output objectFIFOs with data + for i in range(num_columns): + rt.drain( + of_outs[i].cons(), + C, + taps[i], + wait=True, # wait for the transfer to complete and data to be available + task_group=tg, + ) + rt.finish_task_group(tg) + + # Place program components (assign them resources on the device) and generate an MLIR module + return Program(dev, rt).resolve_program(SequentialPlacer()) + + +if __name__ == "__main__": + + def str_to_device(device: str): + if device == "npu": + return NPU1() + elif device == "npu2": + return NPU2() + else: + raise ValueError(f"Device name {device} is unknown.") + + p = argparse.ArgumentParser() + # Parse command line arguments + + # Device name is required to select the AIE device: npu or npu2 + p.add_argument( + "-d", + "--dev", + required=True, + dest="device", + help="AIE Device", + type=str_to_device, + ) + # Transfer size is required to define the size of the data to be transferred + # It must be a multiple of tile_size and divisible by the number of columns and channels + p.add_argument("-l", "--length", required=True, dest="length", help="Transfer size") + # Number of columns is required to define the number of columns to be used + # It must be less than or equal to 4 for npu and 8 for npu2 + p.add_argument( + "-co", "--columns", required=True, dest="cols", help="Number of columns" + ) + # Number of channels is required to define the number of channels to be used + # It must be 1 or 2 + p.add_argument( + "-ch", "--channels", required=True, dest="chans", help="Number of channels" + ) + # Tile size (elements per tile) - defaults to 1024 for backward compatibility + p.add_argument( + "-ts", + "--tile-size", + required=False, + dest="tile_size", + default="1024", + help="Tile size (elements per tile)", + ) + # Trace Size + p.add_argument( + "-t", "--trace-size", required=True, dest="trace_size", help="Trace size" + ) + p.add_argument( + "--output-file-path", + "-o", + type=str, + help="Output file path for the generated MLIR module", + ) + + opts = p.parse_args(sys.argv[1:]) + + length = int(opts.length) + columns = int(opts.cols) + dev = opts.device + + # Validate columns based on device type + if isinstance(dev, NPU1) and columns > 4: + raise ValueError("[ERROR] NPU device cannot allocate more than 4 columns") + elif isinstance(dev, NPU2) and columns > 8: + raise ValueError("[ERROR] NPU2 device cannot allocate more than 8 columns") + + channels = int(opts.chans) + if channels < 1 or channels > 2: + raise ValueError("Number of channels must be 1 or 2") + tile_size = int(opts.tile_size) + if length % (tile_size * columns) != 0: + print( + "transfer size (" + + str(length) + + ") must be a multiple of " + + str(tile_size * columns) + + " (tile_size * columns)" + ) + raise ValueError + trace_size = int(opts.trace_size) if opts.trace_size is not None else 0 + + module = my_eltwise_mul(dev, length, columns, channels, tile_size, trace_size) + + output_file_path = Path(opts.output_file_path) + + with open(output_file_path, "w") as f: + f.write(str(module)) diff --git a/programming_examples/reconfiguration/operators/matrix_vector_mul.py b/programming_examples/reconfiguration/operators/matrix_vector_mul.py new file mode 100644 index 00000000000..9064e2a0c46 --- /dev/null +++ b/programming_examples/reconfiguration/operators/matrix_vector_mul.py @@ -0,0 +1,141 @@ +# SPDX-FileCopyrightText: Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +import numpy as np +from pathlib import Path +from ml_dtypes import bfloat16 +import argparse + +from aie.extras.context import mlir_mod_ctx +from aie.ir import StridedLayoutAttr, ShapedType +import aie.dialects.index as index +import aie.dialects.memref as memref +from aie.dialects.aie import * +from aie.dialects.aiex import * +from aie.helpers.dialects.ext.scf import _for as range_ +from aie.helpers.util import try_convert_np_type_to_mlir_type +from aie.iron import Kernel, ObjectFifo, Program, Runtime, Worker +from aie.iron.placers import SequentialPlacer +from aie.iron.device import NPU1, NPU2 + + +def my_matvec(dev, cols, M, K, m): + vectorized = True + dtype_in = np.dtype[bfloat16] + dtype_in_str = "bf16" + dtype_out = np.dtype[bfloat16] + dtype_out_str = "bf16" + + assert M % cols == 0 + + if dev == "npu": + dev_ty = NPU1() + else: + dev_ty = NPU2() + + L1_A_ty = np.ndarray[(m * K,), dtype_in] + L1_B_ty = np.ndarray[(K,), dtype_in] + L1_C_ty = np.ndarray[(M // cols,), dtype_out] + L3_A_ty = np.ndarray[(M * K,), dtype_in] + L3_B_ty = np.ndarray[(K,), dtype_in] + L3_C_ty = np.ndarray[(M,), dtype_out] + + func_type = "vectorized" if vectorized else "scalar" + matvec = Kernel( + f"matvec_{func_type}_{dtype_in_str}_{dtype_out_str}", + "mv.o", + [np.int32, np.int32, np.int32, L1_A_ty, L1_B_ty, L1_C_ty], + ) + + A_L3L1_fifos = [ObjectFifo(L1_A_ty, name=f"A_L3L1_{i}") for i in range(cols)] + B_L3L1_fifos = [ + ObjectFifo(L1_B_ty, name=f"B_L3L1_{i}", depth=1) for i in range(cols) + ] + C_L1L3_fifos = [ + ObjectFifo(L1_C_ty, name=f"C_L1L3_{i}", depth=1) for i in range(cols) + ] + + def core_body(A_L3L1_fifo, B_L3L1_fifo, C_L1L3_fifo, matvec): + one_idx = index.constant(1) + m_idx = index.constant(m) + for _ in range_(0xFFFFFFFF): + b = B_L3L1_fifo.acquire(1) + c = C_L1L3_fifo.acquire(1) + for i_idx in range_(M // m // cols): + a = A_L3L1_fifo.acquire(1) + i_i32 = index.casts(T.i32(), i_idx) + matvec(m, K, i_i32, a, b, c) + A_L3L1_fifo.release(1) + C_L1L3_fifo.release(1) + B_L3L1_fifo.release(1) + + workers = [ + Worker( + core_body, + [ + A_L3L1_fifos[i].cons(), + B_L3L1_fifos[i].cons(), + C_L1L3_fifos[i].prod(), + matvec, + ], + ) + for i in range(cols) + ] + + A_taps = [ + TensorAccessPattern( + (M, K), + col * (M // cols) * K, + [1, 1, 1, (M // cols) * K], + [0, 0, 0, 1], + ) + for col in range(cols) + ] + # Every column gets the whole of B, no TAP needed. + C_taps = [ + TensorAccessPattern( + (1, M), col * (M // cols), [1, 1, 1, (M // cols)], [0, 0, 0, 1] + ) + for col in range(cols) + ] + + rt = Runtime() + with rt.sequence(L3_A_ty, L3_B_ty, L3_C_ty) as (A, B, C): + rt.start(*workers) + tg = rt.task_group() + for i in range(cols): + rt.fill(A_L3L1_fifos[i].prod(), A, A_taps[i], task_group=tg) + rt.fill(B_L3L1_fifos[i].prod(), B, task_group=tg) + for i in range(cols): + rt.drain(C_L1L3_fifos[i].cons(), C, C_taps[i], task_group=tg, wait=True) + rt.finish_task_group(tg) + + return Program(dev_ty, rt).resolve_program(SequentialPlacer()) + + +def main(): + argparser = argparse.ArgumentParser( + prog="AIE Matrix Vector Multiplication MLIR Design", + ) + argparser.add_argument("--dev", type=str, choices=["npu", "npu2"], default="npu") + argparser.add_argument("-M", type=int) + argparser.add_argument("-K", type=int) + argparser.add_argument("-m", type=int) + argparser.add_argument("--cols", type=int) + argparser.add_argument( + "--output-file-path", + "-o", + type=str, + help="Output file path for the generated MLIR module", + ) + args = argparser.parse_args() + module = my_matvec(args.dev, args.cols, args.M, args.K, args.m) + + output_file_path = Path(args.output_file_path) + + with open(output_file_path, "w") as f: + f.write(str(module)) + + +if __name__ == "__main__": + main() diff --git a/programming_examples/reconfiguration/operators/silu.py b/programming_examples/reconfiguration/operators/silu.py new file mode 100644 index 00000000000..5968943b17b --- /dev/null +++ b/programming_examples/reconfiguration/operators/silu.py @@ -0,0 +1,212 @@ +# SPDX-FileCopyrightText: Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +from ml_dtypes import bfloat16 +from pathlib import Path +import numpy as np +import argparse +import sys + +from aie.iron import Kernel, ObjectFifo, Program, Runtime, Worker +from aie.iron.placers import SequentialPlacer +from aie.iron.device import Tile, NPU1, NPU2 +from aie.helpers.taplib.tap import TensorAccessPattern +from aie.iron.controlflow import range_ + + +def my_silu(dev, size, num_columns, num_channels, tile_size, trace_size): + xfr_dtype = bfloat16 + line_size = 4096 if tile_size > 4096 else tile_size + line_type = np.ndarray[(line_size,), np.dtype[xfr_dtype]] + transfer_type = np.ndarray[(size,), np.dtype[xfr_dtype]] + + # Calculate number of iterations per core + total_cores = num_columns * num_channels + per_core_elements = size // total_cores + N_div_n = per_core_elements // line_size + + # Chunk size sent per DMA channel + chunk = size // num_columns // num_channels + + # Dataflow with ObjectFifos + of_ins = [ + ObjectFifo(line_type, name=f"in{i}_{j}") + for i in range(num_columns) + for j in range(num_channels) + ] + of_outs = [ + ObjectFifo(line_type, name=f"out{i}_{j}") + for i in range(num_columns) + for j in range(num_channels) + ] + + # External, binary kernel definition + silu_fcn = Kernel( + "silu_bf16", + "silu.o", + [line_type, line_type, np.int32], + ) + + # Task for the core to perform + def core_fn(of_in, of_out, siluLine): + for _ in range_(N_div_n): + elemOut = of_out.acquire(1) + elemIn = of_in.acquire(1) + siluLine(elemIn, elemOut, line_size) + of_in.release(1) + of_out.release(1) + + # Create a worker to perform the task + my_workers = [ + Worker( + core_fn, + [ + of_ins[i * num_channels + j].cons(), + of_outs[i * num_channels + j].prod(), + silu_fcn, + ], + ) + for i in range(num_columns) + for j in range(num_channels) + ] + + # Create a TensorAccessPattern for each channel + # to describe the data movement + # The pattern chops the data in equal chunks + # and moves them in parallel across the columns + # and channels. + taps = [ + TensorAccessPattern( + (1, size), + chunk * i * num_channels + chunk * j, + [1, 1, 1, chunk], + [0, 0, 0, 1], + ) + for i in range(num_columns) + for j in range(num_channels) + ] + + # Runtime operations to move data to/from the AIE-array + rt = Runtime() + with rt.sequence(transfer_type, transfer_type) as ( + a_in, + b_out, + ): + rt.start(*my_workers) + + # Initialize a group for parallel drain tasks, with fill resources free'd when drains complete. + tg = rt.task_group() + + # Fill the input objectFIFOs with data + for i in range(num_columns): + for j in range(num_channels): + rt.fill( + of_ins[i * num_channels + j].prod(), + a_in, + taps[i * num_channels + j], + task_group=tg, + ) + # Drain the output objectFIFOs with data + for i in range(num_columns): + for j in range(num_channels): + rt.drain( + of_outs[i * num_channels + j].cons(), + b_out, + taps[i * num_channels + j], + wait=True, # wait for the transfer to complete and data to be available + task_group=tg, + ) + rt.finish_task_group(tg) + + # Place components (assign them resources on the device) and generate an MLIR module + return Program(dev, rt).resolve_program(SequentialPlacer()) + + +if __name__ == "__main__": + + def str_to_device(device: str): + if device == "npu": + return NPU1() + elif device == "npu2": + return NPU2() + else: + raise ValueError(f"Device name {device} is unknown.") + + p = argparse.ArgumentParser() + # Parse command line arguments + + # Device name is required to select the AIE device: npu or npu2 + p.add_argument( + "-d", + "--dev", + required=True, + dest="device", + help="AIE Device", + type=str_to_device, + ) + # Transfer size is required to define the size of the data to be transferred + # It must be a multiple of 1024 and divisible by the number of columns and 2 channels per column + p.add_argument("-l", "--length", required=True, dest="length", help="Transfer size") + # Number of columns is required to define the number of columns to be used + # It must be less than or equal to 4 for npu and 8 for npu2 + p.add_argument( + "-co", "--columns", required=True, dest="cols", help="Number of columns" + ) + # Number of channels is required to define the number of channels to be used + # It must be 1 or 2 + p.add_argument( + "-ch", "--channels", required=True, dest="chans", help="Number of channels" + ) + # Tile size (elements per tile) - defaults to 1024 for backward compatibility + p.add_argument( + "-ts", + "--tile-size", + required=False, + dest="tile_size", + default="1024", + help="Tile size (elements per tile)", + ) + # Trace Size + p.add_argument( + "-t", "--trace-size", required=True, dest="trace_size", help="Trace size" + ) + p.add_argument( + "--output-file-path", + "-o", + type=str, + help="Output file path for the generated MLIR module", + ) + + opts = p.parse_args(sys.argv[1:]) + + length = int(opts.length) + columns = int(opts.cols) + dev = opts.device # Now this is already a device object! + + # Validate columns based on device type + if isinstance(dev, NPU1) and columns > 4: + raise ValueError("[ERROR] NPU device cannot allocate more than 4 columns") + elif isinstance(dev, NPU2) and columns > 8: + raise ValueError("[ERROR] NPU2 device cannot allocate more than 8 columns") + + channels = int(opts.chans) + if channels < 1 or channels > 2: + raise ValueError("Number of channels must be 1 or 2") + tile_size = int(opts.tile_size) + if ((length % tile_size) % columns % channels) != 0: + print( + "transfer size (" + + str(length) + + ") must be a multiple of " + + str(tile_size) + + " and divisible by the number of columns and channels per column" + ) + raise ValueError + trace_size = opts.trace_size + + module = my_silu(dev, length, columns, channels, tile_size, trace_size) + + output_file_path = Path(opts.output_file_path) + + with open(output_file_path, "w") as f: + f.write(str(module)) diff --git a/programming_examples/reconfiguration/run_benchmarks.sh b/programming_examples/reconfiguration/run_benchmarks.sh new file mode 100755 index 00000000000..e8ffaeb1187 --- /dev/null +++ b/programming_examples/reconfiguration/run_benchmarks.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +OUTPUT_CSV="benchmark_results.csv" + +# Write CSV header +echo "variant,iteration,time_us" > "$OUTPUT_CSV" + +VARIANTS=("separate_xclbins" "runlist" "fused_transactions_loadpdi") + +for variant in "${VARIANTS[@]}"; do + echo "Running benchmark for $variant..." >&2 + + pushd "swiglu/$variant" > /dev/null + + if [ ! -f "build/test" ]; then + echo "Error: build/test not found in $variant. Please run 'make' first." >&2 + popd > /dev/null + continue + fi + + cd build + # Redirect stdout to CSV, stderr stays on terminal + ./test 1>> "../../../$OUTPUT_CSV" + + if [ $? -eq 0 ]; then + echo " ✓ $variant completed successfully" >&2 + else + echo " ✗ $variant failed" >&2 + fi + + popd > /dev/null +done + +echo "" >&2 +echo "Benchmark results saved to: $OUTPUT_CSV" >&2 +echo "Total data points: $(( $(wc -l < "$OUTPUT_CSV") - 1 ))" >&2 diff --git a/programming_examples/reconfiguration/swiglu/README.md b/programming_examples/reconfiguration/swiglu/README.md new file mode 100644 index 00000000000..3d5773e083e --- /dev/null +++ b/programming_examples/reconfiguration/swiglu/README.md @@ -0,0 +1,96 @@ +# SwiGLU Reconfiguration Variants + +This directory contains three implementations of the SwiGLU operator, each demonstrating different NPU execution patterns: + +1. **separate_xclbins** - Each kernel compiled to a separate xclbin, executed sequentially +2. **runlist** - All kernels combined into a single xclbin, executed via runlist +3. **fused_transactions** - All kernels compiled into a single ELF file with fused transactions + +## Directory Structure + +``` +swiglu/ +├── separate_xclbins/ +│ ├── Makefile +│ └── test.cpp +├── runlist/ +│ ├── Makefile +│ └── test.cpp +└── fused_transactions/ + ├── Makefile + ├── test.cpp + └── combine_mlir.py +``` + +## Building + +Each variant can be built independently: + +```bash +cd separate_xclbins && make +cd runlist && make +cd fused_transactions && make +``` + +## Running Individual Tests + +```bash +cd separate_xclbins && make test +cd runlist && make test +cd fused_transactions && make test +``` + +## Running Benchmarks + +From the parent `reconfiguration` directory: + +```bash +./run_benchmarks.sh +``` + +This will: +- Run all three variants +- Collect timing data (100 iterations each) +- Save results to `benchmark_results.csv` + +## Visualizing Results + +```bash +python3 visualize_results.py +``` + +This will: +- Read `benchmark_results.csv` +- Generate a bar chart (`benchmark_results.png`) +- Print performance statistics and comparisons to stdout + +## Configuration + +Key parameters can be adjusted at the top of each `Makefile` and `test.cpp`: + +### Makefile +- `KERNEL_NAMES` - Names of the kernels +- Tool paths (PEANO_CLANG, AIECC, etc.) + +### test.cpp +- `EMBEDDING_DIM` (default: 2048) +- `HIDDEN_DIM` (default: 8192) +- `NUM_ITERATIONS` (default: 100) + +## SwiGLU Operation Sequence + +The SwiGLU operator executes the following sequence: + +1. **swiglu_gemv_1**: Matrix-vector multiply (weights_1 × input → left) +2. **swiglu_gemv_1**: Matrix-vector multiply (weights_2 × input → right) +3. **swiglu_silu**: SiLU activation (left → left_swished) +4. **swiglu_eltwise_mul**: Element-wise multiply (left_swished × right → intermediate) +5. **swiglu_gemv_2**: Matrix-vector multiply (weights_3 × intermediate → output) + +## Clean + +```bash +cd separate_xclbins && make clean +cd runlist && make clean +cd fused_transactions && make clean +``` diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/Makefile b/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/Makefile new file mode 100644 index 00000000000..e4696f5a81e --- /dev/null +++ b/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/Makefile @@ -0,0 +1,58 @@ +MLIR_FILES = build/swiglu_gemv_1.mlir build/swiglu_silu.mlir build/swiglu_eltwise_mul.mlir build/swiglu_gemv_2.mlir +COMBINED_MLIR = build/aie.mlir +ELF_FILE = build/aie.elf + +AIECC = aiecc.py +PEANO_CLANG = $(PEANO_INSTALL_DIR)/bin/clang++ +PEANO_PATH = $(PEANO_INSTALL_DIR) + +KERNEL_DIR = ../../kernels +OPERATOR_DIR = ../../operators +AIE_KERNELS_DIR = /scratch/roesti/mlir-aie/aie_kernels +MLIR_AIE_DIR = $(shell python3 -c "from aie.utils.config import root_path; print(root_path())") + +CLANG_FLAGS = -O2 -std=c++20 --target=aie2p-none-unknown-elf -Wno-parentheses -Wno-attributes -Wno-macro-redefined -Wno-empty-body -Wno-missing-template-arg-list-after-template-kw -I$(AIE_KERNELS_DIR) -I$(MLIR_AIE_DIR)/include +HOST_FLAGS = -std=c++23 -Wall -I/opt/xilinx/xrt/include -I/scratch/roesti/mlir-aie/runtime_lib/test_lib -L/opt/xilinx/xrt/lib -lxrt_core -lxrt_coreutil -lrt -lstdc++ + +.PHONY: all clean test + +all: build/test + +build/mv.o: $(KERNEL_DIR)/mv.cc | build + $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ + +build/mul.o: $(KERNEL_DIR)/mul.cc | build + $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ + +build/silu.o: $(KERNEL_DIR)/silu.cc | build + $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ + +build/swiglu_gemv_1.mlir: $(OPERATOR_DIR)/matrix_vector_mul.py | build + python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from matrix_vector_mul import my_matvec; from aie.iron.device import NPU2; mlir_code = my_matvec(NPU2(), 8, 8192, 2048, 1); print(str(mlir_code))' > $@ + +build/swiglu_gemv_2.mlir: $(OPERATOR_DIR)/matrix_vector_mul.py | build + python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from matrix_vector_mul import my_matvec; from aie.iron.device import NPU2; mlir_code = my_matvec(NPU2(), 8, 2048, 8192, 1); print(str(mlir_code))' > $@ + +build/swiglu_silu.mlir: $(OPERATOR_DIR)/silu.py | build + python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from silu import my_silu; from aie.iron.device import NPU2; mlir_code = my_silu(NPU2(), 8192, 8, 2, 512, 0); print(str(mlir_code))' > $@ + +build/swiglu_eltwise_mul.mlir: $(OPERATOR_DIR)/eltwise_mul.py | build + python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from eltwise_mul import my_eltwise_mul; from aie.iron.device import NPU2; mlir_code = my_eltwise_mul(NPU2(), 8192, 8, 2, 1024, 0); print(str(mlir_code))' > $@ + +$(COMBINED_MLIR): $(MLIR_FILES) combine_mlir.py + python3 combine_mlir.py $(MLIR_FILES) $(COMBINED_MLIR) + +$(ELF_FILE): $(COMBINED_MLIR) build/mv.o build/mul.o build/silu.o + cd build && $(AIECC) -v --generate-full-elf --no-xchesscc --no-xbridge aie.mlir -o aie.elf + +build/test: test.cpp $(ELF_FILE) + g++-13 $< -o $@ $(HOST_FLAGS) + +build: + mkdir -p build + +test: build/test + cd build && ./test + +clean: + rm -rf build aie.mlir.prj diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/combine_mlir.py b/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/combine_mlir.py new file mode 100644 index 00000000000..1b77f0fd43c --- /dev/null +++ b/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/combine_mlir.py @@ -0,0 +1,167 @@ +#!/usr/bin/env python3 +import sys +import re + +# Configuration: buffer layout +# Each entry: (buffer_name, size_expr) +BUFFER_CONFIG = [ + ("input", "embedding_dim"), + ("weights_1", "embedding_dim * hidden_dim"), + ("weights_2", "embedding_dim * hidden_dim"), + ("weights_3", "hidden_dim * embedding_dim"), + ("left", "hidden_dim"), + ("left_swished", "hidden_dim"), + ("right", "hidden_dim"), + ("intermediate", "hidden_dim"), + ("output", "embedding_dim"), +] + +# Configuration: operations to execute +# Each entry: (device_name, buffer_args) +# NOTE: Consecutive operations on the same device will be grouped into a single +# aiex.configure block to minimize reconfiguration overhead. +OPERATIONS_CONFIG = [ + ("gemv_1", ["weights_1", "input", "left"]), + ("gemv_1", ["weights_2", "input", "right"]), # Grouped with previous gemv_1 + ("silu", ["left", "left_swished"]), + ("eltwise_mul", ["left_swished", "right", "intermediate"]), + ("gemv_2", ["weights_3", "intermediate", "output"]), +] + +# Map device names to their indices (for referencing the @device) +DEVICE_INDEX_MAP = { + "gemv_1": 0, + "silu": 1, + "eltwise_mul": 2, + "gemv_2": 3, +} + +def extract_device_content(mlir_file, device_name): + with open(mlir_file, 'r') as f: + content = f.read() + + # Find the start of the aie.device + device_start = content.find('aie.device(npu2) {') + if device_start == -1: + raise ValueError(f"No aie.device found in {mlir_file}") + + # Find matching closing brace by counting braces + brace_count = 0 + i = device_start + len('aie.device(npu2) ') + start_content = i + 1 # Start after the opening brace + + for idx in range(i, len(content)): + if content[idx] == '{': + brace_count += 1 + elif content[idx] == '}': + brace_count -= 1 + if brace_count == 0: + # Found the matching closing brace + device_content = content[start_content:idx].strip() + return f" aie.device(npu2) @{device_name} {{\n{device_content}\n }}\n" + + raise ValueError(f"Could not find matching closing brace in {mlir_file}") + +def calculate_buffer_offsets(embedding_dim, hidden_dim): + """Calculate buffer offsets based on configuration.""" + offsets = {} + current_offset = 0 + + for buffer_name, size_expr in BUFFER_CONFIG: + size = eval(size_expr, {"embedding_dim": embedding_dim, "hidden_dim": hidden_dim}) + offsets[buffer_name] = { + "start": current_offset, + "size": size, + "end": current_offset + size, + } + current_offset += size + + offsets["total"] = current_offset + return offsets + +def create_main_device(buffer_offsets): + """Generate the main device with runtime sequence. + Optimizes by grouping consecutive operations on the same device. + """ + lines = [] + lines.append(" aie.device(npu2) @main {") + lines.append("") + lines.append(f" aiex.runtime_sequence @sequence(%arg : memref<{buffer_offsets['total']}xbf16>) {{") + lines.append("") + lines.append(" %c3_i32 = arith.constant 3 : i32") + lines.append("") + + # Group consecutive operations by device to minimize reconfigurations + i = 0 + while i < len(OPERATIONS_CONFIG): + device_name, buffer_args = OPERATIONS_CONFIG[i] + device_ref_name = list(DEVICE_INDEX_MAP.keys())[DEVICE_INDEX_MAP[device_name]] + + # Collect all consecutive operations for the same device + device_operations = [(buffer_args, i)] + j = i + 1 + while j < len(OPERATIONS_CONFIG) and OPERATIONS_CONFIG[j][0] == device_name: + device_operations.append((OPERATIONS_CONFIG[j][1], j)) + j += 1 + + # Generate a single aiex.configure block for all operations on this device + lines.append(f" aiex.configure @{device_ref_name} {{") + + # Track which buffers we've already declared in this configure block + declared_buffers = set() + + for op_buffer_args, op_idx in device_operations: + # Generate arg_slice declarations for buffers not yet declared + for buf_name in op_buffer_args: + if buf_name not in declared_buffers: + buf_info = buffer_offsets[buf_name] + lines.append(f" %{buf_name} = aiex.arg_slice %arg[{buf_info['start']}:{buf_info['end']}] : memref<{buffer_offsets['total']}xbf16> -> memref<{buf_info['size']}xbf16>") + declared_buffers.add(buf_name) + + # Generate aiex.run call + buffer_args_str = ", ".join([f"%{b}" for b in op_buffer_args]) + buffer_types_str = ", ".join([f"memref<{buffer_offsets[b]['size']}xbf16>" for b in op_buffer_args]) + lines.append(f" aiex.run @sequence ({buffer_args_str}) : ({buffer_types_str})") + + lines.append(" }") + lines.append("") + + # Move to the next ungrouped device + i = j + + lines.append(" }") + lines.append("") + lines.append(" }") + + return "\n".join(lines) + "\n" + +def main(): + if len(sys.argv) != 6: + print("Usage: combine_mlir.py ") + sys.exit(1) + + embedding_dim = 2048 + hidden_dim = 8192 + + # Calculate buffer offsets from configuration + buffer_offsets = calculate_buffer_offsets(embedding_dim, hidden_dim) + + # Get unique device names from operations config + device_names = list(DEVICE_INDEX_MAP.keys()) + + output = "module {\n\n" + output += create_main_device(buffer_offsets) + output += "\n" + + # Extract device content for each unique device + for i, mlir_file in enumerate(sys.argv[1:5]): + output += extract_device_content(mlir_file, device_names[i]) + output += "\n" + + output += "}\n" + + with open(sys.argv[5], 'w') as f: + f.write(output) + +if __name__ == "__main__": + main() diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/test.cpp b/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/test.cpp new file mode 100644 index 00000000000..6225f253da9 --- /dev/null +++ b/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/test.cpp @@ -0,0 +1,148 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +constexpr int EMBEDDING_DIM = 2048; +constexpr int HIDDEN_DIM = 8192; +constexpr int NUM_ITERATIONS = 1000; + +using dtype = uint16_t; + +struct BufferInfo { + std::string name; + size_t size; +}; + +std::vector buffers_config = { + {"input", EMBEDDING_DIM}, + {"weights_1", EMBEDDING_DIM * HIDDEN_DIM}, + {"weights_2", EMBEDDING_DIM * HIDDEN_DIM}, + {"weights_3", HIDDEN_DIM * EMBEDDING_DIM}, + {"left", HIDDEN_DIM}, + {"left_swished", HIDDEN_DIM}, + {"right", HIDDEN_DIM}, + {"intermediate", HIDDEN_DIM}, + {"output", EMBEDDING_DIM}, +}; + +std::vector load_reference(const std::string &filename) { + std::ifstream file(filename, std::ios::binary); + if (!file) { + return {}; + } + file.seekg(0, std::ios::end); + size_t size = file.tellg(); + file.seekg(0, std::ios::beg); + std::vector data(size / sizeof(uint16_t)); + file.read(reinterpret_cast(data.data()), size); + return data; +} + +int main(int argc, const char *argv[]) { + unsigned int device_index = 0; + auto device = xrt::device(device_index); + + std::string kernelName = "main:sequence"; + xrt::elf ctx_elf{"aie.elf"}; + xrt::hw_context context = xrt::hw_context(device, ctx_elf); + auto kernel = xrt::ext::kernel(context, kernelName); + + size_t total_size = 0; + for (const auto &binfo : buffers_config) { + total_size += binfo.size; + } + + xrt::bo bo_inout = xrt::ext::bo{device, total_size * sizeof(dtype)}; + dtype *buf = bo_inout.map(); + + std::map buffer_ptrs; + size_t offset = 0; + for (const auto &binfo : buffers_config) { + buffer_ptrs[binfo.name] = buf + offset; + offset += binfo.size; + } + + for (size_t i = 0; i < buffers_config[0].size; i++) { // input + buffer_ptrs["input"][i] = 0x3F80; + } + for (size_t i = 0; i < buffers_config[1].size; i++) { // weights_1 + buffer_ptrs["weights_1"][i] = 0x3F00; + } + for (size_t i = 0; i < buffers_config[2].size; i++) { // weights_2 + buffer_ptrs["weights_2"][i] = 0x3F00; + } + for (size_t i = 0; i < buffers_config[3].size; i++) { // weights_3 + buffer_ptrs["weights_3"][i] = 0x3F00; + } + + bo_inout.sync(XCL_BO_SYNC_BO_TO_DEVICE); + + auto run = xrt::run(kernel); + run.set_arg(0, bo_inout); + + std::cerr << "Running verification..." << std::endl; + run.start(); + run.wait2(); + + bo_inout.sync(XCL_BO_SYNC_BO_FROM_DEVICE); + dtype *output_verify = buffer_ptrs["output"]; + + auto reference = load_reference("../../reference_output.bin"); + if (!reference.empty()) { + int mismatches = 0; + for (size_t i = 0; i < EMBEDDING_DIM && i < reference.size(); i++) { + if (output_verify[i] != reference[i]) { + mismatches++; + if (mismatches <= 10) { + std::cerr << "Mismatch at " << i << ": got 0x" << std::hex + << output_verify[i] << ", expected 0x" << reference[i] + << std::dec << std::endl; + } + } + } + if (mismatches == 0) { + std::cerr << "Verification PASSED: all outputs match reference" << std::endl; + } else { + std::cerr << "Verification FAILED: " << mismatches << " mismatches" + << std::endl; + } + } else { + std::cerr << "Warning: reference output not found, skipping validation" + << std::endl; + } + + std::cerr << "Running timed iterations..." << std::endl; + std::vector iteration_times; + + for (int iter = 0; iter < NUM_ITERATIONS; iter++) { + auto iter_start = std::chrono::high_resolution_clock::now(); + run.start(); + run.wait2(); + auto iter_end = std::chrono::high_resolution_clock::now(); + double iter_time = std::chrono::duration_cast(iter_end - iter_start).count(); + iteration_times.push_back(iter_time); + } + + bo_inout.sync(XCL_BO_SYNC_BO_FROM_DEVICE); + + // Output CSV format: variant,iteration,time_us + for (int i = 0; i < NUM_ITERATIONS; i++) { + std::cout << "fused_transactions," << i << "," << iteration_times[i] << std::endl; + } + + return 0; +} diff --git a/programming_examples/reconfiguration/swiglu/generate_reference.py b/programming_examples/reconfiguration/swiglu/generate_reference.py new file mode 100644 index 00000000000..a49a57ed765 --- /dev/null +++ b/programming_examples/reconfiguration/swiglu/generate_reference.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +import numpy as np +from ml_dtypes import bfloat16 +import struct + +EMBEDDING_DIM = 2048 +HIDDEN_DIM = 8192 + +def silu(x): + return x / (1.0 + np.exp(-x)) + +def swiglu_reference(): + input_data = np.ones(EMBEDDING_DIM, dtype=bfloat16) + weights_1 = np.full((EMBEDDING_DIM, HIDDEN_DIM), 0.5, dtype=bfloat16) + weights_2 = np.full((EMBEDDING_DIM, HIDDEN_DIM), 0.5, dtype=bfloat16) + weights_3 = np.full((HIDDEN_DIM, EMBEDDING_DIM), 0.5, dtype=bfloat16) + + left = np.dot(input_data, weights_1) + right = np.dot(input_data, weights_2) + + left_swished = silu(left) + + intermediate = left_swished * right + + output = np.dot(intermediate, weights_3) + + return output.astype(bfloat16) + +def save_reference(): + output = swiglu_reference() + + with open('reference_output.bin', 'wb') as f: + output.tofile(f) + + print(f"Reference output saved: {len(output)} elements") + print(f"Output shape: {output.shape}") + print(f"Output dtype: {output.dtype}") + print(f"First 10 values: {output[:10]}") + print(f"Last 10 values: {output[-10:]}") + +if __name__ == "__main__": + save_reference() diff --git a/programming_examples/reconfiguration/swiglu/runlist/Makefile b/programming_examples/reconfiguration/swiglu/runlist/Makefile new file mode 100644 index 00000000000..319ad29d7ae --- /dev/null +++ b/programming_examples/reconfiguration/swiglu/runlist/Makefile @@ -0,0 +1,74 @@ +KERNEL_NAMES = swiglu_gemv_1 swiglu_silu swiglu_eltwise_mul swiglu_gemv_2 +MLIR_FILES = $(addprefix build/,$(addsuffix .mlir,$(KERNEL_NAMES))) +FINAL_XCLBIN = build/swiglu_combined.xclbin + +PEANO_CLANG = $(PEANO_INSTALL_DIR)/bin/clang++ +AIECC = aiecc.py +PEANO_PATH = $(PEANO_INSTALL_DIR) + +KERNEL_DIR = ../../kernels +OPERATOR_DIR = ../../operators +AIE_KERNELS_DIR = /scratch/roesti/mlir-aie/aie_kernels +MLIR_AIE_DIR = $(shell python3 -c "from aie.utils.config import root_path; print(root_path())") + +CLANG_FLAGS = -O2 -std=c++20 --target=aie2p-none-unknown-elf -Wno-parentheses -Wno-attributes -Wno-macro-redefined -Wno-empty-body -Wno-missing-template-arg-list-after-template-kw -I$(AIE_KERNELS_DIR) -I$(MLIR_AIE_DIR)/include +AIECC_FLAGS = --no-compile-host --no-xchesscc --no-xbridge --peano $(PEANO_PATH) +HOST_FLAGS = -std=c++23 -Wall -I/opt/xilinx/xrt/include -I/scratch/roesti/mlir-aie/runtime_lib/test_lib -L/opt/xilinx/xrt/lib -lxrt_core -lxrt_coreutil -lrt -lstdc++ + +.PHONY: all clean test + +all: build/test + +build/mv.o: $(KERNEL_DIR)/mv.cc | build + $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ + +build/mul.o: $(KERNEL_DIR)/mul.cc | build + $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ + +build/silu.o: $(KERNEL_DIR)/silu.cc | build + $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ + +build/swiglu_gemv_1.mlir: $(OPERATOR_DIR)/matrix_vector_mul.py | build + python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from matrix_vector_mul import my_matvec; from aie.iron.device import NPU2; mlir_code = my_matvec(NPU2(), 8, 8192, 2048, 1); print(str(mlir_code))' > $@ + +build/swiglu_gemv_2.mlir: $(OPERATOR_DIR)/matrix_vector_mul.py | build + python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from matrix_vector_mul import my_matvec; from aie.iron.device import NPU2; mlir_code = my_matvec(NPU2(), 8, 2048, 8192, 1); print(str(mlir_code))' > $@ + +build/swiglu_silu.mlir: $(OPERATOR_DIR)/silu.py | build + python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from silu import my_silu; from aie.iron.device import NPU2; mlir_code = my_silu(NPU2(), 8192, 8, 2, 512, 0); print(str(mlir_code))' > $@ + +build/swiglu_eltwise_mul.mlir: $(OPERATOR_DIR)/eltwise_mul.py | build + python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from eltwise_mul import my_eltwise_mul; from aie.iron.device import NPU2; mlir_code = my_eltwise_mul(NPU2(), 8192, 8, 2, 1024, 0); print(str(mlir_code))' > $@ + +build/swiglu_gemv_1.xclbin: build/swiglu_gemv_1.mlir build/mv.o + cd build && $(AIECC) $(AIECC_FLAGS) --xclbin-instance-name=swiglu_gemv_1 --xclbin-kernel-id=0x901 --aie-generate-xclbin --xclbin-name=swiglu_gemv_1.xclbin --xclbin-kernel-name=swiglu_gemv_1 --aie-generate-npu --npu-insts-name=swiglu_gemv_1.bin swiglu_gemv_1.mlir + +build/swiglu_silu.bin: build/swiglu_silu.mlir build/silu.o + cd build && $(AIECC) $(AIECC_FLAGS) --no-compile --aie-generate-npu --npu-insts-name=swiglu_silu.bin swiglu_silu.mlir + +build/swiglu_eltwise_mul.bin: build/swiglu_eltwise_mul.mlir build/mul.o + cd build && $(AIECC) $(AIECC_FLAGS) --no-compile --aie-generate-npu --npu-insts-name=swiglu_eltwise_mul.bin swiglu_eltwise_mul.mlir + +build/swiglu_gemv_2.bin: build/swiglu_gemv_2.mlir build/mv.o + cd build && $(AIECC) $(AIECC_FLAGS) --no-compile --aie-generate-npu --npu-insts-name=swiglu_gemv_2.bin swiglu_gemv_2.mlir + +build/swiglu_silu.xclbin: build/swiglu_silu.mlir build/swiglu_gemv_1.xclbin build/swiglu_silu.bin + cd build && $(AIECC) $(AIECC_FLAGS) --xclbin-instance-name=swiglu_silu --xclbin-kernel-id=0x902 --aie-generate-xclbin --xclbin-name=swiglu_silu.xclbin --xclbin-kernel-name=swiglu_silu --xclbin-input=swiglu_gemv_1.xclbin swiglu_silu.mlir + +build/swiglu_eltwise_mul.xclbin: build/swiglu_eltwise_mul.mlir build/swiglu_silu.xclbin build/swiglu_eltwise_mul.bin + cd build && $(AIECC) $(AIECC_FLAGS) --xclbin-instance-name=swiglu_eltwise_mul --xclbin-kernel-id=0x903 --aie-generate-xclbin --xclbin-name=swiglu_eltwise_mul.xclbin --xclbin-kernel-name=swiglu_eltwise_mul --xclbin-input=swiglu_silu.xclbin swiglu_eltwise_mul.mlir + +build/swiglu_combined.xclbin: build/swiglu_gemv_2.mlir build/swiglu_eltwise_mul.xclbin build/swiglu_gemv_2.bin + cd build && $(AIECC) $(AIECC_FLAGS) --xclbin-instance-name=swiglu_gemv_2 --xclbin-kernel-id=0x904 --aie-generate-xclbin --xclbin-name=swiglu_combined.xclbin --xclbin-kernel-name=swiglu_gemv_2 --xclbin-input=swiglu_eltwise_mul.xclbin swiglu_gemv_2.mlir + +build/test: test.cpp $(FINAL_XCLBIN) + g++-13 $< -o $@ $(HOST_FLAGS) + +build: + mkdir -p build + +test: build/test + cd build && ./test + +clean: + rm -rf build aie.mlir.prj diff --git a/programming_examples/reconfiguration/swiglu/runlist/test.cpp b/programming_examples/reconfiguration/swiglu/runlist/test.cpp new file mode 100644 index 00000000000..1745b8b826d --- /dev/null +++ b/programming_examples/reconfiguration/swiglu/runlist/test.cpp @@ -0,0 +1,234 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xrt/experimental/xrt_kernel.h" +#include "xrt/xrt_bo.h" +#include "xrt/xrt_device.h" +#include "xrt/xrt_kernel.h" + +constexpr int EMBEDDING_DIM = 2048; +constexpr int HIDDEN_DIM = 8192; +constexpr int NUM_ITERATIONS = 1000; + +using dtype = uint16_t; + +struct KernelInfo { + std::string name; + std::string instr_file; +}; + +struct BufferInfo { + std::string name; + size_t size; +}; + +struct Operation { + int kernel_idx; + std::vector buffer_names; +}; + +std::string combined_xclbin = "swiglu_combined.xclbin"; + +std::vector kernels_config = { + {"swiglu_gemv_1", "swiglu_gemv_1.bin"}, + {"swiglu_silu", "swiglu_silu.bin"}, + {"swiglu_eltwise_mul", "swiglu_eltwise_mul.bin"}, + {"swiglu_gemv_2", "swiglu_gemv_2.bin"}, +}; + +std::vector buffers_config = { + {"input", EMBEDDING_DIM * sizeof(dtype)}, + {"weights_1", EMBEDDING_DIM * HIDDEN_DIM * sizeof(dtype)}, + {"weights_2", EMBEDDING_DIM * HIDDEN_DIM * sizeof(dtype)}, + {"weights_3", HIDDEN_DIM * EMBEDDING_DIM * sizeof(dtype)}, + {"left", HIDDEN_DIM * sizeof(dtype)}, + {"left_swished", HIDDEN_DIM * sizeof(dtype)}, + {"right", HIDDEN_DIM * sizeof(dtype)}, + {"intermediate", HIDDEN_DIM * sizeof(dtype)}, + {"output", EMBEDDING_DIM * sizeof(dtype)}, +}; + +std::vector runlist_config = { + {0, {"weights_1", "input", "left"}}, + {0, {"weights_2", "input", "right"}}, + {1, {"left", "left_swished"}}, + {2, {"left_swished", "right", "intermediate"}}, + {3, {"weights_3", "intermediate", "output"}}, +}; + +std::vector load_reference(const std::string &filename) { + std::ifstream file(filename, std::ios::binary); + if (!file) { + return {}; + } + file.seekg(0, std::ios::end); + size_t size = file.tellg(); + file.seekg(0, std::ios::beg); + std::vector data(size / sizeof(uint16_t)); + file.read(reinterpret_cast(data.data()), size); + return data; +} + +std::vector load_instr_binary(const std::string &filename) { + std::ifstream file(filename, std::ios::binary); + file.seekg(0, std::ios::end); + size_t size = file.tellg(); + file.seekg(0, std::ios::beg); + std::vector data(size / sizeof(uint32_t)); + file.read(reinterpret_cast(data.data()), size); + return data; +} + +int main(int argc, const char *argv[]) { + unsigned int device_index = 0; + auto device = xrt::device(device_index); + + auto xclbin = xrt::xclbin(combined_xclbin); + device.register_xclbin(xclbin); + xrt::hw_context context(device, xclbin.get_uuid()); + + std::vector kernels; + for (const auto &kinfo : kernels_config) { + kernels.push_back(xrt::kernel(context, kinfo.name)); + } + + std::map buffers; + for (const auto &binfo : buffers_config) { + int group_id = (binfo.name == "weights_1" || binfo.name == "weights_2" || binfo.name == "input") ? 3 : 4; + int kernel_idx = (binfo.name == "weights_3") ? 3 : + (binfo.name == "left_swished") ? 1 : + (binfo.name == "intermediate") ? 2 : 0; + buffers[binfo.name] = xrt::bo(device, binfo.size, XRT_BO_FLAGS_HOST_ONLY, + kernels[kernel_idx].group_id(group_id)); + } + + std::vector bo_instrs; + std::vector> instr_data; + for (size_t i = 0; i < kernels_config.size(); i++) { + instr_data.push_back(load_instr_binary(kernels_config[i].instr_file)); + bo_instrs.push_back(xrt::bo(device, instr_data[i].size() * sizeof(uint32_t), + XCL_BO_FLAGS_CACHEABLE, kernels[i].group_id(1))); + void *buf = bo_instrs[i].map(); + memcpy(buf, instr_data[i].data(), instr_data[i].size() * sizeof(uint32_t)); + bo_instrs[i].sync(XCL_BO_SYNC_BO_TO_DEVICE); + } + + dtype *input_ptr = buffers["input"].map(); + for (int i = 0; i < EMBEDDING_DIM; i++) { + input_ptr[i] = 0x3F80; + } + buffers["input"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + + dtype *weights_1_ptr = buffers["weights_1"].map(); + for (int i = 0; i < EMBEDDING_DIM * HIDDEN_DIM; i++) { + weights_1_ptr[i] = 0x3F00; + } + buffers["weights_1"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + + dtype *weights_2_ptr = buffers["weights_2"].map(); + for (int i = 0; i < EMBEDDING_DIM * HIDDEN_DIM; i++) { + weights_2_ptr[i] = 0x3F00; + } + buffers["weights_2"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + + dtype *weights_3_ptr = buffers["weights_3"].map(); + for (int i = 0; i < HIDDEN_DIM * EMBEDDING_DIM; i++) { + weights_3_ptr[i] = 0x3F00; + } + buffers["weights_3"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + + unsigned int opcode = 3; + + std::cerr << "Running verification..." << std::endl; + xrt::runlist runlist_verify = xrt::runlist(context); + for (const auto &op : runlist_config) { + int kidx = op.kernel_idx; + if (op.buffer_names.size() == 3) { + auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), + buffers[op.buffer_names[0]], + buffers[op.buffer_names[1]], + buffers[op.buffer_names[2]]); + runlist_verify.add(run); + } else if (op.buffer_names.size() == 2) { + auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), + buffers[op.buffer_names[0]], + buffers[op.buffer_names[1]]); + runlist_verify.add(run); + } + } + runlist_verify.execute(); + runlist_verify.wait(); + + buffers["output"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); + dtype *output_verify = buffers["output"].map(); + + auto reference = load_reference("../../reference_output.bin"); + if (!reference.empty()) { + int mismatches = 0; + for (size_t i = 0; i < EMBEDDING_DIM && i < reference.size(); i++) { + if (output_verify[i] != reference[i]) { + mismatches++; + if (mismatches <= 10) { + std::cerr << "Mismatch at " << i << ": got 0x" << std::hex + << output_verify[i] << ", expected 0x" << reference[i] + << std::dec << std::endl; + } + } + } + if (mismatches == 0) { + std::cerr << "Verification PASSED: all outputs match reference" << std::endl; + } else { + std::cerr << "Verification FAILED: " << mismatches << " mismatches" + << std::endl; + } + } else { + std::cerr << "Warning: reference output not found, skipping validation" + << std::endl; + } + + xrt::runlist runlist = xrt::runlist(context); + for (const auto &op : runlist_config) { + int kidx = op.kernel_idx; + if (op.buffer_names.size() == 3) { + auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), + buffers[op.buffer_names[0]], + buffers[op.buffer_names[1]], + buffers[op.buffer_names[2]]); + runlist.add(run); + } else if (op.buffer_names.size() == 2) { + auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), + buffers[op.buffer_names[0]], + buffers[op.buffer_names[1]]); + runlist.add(run); + } + } + + std::cerr << "Running timed iterations..." << std::endl; + std::vector iteration_times; + + for (int iter = 0; iter < NUM_ITERATIONS; iter++) { + auto iter_start = std::chrono::high_resolution_clock::now(); + runlist.execute(); + runlist.wait(); + auto iter_end = std::chrono::high_resolution_clock::now(); + double iter_time = std::chrono::duration_cast(iter_end - iter_start).count(); + iteration_times.push_back(iter_time); + } + + buffers["output"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); + + // Output CSV format: variant,iteration,time_us + for (int i = 0; i < NUM_ITERATIONS; i++) { + std::cout << "runlist," << i << "," << iteration_times[i] << std::endl; + } + + return 0; +} diff --git a/programming_examples/reconfiguration/swiglu/separate_xclbins/Makefile b/programming_examples/reconfiguration/swiglu/separate_xclbins/Makefile new file mode 100644 index 00000000000..4cef156e7e3 --- /dev/null +++ b/programming_examples/reconfiguration/swiglu/separate_xclbins/Makefile @@ -0,0 +1,66 @@ +KERNEL_NAMES = swiglu_gemv_1 swiglu_silu swiglu_eltwise_mul swiglu_gemv_2 +MLIR_FILES = $(addprefix build/,$(addsuffix .mlir,$(KERNEL_NAMES))) +XCLBIN_FILES = $(addprefix build/,$(addsuffix .xclbin,$(KERNEL_NAMES))) +BIN_FILES = $(addprefix build/,$(addsuffix .bin,$(KERNEL_NAMES))) + +PEANO_CLANG = $(PEANO_INSTALL_DIR)/bin/clang++ +AIECC = aiecc.py +PEANO_PATH = $(PEANO_INSTALL_DIR) + +KERNEL_DIR = ../../kernels +OPERATOR_DIR = ../../operators +AIE_KERNELS_DIR = /scratch/roesti/mlir-aie/aie_kernels +MLIR_AIE_DIR = $(shell python3 -c "from aie.utils.config import root_path; print(root_path())") + +CLANG_FLAGS = -O2 -std=c++20 --target=aie2p-none-unknown-elf -Wno-parentheses -Wno-attributes -Wno-macro-redefined -Wno-empty-body -Wno-missing-template-arg-list-after-template-kw -I$(AIE_KERNELS_DIR) -I$(MLIR_AIE_DIR)/include +AIECC_FLAGS = --no-compile-host --no-xchesscc --no-xbridge --peano $(PEANO_PATH) +HOST_FLAGS = -std=c++23 -Wall -I/opt/xilinx/xrt/include -I/scratch/roesti/mlir-aie/runtime_lib/test_lib -L/opt/xilinx/xrt/lib -lxrt_core -lxrt_coreutil -lrt -lstdc++ + +.PHONY: all clean test + +all: build/test + +build/mv.o: $(KERNEL_DIR)/mv.cc | build + $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ + +build/mul.o: $(KERNEL_DIR)/mul.cc | build + $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ + +build/silu.o: $(KERNEL_DIR)/silu.cc | build + $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ + +build/swiglu_gemv_1.mlir: $(OPERATOR_DIR)/matrix_vector_mul.py | build + python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from matrix_vector_mul import my_matvec; from aie.iron.device import NPU2; mlir_code = my_matvec(NPU2(), 8, 8192, 2048, 1); print(str(mlir_code))' > $@ + +build/swiglu_gemv_2.mlir: $(OPERATOR_DIR)/matrix_vector_mul.py | build + python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from matrix_vector_mul import my_matvec; from aie.iron.device import NPU2; mlir_code = my_matvec(NPU2(), 8, 2048, 8192, 1); print(str(mlir_code))' > $@ + +build/swiglu_silu.mlir: $(OPERATOR_DIR)/silu.py | build + python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from silu import my_silu; from aie.iron.device import NPU2; mlir_code = my_silu(NPU2(), 8192, 8, 2, 512, 0); print(str(mlir_code))' > $@ + +build/swiglu_eltwise_mul.mlir: $(OPERATOR_DIR)/eltwise_mul.py | build + python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from eltwise_mul import my_eltwise_mul; from aie.iron.device import NPU2; mlir_code = my_eltwise_mul(NPU2(), 8192, 8, 2, 1024, 0); print(str(mlir_code))' > $@ + +build/swiglu_gemv_1.xclbin: build/swiglu_gemv_1.mlir build/mv.o + cd build && $(AIECC) $(AIECC_FLAGS) --xclbin-instance-name=swiglu_gemv_1 --xclbin-kernel-id=0x901 --aie-generate-xclbin --xclbin-name=swiglu_gemv_1.xclbin --xclbin-kernel-name=swiglu_gemv_1 --aie-generate-npu --npu-insts-name=swiglu_gemv_1.bin swiglu_gemv_1.mlir + +build/swiglu_silu.xclbin: build/swiglu_silu.mlir build/silu.o + cd build && $(AIECC) $(AIECC_FLAGS) --xclbin-instance-name=swiglu_silu --xclbin-kernel-id=0x902 --aie-generate-xclbin --xclbin-name=swiglu_silu.xclbin --xclbin-kernel-name=swiglu_silu --aie-generate-npu --npu-insts-name=swiglu_silu.bin swiglu_silu.mlir + +build/swiglu_eltwise_mul.xclbin: build/swiglu_eltwise_mul.mlir build/mul.o + cd build && $(AIECC) $(AIECC_FLAGS) --xclbin-instance-name=swiglu_eltwise_mul --xclbin-kernel-id=0x903 --aie-generate-xclbin --xclbin-name=swiglu_eltwise_mul.xclbin --xclbin-kernel-name=swiglu_eltwise_mul --aie-generate-npu --npu-insts-name=swiglu_eltwise_mul.bin swiglu_eltwise_mul.mlir + +build/swiglu_gemv_2.xclbin: build/swiglu_gemv_2.mlir build/mv.o + cd build && $(AIECC) $(AIECC_FLAGS) --xclbin-instance-name=swiglu_gemv_2 --xclbin-kernel-id=0x904 --aie-generate-xclbin --xclbin-name=swiglu_gemv_2.xclbin --xclbin-kernel-name=swiglu_gemv_2 --aie-generate-npu --npu-insts-name=swiglu_gemv_2.bin swiglu_gemv_2.mlir + +build/test: test.cpp $(XCLBIN_FILES) + g++-13 $< -o $@ $(HOST_FLAGS) + +build: + mkdir -p build + +test: build/test + cd build && ./test + +clean: + rm -rf build aie.mlir.prj diff --git a/programming_examples/reconfiguration/swiglu/separate_xclbins/test.cpp b/programming_examples/reconfiguration/swiglu/separate_xclbins/test.cpp new file mode 100644 index 00000000000..636f8e6c7c5 --- /dev/null +++ b/programming_examples/reconfiguration/swiglu/separate_xclbins/test.cpp @@ -0,0 +1,240 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xrt/xrt_bo.h" +#include "xrt/xrt_device.h" +#include "xrt/xrt_kernel.h" + +constexpr int EMBEDDING_DIM = 2048; +constexpr int HIDDEN_DIM = 8192; +constexpr int NUM_ITERATIONS = 1000; + +using dtype = uint16_t; + +struct KernelInfo { + std::string name; + std::string xclbin_file; + std::string instr_file; + uint32_t kernel_id; +}; + +struct BufferInfo { + std::string name; + size_t size; +}; + +struct Operation { + int kernel_idx; + std::vector buffer_names; +}; + +std::vector kernels_config = { + {"swiglu_gemv_1", "swiglu_gemv_1.xclbin", "swiglu_gemv_1.bin", 0x901}, + {"swiglu_silu", "swiglu_silu.xclbin", "swiglu_silu.bin", 0x902}, + {"swiglu_eltwise_mul", "swiglu_eltwise_mul.xclbin", "swiglu_eltwise_mul.bin", 0x903}, + {"swiglu_gemv_2", "swiglu_gemv_2.xclbin", "swiglu_gemv_2.bin", 0x904}, +}; + +std::vector buffers_config = { + {"input", EMBEDDING_DIM * sizeof(dtype)}, + {"weights_1", EMBEDDING_DIM * HIDDEN_DIM * sizeof(dtype)}, + {"weights_2", EMBEDDING_DIM * HIDDEN_DIM * sizeof(dtype)}, + {"weights_3", HIDDEN_DIM * EMBEDDING_DIM * sizeof(dtype)}, + {"left", HIDDEN_DIM * sizeof(dtype)}, + {"left_swished", HIDDEN_DIM * sizeof(dtype)}, + {"right", HIDDEN_DIM * sizeof(dtype)}, + {"intermediate", HIDDEN_DIM * sizeof(dtype)}, + {"output", EMBEDDING_DIM * sizeof(dtype)}, +}; + +std::vector runlist_config = { + {0, {"weights_1", "input", "left"}}, + {0, {"weights_2", "input", "right"}}, + {1, {"left", "left_swished"}}, + {2, {"left_swished", "right", "intermediate"}}, + {3, {"weights_3", "intermediate", "output"}}, +}; + +std::vector load_reference(const std::string &filename) { + std::ifstream file(filename, std::ios::binary); + if (!file) { + return {}; + } + file.seekg(0, std::ios::end); + size_t size = file.tellg(); + file.seekg(0, std::ios::beg); + std::vector data(size / sizeof(uint16_t)); + file.read(reinterpret_cast(data.data()), size); + return data; +} + +std::vector load_instr_binary(const std::string &filename) { + std::ifstream file(filename, std::ios::binary); + file.seekg(0, std::ios::end); + size_t size = file.tellg(); + file.seekg(0, std::ios::beg); + std::vector data(size / sizeof(uint32_t)); + file.read(reinterpret_cast(data.data()), size); + return data; +} + +int main(int argc, const char *argv[]) { + unsigned int device_index = 0; + auto device = xrt::device(device_index); + + std::vector xclbins; + std::vector contexts; + std::vector kernels; + + for (const auto &kernel_info : kernels_config) { + xclbins.push_back(xrt::xclbin(kernel_info.xclbin_file)); + device.register_xclbin(xclbins.back()); + contexts.push_back(xrt::hw_context(device, xclbins.back().get_uuid())); + kernels.push_back(xrt::kernel(contexts.back(), kernel_info.name)); + } + + std::map buffers; + for (const auto &buf_info : buffers_config) { + int kernel_idx = 0; + int arg_idx = 3; + for (const auto &op : runlist_config) { + for (size_t i = 0; i < op.buffer_names.size(); i++) { + if (op.buffer_names[i] == buf_info.name) { + kernel_idx = op.kernel_idx; + arg_idx = 3 + i; + goto found; + } + } + } + found: + buffers[buf_info.name] = xrt::bo(device, buf_info.size, + XRT_BO_FLAGS_HOST_ONLY, + kernels[kernel_idx].group_id(arg_idx)); + } + + std::vector bo_instrs; + std::vector> instr_data; + for (size_t i = 0; i < kernels_config.size(); i++) { + instr_data.push_back(load_instr_binary(kernels_config[i].instr_file)); + bo_instrs.push_back(xrt::bo(device, instr_data[i].size() * sizeof(uint32_t), + XCL_BO_FLAGS_CACHEABLE, kernels[i].group_id(1))); + void *buf = bo_instrs[i].map(); + memcpy(buf, instr_data[i].data(), instr_data[i].size() * sizeof(uint32_t)); + bo_instrs[i].sync(XCL_BO_SYNC_BO_TO_DEVICE); + } + + dtype *input_ptr = buffers["input"].map(); + dtype *weights_1_ptr = buffers["weights_1"].map(); + dtype *weights_2_ptr = buffers["weights_2"].map(); + dtype *weights_3_ptr = buffers["weights_3"].map(); + + for (int i = 0; i < EMBEDDING_DIM; i++) { + input_ptr[i] = 0x3F80; + } + for (int i = 0; i < EMBEDDING_DIM * HIDDEN_DIM; i++) { + weights_1_ptr[i] = 0x3F00; + weights_2_ptr[i] = 0x3F00; + } + for (int i = 0; i < HIDDEN_DIM * EMBEDDING_DIM; i++) { + weights_3_ptr[i] = 0x3F00; + } + + buffers["input"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["weights_1"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["weights_2"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["weights_3"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + + unsigned int opcode = 3; + + std::cerr << "Running verification..." << std::endl; + for (const auto &op : runlist_config) { + int kidx = op.kernel_idx; + std::vector op_buffers; + for (const auto &bname : op.buffer_names) { + op_buffers.push_back(&buffers[bname]); + } + + if (op_buffers.size() == 3) { + auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), + *op_buffers[0], *op_buffers[1], *op_buffers[2]); + run.wait2(); + } else if (op_buffers.size() == 2) { + auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), + *op_buffers[0], *op_buffers[1]); + run.wait2(); + } + } + + buffers["output"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); + dtype *output_verify = buffers["output"].map(); + + auto reference = load_reference("../../reference_output.bin"); + if (!reference.empty()) { + int mismatches = 0; + for (int i = 0; i < EMBEDDING_DIM && i < reference.size(); i++) { + if (output_verify[i] != reference[i]) { + mismatches++; + if (mismatches <= 10) { + std::cerr << "Mismatch at " << i << ": got 0x" << std::hex + << output_verify[i] << ", expected 0x" << reference[i] + << std::dec << std::endl; + } + } + } + if (mismatches == 0) { + std::cerr << "Verification PASSED: all outputs match reference" << std::endl; + } else { + std::cerr << "Verification FAILED: " << mismatches << " mismatches" + << std::endl; + } + } else { + std::cerr << "Warning: reference output not found, skipping validation" + << std::endl; + } + + std::cerr << "Running timed iterations..." << std::endl; + std::vector iteration_times; + + for (int iter = 0; iter < NUM_ITERATIONS; iter++) { + auto iter_start = std::chrono::high_resolution_clock::now(); + + for (const auto &op : runlist_config) { + int kidx = op.kernel_idx; + std::vector op_buffers; + for (const auto &bname : op.buffer_names) { + op_buffers.push_back(&buffers[bname]); + } + + if (op_buffers.size() == 3) { + auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), + *op_buffers[0], *op_buffers[1], *op_buffers[2]); + run.wait2(); + } else if (op_buffers.size() == 2) { + auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), + *op_buffers[0], *op_buffers[1]); + run.wait2(); + } + } + + auto iter_end = std::chrono::high_resolution_clock::now(); + double iter_time = std::chrono::duration_cast(iter_end - iter_start).count(); + iteration_times.push_back(iter_time); + } + + buffers["output"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); + + // Output CSV format: variant,iteration,time_us + for (int i = 0; i < NUM_ITERATIONS; i++) { + std::cout << "separate_xclbins," << i << "," << iteration_times[i] << std::endl; + } + + return 0; +} diff --git a/programming_examples/reconfiguration/visualize_results.py b/programming_examples/reconfiguration/visualize_results.py new file mode 100755 index 00000000000..b5c94f81684 --- /dev/null +++ b/programming_examples/reconfiguration/visualize_results.py @@ -0,0 +1,174 @@ +#!/usr/bin/env python3 +import sys +import csv +import matplotlib.pyplot as plt +import numpy as np +from pathlib import Path + +def read_benchmark_results(csv_file): + """Read benchmark results from CSV with format: variant,iteration,time_us""" + data = {} + + with open(csv_file, 'r') as f: + reader = csv.DictReader(f) # DictReader automatically handles headers + for row in reader: + variant = row['variant'] + time_us = float(row['time_us']) + + if variant not in data: + data[variant] = [] + data[variant].append(time_us) + + return data + +def compute_statistics(data): + """Compute mean, median, std, min, max for each variant""" + stats = {} + for variant, times in data.items(): + times_array = np.array(times) + stats[variant] = { + 'mean': np.mean(times_array), + 'median': np.median(times_array), + 'std': np.std(times_array), + 'min': np.min(times_array), + 'max': np.max(times_array), + 'q1': np.percentile(times_array, 25), + 'q3': np.percentile(times_array, 75), + 'times': times_array + } + return stats + +def plot_results(stats, output_file): + """Create bar chart with box-and-whisker overlay""" + fig, ax = plt.subplots(figsize=(12, 7)) + + variants = list(stats.keys()) + means = [stats[v]['mean'] for v in variants] + + # Color scheme + colors = ['#1f77b4', '#ff7f0e', '#2ca02c'] + + # Create bar chart for means + x_pos = np.arange(len(variants)) + bars = ax.bar(x_pos, means, color=colors, alpha=0.7, label='Mean', width=0.6) + + # Overlay box-and-whisker plots + bp_data = [stats[v]['times'] for v in variants] + bp = ax.boxplot(bp_data, positions=x_pos, widths=0.4, + patch_artist=True, + boxprops=dict(facecolor='white', edgecolor='black', linewidth=1.5, alpha=0.8), + whiskerprops=dict(color='black', linewidth=1.5), + capprops=dict(color='black', linewidth=1.5), + medianprops=dict(color='red', linewidth=2), + flierprops=dict(marker='o', markerfacecolor='red', markersize=5, + markeredgecolor='black', alpha=0.5)) + + ax.set_ylabel('Time per Iteration (μs)', fontsize=12) + ax.set_xlabel('Variant', fontsize=12) + ax.set_title('SwiGLU Performance Comparison\n(Bar=Mean, Box=Distribution)', + fontsize=14, fontweight='bold') + ax.set_xticks(x_pos) + ax.set_xticklabels(variants) + ax.grid(axis='y', alpha=0.3) + + # Add mean value labels on bars + for i, (bar, mean) in enumerate(zip(bars, means)): + height = bar.get_height() + ax.text(bar.get_x() + bar.get_width()/2., height, + f'{mean:.1f} μs', + ha='center', va='bottom', fontsize=10, fontweight='bold') + + # Add legend + from matplotlib.patches import Patch + legend_elements = [ + Patch(facecolor=colors[0], alpha=0.7, label='Mean (bar)'), + Patch(facecolor='white', edgecolor='black', label='Box: 25th-75th percentile'), + plt.Line2D([0], [0], color='red', linewidth=2, label='Median'), + plt.Line2D([0], [0], color='black', linewidth=1.5, label='Min/Max (whiskers)') + ] + ax.legend(handles=legend_elements, loc='upper right', fontsize=9) + + plt.tight_layout() + plt.savefig(output_file, dpi=300, bbox_inches='tight') + print(f"Plot saved to: {output_file}", file=sys.stderr) + +def print_statistics(stats): + """Print detailed statistics to stderr""" + print("\n" + "="*70, file=sys.stderr) + print("PERFORMANCE STATISTICS", file=sys.stderr) + print("="*70, file=sys.stderr) + print(file=sys.stderr) + + print(f"{'Variant':<20} {'Mean':<10} {'Median':<10} {'Std Dev':<10} {'Min':<10} {'Max':<10}", file=sys.stderr) + print("-"*70, file=sys.stderr) + + variants = list(stats.keys()) + for variant in variants: + s = stats[variant] + print(f"{variant:<20} {s['mean']:>8.2f} {s['median']:>8.2f} " + f"{s['std']:>8.2f} {s['min']:>8.2f} {s['max']:>8.2f}", file=sys.stderr) + + print(file=sys.stderr) + print("="*70, file=sys.stderr) + print("RELATIVE PERFORMANCE", file=sys.stderr) + print("="*70, file=sys.stderr) + print(file=sys.stderr) + + baseline_mean = stats[variants[0]]['mean'] + print(f"{'Variant':<20} {'Mean (μs)':<12} {'Relative to ' + variants[0]:<20}", file=sys.stderr) + print("-"*70, file=sys.stderr) + + for variant in variants: + mean = stats[variant]['mean'] + relative = mean / baseline_mean + print(f"{variant:<20} {mean:>10.2f} {relative:>8.2f}x", file=sys.stderr) + + print(file=sys.stderr) + print("="*70, file=sys.stderr) + print("COMPARISON ANALYSIS", file=sys.stderr) + print("="*70, file=sys.stderr) + print(file=sys.stderr) + + fastest_variant = min(variants, key=lambda v: stats[v]['mean']) + fastest_mean = stats[fastest_variant]['mean'] + + print(f"Fastest variant: {fastest_variant} ({fastest_mean:.2f} μs mean)", file=sys.stderr) + print(file=sys.stderr) + + for variant in variants: + if variant != fastest_variant: + mean = stats[variant]['mean'] + speedup = mean / fastest_mean + improvement_pct = ((mean - fastest_mean) / mean) * 100 + print(f"{fastest_variant} is {speedup:.2f}x faster than {variant}", file=sys.stderr) + print(f" → {improvement_pct:.1f}% performance improvement", file=sys.stderr) + print(file=sys.stderr) + + print("="*70, file=sys.stderr) + +def main(): + if len(sys.argv) < 2: + csv_file = "benchmark_results.csv" + else: + csv_file = sys.argv[1] + + if not Path(csv_file).exists(): + print(f"Error: {csv_file} not found", file=sys.stderr) + print("Please run the benchmark script first: ./run_benchmarks.sh", file=sys.stderr) + sys.exit(1) + + data = read_benchmark_results(csv_file) + + if len(data) == 0: + print("Error: No data found in CSV file", file=sys.stderr) + sys.exit(1) + + stats = compute_statistics(data) + + output_plot = "benchmark_results.png" + plot_results(stats, output_plot) + + print_statistics(stats) + +if __name__ == "__main__": + main() From 0e2beb67a9013352136f7c99ee10acf8176b1143 Mon Sep 17 00:00:00 2001 From: andrej Date: Sat, 22 Nov 2025 21:05:38 -0700 Subject: [PATCH 10/40] [working WIP, needs code cleanup] add pass to expand load PDI ops into write32 instructions (with minimal load pdi reset) --- .../AIEToConfiguration/AIEToConfiguration.h | 11 + .../aie/Dialect/AIEX/Transforms/AIEXPasses.h | 2 + .../aie/Dialect/AIEX/Transforms/AIEXPasses.td | 21 ++ include/aie/Targets/AIERT.h | 7 + .../AIEToConfiguration/AIEToConfiguration.cpp | 193 ++++++++++++++--- .../AIEX/Transforms/AIEExpandLoadPdi.cpp | 150 ++++++++++++++ .../AIEMaterializeRuntimeSequences.cpp | 14 +- lib/Dialect/AIEX/Transforms/CMakeLists.txt | 2 + lib/Targets/AIERT.cpp | 195 ++++++++++++++++++ python/compiler/aiecc/cl_arguments.py | 7 + python/compiler/aiecc/main.py | 49 +++-- 11 files changed, 610 insertions(+), 41 deletions(-) create mode 100644 lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp diff --git a/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h b/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h index f07f0fa0aa0..462ab8e84ac 100644 --- a/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h +++ b/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h @@ -29,6 +29,17 @@ std::optional convertTransactionBinaryToMLIR(mlir::MLIRContext *ctx, std::vector &binary); +// Generate transaction binary and insert configuration operations at a specific point +mlir::LogicalResult +generateAndInsertConfigOps(xilinx::AIE::DeviceOp device, + mlir::Operation *insertionPoint, + llvm::StringRef clElfDir = ""); + +// Generate reset operations for tiles in a device and insert them at a specific point +mlir::LogicalResult +generateAndInsertResetOps(xilinx::AIE::DeviceOp device, + mlir::Operation *insertionPoint); + } // namespace xilinx::AIE #endif // AIE_CONVERSION_AIETOCONFIGURATION_AIETOCONFIGURATION_H diff --git a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h index 3b5de93e46d..730123f3052 100644 --- a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h +++ b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h @@ -52,6 +52,8 @@ std::unique_ptr> createAIETxnToControlPacketPass(); std::unique_ptr> createAIELegalizeControlPacketPass(); +std::unique_ptr> +createAIEExpandLoadPdiPass(); /// Generate the code for registering passes. #define GEN_PASS_REGISTRATION diff --git a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td index a4f2ade7b65..9cc9f966f8b 100644 --- a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td +++ b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td @@ -271,4 +271,25 @@ def AIELegalizeControlPacket : Pass<"aie-legalize-ctrl-packet", "AIE::DeviceOp"> "xilinx::AIEX::AIEXDialect", ]; } + +def AIEExpandLoadPdi : Pass<"aie-expand-load-pdi", "mlir::ModuleOp"> { + let summary = "Expand load_pdi operations to explicit configuration sequences"; + let description = [{ + This pass transforms `load_pdi { device_ref = @device }` operations by: + 1. Creating an empty device `@empty` if it doesn't exist + 2. Replacing the load_pdi with `load_pdi { device_ref = @empty }` + 3. Following it with explicit write32/blockwrite configuration operations + + The configuration operations are generated by converting the referenced + device's configuration to a transaction binary and then disassembling it + into MLIR operations. + }]; + + let constructor = "xilinx::AIEX::createAIEExpandLoadPdiPass()"; + let dependentDialects = [ + "mlir::memref::MemRefDialect", + "xilinx::AIE::AIEDialect", + "xilinx::AIEX::AIEXDialect", + ]; +} #endif diff --git a/include/aie/Targets/AIERT.h b/include/aie/Targets/AIERT.h index e36eace870a..da4b480efcb 100644 --- a/include/aie/Targets/AIERT.h +++ b/include/aie/Targets/AIERT.h @@ -46,6 +46,13 @@ struct AIERTControl { void startTransaction(); void dmaUpdateBdAddr(int col, int row, size_t addr, size_t bdId); std::vector exportSerializedTransaction(); + mlir::LogicalResult resetPartition(); + mlir::LogicalResult resetDMA(int col, int row, bool on); + mlir::LogicalResult resetCore(int col, int row); + mlir::LogicalResult resetCoreUnreset(int col, int row); + mlir::LogicalResult resetSwitch(int col, int row); + mlir::LogicalResult resetLocks(int col, int row, int numLocks); + mlir::LogicalResult resetPerfCounters(int col, int row); private: const AIETargetModel &targetModel; diff --git a/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp b/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp index f66e71a8f56..e29888d1849 100644 --- a/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp +++ b/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp @@ -631,7 +631,8 @@ enum OutputType { static LogicalResult convertTransactionOpsToMLIR( OpBuilder builder, AIE::DeviceOp device, OutputType outputType, - std::vector &operations) { + std::vector &operations, + Operation *insertionPoint = nullptr) { auto loc = builder.getUnknownLoc(); @@ -647,9 +648,9 @@ static LogicalResult convertTransactionOpsToMLIR( std::vector data32(d, d + size); int id = 0; - std::string name = "blockwrite_data"; + std::string name = "config_blockwrite_data"; while (device.lookupSymbol(name)) - name = "blockwrite_data_" + std::to_string(id++); + name = "config_blockwrite_data_" + std::to_string(id++); MemRefType memrefType = MemRefType::get({size}, builder.getI32Type()); TensorType tensorType = RankedTensorType::get({size}, builder.getI32Type()); @@ -659,27 +660,32 @@ static LogicalResult convertTransactionOpsToMLIR( global_data.push_back(global); } - // search for aiex.configure ops in runtime sequences by walking the device - // and collect them in a vector. If there are none, create a new runtime - // sequence. Otherwise assume the insertion point is the first aiex.configure - // op. + // If an explicit insertion point is provided, use it for the config ops SmallVector configureOps; - device.walk([&](AIEX::ConfigureOp op) { configureOps.push_back(op); }); - - if (configureOps.empty()) { - - // create aiex.runtime_sequence - int id = 0; - std::string seq_name = "configure"; - while (device.lookupSymbol(seq_name)) - seq_name = "configure" + std::to_string(id++); - StringAttr seq_sym_name = builder.getStringAttr(seq_name); - auto seq = AIE::RuntimeSequenceOp::create(builder, loc, seq_sym_name); - seq.getBody().push_back(new Block); - - builder.setInsertionPointToStart(&seq.getBody().front()); + if (insertionPoint) { + builder.setInsertionPointAfter(insertionPoint); } else { - builder.setInsertionPoint(configureOps.front()); + // search for aiex.configure ops in runtime sequences by walking the device + // and collect them in a vector. If there are none, create a new runtime + // sequence. Otherwise assume the insertion point is the first aiex.configure + // op. + device.walk([&](AIEX::ConfigureOp op) { configureOps.push_back(op); }); + + if (configureOps.empty()) { + + // create aiex.runtime_sequence + int id = 0; + std::string seq_name = "configure"; + while (device.lookupSymbol(seq_name)) + seq_name = "configure" + std::to_string(id++); + StringAttr seq_sym_name = builder.getStringAttr(seq_name); + auto seq = builder.create(loc, seq_sym_name); + seq.getBody().push_back(new Block); + + builder.setInsertionPointToStart(&seq.getBody().front()); + } else { + builder.setInsertionPoint(configureOps.front()); + } } // create the txn ops @@ -696,7 +702,7 @@ static LogicalResult convertTransactionOpsToMLIR( llvm_unreachable("bad output type"); } - if (!configureOps.empty()) { + if (!configureOps.empty() && !insertionPoint) { // splice the body into the current insertion point builder.getBlock()->getOperations().splice( builder.getInsertionPoint(), @@ -850,3 +856,144 @@ std::unique_ptr> xilinx::AIE::createConvertAIEToControlPacketsPass() { return std::make_unique(); } + +// Public API to generate transaction binary and insert configuration ops +mlir::LogicalResult +xilinx::AIE::generateAndInsertConfigOps(xilinx::AIE::DeviceOp device, + mlir::Operation *insertionPoint, + llvm::StringRef clElfDir) { + const AIETargetModel &targetModel = + (const AIETargetModel &)device.getTargetModel(); + + if (!targetModel.hasProperty(AIETargetModel::IsNPU)) + return failure(); + + bool aieSim = false; + bool xaieDebug = false; + + AIERTControl ctl(targetModel); + if (failed(ctl.setIOBackend(aieSim, xaieDebug))) + return failure(); + + // start collecting transactions + ctl.startTransaction(); + + bool generateElfs = true; + if (failed(generateTransactions(ctl, clElfDir, device, aieSim, generateElfs, + true, true))) + return failure(); + + // Export the transactions to a binary buffer + std::vector txn_data = ctl.exportSerializedTransaction(); + + // parse the binary data + std::vector operations; + if (!parseTransactionBinary(txn_data, operations)) { + llvm::errs() << "Failed to parse binary\n"; + return failure(); + } + + // Get the parent device for the insertion point + auto parentDevice = insertionPoint->getParentOfType(); + if (!parentDevice) { + llvm::errs() << "Insertion point must be within a DeviceOp\n"; + return failure(); + } + + OpBuilder builder(parentDevice.getBodyRegion()); + + // convert the parsed ops to MLIR, inserting after the provided point + if (failed(convertTransactionOpsToMLIR(builder, parentDevice, + OutputType::Transaction, operations, + insertionPoint))) + return failure(); + + return success(); +} + +// Generate reset operations for all tiles used in the device +mlir::LogicalResult +xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, + mlir::Operation *insertionPoint) { + const AIETargetModel &targetModel = + (const AIETargetModel &)device.getTargetModel(); + + if (!targetModel.hasProperty(AIETargetModel::IsNPU)) + return failure(); + + AIERTControl ctl(targetModel); + bool aieSim = false; + bool xaieDebug = false; + + if (failed(ctl.setIOBackend(aieSim, xaieDebug))) + return failure(); + + ctl.startTransaction(); + + // Reset all tiles in the device using target model dimensions + int numCols = targetModel.columns(); + int numRows = targetModel.rows(); + + // Reset cores and DMAs first + for (int col = 0; col < numCols; col++) { + for (int row = 0; row < numRows; row++) { + if (targetModel.isShimNOCTile(col, row)) { + // Shim NOC tiles - reset switches and perf counters + if (failed(ctl.resetSwitch(col, row))) + return failure(); + } else if (targetModel.isMemTile(col, row)) { + // Mem tiles - reset DMA, switches, locks, perf counters + if (failed(ctl.resetDMA(col, row, false))) + return failure(); + if (failed(ctl.resetSwitch(col, row))) + return failure(); + if (failed(ctl.resetLocks(col, row, 64))) + return failure(); + } else if (targetModel.isCoreTile(col, row)) { + // Core tiles - reset core, DMA, switches, locks, perf counters + if (failed(ctl.resetCore(col, row))) + return failure(); + if (failed(ctl.resetDMA(col, row, false))) + return failure(); + if (failed(ctl.resetSwitch(col, row))) + return failure(); + if (failed(ctl.resetLocks(col, row, 16))) + return failure(); + // Unreset the core after resetting + // if (failed(ctl.resetCoreUnreset(col, row))) + // return failure(); + } + } + } + + // Reset partition - now uses direct register writes instead of XAie_RunOp + // if (failed(ctl.resetPartition())) + // return failure(); + + // Export the reset transactions + std::vector txn_data = ctl.exportSerializedTransaction(); + + // Parse the binary data + std::vector operations; + if (!parseTransactionBinary(txn_data, operations)) { + llvm::errs() << "Failed to parse reset transaction binary\n"; + return failure(); + } + + // Get the parent device for the insertion point + auto parentDevice = insertionPoint->getParentOfType(); + if (!parentDevice) { + llvm::errs() << "Insertion point must be within a DeviceOp\n"; + return failure(); + } + + OpBuilder builder(parentDevice.getBodyRegion()); + + // Convert the parsed reset ops to MLIR, inserting after the provided point + if (failed(convertTransactionOpsToMLIR(builder, parentDevice, + OutputType::Transaction, operations, + insertionPoint))) + return failure(); + + return success(); +} diff --git a/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp b/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp new file mode 100644 index 00000000000..2ed37d3b2c6 --- /dev/null +++ b/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp @@ -0,0 +1,150 @@ +//===- AIEExpandLoadPdi.cpp -------------------------------------*- C++ -*-===// +// +// This file is licensed under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// (c) Copyright 2025 Advanced Micro Devices Inc. +// +//===----------------------------------------------------------------------===// + +#include "aie/Conversion/AIEToConfiguration/AIEToConfiguration.h" +#include "aie/Dialect/AIE/IR/AIEDialect.h" +#include "aie/Dialect/AIEX/IR/AIEXDialect.h" +#include "aie/Dialect/AIEX/Transforms/AIEXPasses.h" + +#include "mlir/Dialect/MemRef/IR/MemRef.h" +#include "mlir/IR/PatternMatch.h" +#include "mlir/Pass/Pass.h" +#include "mlir/Transforms/DialectConversion.h" +#include "mlir/Transforms/GreedyPatternRewriteDriver.h" + +#define DEBUG_TYPE "aie-expand-load-pdi" + +using namespace mlir; +using namespace xilinx; +using namespace xilinx::AIEX; + +namespace { + +struct ExpandLoadPdiPattern : public OpRewritePattern { + using OpRewritePattern::OpRewritePattern; + + LogicalResult matchAndRewrite(NpuLoadPdiOp loadPdiOp, + PatternRewriter &rewriter) const override { + // Only process load_pdi ops that reference a device + auto deviceRefAttr = loadPdiOp.getDeviceRefAttr(); + if (!deviceRefAttr) + return failure(); + + // Look up the referenced device + auto moduleOp = loadPdiOp->getParentOfType(); + if (!moduleOp) + return failure(); + + auto referencedDevice = moduleOp.lookupSymbol(deviceRefAttr); + if (!referencedDevice) { + loadPdiOp.emitError("Referenced symbol '") + << deviceRefAttr.getValue() << "' is not a device"; + return failure(); + } + + // If already referencing an empty device, don't transform + if (referencedDevice.getSymName().starts_with("empty")) + return failure(); + + // Create a unique empty device for this reset to avoid PDI address caching + OpBuilder::InsertionGuard guard(rewriter); + rewriter.setInsertionPointToStart(moduleOp.getBody()); + + // Find a unique name for the empty device + std::string emptyName; + int emptyIndex = 0; + do { + emptyName = "empty_" + std::to_string(emptyIndex++); + } while (moduleOp.lookupSymbol(emptyName)); + + auto deviceType = referencedDevice.getDevice(); + auto loc = rewriter.getUnknownLoc(); + auto emptyDevice = rewriter.create( + loc, deviceType, rewriter.getStringAttr(emptyName)); + emptyDevice.getRegion().emplaceBlock(); + + // Add empty cores in all columns to trigger column reset + Block *deviceBlock = &emptyDevice.getRegion().front(); + + //const auto &targetModel = referencedDevice.getTargetModel(); + //int numCols = targetModel.columns(); + //for (int col = 0; col < numCols; col++) { + // rewriter.setInsertionPointToEnd(deviceBlock); + // auto tile = rewriter.create(loc, col, 2); + // rewriter.setInsertionPointToEnd(deviceBlock); + // auto core = rewriter.create(loc, tile.getResult()); + // Region &coreRegion = core.getBody(); + // Block *coreBlock = rewriter.createBlock(&coreRegion); + // rewriter.setInsertionPointToEnd(coreBlock); + // rewriter.create(loc); + //} + rewriter.setInsertionPointToEnd(deviceBlock); + rewriter.create(loc); + + // Create new load_pdi operation referencing the empty device + rewriter.setInsertionPoint(loadPdiOp); + auto newLoadPdi = rewriter.create( + loadPdiOp.getLoc(), FlatSymbolRefAttr::get(emptyDevice.getSymNameAttr()), + loadPdiOp.getIdAttr(), loadPdiOp.getSizeAttr(), + loadPdiOp.getAddressAttr()); + + // Generate and insert reset operations after the empty load_pdi + // if (failed(xilinx::AIE::generateAndInsertResetOps( + // referencedDevice, newLoadPdi.getOperation()))) { + // loadPdiOp.emitError("Failed to generate reset operations"); + // return failure(); + // } + + // Generate and insert the configuration operations after the reset ops + // Find the last operation inserted (which should be from reset ops) + Operation *lastResetOp = newLoadPdi.getOperation(); + Operation *nextOp = newLoadPdi->getNextNode(); + while (nextOp && nextOp != loadPdiOp.getOperation()) { + lastResetOp = nextOp; + nextOp = nextOp->getNextNode(); + } + + if (failed(xilinx::AIE::generateAndInsertConfigOps( + referencedDevice, lastResetOp, ""))) { + loadPdiOp.emitError("Failed to generate configuration operations"); + return failure(); + } + + // Remove the original load_pdi operation + rewriter.eraseOp(loadPdiOp); + + return success(); + } +}; + +struct AIEExpandLoadPdiPass + : public AIEExpandLoadPdiBase { + void getDependentDialects(DialectRegistry ®istry) const override { + registry.insert(); + } + + void runOnOperation() override { + auto module = getOperation(); + + RewritePatternSet patterns(&getContext()); + patterns.add(&getContext()); + + if (failed(applyPatternsGreedily(module, std::move(patterns)))) { + signalPassFailure(); + } + } +}; + +} // namespace + +std::unique_ptr> +xilinx::AIEX::createAIEExpandLoadPdiPass() { + return std::make_unique(); +} diff --git a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp index a89178c6673..6d663b35bf8 100644 --- a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp @@ -96,12 +96,16 @@ struct InsertLoadPdiForConfigurePattern : RewritePattern { return failure(); } - Block &configureBlock = configureOp.getBody().front(); - rewriter.setInsertionPointToStart(&configureBlock); + Block *configureBlock; + if (configureOp.getBody().empty()) { + configureBlock = rewriter.createBlock(&configureOp.getBody()); + } else { + configureBlock = &configureOp.getBody().front(); + } + rewriter.setInsertionPointToStart(configureBlock); rewriter.create( - configureOp.getLoc(), - FlatSymbolRefAttr::get(referencedDevice.getSymNameAttr()) - ); + configureOp.getLoc(), + FlatSymbolRefAttr::get(referencedDevice.getSymNameAttr())); return success(); } diff --git a/lib/Dialect/AIEX/Transforms/CMakeLists.txt b/lib/Dialect/AIEX/Transforms/CMakeLists.txt index c0dffbe3d23..5818ea8478d 100644 --- a/lib/Dialect/AIEX/Transforms/CMakeLists.txt +++ b/lib/Dialect/AIEX/Transforms/CMakeLists.txt @@ -23,6 +23,7 @@ add_mlir_dialect_library(AIEXTransforms AIELowerSetLock.cpp AIETransformBfpTypes.cpp AIETxnToControlPacket.cpp + AIEExpandLoadPdi.cpp ADDITIONAL_HEADER_DIRS ${AIE_BINARY_DIR}/include @@ -34,6 +35,7 @@ add_mlir_dialect_library(AIEXTransforms LINK_LIBS PUBLIC AIE + MLIRAIEToConfiguration AIEXUtils MLIRIR MLIRPass diff --git a/lib/Targets/AIERT.cpp b/lib/Targets/AIERT.cpp index f62ec0cc9a5..839404a9807 100644 --- a/lib/Targets/AIERT.cpp +++ b/lib/Targets/AIERT.cpp @@ -20,7 +20,9 @@ extern "C" { #include "xaiengine/xaie_interrupt.h" #include "xaiengine/xaie_locks.h" #include "xaiengine/xaie_mem.h" +#include "xaiengine/xaie_perfcnt.h" #include "xaiengine/xaie_plif.h" +#include "xaiengine/xaie_reset.h" #include "xaiengine/xaie_ss.h" #include "xaiengine/xaie_txn.h" #include "xaiengine/xaiegbl.h" @@ -843,6 +845,199 @@ LogicalResult xilinx::AIE::AIERTControl::addAieElf(uint8_t col, uint8_t row, return success(); } +LogicalResult xilinx::AIE::AIERTControl::resetPartition() { + // Manual implementation of XAie_ResetPartition that works in transaction mode. + // XAie_ResetPartition calls XAie_RunOp which doesn't work with DISABLE_AUTO_FLUSH. + // We only include the register writes, skipping the XAie_RunOp calls for: + // - XAIE_BACKEND_OP_SET_PROTREG (protected register enable/disable) + // - XAIE_BACKEND_OP_ASSERT_SHIMRST (hardware SHIM reset signal) + + XAie_DevInst *DevInst = &aiert->devInst; + u8 TileType; + const XAie_PlIfMod *PlIfMod; + + // 1. Disable clock buffers for all columns + for (u8 C = 0; C < DevInst->NumCols; C++) { + XAie_LocType Loc = XAie_TileLoc(C, 0); + TileType = DevInst->DevOps->GetTTypefromLoc(DevInst, Loc); + PlIfMod = DevInst->DevProp.DevMod[TileType].PlIfMod; + const XAie_ShimClkBufCntr *ClkBufCntr = PlIfMod->ClkBufCntr; + + u64 RegAddr = ClkBufCntr->RegOff + _XAie_GetTileAddr(DevInst, 0U, Loc.Col); + u32 FldVal = XAie_SetField(XAIE_DISABLE, ClkBufCntr->ClkBufEnable.Lsb, + ClkBufCntr->ClkBufEnable.Mask); + TRY_XAIE_API_LOGICAL_RESULT(XAie_MaskWrite32, DevInst, RegAddr, + ClkBufCntr->ClkBufEnable.Mask, FldVal); + } + + // 2. Assert column reset for all columns + for (u8 C = 0; C < DevInst->NumCols; C++) { + XAie_LocType Loc = XAie_TileLoc(C, 0); + TileType = DevInst->DevOps->GetTTypefromLoc(DevInst, Loc); + PlIfMod = DevInst->DevProp.DevMod[TileType].PlIfMod; + + u64 RegAddr = PlIfMod->ColRstOff + _XAie_GetTileAddr(DevInst, Loc.Row, Loc.Col); + u32 FldVal = XAie_SetField(XAIE_ENABLE, PlIfMod->ColRst.Lsb, PlIfMod->ColRst.Mask); + TRY_XAIE_API_LOGICAL_RESULT(XAie_Write32, DevInst, RegAddr, FldVal); + } + + // 3. Re-enable clock buffers for all columns + for (u8 C = 0; C < DevInst->NumCols; C++) { + XAie_LocType Loc = XAie_TileLoc(C, 0); + TileType = DevInst->DevOps->GetTTypefromLoc(DevInst, Loc); + PlIfMod = DevInst->DevProp.DevMod[TileType].PlIfMod; + const XAie_ShimClkBufCntr *ClkBufCntr = PlIfMod->ClkBufCntr; + + u64 RegAddr = ClkBufCntr->RegOff + _XAie_GetTileAddr(DevInst, 0U, Loc.Col); + u32 FldVal = XAie_SetField(XAIE_ENABLE, ClkBufCntr->ClkBufEnable.Lsb, + ClkBufCntr->ClkBufEnable.Mask); + TRY_XAIE_API_LOGICAL_RESULT(XAie_MaskWrite32, DevInst, RegAddr, + ClkBufCntr->ClkBufEnable.Mask, FldVal); + } + + // 4. Set SHIM reset registers (enable then disable) + // First set all SHIM reset bits to enable + for (u8 C = 0; C < DevInst->NumCols; C++) { + XAie_LocType Loc = XAie_TileLoc(C, 0); + TileType = DevInst->DevOps->GetTTypefromLoc(DevInst, Loc); + PlIfMod = DevInst->DevProp.DevMod[TileType].PlIfMod; + const XAie_ShimRstMod *ShimTileRst = PlIfMod->ShimTileRst; + + u64 RegAddr = ShimTileRst->RegOff + _XAie_GetTileAddr(DevInst, Loc.Row, Loc.Col); + u32 FldVal = XAie_SetField(XAIE_ENABLE, ShimTileRst->RstCntr.Lsb, + ShimTileRst->RstCntr.Mask); + TRY_XAIE_API_LOGICAL_RESULT(XAie_Write32, DevInst, RegAddr, FldVal); + } + + // Note: Skipping XAie_RunOp(XAIE_BACKEND_OP_ASSERT_SHIMRST) calls + // These are hardware backend operations that can't be recorded in transactions + + // Then set all SHIM reset bits to disable + for (u8 C = 0; C < DevInst->NumCols; C++) { + XAie_LocType Loc = XAie_TileLoc(C, 0); + TileType = DevInst->DevOps->GetTTypefromLoc(DevInst, Loc); + PlIfMod = DevInst->DevProp.DevMod[TileType].PlIfMod; + const XAie_ShimRstMod *ShimTileRst = PlIfMod->ShimTileRst; + + u64 RegAddr = ShimTileRst->RegOff + _XAie_GetTileAddr(DevInst, Loc.Row, Loc.Col); + u32 FldVal = XAie_SetField(XAIE_DISABLE, ShimTileRst->RstCntr.Lsb, + ShimTileRst->RstCntr.Mask); + TRY_XAIE_API_LOGICAL_RESULT(XAie_Write32, DevInst, RegAddr, FldVal); + } + + // 5. Block NSU AXI MM errors for all SHIM NOC tiles + // Note: Skipping XAie_RunOp(XAIE_BACKEND_OP_SET_PROTREG) to enable protected regs + for (u8 C = 0; C < DevInst->NumCols; C++) { + XAie_LocType Loc = XAie_TileLoc(C, 0); + TileType = DevInst->DevOps->GetTTypefromLoc(DevInst, Loc); + + if (TileType != XAIEGBL_TILE_TYPE_SHIMNOC) { + continue; + } + + PlIfMod = DevInst->DevProp.DevMod[TileType].PlIfMod; + const XAie_ShimNocAxiMMConfig *ShimNocAxiMM = PlIfMod->ShimNocAxiMM; + + u64 RegAddr = ShimNocAxiMM->RegOff + _XAie_GetTileAddr(DevInst, Loc.Row, Loc.Col); + u32 FldVal = XAie_SetField(XAIE_ENABLE, ShimNocAxiMM->NsuSlvErr.Lsb, + ShimNocAxiMM->NsuSlvErr.Mask); + FldVal |= XAie_SetField(XAIE_ENABLE, ShimNocAxiMM->NsuDecErr.Lsb, + ShimNocAxiMM->NsuDecErr.Mask); + TRY_XAIE_API_LOGICAL_RESULT(XAie_Write32, DevInst, RegAddr, FldVal); + } + // Note: Skipping XAie_RunOp(XAIE_BACKEND_OP_SET_PROTREG) to disable protected regs + + // 6. Disable clock buffers again + for (u8 C = 0; C < DevInst->NumCols; C++) { + XAie_LocType Loc = XAie_TileLoc(C, 0); + TileType = DevInst->DevOps->GetTTypefromLoc(DevInst, Loc); + PlIfMod = DevInst->DevProp.DevMod[TileType].PlIfMod; + const XAie_ShimClkBufCntr *ClkBufCntr = PlIfMod->ClkBufCntr; + + u64 RegAddr = ClkBufCntr->RegOff + _XAie_GetTileAddr(DevInst, 0U, Loc.Col); + u32 FldVal = XAie_SetField(XAIE_DISABLE, ClkBufCntr->ClkBufEnable.Lsb, + ClkBufCntr->ClkBufEnable.Mask); + TRY_XAIE_API_LOGICAL_RESULT(XAie_MaskWrite32, DevInst, RegAddr, + ClkBufCntr->ClkBufEnable.Mask, FldVal); + } + + return success(); +} + +LogicalResult xilinx::AIE::AIERTControl::resetDMA(int col, int row, bool on) { + auto tileLoc = XAie_TileLoc(col, row); + XAie_DmaDesc dmaTileBd; + TRY_XAIE_API_LOGICAL_RESULT(XAie_DmaDescInit, &aiert->devInst, &dmaTileBd, tileLoc); + TRY_XAIE_API_LOGICAL_RESULT(XAie_DmaDisableBd, &dmaTileBd); + TRY_XAIE_API_LOGICAL_RESULT(XAie_DmaChannelResetAll, &aiert->devInst, tileLoc, on ? XAie_DmaChReset::DMA_CHANNEL_UNRESET : XAie_DmaChReset::DMA_CHANNEL_RESET); + return success(); +} + +LogicalResult xilinx::AIE::AIERTControl::resetCore(int col, int row) { + auto tileLoc = XAie_TileLoc(col, row); + TRY_XAIE_API_LOGICAL_RESULT(XAie_CoreReset, &aiert->devInst, tileLoc); + return success(); +} + +LogicalResult xilinx::AIE::AIERTControl::resetSwitch(int col, int row) { + XAie_LocType tileLoc = XAie_TileLoc(col, row); + + // Reset all combinations of input/output routing in the switchbox + for (auto endpoint_a : WIRE_BUNDLE_TO_STRM_SW_PORT_TYPE) { + for (auto endpoint_b : WIRE_BUNDLE_TO_STRM_SW_PORT_TYPE) { + unsigned n_a_connections = targetModel.getNumSourceSwitchboxConnections(col, row, endpoint_a.first); + unsigned n_b_connections = targetModel.getNumDestSwitchboxConnections(col, row, endpoint_b.first); + for (unsigned a_index = 0; a_index < n_a_connections; a_index++) { + for (unsigned b_index = 0; b_index < n_b_connections; b_index++) { + if (!targetModel.isLegalTileConnection(col, row, endpoint_a.first, a_index, endpoint_b.first, b_index)) { + continue; + } + TRY_XAIE_API_FATAL_ERROR(XAie_StrmConnCctDisable, &aiert->devInst, tileLoc, endpoint_a.second, a_index, endpoint_b.second, b_index); + } + } + } + } + + return success(); +} + +LogicalResult xilinx::AIE::AIERTControl::resetCoreUnreset(int col, int row) { + auto tileLoc = XAie_TileLoc(col, row); + TRY_XAIE_API_LOGICAL_RESULT(XAie_CoreUnreset, &aiert->devInst, tileLoc); + return success(); +} + +LogicalResult xilinx::AIE::AIERTControl::resetLocks(int col, int row, int numLocks) { + auto tileLoc = XAie_TileLoc(col, row); + // Reset all locks to value 0 + for (int lockID = 0; lockID < numLocks; lockID++) { + XAie_Lock lock; + lock.LockId = lockID; + lock.LockVal = 0; + TRY_XAIE_API_LOGICAL_RESULT(XAie_LockSetValue, &aiert->devInst, tileLoc, lock); + } + return success(); +} + +LogicalResult xilinx::AIE::AIERTControl::resetPerfCounters(int col, int row) { + auto tileLoc = XAie_TileLoc(col, row); + // Reset performance counters in all modules + // Try core module counters (if applicable) + for (int counterId = 0; counterId < 4; counterId++) { + // Ignore errors as not all tiles have all counter types + (void)XAie_PerfCounterReset(&aiert->devInst, tileLoc, XAIE_CORE_MOD, counterId); + } + // Try mem module counters + for (int counterId = 0; counterId < 4; counterId++) { + (void)XAie_PerfCounterReset(&aiert->devInst, tileLoc, XAIE_MEM_MOD, counterId); + } + // Try PL module counters (for shim tiles) + for (int counterId = 0; counterId < 4; counterId++) { + (void)XAie_PerfCounterReset(&aiert->devInst, tileLoc, XAIE_PL_MOD, counterId); + } + return success(); +} + LogicalResult xilinx::AIE::AIERTControl::addAieElfs(DeviceOp &targetOp, const StringRef elfPath, bool aieSim) { diff --git a/python/compiler/aiecc/cl_arguments.py b/python/compiler/aiecc/cl_arguments.py index 24657b49f32..f705956e92f 100644 --- a/python/compiler/aiecc/cl_arguments.py +++ b/python/compiler/aiecc/cl_arguments.py @@ -387,6 +387,13 @@ def parse_args(args=None): default="aie.elf", help="Output filename for full ELF (default: aie.elf)", ) + parser.add_argument( + "--expand-load-pdis", + dest="expand_load_pdis", + default=False, + action="store_true", + help="Expand load_pdi operations into explicit device reset and configuration sequences", + ) opts = parser.parse_args(args) return opts diff --git a/python/compiler/aiecc/main.py b/python/compiler/aiecc/main.py index 8000559daaf..1b1e7ba30a8 100644 --- a/python/compiler/aiecc/main.py +++ b/python/compiler/aiecc/main.py @@ -148,20 +148,26 @@ def _create_aie_lower_to_llvm_pipeline( AIE_LOWER_TO_LLVM = _create_aie_lower_to_llvm_pipeline # pipeline to lower and legalize runtime sequence for NPU -NPU_LOWERING_PIPELINE = ( - Pipeline() - .add_pass("aie-materialize-runtime-sequences") - .Nested( - "aie.device", +def _create_npu_lowering_pipeline(expand_load_pdis=False): + pipeline = ( Pipeline() - .add_pass("aie-materialize-bd-chains") - .add_pass("aie-substitute-shim-dma-allocations") - .add_pass("aie-assign-runtime-sequence-bd-ids") - .add_pass("aie-dma-tasks-to-npu") - .add_pass("aie-dma-to-npu") - .add_pass("aie-lower-set-lock"), + .add_pass("aie-materialize-runtime-sequences") + .Nested( + "aie.device", + Pipeline() + .add_pass("aie-materialize-bd-chains") + .add_pass("aie-substitute-shim-dma-allocations") + .add_pass("aie-assign-runtime-sequence-bd-ids") + .add_pass("aie-dma-tasks-to-npu") + .add_pass("aie-dma-to-npu") + .add_pass("aie-lower-set-lock"), + ) ) -) + if expand_load_pdis: + pipeline = pipeline.add_pass("aie-expand-load-pdi") + return pipeline + +NPU_LOWERING_PIPELINE = _create_npu_lowering_pipeline() async def read_file_async(file_path: str) -> str: @@ -964,6 +970,10 @@ async def generate_full_elf_config_json( for device_op, device_name in devices: sequences = generate_runtime_sequences_list(device_op) + # Skip devices with no runtime sequences (e.g., @empty device) + if not sequences: + continue + max_arg_count = max( len(seq_op.body.blocks[0].arguments) for seq_op, seq_name in sequences ) @@ -1697,7 +1707,8 @@ async def run_flow(self): input_physical_with_elfs_module = Module.parse( await read_file_async(input_physical_with_elfs) ) - pass_pipeline = NPU_LOWERING_PIPELINE.materialize(module=True) + npu_pipeline = _create_npu_lowering_pipeline(opts.expand_load_pdis) + pass_pipeline = npu_pipeline.materialize(module=True) npu_insts_file = self.prepend_tmp(f"npu_insts.mlir") self.progress_bar.update( task3, advance=1, command=pass_pipeline[0:30] @@ -1708,6 +1719,17 @@ async def run_flow(self): npu_insts_file, self.opts.verbose, ) + + # If expand_load_pdis is enabled, the pass may have created new devices + # (e.g., @empty), so we need to regenerate the device list from the transformed module + if opts.expand_load_pdis: + devices = generate_devices_list(npu_insts_module) + input_physical_with_expanded = self.prepend_tmp("input_physical_with_expanded.mlir") + await write_file_async(str(npu_insts_module), input_physical_with_expanded) + # Update both input_physical and input_physical_with_elfs to point to the file with expanded devices + input_physical = input_physical_with_expanded + input_physical_with_elfs = input_physical_with_expanded + if opts.generate_full_elf: device_to_id_mapping = create_device_id_mapping(devices) assign_load_pdi_ids( @@ -1715,6 +1737,7 @@ async def run_flow(self): ) transformed_mlir_path = self.prepend_tmp("npu_insts_with_pid_ids.mlir") await write_file_async(str(npu_insts_module), transformed_mlir_path) + self.progress_bar.update(task3, advance=1) # 4.) Generate compilation artifacts for each device From 61980d036fb5028789be84ccb3b2b62378b8ea49 Mon Sep 17 00:00:00 2001 From: andrej Date: Sat, 22 Nov 2025 21:06:46 -0700 Subject: [PATCH 11/40] add fused transaction write32 benchmark --- .../reconfiguration/run_benchmarks.sh | 2 +- .../fused_transactions_loadpdi/test.cpp | 2 +- .../fused_transactions_write32s/Makefile | 58 ++++++ .../combine_mlir.py | 167 ++++++++++++++++++ .../fused_transactions_write32s/test.cpp | 148 ++++++++++++++++ .../reconfiguration/visualize_results.py | 51 +++--- 6 files changed, 403 insertions(+), 25 deletions(-) create mode 100644 programming_examples/reconfiguration/swiglu/fused_transactions_write32s/Makefile create mode 100644 programming_examples/reconfiguration/swiglu/fused_transactions_write32s/combine_mlir.py create mode 100644 programming_examples/reconfiguration/swiglu/fused_transactions_write32s/test.cpp diff --git a/programming_examples/reconfiguration/run_benchmarks.sh b/programming_examples/reconfiguration/run_benchmarks.sh index e8ffaeb1187..adbc3f443c2 100755 --- a/programming_examples/reconfiguration/run_benchmarks.sh +++ b/programming_examples/reconfiguration/run_benchmarks.sh @@ -5,7 +5,7 @@ OUTPUT_CSV="benchmark_results.csv" # Write CSV header echo "variant,iteration,time_us" > "$OUTPUT_CSV" -VARIANTS=("separate_xclbins" "runlist" "fused_transactions_loadpdi") +VARIANTS=("separate_xclbins" "runlist" "fused_transactions_loadpdi" "fused_transactions_write32s") for variant in "${VARIANTS[@]}"; do echo "Running benchmark for $variant..." >&2 diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/test.cpp b/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/test.cpp index 6225f253da9..68127a7259f 100644 --- a/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/test.cpp +++ b/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/test.cpp @@ -141,7 +141,7 @@ int main(int argc, const char *argv[]) { // Output CSV format: variant,iteration,time_us for (int i = 0; i < NUM_ITERATIONS; i++) { - std::cout << "fused_transactions," << i << "," << iteration_times[i] << std::endl; + std::cout << "fused_transactions_loadpdi," << i << "," << iteration_times[i] << std::endl; } return 0; diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/Makefile b/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/Makefile new file mode 100644 index 00000000000..54d4e0aeb8e --- /dev/null +++ b/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/Makefile @@ -0,0 +1,58 @@ +MLIR_FILES = build/swiglu_gemv_1.mlir build/swiglu_silu.mlir build/swiglu_eltwise_mul.mlir build/swiglu_gemv_2.mlir +COMBINED_MLIR = build/aie.mlir +ELF_FILE = build/aie.elf + +AIECC = aiecc.py +PEANO_CLANG = $(PEANO_INSTALL_DIR)/bin/clang++ +PEANO_PATH = $(PEANO_INSTALL_DIR) + +KERNEL_DIR = ../../kernels +OPERATOR_DIR = ../../operators +AIE_KERNELS_DIR = /scratch/roesti/mlir-aie/aie_kernels +MLIR_AIE_DIR = $(shell python3 -c "from aie.utils.config import root_path; print(root_path())") + +CLANG_FLAGS = -O2 -std=c++20 --target=aie2p-none-unknown-elf -Wno-parentheses -Wno-attributes -Wno-macro-redefined -Wno-empty-body -Wno-missing-template-arg-list-after-template-kw -I$(AIE_KERNELS_DIR) -I$(MLIR_AIE_DIR)/include +HOST_FLAGS = -std=c++23 -Wall -I/opt/xilinx/xrt/include -I/scratch/roesti/mlir-aie/runtime_lib/test_lib -L/opt/xilinx/xrt/lib -lxrt_core -lxrt_coreutil -lrt -lstdc++ + +.PHONY: all clean test + +all: build/test + +build/mv.o: $(KERNEL_DIR)/mv.cc | build + $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ + +build/mul.o: $(KERNEL_DIR)/mul.cc | build + $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ + +build/silu.o: $(KERNEL_DIR)/silu.cc | build + $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ + +build/swiglu_gemv_1.mlir: $(OPERATOR_DIR)/matrix_vector_mul.py | build + python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from matrix_vector_mul import my_matvec; from aie.iron.device import NPU2; mlir_code = my_matvec(NPU2(), 8, 8192, 2048, 1); print(str(mlir_code))' > $@ + +build/swiglu_gemv_2.mlir: $(OPERATOR_DIR)/matrix_vector_mul.py | build + python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from matrix_vector_mul import my_matvec; from aie.iron.device import NPU2; mlir_code = my_matvec(NPU2(), 8, 2048, 8192, 1); print(str(mlir_code))' > $@ + +build/swiglu_silu.mlir: $(OPERATOR_DIR)/silu.py | build + python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from silu import my_silu; from aie.iron.device import NPU2; mlir_code = my_silu(NPU2(), 8192, 8, 2, 512, 0); print(str(mlir_code))' > $@ + +build/swiglu_eltwise_mul.mlir: $(OPERATOR_DIR)/eltwise_mul.py | build + python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from eltwise_mul import my_eltwise_mul; from aie.iron.device import NPU2; mlir_code = my_eltwise_mul(NPU2(), 8192, 8, 2, 1024, 0); print(str(mlir_code))' > $@ + +$(COMBINED_MLIR): $(MLIR_FILES) combine_mlir.py + python3 combine_mlir.py $(MLIR_FILES) $(COMBINED_MLIR) + +$(ELF_FILE): $(COMBINED_MLIR) build/mv.o build/mul.o build/silu.o + cd build && $(AIECC) -v --generate-full-elf --expand-load-pdis --no-xchesscc --no-xbridge aie.mlir -o aie.elf + +build/test: test.cpp $(ELF_FILE) + g++-13 $< -o $@ $(HOST_FLAGS) + +build: + mkdir -p build + +test: build/test + cd build && ./test + +clean: + rm -rf build aie.mlir.prj diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/combine_mlir.py b/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/combine_mlir.py new file mode 100644 index 00000000000..1b77f0fd43c --- /dev/null +++ b/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/combine_mlir.py @@ -0,0 +1,167 @@ +#!/usr/bin/env python3 +import sys +import re + +# Configuration: buffer layout +# Each entry: (buffer_name, size_expr) +BUFFER_CONFIG = [ + ("input", "embedding_dim"), + ("weights_1", "embedding_dim * hidden_dim"), + ("weights_2", "embedding_dim * hidden_dim"), + ("weights_3", "hidden_dim * embedding_dim"), + ("left", "hidden_dim"), + ("left_swished", "hidden_dim"), + ("right", "hidden_dim"), + ("intermediate", "hidden_dim"), + ("output", "embedding_dim"), +] + +# Configuration: operations to execute +# Each entry: (device_name, buffer_args) +# NOTE: Consecutive operations on the same device will be grouped into a single +# aiex.configure block to minimize reconfiguration overhead. +OPERATIONS_CONFIG = [ + ("gemv_1", ["weights_1", "input", "left"]), + ("gemv_1", ["weights_2", "input", "right"]), # Grouped with previous gemv_1 + ("silu", ["left", "left_swished"]), + ("eltwise_mul", ["left_swished", "right", "intermediate"]), + ("gemv_2", ["weights_3", "intermediate", "output"]), +] + +# Map device names to their indices (for referencing the @device) +DEVICE_INDEX_MAP = { + "gemv_1": 0, + "silu": 1, + "eltwise_mul": 2, + "gemv_2": 3, +} + +def extract_device_content(mlir_file, device_name): + with open(mlir_file, 'r') as f: + content = f.read() + + # Find the start of the aie.device + device_start = content.find('aie.device(npu2) {') + if device_start == -1: + raise ValueError(f"No aie.device found in {mlir_file}") + + # Find matching closing brace by counting braces + brace_count = 0 + i = device_start + len('aie.device(npu2) ') + start_content = i + 1 # Start after the opening brace + + for idx in range(i, len(content)): + if content[idx] == '{': + brace_count += 1 + elif content[idx] == '}': + brace_count -= 1 + if brace_count == 0: + # Found the matching closing brace + device_content = content[start_content:idx].strip() + return f" aie.device(npu2) @{device_name} {{\n{device_content}\n }}\n" + + raise ValueError(f"Could not find matching closing brace in {mlir_file}") + +def calculate_buffer_offsets(embedding_dim, hidden_dim): + """Calculate buffer offsets based on configuration.""" + offsets = {} + current_offset = 0 + + for buffer_name, size_expr in BUFFER_CONFIG: + size = eval(size_expr, {"embedding_dim": embedding_dim, "hidden_dim": hidden_dim}) + offsets[buffer_name] = { + "start": current_offset, + "size": size, + "end": current_offset + size, + } + current_offset += size + + offsets["total"] = current_offset + return offsets + +def create_main_device(buffer_offsets): + """Generate the main device with runtime sequence. + Optimizes by grouping consecutive operations on the same device. + """ + lines = [] + lines.append(" aie.device(npu2) @main {") + lines.append("") + lines.append(f" aiex.runtime_sequence @sequence(%arg : memref<{buffer_offsets['total']}xbf16>) {{") + lines.append("") + lines.append(" %c3_i32 = arith.constant 3 : i32") + lines.append("") + + # Group consecutive operations by device to minimize reconfigurations + i = 0 + while i < len(OPERATIONS_CONFIG): + device_name, buffer_args = OPERATIONS_CONFIG[i] + device_ref_name = list(DEVICE_INDEX_MAP.keys())[DEVICE_INDEX_MAP[device_name]] + + # Collect all consecutive operations for the same device + device_operations = [(buffer_args, i)] + j = i + 1 + while j < len(OPERATIONS_CONFIG) and OPERATIONS_CONFIG[j][0] == device_name: + device_operations.append((OPERATIONS_CONFIG[j][1], j)) + j += 1 + + # Generate a single aiex.configure block for all operations on this device + lines.append(f" aiex.configure @{device_ref_name} {{") + + # Track which buffers we've already declared in this configure block + declared_buffers = set() + + for op_buffer_args, op_idx in device_operations: + # Generate arg_slice declarations for buffers not yet declared + for buf_name in op_buffer_args: + if buf_name not in declared_buffers: + buf_info = buffer_offsets[buf_name] + lines.append(f" %{buf_name} = aiex.arg_slice %arg[{buf_info['start']}:{buf_info['end']}] : memref<{buffer_offsets['total']}xbf16> -> memref<{buf_info['size']}xbf16>") + declared_buffers.add(buf_name) + + # Generate aiex.run call + buffer_args_str = ", ".join([f"%{b}" for b in op_buffer_args]) + buffer_types_str = ", ".join([f"memref<{buffer_offsets[b]['size']}xbf16>" for b in op_buffer_args]) + lines.append(f" aiex.run @sequence ({buffer_args_str}) : ({buffer_types_str})") + + lines.append(" }") + lines.append("") + + # Move to the next ungrouped device + i = j + + lines.append(" }") + lines.append("") + lines.append(" }") + + return "\n".join(lines) + "\n" + +def main(): + if len(sys.argv) != 6: + print("Usage: combine_mlir.py ") + sys.exit(1) + + embedding_dim = 2048 + hidden_dim = 8192 + + # Calculate buffer offsets from configuration + buffer_offsets = calculate_buffer_offsets(embedding_dim, hidden_dim) + + # Get unique device names from operations config + device_names = list(DEVICE_INDEX_MAP.keys()) + + output = "module {\n\n" + output += create_main_device(buffer_offsets) + output += "\n" + + # Extract device content for each unique device + for i, mlir_file in enumerate(sys.argv[1:5]): + output += extract_device_content(mlir_file, device_names[i]) + output += "\n" + + output += "}\n" + + with open(sys.argv[5], 'w') as f: + f.write(output) + +if __name__ == "__main__": + main() diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/test.cpp b/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/test.cpp new file mode 100644 index 00000000000..8d8b7fd238d --- /dev/null +++ b/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/test.cpp @@ -0,0 +1,148 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +constexpr int EMBEDDING_DIM = 2048; +constexpr int HIDDEN_DIM = 8192; +constexpr int NUM_ITERATIONS = 1000; + +using dtype = uint16_t; + +struct BufferInfo { + std::string name; + size_t size; +}; + +std::vector buffers_config = { + {"input", EMBEDDING_DIM}, + {"weights_1", EMBEDDING_DIM * HIDDEN_DIM}, + {"weights_2", EMBEDDING_DIM * HIDDEN_DIM}, + {"weights_3", HIDDEN_DIM * EMBEDDING_DIM}, + {"left", HIDDEN_DIM}, + {"left_swished", HIDDEN_DIM}, + {"right", HIDDEN_DIM}, + {"intermediate", HIDDEN_DIM}, + {"output", EMBEDDING_DIM}, +}; + +std::vector load_reference(const std::string &filename) { + std::ifstream file(filename, std::ios::binary); + if (!file) { + return {}; + } + file.seekg(0, std::ios::end); + size_t size = file.tellg(); + file.seekg(0, std::ios::beg); + std::vector data(size / sizeof(uint16_t)); + file.read(reinterpret_cast(data.data()), size); + return data; +} + +int main(int argc, const char *argv[]) { + unsigned int device_index = 0; + auto device = xrt::device(device_index); + + std::string kernelName = "main:sequence"; + xrt::elf ctx_elf{"aie.elf"}; + xrt::hw_context context = xrt::hw_context(device, ctx_elf); + auto kernel = xrt::ext::kernel(context, kernelName); + + size_t total_size = 0; + for (const auto &binfo : buffers_config) { + total_size += binfo.size; + } + + xrt::bo bo_inout = xrt::ext::bo{device, total_size * sizeof(dtype)}; + dtype *buf = bo_inout.map(); + + std::map buffer_ptrs; + size_t offset = 0; + for (const auto &binfo : buffers_config) { + buffer_ptrs[binfo.name] = buf + offset; + offset += binfo.size; + } + + for (size_t i = 0; i < buffers_config[0].size; i++) { // input + buffer_ptrs["input"][i] = 0x3F80; + } + for (size_t i = 0; i < buffers_config[1].size; i++) { // weights_1 + buffer_ptrs["weights_1"][i] = 0x3F00; + } + for (size_t i = 0; i < buffers_config[2].size; i++) { // weights_2 + buffer_ptrs["weights_2"][i] = 0x3F00; + } + for (size_t i = 0; i < buffers_config[3].size; i++) { // weights_3 + buffer_ptrs["weights_3"][i] = 0x3F00; + } + + bo_inout.sync(XCL_BO_SYNC_BO_TO_DEVICE); + + auto run = xrt::run(kernel); + run.set_arg(0, bo_inout); + + std::cerr << "Running verification..." << std::endl; + run.start(); + run.wait2(); + + bo_inout.sync(XCL_BO_SYNC_BO_FROM_DEVICE); + dtype *output_verify = buffer_ptrs["output"]; + + auto reference = load_reference("../../reference_output.bin"); + if (!reference.empty()) { + int mismatches = 0; + for (size_t i = 0; i < EMBEDDING_DIM && i < reference.size(); i++) { + if (output_verify[i] != reference[i]) { + mismatches++; + if (mismatches <= 10) { + std::cerr << "Mismatch at " << i << ": got 0x" << std::hex + << output_verify[i] << ", expected 0x" << reference[i] + << std::dec << std::endl; + } + } + } + if (mismatches == 0) { + std::cerr << "Verification PASSED: all outputs match reference" << std::endl; + } else { + std::cerr << "Verification FAILED: " << mismatches << " mismatches" + << std::endl; + } + } else { + std::cerr << "Warning: reference output not found, skipping validation" + << std::endl; + } + + std::cerr << "Running timed iterations..." << std::endl; + std::vector iteration_times; + + for (int iter = 0; iter < NUM_ITERATIONS; iter++) { + auto iter_start = std::chrono::high_resolution_clock::now(); + run.start(); + run.wait2(); + auto iter_end = std::chrono::high_resolution_clock::now(); + double iter_time = std::chrono::duration_cast(iter_end - iter_start).count(); + iteration_times.push_back(iter_time); + } + + bo_inout.sync(XCL_BO_SYNC_BO_FROM_DEVICE); + + // Output CSV format: variant,iteration,time_us + for (int i = 0; i < NUM_ITERATIONS; i++) { + std::cout << "fused_transactions_write32s," << i << "," << iteration_times[i] << std::endl; + } + + return 0; +} diff --git a/programming_examples/reconfiguration/visualize_results.py b/programming_examples/reconfiguration/visualize_results.py index b5c94f81684..a7a7fbfa6b4 100755 --- a/programming_examples/reconfiguration/visualize_results.py +++ b/programming_examples/reconfiguration/visualize_results.py @@ -4,6 +4,15 @@ import matplotlib.pyplot as plt import numpy as np from pathlib import Path +import seaborn as sns + +# Set style and font +# sns.set_theme(style='whitegrid') +# plt.rcParams['font.family'] = 'serif' +# plt.rcParams['font.serif'] = ['Times'] +# plt.rcParams['mathtext.fontset'] = 'custom' +# plt.rcParams['mathtext.rm'] = 'Times' +plt.style.use('dark_background') def read_benchmark_results(csv_file): """Read benchmark results from CSV with format: variant,iteration,time_us""" @@ -45,28 +54,24 @@ def plot_results(stats, output_file): variants = list(stats.keys()) means = [stats[v]['mean'] for v in variants] - # Color scheme - colors = ['#1f77b4', '#ff7f0e', '#2ca02c'] + # Color scheme - use seaborn palette + colors = sns.color_palette('flare', n_colors=len(variants)) # Create bar chart for means x_pos = np.arange(len(variants)) - bars = ax.bar(x_pos, means, color=colors, alpha=0.7, label='Mean', width=0.6) + bars = ax.bar(x_pos, means, color=colors, label='Mean', width=0.6) # Overlay box-and-whisker plots bp_data = [stats[v]['times'] for v in variants] bp = ax.boxplot(bp_data, positions=x_pos, widths=0.4, - patch_artist=True, - boxprops=dict(facecolor='white', edgecolor='black', linewidth=1.5, alpha=0.8), - whiskerprops=dict(color='black', linewidth=1.5), - capprops=dict(color='black', linewidth=1.5), - medianprops=dict(color='red', linewidth=2), - flierprops=dict(marker='o', markerfacecolor='red', markersize=5, - markeredgecolor='black', alpha=0.5)) + #whiskerprops=dict(color='black'), + #capprops=dict(color='black'), + medianprops=dict(color='white'), + flierprops=dict(marker='.')) ax.set_ylabel('Time per Iteration (μs)', fontsize=12) - ax.set_xlabel('Variant', fontsize=12) - ax.set_title('SwiGLU Performance Comparison\n(Bar=Mean, Box=Distribution)', - fontsize=14, fontweight='bold') + ax.set_title('SwiGLU Performance Comparison\n(4 Reconfigurations, Embedding Dim=2048, Hidden Dim=8192)', + fontsize=14) ax.set_xticks(x_pos) ax.set_xticklabels(variants) ax.grid(axis='y', alpha=0.3) @@ -74,19 +79,19 @@ def plot_results(stats, output_file): # Add mean value labels on bars for i, (bar, mean) in enumerate(zip(bars, means)): height = bar.get_height() - ax.text(bar.get_x() + bar.get_width()/2., height, - f'{mean:.1f} μs', - ha='center', va='bottom', fontsize=10, fontweight='bold') + ax.text(bar.get_x() + bar.get_width()/2., height + 100, + f'{mean:.0f} μs', + ha='center', va='bottom', fontsize=10) # Add legend from matplotlib.patches import Patch - legend_elements = [ - Patch(facecolor=colors[0], alpha=0.7, label='Mean (bar)'), - Patch(facecolor='white', edgecolor='black', label='Box: 25th-75th percentile'), - plt.Line2D([0], [0], color='red', linewidth=2, label='Median'), - plt.Line2D([0], [0], color='black', linewidth=1.5, label='Min/Max (whiskers)') - ] - ax.legend(handles=legend_elements, loc='upper right', fontsize=9) + #legend_elements = [ + # Patch(facecolor=colors[0], alpha=1.0, label='Mean (bar)'), + # Patch(facecolor='white', edgecolor='black', label='Box: 25th-75th percentile'), + # plt.Line2D([0], [0], color='black', linewidth=2, label='Median'), + # plt.Line2D([0], [0], color='black', linewidth=1.5, label='Min/Max (whiskers)') + #] + ax.legend(loc='upper right', fontsize=9) plt.tight_layout() plt.savefig(output_file, dpi=300, bbox_inches='tight') From 1d4c9eca18e96e63235a9a19ae96928cd02ab457 Mon Sep 17 00:00:00 2001 From: andrej Date: Sat, 22 Nov 2025 21:07:13 -0700 Subject: [PATCH 12/40] add results --- .../reconfiguration/benchmark_results.csv | 4001 +++++++++++++++++ .../reconfiguration/benchmark_results.png | Bin 0 -> 180048 bytes 2 files changed, 4001 insertions(+) create mode 100644 programming_examples/reconfiguration/benchmark_results.csv create mode 100644 programming_examples/reconfiguration/benchmark_results.png diff --git a/programming_examples/reconfiguration/benchmark_results.csv b/programming_examples/reconfiguration/benchmark_results.csv new file mode 100644 index 00000000000..60cfff5cf7f --- /dev/null +++ b/programming_examples/reconfiguration/benchmark_results.csv @@ -0,0 +1,4001 @@ +variant,iteration,time_us +separate_xclbins,0,5024 +separate_xclbins,1,4980 +separate_xclbins,2,4990 +separate_xclbins,3,5006 +separate_xclbins,4,4967 +separate_xclbins,5,4969 +separate_xclbins,6,4965 +separate_xclbins,7,4963 +separate_xclbins,8,4966 +separate_xclbins,9,4962 +separate_xclbins,10,4963 +separate_xclbins,11,4961 +separate_xclbins,12,4973 +separate_xclbins,13,4967 +separate_xclbins,14,4980 +separate_xclbins,15,4968 +separate_xclbins,16,4966 +separate_xclbins,17,4971 +separate_xclbins,18,4958 +separate_xclbins,19,4963 +separate_xclbins,20,4962 +separate_xclbins,21,4975 +separate_xclbins,22,4969 +separate_xclbins,23,4962 +separate_xclbins,24,4973 +separate_xclbins,25,4957 +separate_xclbins,26,4964 +separate_xclbins,27,4964 +separate_xclbins,28,4968 +separate_xclbins,29,4971 +separate_xclbins,30,4963 +separate_xclbins,31,4967 +separate_xclbins,32,4971 +separate_xclbins,33,4968 +separate_xclbins,34,4979 +separate_xclbins,35,4969 +separate_xclbins,36,4965 +separate_xclbins,37,4966 +separate_xclbins,38,4963 +separate_xclbins,39,4963 +separate_xclbins,40,4964 +separate_xclbins,41,4960 +separate_xclbins,42,4978 +separate_xclbins,43,4985 +separate_xclbins,44,4966 +separate_xclbins,45,4961 +separate_xclbins,46,4963 +separate_xclbins,47,4964 +separate_xclbins,48,4961 +separate_xclbins,49,4976 +separate_xclbins,50,4962 +separate_xclbins,51,4961 +separate_xclbins,52,4973 +separate_xclbins,53,4966 +separate_xclbins,54,4973 +separate_xclbins,55,4976 +separate_xclbins,56,4987 +separate_xclbins,57,4977 +separate_xclbins,58,4968 +separate_xclbins,59,4968 +separate_xclbins,60,4962 +separate_xclbins,61,4970 +separate_xclbins,62,4961 +separate_xclbins,63,4969 +separate_xclbins,64,4966 +separate_xclbins,65,4961 +separate_xclbins,66,4964 +separate_xclbins,67,4961 +separate_xclbins,68,4963 +separate_xclbins,69,4965 +separate_xclbins,70,4965 +separate_xclbins,71,4969 +separate_xclbins,72,4977 +separate_xclbins,73,4996 +separate_xclbins,74,5171 +separate_xclbins,75,5117 +separate_xclbins,76,5019 +separate_xclbins,77,4965 +separate_xclbins,78,4963 +separate_xclbins,79,4968 +separate_xclbins,80,4962 +separate_xclbins,81,4970 +separate_xclbins,82,4974 +separate_xclbins,83,4959 +separate_xclbins,84,4996 +separate_xclbins,85,5142 +separate_xclbins,86,5101 +separate_xclbins,87,5011 +separate_xclbins,88,4968 +separate_xclbins,89,4959 +separate_xclbins,90,4958 +separate_xclbins,91,4967 +separate_xclbins,92,4962 +separate_xclbins,93,5035 +separate_xclbins,94,5025 +separate_xclbins,95,5017 +separate_xclbins,96,5015 +separate_xclbins,97,5020 +separate_xclbins,98,5008 +separate_xclbins,99,5018 +separate_xclbins,100,5018 +separate_xclbins,101,4996 +separate_xclbins,102,4960 +separate_xclbins,103,4960 +separate_xclbins,104,4965 +separate_xclbins,105,4961 +separate_xclbins,106,4995 +separate_xclbins,107,4969 +separate_xclbins,108,4968 +separate_xclbins,109,4969 +separate_xclbins,110,4968 +separate_xclbins,111,4972 +separate_xclbins,112,4987 +separate_xclbins,113,4970 +separate_xclbins,114,4980 +separate_xclbins,115,4968 +separate_xclbins,116,4972 +separate_xclbins,117,4967 +separate_xclbins,118,4983 +separate_xclbins,119,4964 +separate_xclbins,120,4975 +separate_xclbins,121,4964 +separate_xclbins,122,4967 +separate_xclbins,123,4975 +separate_xclbins,124,4973 +separate_xclbins,125,4963 +separate_xclbins,126,4969 +separate_xclbins,127,4974 +separate_xclbins,128,4967 +separate_xclbins,129,4964 +separate_xclbins,130,4965 +separate_xclbins,131,4965 +separate_xclbins,132,4974 +separate_xclbins,133,4963 +separate_xclbins,134,4976 +separate_xclbins,135,4966 +separate_xclbins,136,4964 +separate_xclbins,137,4970 +separate_xclbins,138,4968 +separate_xclbins,139,4965 +separate_xclbins,140,4967 +separate_xclbins,141,4962 +separate_xclbins,142,4966 +separate_xclbins,143,4964 +separate_xclbins,144,5019 +separate_xclbins,145,5094 +separate_xclbins,146,5107 +separate_xclbins,147,5004 +separate_xclbins,148,4969 +separate_xclbins,149,4968 +separate_xclbins,150,4959 +separate_xclbins,151,4969 +separate_xclbins,152,4955 +separate_xclbins,153,4971 +separate_xclbins,154,4972 +separate_xclbins,155,4990 +separate_xclbins,156,5149 +separate_xclbins,157,5205 +separate_xclbins,158,5011 +separate_xclbins,159,4982 +separate_xclbins,160,4994 +separate_xclbins,161,5022 +separate_xclbins,162,5006 +separate_xclbins,163,4969 +separate_xclbins,164,4967 +separate_xclbins,165,4968 +separate_xclbins,166,4971 +separate_xclbins,167,4961 +separate_xclbins,168,4973 +separate_xclbins,169,4965 +separate_xclbins,170,4969 +separate_xclbins,171,4963 +separate_xclbins,172,4968 +separate_xclbins,173,4967 +separate_xclbins,174,4969 +separate_xclbins,175,4968 +separate_xclbins,176,4963 +separate_xclbins,177,4969 +separate_xclbins,178,4968 +separate_xclbins,179,4965 +separate_xclbins,180,4959 +separate_xclbins,181,4970 +separate_xclbins,182,4967 +separate_xclbins,183,4970 +separate_xclbins,184,4961 +separate_xclbins,185,4966 +separate_xclbins,186,4969 +separate_xclbins,187,4965 +separate_xclbins,188,4969 +separate_xclbins,189,4960 +separate_xclbins,190,4960 +separate_xclbins,191,4963 +separate_xclbins,192,4964 +separate_xclbins,193,4958 +separate_xclbins,194,4974 +separate_xclbins,195,4964 +separate_xclbins,196,4964 +separate_xclbins,197,4959 +separate_xclbins,198,4968 +separate_xclbins,199,4971 +separate_xclbins,200,4965 +separate_xclbins,201,4964 +separate_xclbins,202,4961 +separate_xclbins,203,4962 +separate_xclbins,204,4982 +separate_xclbins,205,4973 +separate_xclbins,206,4970 +separate_xclbins,207,4969 +separate_xclbins,208,4959 +separate_xclbins,209,4968 +separate_xclbins,210,4975 +separate_xclbins,211,4970 +separate_xclbins,212,4962 +separate_xclbins,213,4972 +separate_xclbins,214,4975 +separate_xclbins,215,4970 +separate_xclbins,216,4967 +separate_xclbins,217,4963 +separate_xclbins,218,4970 +separate_xclbins,219,4971 +separate_xclbins,220,4970 +separate_xclbins,221,4970 +separate_xclbins,222,4966 +separate_xclbins,223,4980 +separate_xclbins,224,4970 +separate_xclbins,225,4974 +separate_xclbins,226,4975 +separate_xclbins,227,4965 +separate_xclbins,228,4968 +separate_xclbins,229,4967 +separate_xclbins,230,4967 +separate_xclbins,231,4966 +separate_xclbins,232,4969 +separate_xclbins,233,4969 +separate_xclbins,234,4967 +separate_xclbins,235,4970 +separate_xclbins,236,4965 +separate_xclbins,237,4964 +separate_xclbins,238,4964 +separate_xclbins,239,4969 +separate_xclbins,240,4971 +separate_xclbins,241,4975 +separate_xclbins,242,4962 +separate_xclbins,243,4962 +separate_xclbins,244,4973 +separate_xclbins,245,4966 +separate_xclbins,246,4981 +separate_xclbins,247,4965 +separate_xclbins,248,4965 +separate_xclbins,249,4966 +separate_xclbins,250,4970 +separate_xclbins,251,4970 +separate_xclbins,252,4969 +separate_xclbins,253,4962 +separate_xclbins,254,4969 +separate_xclbins,255,4977 +separate_xclbins,256,4967 +separate_xclbins,257,4969 +separate_xclbins,258,4966 +separate_xclbins,259,4967 +separate_xclbins,260,4966 +separate_xclbins,261,4967 +separate_xclbins,262,4964 +separate_xclbins,263,4965 +separate_xclbins,264,4967 +separate_xclbins,265,4963 +separate_xclbins,266,4965 +separate_xclbins,267,4962 +separate_xclbins,268,4968 +separate_xclbins,269,4964 +separate_xclbins,270,4965 +separate_xclbins,271,4964 +separate_xclbins,272,4963 +separate_xclbins,273,4969 +separate_xclbins,274,4968 +separate_xclbins,275,4962 +separate_xclbins,276,4967 +separate_xclbins,277,4964 +separate_xclbins,278,4967 +separate_xclbins,279,4965 +separate_xclbins,280,4965 +separate_xclbins,281,4967 +separate_xclbins,282,4973 +separate_xclbins,283,4960 +separate_xclbins,284,4964 +separate_xclbins,285,4972 +separate_xclbins,286,5148 +separate_xclbins,287,5092 +separate_xclbins,288,5053 +separate_xclbins,289,4989 +separate_xclbins,290,4965 +separate_xclbins,291,4972 +separate_xclbins,292,4973 +separate_xclbins,293,4957 +separate_xclbins,294,4965 +separate_xclbins,295,4963 +separate_xclbins,296,4967 +separate_xclbins,297,4974 +separate_xclbins,298,4964 +separate_xclbins,299,4959 +separate_xclbins,300,4957 +separate_xclbins,301,4963 +separate_xclbins,302,4967 +separate_xclbins,303,4963 +separate_xclbins,304,4967 +separate_xclbins,305,4963 +separate_xclbins,306,4968 +separate_xclbins,307,4987 +separate_xclbins,308,4984 +separate_xclbins,309,4962 +separate_xclbins,310,4962 +separate_xclbins,311,4963 +separate_xclbins,312,4965 +separate_xclbins,313,4962 +separate_xclbins,314,4974 +separate_xclbins,315,4971 +separate_xclbins,316,4963 +separate_xclbins,317,4964 +separate_xclbins,318,4967 +separate_xclbins,319,4969 +separate_xclbins,320,4966 +separate_xclbins,321,4968 +separate_xclbins,322,4983 +separate_xclbins,323,4963 +separate_xclbins,324,4963 +separate_xclbins,325,4970 +separate_xclbins,326,4972 +separate_xclbins,327,4970 +separate_xclbins,328,4973 +separate_xclbins,329,4963 +separate_xclbins,330,4964 +separate_xclbins,331,4967 +separate_xclbins,332,4968 +separate_xclbins,333,4963 +separate_xclbins,334,4971 +separate_xclbins,335,4978 +separate_xclbins,336,4964 +separate_xclbins,337,5173 +separate_xclbins,338,5204 +separate_xclbins,339,5112 +separate_xclbins,340,5054 +separate_xclbins,341,4972 +separate_xclbins,342,4963 +separate_xclbins,343,4971 +separate_xclbins,344,4962 +separate_xclbins,345,4967 +separate_xclbins,346,4982 +separate_xclbins,347,4963 +separate_xclbins,348,4963 +separate_xclbins,349,4972 +separate_xclbins,350,4961 +separate_xclbins,351,4966 +separate_xclbins,352,4967 +separate_xclbins,353,4965 +separate_xclbins,354,4969 +separate_xclbins,355,4963 +separate_xclbins,356,4965 +separate_xclbins,357,4964 +separate_xclbins,358,4973 +separate_xclbins,359,4969 +separate_xclbins,360,4963 +separate_xclbins,361,4958 +separate_xclbins,362,4966 +separate_xclbins,363,4965 +separate_xclbins,364,5014 +separate_xclbins,365,5017 +separate_xclbins,366,4967 +separate_xclbins,367,4991 +separate_xclbins,368,5070 +separate_xclbins,369,4996 +separate_xclbins,370,4995 +separate_xclbins,371,5009 +separate_xclbins,372,5031 +separate_xclbins,373,4972 +separate_xclbins,374,4969 +separate_xclbins,375,4972 +separate_xclbins,376,5013 +separate_xclbins,377,5134 +separate_xclbins,378,5019 +separate_xclbins,379,4961 +separate_xclbins,380,4971 +separate_xclbins,381,4963 +separate_xclbins,382,4970 +separate_xclbins,383,4971 +separate_xclbins,384,4969 +separate_xclbins,385,4966 +separate_xclbins,386,4968 +separate_xclbins,387,4989 +separate_xclbins,388,4976 +separate_xclbins,389,4966 +separate_xclbins,390,4981 +separate_xclbins,391,4981 +separate_xclbins,392,4963 +separate_xclbins,393,4969 +separate_xclbins,394,4983 +separate_xclbins,395,4981 +separate_xclbins,396,4967 +separate_xclbins,397,4974 +separate_xclbins,398,4968 +separate_xclbins,399,4966 +separate_xclbins,400,4968 +separate_xclbins,401,4967 +separate_xclbins,402,4965 +separate_xclbins,403,4967 +separate_xclbins,404,4978 +separate_xclbins,405,4964 +separate_xclbins,406,4966 +separate_xclbins,407,4968 +separate_xclbins,408,4980 +separate_xclbins,409,4983 +separate_xclbins,410,4973 +separate_xclbins,411,4967 +separate_xclbins,412,4967 +separate_xclbins,413,4969 +separate_xclbins,414,4961 +separate_xclbins,415,4974 +separate_xclbins,416,4964 +separate_xclbins,417,4968 +separate_xclbins,418,4966 +separate_xclbins,419,4967 +separate_xclbins,420,4963 +separate_xclbins,421,4961 +separate_xclbins,422,4965 +separate_xclbins,423,4963 +separate_xclbins,424,4967 +separate_xclbins,425,4970 +separate_xclbins,426,4966 +separate_xclbins,427,4970 +separate_xclbins,428,4974 +separate_xclbins,429,4963 +separate_xclbins,430,4974 +separate_xclbins,431,4973 +separate_xclbins,432,4967 +separate_xclbins,433,4965 +separate_xclbins,434,4972 +separate_xclbins,435,4966 +separate_xclbins,436,4967 +separate_xclbins,437,4971 +separate_xclbins,438,4962 +separate_xclbins,439,4968 +separate_xclbins,440,4964 +separate_xclbins,441,4972 +separate_xclbins,442,4962 +separate_xclbins,443,4962 +separate_xclbins,444,4967 +separate_xclbins,445,4972 +separate_xclbins,446,4967 +separate_xclbins,447,4963 +separate_xclbins,448,4963 +separate_xclbins,449,4958 +separate_xclbins,450,4964 +separate_xclbins,451,4963 +separate_xclbins,452,4960 +separate_xclbins,453,4975 +separate_xclbins,454,4963 +separate_xclbins,455,4966 +separate_xclbins,456,4971 +separate_xclbins,457,4962 +separate_xclbins,458,4984 +separate_xclbins,459,4970 +separate_xclbins,460,4968 +separate_xclbins,461,4978 +separate_xclbins,462,4965 +separate_xclbins,463,4971 +separate_xclbins,464,4993 +separate_xclbins,465,5004 +separate_xclbins,466,4997 +separate_xclbins,467,4987 +separate_xclbins,468,5002 +separate_xclbins,469,4991 +separate_xclbins,470,5007 +separate_xclbins,471,4992 +separate_xclbins,472,4994 +separate_xclbins,473,5058 +separate_xclbins,474,5016 +separate_xclbins,475,5078 +separate_xclbins,476,5034 +separate_xclbins,477,5034 +separate_xclbins,478,5023 +separate_xclbins,479,5009 +separate_xclbins,480,4988 +separate_xclbins,481,5006 +separate_xclbins,482,4980 +separate_xclbins,483,4971 +separate_xclbins,484,4974 +separate_xclbins,485,4997 +separate_xclbins,486,4984 +separate_xclbins,487,4978 +separate_xclbins,488,4968 +separate_xclbins,489,4967 +separate_xclbins,490,4965 +separate_xclbins,491,4974 +separate_xclbins,492,4963 +separate_xclbins,493,4967 +separate_xclbins,494,4963 +separate_xclbins,495,4962 +separate_xclbins,496,5011 +separate_xclbins,497,5019 +separate_xclbins,498,5016 +separate_xclbins,499,5014 +separate_xclbins,500,4963 +separate_xclbins,501,5035 +separate_xclbins,502,5035 +separate_xclbins,503,5015 +separate_xclbins,504,5015 +separate_xclbins,505,5019 +separate_xclbins,506,5020 +separate_xclbins,507,5017 +separate_xclbins,508,5013 +separate_xclbins,509,5030 +separate_xclbins,510,5021 +separate_xclbins,511,5019 +separate_xclbins,512,5002 +separate_xclbins,513,4971 +separate_xclbins,514,4971 +separate_xclbins,515,4965 +separate_xclbins,516,4966 +separate_xclbins,517,4964 +separate_xclbins,518,4958 +separate_xclbins,519,4964 +separate_xclbins,520,4965 +separate_xclbins,521,5132 +separate_xclbins,522,5113 +separate_xclbins,523,5088 +separate_xclbins,524,5061 +separate_xclbins,525,4958 +separate_xclbins,526,4964 +separate_xclbins,527,4975 +separate_xclbins,528,4961 +separate_xclbins,529,4972 +separate_xclbins,530,4965 +separate_xclbins,531,4965 +separate_xclbins,532,4969 +separate_xclbins,533,4961 +separate_xclbins,534,4969 +separate_xclbins,535,4953 +separate_xclbins,536,4964 +separate_xclbins,537,4963 +separate_xclbins,538,4973 +separate_xclbins,539,4972 +separate_xclbins,540,4962 +separate_xclbins,541,4963 +separate_xclbins,542,4961 +separate_xclbins,543,5025 +separate_xclbins,544,4965 +separate_xclbins,545,4968 +separate_xclbins,546,4962 +separate_xclbins,547,4958 +separate_xclbins,548,4967 +separate_xclbins,549,4968 +separate_xclbins,550,4962 +separate_xclbins,551,4962 +separate_xclbins,552,4956 +separate_xclbins,553,4958 +separate_xclbins,554,4967 +separate_xclbins,555,4962 +separate_xclbins,556,4973 +separate_xclbins,557,4961 +separate_xclbins,558,4965 +separate_xclbins,559,4978 +separate_xclbins,560,4965 +separate_xclbins,561,4961 +separate_xclbins,562,4959 +separate_xclbins,563,4962 +separate_xclbins,564,4965 +separate_xclbins,565,4963 +separate_xclbins,566,4963 +separate_xclbins,567,4963 +separate_xclbins,568,4967 +separate_xclbins,569,4966 +separate_xclbins,570,4963 +separate_xclbins,571,4962 +separate_xclbins,572,4965 +separate_xclbins,573,4994 +separate_xclbins,574,5039 +separate_xclbins,575,5006 +separate_xclbins,576,4972 +separate_xclbins,577,4965 +separate_xclbins,578,4988 +separate_xclbins,579,4993 +separate_xclbins,580,4978 +separate_xclbins,581,4970 +separate_xclbins,582,4962 +separate_xclbins,583,4954 +separate_xclbins,584,4967 +separate_xclbins,585,4959 +separate_xclbins,586,4963 +separate_xclbins,587,4966 +separate_xclbins,588,4964 +separate_xclbins,589,4963 +separate_xclbins,590,4971 +separate_xclbins,591,4962 +separate_xclbins,592,4965 +separate_xclbins,593,4964 +separate_xclbins,594,4971 +separate_xclbins,595,4967 +separate_xclbins,596,4978 +separate_xclbins,597,4975 +separate_xclbins,598,4965 +separate_xclbins,599,4969 +separate_xclbins,600,4965 +separate_xclbins,601,4964 +separate_xclbins,602,4968 +separate_xclbins,603,4958 +separate_xclbins,604,4963 +separate_xclbins,605,4960 +separate_xclbins,606,4969 +separate_xclbins,607,4958 +separate_xclbins,608,4959 +separate_xclbins,609,4967 +separate_xclbins,610,4967 +separate_xclbins,611,4969 +separate_xclbins,612,4984 +separate_xclbins,613,4982 +separate_xclbins,614,4965 +separate_xclbins,615,4955 +separate_xclbins,616,4973 +separate_xclbins,617,4968 +separate_xclbins,618,4967 +separate_xclbins,619,4968 +separate_xclbins,620,4966 +separate_xclbins,621,4965 +separate_xclbins,622,4965 +separate_xclbins,623,4963 +separate_xclbins,624,4980 +separate_xclbins,625,4965 +separate_xclbins,626,4964 +separate_xclbins,627,4964 +separate_xclbins,628,4972 +separate_xclbins,629,4965 +separate_xclbins,630,4968 +separate_xclbins,631,4962 +separate_xclbins,632,4967 +separate_xclbins,633,4965 +separate_xclbins,634,4967 +separate_xclbins,635,4974 +separate_xclbins,636,4967 +separate_xclbins,637,4960 +separate_xclbins,638,4960 +separate_xclbins,639,4971 +separate_xclbins,640,4956 +separate_xclbins,641,4972 +separate_xclbins,642,4962 +separate_xclbins,643,4965 +separate_xclbins,644,4960 +separate_xclbins,645,4965 +separate_xclbins,646,4974 +separate_xclbins,647,4965 +separate_xclbins,648,4968 +separate_xclbins,649,4968 +separate_xclbins,650,4967 +separate_xclbins,651,4964 +separate_xclbins,652,4964 +separate_xclbins,653,4961 +separate_xclbins,654,4975 +separate_xclbins,655,4967 +separate_xclbins,656,4969 +separate_xclbins,657,4961 +separate_xclbins,658,4964 +separate_xclbins,659,4965 +separate_xclbins,660,4962 +separate_xclbins,661,4962 +separate_xclbins,662,4964 +separate_xclbins,663,4965 +separate_xclbins,664,4968 +separate_xclbins,665,4967 +separate_xclbins,666,4963 +separate_xclbins,667,4967 +separate_xclbins,668,4968 +separate_xclbins,669,4970 +separate_xclbins,670,4963 +separate_xclbins,671,4966 +separate_xclbins,672,4963 +separate_xclbins,673,4971 +separate_xclbins,674,4970 +separate_xclbins,675,4968 +separate_xclbins,676,4969 +separate_xclbins,677,4972 +separate_xclbins,678,4972 +separate_xclbins,679,4969 +separate_xclbins,680,4960 +separate_xclbins,681,4983 +separate_xclbins,682,4979 +separate_xclbins,683,4966 +separate_xclbins,684,4968 +separate_xclbins,685,4967 +separate_xclbins,686,4961 +separate_xclbins,687,4969 +separate_xclbins,688,4970 +separate_xclbins,689,4967 +separate_xclbins,690,4964 +separate_xclbins,691,4965 +separate_xclbins,692,4965 +separate_xclbins,693,4966 +separate_xclbins,694,4970 +separate_xclbins,695,4964 +separate_xclbins,696,4958 +separate_xclbins,697,4968 +separate_xclbins,698,4971 +separate_xclbins,699,4965 +separate_xclbins,700,4967 +separate_xclbins,701,4955 +separate_xclbins,702,4968 +separate_xclbins,703,4958 +separate_xclbins,704,4961 +separate_xclbins,705,4973 +separate_xclbins,706,4962 +separate_xclbins,707,4958 +separate_xclbins,708,4973 +separate_xclbins,709,4974 +separate_xclbins,710,4968 +separate_xclbins,711,4970 +separate_xclbins,712,4966 +separate_xclbins,713,4977 +separate_xclbins,714,4991 +separate_xclbins,715,4978 +separate_xclbins,716,4963 +separate_xclbins,717,4967 +separate_xclbins,718,4976 +separate_xclbins,719,4960 +separate_xclbins,720,4959 +separate_xclbins,721,4963 +separate_xclbins,722,4963 +separate_xclbins,723,4966 +separate_xclbins,724,4970 +separate_xclbins,725,4971 +separate_xclbins,726,4967 +separate_xclbins,727,4963 +separate_xclbins,728,4964 +separate_xclbins,729,4968 +separate_xclbins,730,4968 +separate_xclbins,731,4965 +separate_xclbins,732,4967 +separate_xclbins,733,4962 +separate_xclbins,734,4966 +separate_xclbins,735,4962 +separate_xclbins,736,4964 +separate_xclbins,737,4992 +separate_xclbins,738,5014 +separate_xclbins,739,5143 +separate_xclbins,740,5107 +separate_xclbins,741,5002 +separate_xclbins,742,4965 +separate_xclbins,743,4960 +separate_xclbins,744,4963 +separate_xclbins,745,4967 +separate_xclbins,746,4963 +separate_xclbins,747,4970 +separate_xclbins,748,4963 +separate_xclbins,749,5055 +separate_xclbins,750,6629 +separate_xclbins,751,5361 +separate_xclbins,752,4962 +separate_xclbins,753,4964 +separate_xclbins,754,4971 +separate_xclbins,755,4967 +separate_xclbins,756,4961 +separate_xclbins,757,4975 +separate_xclbins,758,4961 +separate_xclbins,759,4964 +separate_xclbins,760,4965 +separate_xclbins,761,4959 +separate_xclbins,762,4955 +separate_xclbins,763,4959 +separate_xclbins,764,4963 +separate_xclbins,765,4971 +separate_xclbins,766,4963 +separate_xclbins,767,4965 +separate_xclbins,768,4971 +separate_xclbins,769,4972 +separate_xclbins,770,4967 +separate_xclbins,771,4982 +separate_xclbins,772,4966 +separate_xclbins,773,4964 +separate_xclbins,774,4968 +separate_xclbins,775,4963 +separate_xclbins,776,4965 +separate_xclbins,777,4971 +separate_xclbins,778,4975 +separate_xclbins,779,4959 +separate_xclbins,780,4964 +separate_xclbins,781,4962 +separate_xclbins,782,4968 +separate_xclbins,783,4967 +separate_xclbins,784,4967 +separate_xclbins,785,4958 +separate_xclbins,786,4964 +separate_xclbins,787,4975 +separate_xclbins,788,4961 +separate_xclbins,789,4959 +separate_xclbins,790,4964 +separate_xclbins,791,4965 +separate_xclbins,792,4972 +separate_xclbins,793,4972 +separate_xclbins,794,4959 +separate_xclbins,795,4963 +separate_xclbins,796,4970 +separate_xclbins,797,4969 +separate_xclbins,798,4968 +separate_xclbins,799,4966 +separate_xclbins,800,4961 +separate_xclbins,801,5587 +separate_xclbins,802,6134 +separate_xclbins,803,5550 +separate_xclbins,804,5945 +separate_xclbins,805,5551 +separate_xclbins,806,5993 +separate_xclbins,807,5574 +separate_xclbins,808,5523 +separate_xclbins,809,5572 +separate_xclbins,810,6464 +separate_xclbins,811,6762 +separate_xclbins,812,6932 +separate_xclbins,813,6992 +separate_xclbins,814,5648 +separate_xclbins,815,4986 +separate_xclbins,816,4970 +separate_xclbins,817,4973 +separate_xclbins,818,4961 +separate_xclbins,819,4963 +separate_xclbins,820,4957 +separate_xclbins,821,4965 +separate_xclbins,822,4966 +separate_xclbins,823,4966 +separate_xclbins,824,4963 +separate_xclbins,825,4966 +separate_xclbins,826,4977 +separate_xclbins,827,4957 +separate_xclbins,828,4963 +separate_xclbins,829,4966 +separate_xclbins,830,4959 +separate_xclbins,831,4966 +separate_xclbins,832,4963 +separate_xclbins,833,4967 +separate_xclbins,834,4976 +separate_xclbins,835,4962 +separate_xclbins,836,5749 +separate_xclbins,837,7102 +separate_xclbins,838,6843 +separate_xclbins,839,6968 +separate_xclbins,840,6974 +separate_xclbins,841,7009 +separate_xclbins,842,7014 +separate_xclbins,843,6739 +separate_xclbins,844,6868 +separate_xclbins,845,5600 +separate_xclbins,846,6013 +separate_xclbins,847,5190 +separate_xclbins,848,5199 +separate_xclbins,849,5038 +separate_xclbins,850,4988 +separate_xclbins,851,4992 +separate_xclbins,852,4994 +separate_xclbins,853,4981 +separate_xclbins,854,4982 +separate_xclbins,855,4988 +separate_xclbins,856,4985 +separate_xclbins,857,4979 +separate_xclbins,858,4985 +separate_xclbins,859,4992 +separate_xclbins,860,4989 +separate_xclbins,861,4988 +separate_xclbins,862,4990 +separate_xclbins,863,4986 +separate_xclbins,864,4985 +separate_xclbins,865,4985 +separate_xclbins,866,4990 +separate_xclbins,867,4986 +separate_xclbins,868,4986 +separate_xclbins,869,4987 +separate_xclbins,870,4983 +separate_xclbins,871,4989 +separate_xclbins,872,4982 +separate_xclbins,873,4984 +separate_xclbins,874,4996 +separate_xclbins,875,4987 +separate_xclbins,876,4994 +separate_xclbins,877,4994 +separate_xclbins,878,4982 +separate_xclbins,879,4990 +separate_xclbins,880,4986 +separate_xclbins,881,4994 +separate_xclbins,882,4987 +separate_xclbins,883,4984 +separate_xclbins,884,4987 +separate_xclbins,885,4989 +separate_xclbins,886,5010 +separate_xclbins,887,5150 +separate_xclbins,888,5138 +separate_xclbins,889,5026 +separate_xclbins,890,4967 +separate_xclbins,891,4964 +separate_xclbins,892,4965 +separate_xclbins,893,4963 +separate_xclbins,894,4963 +separate_xclbins,895,4962 +separate_xclbins,896,4979 +separate_xclbins,897,4967 +separate_xclbins,898,4974 +separate_xclbins,899,4963 +separate_xclbins,900,4963 +separate_xclbins,901,4961 +separate_xclbins,902,4968 +separate_xclbins,903,4981 +separate_xclbins,904,4959 +separate_xclbins,905,4963 +separate_xclbins,906,4971 +separate_xclbins,907,4965 +separate_xclbins,908,4965 +separate_xclbins,909,4965 +separate_xclbins,910,4966 +separate_xclbins,911,4973 +separate_xclbins,912,4975 +separate_xclbins,913,5127 +separate_xclbins,914,5118 +separate_xclbins,915,5091 +separate_xclbins,916,5061 +separate_xclbins,917,4965 +separate_xclbins,918,4966 +separate_xclbins,919,4965 +separate_xclbins,920,4962 +separate_xclbins,921,4963 +separate_xclbins,922,4960 +separate_xclbins,923,4967 +separate_xclbins,924,4964 +separate_xclbins,925,4966 +separate_xclbins,926,4973 +separate_xclbins,927,4958 +separate_xclbins,928,4963 +separate_xclbins,929,4963 +separate_xclbins,930,4962 +separate_xclbins,931,4969 +separate_xclbins,932,4970 +separate_xclbins,933,4965 +separate_xclbins,934,4972 +separate_xclbins,935,4965 +separate_xclbins,936,4967 +separate_xclbins,937,4962 +separate_xclbins,938,4963 +separate_xclbins,939,4962 +separate_xclbins,940,4967 +separate_xclbins,941,4963 +separate_xclbins,942,4966 +separate_xclbins,943,4965 +separate_xclbins,944,4965 +separate_xclbins,945,4967 +separate_xclbins,946,4966 +separate_xclbins,947,5066 +separate_xclbins,948,5105 +separate_xclbins,949,5099 +separate_xclbins,950,5016 +separate_xclbins,951,4965 +separate_xclbins,952,4961 +separate_xclbins,953,4964 +separate_xclbins,954,4963 +separate_xclbins,955,4972 +separate_xclbins,956,4962 +separate_xclbins,957,4966 +separate_xclbins,958,4963 +separate_xclbins,959,4958 +separate_xclbins,960,4967 +separate_xclbins,961,4968 +separate_xclbins,962,4962 +separate_xclbins,963,4963 +separate_xclbins,964,4964 +separate_xclbins,965,4967 +separate_xclbins,966,4967 +separate_xclbins,967,4968 +separate_xclbins,968,4972 +separate_xclbins,969,4964 +separate_xclbins,970,4977 +separate_xclbins,971,4966 +separate_xclbins,972,4970 +separate_xclbins,973,4964 +separate_xclbins,974,4967 +separate_xclbins,975,4964 +separate_xclbins,976,4967 +separate_xclbins,977,4957 +separate_xclbins,978,4959 +separate_xclbins,979,4965 +separate_xclbins,980,4967 +separate_xclbins,981,4960 +separate_xclbins,982,4966 +separate_xclbins,983,4964 +separate_xclbins,984,4967 +separate_xclbins,985,4959 +separate_xclbins,986,4957 +separate_xclbins,987,4961 +separate_xclbins,988,4965 +separate_xclbins,989,4957 +separate_xclbins,990,4964 +separate_xclbins,991,4975 +separate_xclbins,992,4963 +separate_xclbins,993,4963 +separate_xclbins,994,4973 +separate_xclbins,995,4964 +separate_xclbins,996,4960 +separate_xclbins,997,4960 +separate_xclbins,998,4970 +separate_xclbins,999,4961 +runlist,0,8347 +runlist,1,4833 +runlist,2,4851 +runlist,3,4854 +runlist,4,4841 +runlist,5,4847 +runlist,6,4850 +runlist,7,4848 +runlist,8,4840 +runlist,9,4845 +runlist,10,4845 +runlist,11,4847 +runlist,12,4844 +runlist,13,4858 +runlist,14,4847 +runlist,15,4841 +runlist,16,4850 +runlist,17,4849 +runlist,18,4852 +runlist,19,4848 +runlist,20,4847 +runlist,21,4852 +runlist,22,4854 +runlist,23,4853 +runlist,24,4849 +runlist,25,4848 +runlist,26,4844 +runlist,27,4846 +runlist,28,4845 +runlist,29,4847 +runlist,30,4850 +runlist,31,4853 +runlist,32,4848 +runlist,33,4854 +runlist,34,4858 +runlist,35,4843 +runlist,36,4846 +runlist,37,4849 +runlist,38,4849 +runlist,39,4845 +runlist,40,4850 +runlist,41,4845 +runlist,42,4847 +runlist,43,4843 +runlist,44,4848 +runlist,45,4842 +runlist,46,4856 +runlist,47,4841 +runlist,48,4836 +runlist,49,4850 +runlist,50,4850 +runlist,51,4845 +runlist,52,4841 +runlist,53,4840 +runlist,54,4858 +runlist,55,4861 +runlist,56,4842 +runlist,57,4844 +runlist,58,4851 +runlist,59,4853 +runlist,60,4847 +runlist,61,4844 +runlist,62,4850 +runlist,63,4850 +runlist,64,4847 +runlist,65,4858 +runlist,66,4843 +runlist,67,4838 +runlist,68,4841 +runlist,69,4846 +runlist,70,4847 +runlist,71,4840 +runlist,72,4848 +runlist,73,4848 +runlist,74,4852 +runlist,75,4852 +runlist,76,4842 +runlist,77,4852 +runlist,78,4847 +runlist,79,4845 +runlist,80,4854 +runlist,81,4844 +runlist,82,4849 +runlist,83,4849 +runlist,84,4846 +runlist,85,4846 +runlist,86,4843 +runlist,87,4849 +runlist,88,4857 +runlist,89,4845 +runlist,90,4846 +runlist,91,4850 +runlist,92,4848 +runlist,93,4848 +runlist,94,4844 +runlist,95,4855 +runlist,96,4849 +runlist,97,4845 +runlist,98,4851 +runlist,99,4858 +runlist,100,4840 +runlist,101,4852 +runlist,102,4848 +runlist,103,4853 +runlist,104,4855 +runlist,105,4839 +runlist,106,4838 +runlist,107,4832 +runlist,108,4846 +runlist,109,4846 +runlist,110,4850 +runlist,111,4842 +runlist,112,4838 +runlist,113,4841 +runlist,114,4847 +runlist,115,4845 +runlist,116,4862 +runlist,117,4837 +runlist,118,4835 +runlist,119,4848 +runlist,120,4841 +runlist,121,4836 +runlist,122,4837 +runlist,123,4847 +runlist,124,4846 +runlist,125,4847 +runlist,126,4831 +runlist,127,4853 +runlist,128,4900 +runlist,129,4869 +runlist,130,4856 +runlist,131,4854 +runlist,132,4855 +runlist,133,4849 +runlist,134,4853 +runlist,135,4849 +runlist,136,4855 +runlist,137,4855 +runlist,138,4843 +runlist,139,4852 +runlist,140,4845 +runlist,141,4862 +runlist,142,4872 +runlist,143,4853 +runlist,144,4855 +runlist,145,4846 +runlist,146,4855 +runlist,147,4854 +runlist,148,4863 +runlist,149,4850 +runlist,150,4846 +runlist,151,4847 +runlist,152,4852 +runlist,153,4843 +runlist,154,4850 +runlist,155,4851 +runlist,156,4852 +runlist,157,4851 +runlist,158,4846 +runlist,159,4853 +runlist,160,4856 +runlist,161,4852 +runlist,162,4851 +runlist,163,4849 +runlist,164,4854 +runlist,165,4851 +runlist,166,4843 +runlist,167,4852 +runlist,168,4855 +runlist,169,4849 +runlist,170,4847 +runlist,171,4847 +runlist,172,4846 +runlist,173,4844 +runlist,174,4846 +runlist,175,4851 +runlist,176,4847 +runlist,177,4853 +runlist,178,4855 +runlist,179,4847 +runlist,180,4849 +runlist,181,4845 +runlist,182,4852 +runlist,183,4854 +runlist,184,4853 +runlist,185,4852 +runlist,186,4843 +runlist,187,4851 +runlist,188,4853 +runlist,189,4851 +runlist,190,4849 +runlist,191,4847 +runlist,192,4853 +runlist,193,4854 +runlist,194,4847 +runlist,195,4859 +runlist,196,4849 +runlist,197,4853 +runlist,198,4888 +runlist,199,4854 +runlist,200,4855 +runlist,201,4855 +runlist,202,4847 +runlist,203,4848 +runlist,204,4856 +runlist,205,4848 +runlist,206,4846 +runlist,207,4843 +runlist,208,4850 +runlist,209,4846 +runlist,210,4845 +runlist,211,4852 +runlist,212,4848 +runlist,213,4850 +runlist,214,4847 +runlist,215,4847 +runlist,216,4852 +runlist,217,4852 +runlist,218,4844 +runlist,219,4854 +runlist,220,4851 +runlist,221,4850 +runlist,222,4895 +runlist,223,4854 +runlist,224,4849 +runlist,225,4851 +runlist,226,4849 +runlist,227,4847 +runlist,228,4852 +runlist,229,4860 +runlist,230,4868 +runlist,231,4856 +runlist,232,4852 +runlist,233,4842 +runlist,234,4848 +runlist,235,4847 +runlist,236,4846 +runlist,237,4848 +runlist,238,4846 +runlist,239,4848 +runlist,240,4855 +runlist,241,4848 +runlist,242,4846 +runlist,243,4854 +runlist,244,4853 +runlist,245,4853 +runlist,246,4843 +runlist,247,4847 +runlist,248,4850 +runlist,249,4847 +runlist,250,4849 +runlist,251,4850 +runlist,252,4846 +runlist,253,4845 +runlist,254,4849 +runlist,255,4849 +runlist,256,4845 +runlist,257,4845 +runlist,258,4851 +runlist,259,4845 +runlist,260,4850 +runlist,261,4853 +runlist,262,4848 +runlist,263,4849 +runlist,264,4853 +runlist,265,4849 +runlist,266,4848 +runlist,267,4846 +runlist,268,4843 +runlist,269,4844 +runlist,270,4848 +runlist,271,4851 +runlist,272,4851 +runlist,273,4841 +runlist,274,4846 +runlist,275,4846 +runlist,276,4849 +runlist,277,4851 +runlist,278,4842 +runlist,279,4845 +runlist,280,4850 +runlist,281,4848 +runlist,282,4845 +runlist,283,4846 +runlist,284,4851 +runlist,285,4851 +runlist,286,4853 +runlist,287,4842 +runlist,288,4880 +runlist,289,4857 +runlist,290,4851 +runlist,291,4849 +runlist,292,4842 +runlist,293,4844 +runlist,294,4845 +runlist,295,4846 +runlist,296,4844 +runlist,297,4846 +runlist,298,4852 +runlist,299,4850 +runlist,300,4845 +runlist,301,4850 +runlist,302,4845 +runlist,303,4852 +runlist,304,4844 +runlist,305,4845 +runlist,306,4849 +runlist,307,4849 +runlist,308,4851 +runlist,309,4846 +runlist,310,4845 +runlist,311,4846 +runlist,312,4855 +runlist,313,4848 +runlist,314,4844 +runlist,315,4843 +runlist,316,4848 +runlist,317,4853 +runlist,318,4848 +runlist,319,4852 +runlist,320,4845 +runlist,321,4847 +runlist,322,4845 +runlist,323,4857 +runlist,324,4856 +runlist,325,4846 +runlist,326,4848 +runlist,327,4846 +runlist,328,4845 +runlist,329,4847 +runlist,330,4852 +runlist,331,4849 +runlist,332,4848 +runlist,333,4847 +runlist,334,4871 +runlist,335,4870 +runlist,336,4842 +runlist,337,4847 +runlist,338,4851 +runlist,339,4847 +runlist,340,4853 +runlist,341,4845 +runlist,342,4846 +runlist,343,4849 +runlist,344,4845 +runlist,345,4844 +runlist,346,4850 +runlist,347,4847 +runlist,348,4851 +runlist,349,4848 +runlist,350,4846 +runlist,351,4857 +runlist,352,4848 +runlist,353,4853 +runlist,354,4853 +runlist,355,4868 +runlist,356,4891 +runlist,357,4881 +runlist,358,4878 +runlist,359,4879 +runlist,360,4880 +runlist,361,4875 +runlist,362,4819 +runlist,363,4828 +runlist,364,4824 +runlist,365,4837 +runlist,366,4825 +runlist,367,4827 +runlist,368,4828 +runlist,369,4851 +runlist,370,4852 +runlist,371,4848 +runlist,372,4841 +runlist,373,4845 +runlist,374,4845 +runlist,375,4848 +runlist,376,4849 +runlist,377,4852 +runlist,378,4850 +runlist,379,4841 +runlist,380,4846 +runlist,381,4841 +runlist,382,4842 +runlist,383,4854 +runlist,384,4852 +runlist,385,4850 +runlist,386,4844 +runlist,387,4845 +runlist,388,4841 +runlist,389,4905 +runlist,390,4886 +runlist,391,4847 +runlist,392,4842 +runlist,393,4848 +runlist,394,4844 +runlist,395,4841 +runlist,396,4850 +runlist,397,4847 +runlist,398,4850 +runlist,399,4847 +runlist,400,4852 +runlist,401,4851 +runlist,402,4842 +runlist,403,4842 +runlist,404,4853 +runlist,405,4850 +runlist,406,4853 +runlist,407,4841 +runlist,408,4848 +runlist,409,4846 +runlist,410,4845 +runlist,411,4842 +runlist,412,4844 +runlist,413,4848 +runlist,414,4849 +runlist,415,4844 +runlist,416,4844 +runlist,417,4847 +runlist,418,4845 +runlist,419,4846 +runlist,420,4862 +runlist,421,4843 +runlist,422,4842 +runlist,423,4841 +runlist,424,4845 +runlist,425,4849 +runlist,426,4849 +runlist,427,4846 +runlist,428,4844 +runlist,429,4848 +runlist,430,4848 +runlist,431,4848 +runlist,432,4844 +runlist,433,4842 +runlist,434,4845 +runlist,435,4841 +runlist,436,4846 +runlist,437,4844 +runlist,438,4860 +runlist,439,4871 +runlist,440,4857 +runlist,441,4848 +runlist,442,4847 +runlist,443,4848 +runlist,444,4848 +runlist,445,4844 +runlist,446,4849 +runlist,447,4850 +runlist,448,4845 +runlist,449,4842 +runlist,450,4848 +runlist,451,4850 +runlist,452,4846 +runlist,453,4849 +runlist,454,4848 +runlist,455,4846 +runlist,456,4845 +runlist,457,4851 +runlist,458,4849 +runlist,459,4849 +runlist,460,4843 +runlist,461,4848 +runlist,462,4866 +runlist,463,4891 +runlist,464,4852 +runlist,465,4851 +runlist,466,4854 +runlist,467,4844 +runlist,468,4848 +runlist,469,4849 +runlist,470,4856 +runlist,471,4846 +runlist,472,4841 +runlist,473,4853 +runlist,474,4852 +runlist,475,4851 +runlist,476,4844 +runlist,477,4851 +runlist,478,4850 +runlist,479,4847 +runlist,480,4845 +runlist,481,4848 +runlist,482,4850 +runlist,483,4851 +runlist,484,4848 +runlist,485,4847 +runlist,486,4857 +runlist,487,4857 +runlist,488,4844 +runlist,489,4850 +runlist,490,4845 +runlist,491,4852 +runlist,492,4852 +runlist,493,4854 +runlist,494,4844 +runlist,495,4843 +runlist,496,4848 +runlist,497,4845 +runlist,498,4848 +runlist,499,4844 +runlist,500,4848 +runlist,501,4849 +runlist,502,4845 +runlist,503,4848 +runlist,504,4846 +runlist,505,4842 +runlist,506,4837 +runlist,507,4861 +runlist,508,4848 +runlist,509,4843 +runlist,510,4847 +runlist,511,4850 +runlist,512,4844 +runlist,513,4863 +runlist,514,4846 +runlist,515,4841 +runlist,516,4845 +runlist,517,4844 +runlist,518,4844 +runlist,519,4845 +runlist,520,4841 +runlist,521,4839 +runlist,522,4847 +runlist,523,4843 +runlist,524,4847 +runlist,525,4846 +runlist,526,4848 +runlist,527,4845 +runlist,528,4850 +runlist,529,4851 +runlist,530,4848 +runlist,531,4851 +runlist,532,4851 +runlist,533,4849 +runlist,534,4850 +runlist,535,4843 +runlist,536,4853 +runlist,537,4848 +runlist,538,4847 +runlist,539,4851 +runlist,540,4851 +runlist,541,4850 +runlist,542,4851 +runlist,543,4873 +runlist,544,4869 +runlist,545,4840 +runlist,546,4844 +runlist,547,4852 +runlist,548,4844 +runlist,549,4857 +runlist,550,4850 +runlist,551,4846 +runlist,552,4844 +runlist,553,4845 +runlist,554,4852 +runlist,555,4841 +runlist,556,4838 +runlist,557,4846 +runlist,558,4843 +runlist,559,4840 +runlist,560,4847 +runlist,561,4844 +runlist,562,4846 +runlist,563,4844 +runlist,564,4856 +runlist,565,4845 +runlist,566,4851 +runlist,567,4846 +runlist,568,4858 +runlist,569,4859 +runlist,570,4825 +runlist,571,4847 +runlist,572,4851 +runlist,573,4861 +runlist,574,4855 +runlist,575,4846 +runlist,576,4850 +runlist,577,4845 +runlist,578,4846 +runlist,579,4845 +runlist,580,4844 +runlist,581,4843 +runlist,582,4839 +runlist,583,4846 +runlist,584,4845 +runlist,585,4857 +runlist,586,4860 +runlist,587,4860 +runlist,588,4852 +runlist,589,4850 +runlist,590,4861 +runlist,591,4858 +runlist,592,4844 +runlist,593,4843 +runlist,594,4856 +runlist,595,4842 +runlist,596,4849 +runlist,597,4865 +runlist,598,4848 +runlist,599,4845 +runlist,600,4855 +runlist,601,4844 +runlist,602,4845 +runlist,603,4847 +runlist,604,4844 +runlist,605,4849 +runlist,606,4843 +runlist,607,4840 +runlist,608,4837 +runlist,609,4844 +runlist,610,4844 +runlist,611,4851 +runlist,612,4844 +runlist,613,4850 +runlist,614,4849 +runlist,615,4844 +runlist,616,4846 +runlist,617,4849 +runlist,618,4850 +runlist,619,4847 +runlist,620,4845 +runlist,621,4858 +runlist,622,4841 +runlist,623,4852 +runlist,624,4859 +runlist,625,4843 +runlist,626,4844 +runlist,627,4848 +runlist,628,4878 +runlist,629,4845 +runlist,630,4855 +runlist,631,4853 +runlist,632,4842 +runlist,633,4850 +runlist,634,4846 +runlist,635,4839 +runlist,636,4852 +runlist,637,4844 +runlist,638,4843 +runlist,639,4847 +runlist,640,4848 +runlist,641,4849 +runlist,642,4841 +runlist,643,4845 +runlist,644,4850 +runlist,645,4848 +runlist,646,4844 +runlist,647,4880 +runlist,648,4874 +runlist,649,4850 +runlist,650,4845 +runlist,651,4851 +runlist,652,4861 +runlist,653,4851 +runlist,654,4859 +runlist,655,4843 +runlist,656,4844 +runlist,657,4850 +runlist,658,4848 +runlist,659,4845 +runlist,660,4849 +runlist,661,4846 +runlist,662,4847 +runlist,663,4850 +runlist,664,4846 +runlist,665,4846 +runlist,666,4844 +runlist,667,4844 +runlist,668,4845 +runlist,669,4849 +runlist,670,4847 +runlist,671,4845 +runlist,672,4857 +runlist,673,4852 +runlist,674,4838 +runlist,675,4845 +runlist,676,4840 +runlist,677,4844 +runlist,678,4843 +runlist,679,4846 +runlist,680,4848 +runlist,681,4838 +runlist,682,4845 +runlist,683,4846 +runlist,684,4849 +runlist,685,4846 +runlist,686,4843 +runlist,687,4842 +runlist,688,4838 +runlist,689,4841 +runlist,690,4842 +runlist,691,4842 +runlist,692,4844 +runlist,693,4859 +runlist,694,4844 +runlist,695,4850 +runlist,696,4843 +runlist,697,4838 +runlist,698,4844 +runlist,699,4841 +runlist,700,4847 +runlist,701,4844 +runlist,702,4847 +runlist,703,4840 +runlist,704,4850 +runlist,705,4848 +runlist,706,4860 +runlist,707,4848 +runlist,708,4848 +runlist,709,4849 +runlist,710,4842 +runlist,711,4846 +runlist,712,4848 +runlist,713,4842 +runlist,714,4863 +runlist,715,4840 +runlist,716,4841 +runlist,717,4849 +runlist,718,4845 +runlist,719,4840 +runlist,720,4841 +runlist,721,4841 +runlist,722,4849 +runlist,723,4841 +runlist,724,4846 +runlist,725,4845 +runlist,726,4849 +runlist,727,4844 +runlist,728,4842 +runlist,729,4846 +runlist,730,4841 +runlist,731,4844 +runlist,732,4849 +runlist,733,4844 +runlist,734,4850 +runlist,735,4836 +runlist,736,4851 +runlist,737,4848 +runlist,738,4843 +runlist,739,4847 +runlist,740,4849 +runlist,741,4845 +runlist,742,4841 +runlist,743,4843 +runlist,744,4842 +runlist,745,4854 +runlist,746,4846 +runlist,747,4843 +runlist,748,4849 +runlist,749,4850 +runlist,750,4847 +runlist,751,4847 +runlist,752,4918 +runlist,753,4871 +runlist,754,4845 +runlist,755,4854 +runlist,756,4846 +runlist,757,4847 +runlist,758,4845 +runlist,759,4845 +runlist,760,4848 +runlist,761,4847 +runlist,762,4842 +runlist,763,4844 +runlist,764,4850 +runlist,765,4839 +runlist,766,4847 +runlist,767,4841 +runlist,768,4847 +runlist,769,4841 +runlist,770,4849 +runlist,771,4844 +runlist,772,4841 +runlist,773,4845 +runlist,774,4835 +runlist,775,4822 +runlist,776,4837 +runlist,777,4849 +runlist,778,4844 +runlist,779,4846 +runlist,780,4850 +runlist,781,4847 +runlist,782,4850 +runlist,783,4846 +runlist,784,4844 +runlist,785,4842 +runlist,786,4844 +runlist,787,4847 +runlist,788,4841 +runlist,789,4845 +runlist,790,4844 +runlist,791,4843 +runlist,792,4851 +runlist,793,4850 +runlist,794,4842 +runlist,795,4858 +runlist,796,4849 +runlist,797,4847 +runlist,798,4845 +runlist,799,4841 +runlist,800,4844 +runlist,801,4846 +runlist,802,4845 +runlist,803,4844 +runlist,804,4838 +runlist,805,4842 +runlist,806,4847 +runlist,807,4850 +runlist,808,4857 +runlist,809,4845 +runlist,810,4842 +runlist,811,4845 +runlist,812,4848 +runlist,813,4846 +runlist,814,4841 +runlist,815,4848 +runlist,816,4846 +runlist,817,4851 +runlist,818,4842 +runlist,819,4886 +runlist,820,4845 +runlist,821,4843 +runlist,822,4843 +runlist,823,4845 +runlist,824,4843 +runlist,825,4845 +runlist,826,4851 +runlist,827,4843 +runlist,828,4849 +runlist,829,4844 +runlist,830,4842 +runlist,831,4844 +runlist,832,4844 +runlist,833,4842 +runlist,834,4842 +runlist,835,4840 +runlist,836,4843 +runlist,837,4849 +runlist,838,4850 +runlist,839,4843 +runlist,840,4843 +runlist,841,4840 +runlist,842,4843 +runlist,843,4843 +runlist,844,4841 +runlist,845,4845 +runlist,846,4842 +runlist,847,4845 +runlist,848,4841 +runlist,849,4847 +runlist,850,4845 +runlist,851,4844 +runlist,852,4847 +runlist,853,4842 +runlist,854,4843 +runlist,855,4846 +runlist,856,4862 +runlist,857,4877 +runlist,858,4864 +runlist,859,4848 +runlist,860,4847 +runlist,861,4843 +runlist,862,4847 +runlist,863,4853 +runlist,864,4847 +runlist,865,4850 +runlist,866,4848 +runlist,867,4841 +runlist,868,4843 +runlist,869,4846 +runlist,870,4836 +runlist,871,4844 +runlist,872,4845 +runlist,873,4842 +runlist,874,4840 +runlist,875,4842 +runlist,876,4851 +runlist,877,4840 +runlist,878,4853 +runlist,879,4854 +runlist,880,4844 +runlist,881,4846 +runlist,882,4843 +runlist,883,4840 +runlist,884,4840 +runlist,885,4840 +runlist,886,4839 +runlist,887,4846 +runlist,888,4851 +runlist,889,4844 +runlist,890,4870 +runlist,891,4864 +runlist,892,4850 +runlist,893,4855 +runlist,894,4847 +runlist,895,4845 +runlist,896,4892 +runlist,897,4891 +runlist,898,4872 +runlist,899,4848 +runlist,900,4840 +runlist,901,4849 +runlist,902,4847 +runlist,903,4840 +runlist,904,4849 +runlist,905,4841 +runlist,906,4843 +runlist,907,4849 +runlist,908,4850 +runlist,909,4848 +runlist,910,4847 +runlist,911,4846 +runlist,912,4846 +runlist,913,4843 +runlist,914,4841 +runlist,915,4847 +runlist,916,4849 +runlist,917,4845 +runlist,918,4851 +runlist,919,4849 +runlist,920,4854 +runlist,921,4848 +runlist,922,4846 +runlist,923,4845 +runlist,924,4845 +runlist,925,4846 +runlist,926,4841 +runlist,927,4846 +runlist,928,4843 +runlist,929,4841 +runlist,930,4847 +runlist,931,4846 +runlist,932,4851 +runlist,933,4846 +runlist,934,4844 +runlist,935,4843 +runlist,936,4841 +runlist,937,4847 +runlist,938,4842 +runlist,939,4850 +runlist,940,4844 +runlist,941,4854 +runlist,942,4841 +runlist,943,4838 +runlist,944,4861 +runlist,945,4852 +runlist,946,4851 +runlist,947,4848 +runlist,948,4849 +runlist,949,4846 +runlist,950,4864 +runlist,951,4851 +runlist,952,4836 +runlist,953,4843 +runlist,954,4845 +runlist,955,4840 +runlist,956,4847 +runlist,957,4844 +runlist,958,4843 +runlist,959,4851 +runlist,960,4848 +runlist,961,4875 +runlist,962,4866 +runlist,963,4850 +runlist,964,4844 +runlist,965,4854 +runlist,966,4846 +runlist,967,4847 +runlist,968,4854 +runlist,969,4845 +runlist,970,4834 +runlist,971,4820 +runlist,972,4817 +runlist,973,4821 +runlist,974,4827 +runlist,975,4813 +runlist,976,4816 +runlist,977,4830 +runlist,978,4827 +runlist,979,4822 +runlist,980,4825 +runlist,981,4822 +runlist,982,4842 +runlist,983,4824 +runlist,984,4824 +runlist,985,4825 +runlist,986,4824 +runlist,987,4828 +runlist,988,4821 +runlist,989,4826 +runlist,990,4826 +runlist,991,4828 +runlist,992,4825 +runlist,993,4821 +runlist,994,4829 +runlist,995,4824 +runlist,996,4819 +runlist,997,4821 +runlist,998,4821 +runlist,999,4824 +fused_transactions_loadpdi,0,4859 +fused_transactions_loadpdi,1,4839 +fused_transactions_loadpdi,2,4836 +fused_transactions_loadpdi,3,4832 +fused_transactions_loadpdi,4,4826 +fused_transactions_loadpdi,5,4830 +fused_transactions_loadpdi,6,4831 +fused_transactions_loadpdi,7,4824 +fused_transactions_loadpdi,8,4819 +fused_transactions_loadpdi,9,4816 +fused_transactions_loadpdi,10,4812 +fused_transactions_loadpdi,11,4819 +fused_transactions_loadpdi,12,4812 +fused_transactions_loadpdi,13,4819 +fused_transactions_loadpdi,14,4819 +fused_transactions_loadpdi,15,4821 +fused_transactions_loadpdi,16,4817 +fused_transactions_loadpdi,17,4814 +fused_transactions_loadpdi,18,4818 +fused_transactions_loadpdi,19,4820 +fused_transactions_loadpdi,20,4811 +fused_transactions_loadpdi,21,4818 +fused_transactions_loadpdi,22,4815 +fused_transactions_loadpdi,23,4823 +fused_transactions_loadpdi,24,4812 +fused_transactions_loadpdi,25,4815 +fused_transactions_loadpdi,26,4811 +fused_transactions_loadpdi,27,4820 +fused_transactions_loadpdi,28,4815 +fused_transactions_loadpdi,29,4809 +fused_transactions_loadpdi,30,4813 +fused_transactions_loadpdi,31,4816 +fused_transactions_loadpdi,32,4813 +fused_transactions_loadpdi,33,4812 +fused_transactions_loadpdi,34,4817 +fused_transactions_loadpdi,35,4813 +fused_transactions_loadpdi,36,4811 +fused_transactions_loadpdi,37,4814 +fused_transactions_loadpdi,38,4814 +fused_transactions_loadpdi,39,4817 +fused_transactions_loadpdi,40,4812 +fused_transactions_loadpdi,41,4814 +fused_transactions_loadpdi,42,4815 +fused_transactions_loadpdi,43,4819 +fused_transactions_loadpdi,44,4814 +fused_transactions_loadpdi,45,4817 +fused_transactions_loadpdi,46,4812 +fused_transactions_loadpdi,47,4820 +fused_transactions_loadpdi,48,4817 +fused_transactions_loadpdi,49,4814 +fused_transactions_loadpdi,50,4808 +fused_transactions_loadpdi,51,4815 +fused_transactions_loadpdi,52,4818 +fused_transactions_loadpdi,53,4817 +fused_transactions_loadpdi,54,4815 +fused_transactions_loadpdi,55,4821 +fused_transactions_loadpdi,56,4817 +fused_transactions_loadpdi,57,4818 +fused_transactions_loadpdi,58,4804 +fused_transactions_loadpdi,59,4803 +fused_transactions_loadpdi,60,4815 +fused_transactions_loadpdi,61,4816 +fused_transactions_loadpdi,62,4821 +fused_transactions_loadpdi,63,4809 +fused_transactions_loadpdi,64,4805 +fused_transactions_loadpdi,65,4820 +fused_transactions_loadpdi,66,4815 +fused_transactions_loadpdi,67,4816 +fused_transactions_loadpdi,68,4822 +fused_transactions_loadpdi,69,4820 +fused_transactions_loadpdi,70,4812 +fused_transactions_loadpdi,71,4818 +fused_transactions_loadpdi,72,4817 +fused_transactions_loadpdi,73,4813 +fused_transactions_loadpdi,74,4810 +fused_transactions_loadpdi,75,4814 +fused_transactions_loadpdi,76,4820 +fused_transactions_loadpdi,77,4816 +fused_transactions_loadpdi,78,4818 +fused_transactions_loadpdi,79,4843 +fused_transactions_loadpdi,80,4835 +fused_transactions_loadpdi,81,4836 +fused_transactions_loadpdi,82,4827 +fused_transactions_loadpdi,83,4832 +fused_transactions_loadpdi,84,4835 +fused_transactions_loadpdi,85,4835 +fused_transactions_loadpdi,86,4834 +fused_transactions_loadpdi,87,4833 +fused_transactions_loadpdi,88,4825 +fused_transactions_loadpdi,89,4826 +fused_transactions_loadpdi,90,4832 +fused_transactions_loadpdi,91,4828 +fused_transactions_loadpdi,92,4829 +fused_transactions_loadpdi,93,4830 +fused_transactions_loadpdi,94,4832 +fused_transactions_loadpdi,95,4829 +fused_transactions_loadpdi,96,4825 +fused_transactions_loadpdi,97,4831 +fused_transactions_loadpdi,98,4827 +fused_transactions_loadpdi,99,4825 +fused_transactions_loadpdi,100,4833 +fused_transactions_loadpdi,101,4835 +fused_transactions_loadpdi,102,4828 +fused_transactions_loadpdi,103,4825 +fused_transactions_loadpdi,104,4827 +fused_transactions_loadpdi,105,4826 +fused_transactions_loadpdi,106,4841 +fused_transactions_loadpdi,107,4838 +fused_transactions_loadpdi,108,4841 +fused_transactions_loadpdi,109,4826 +fused_transactions_loadpdi,110,4822 +fused_transactions_loadpdi,111,4824 +fused_transactions_loadpdi,112,4835 +fused_transactions_loadpdi,113,4828 +fused_transactions_loadpdi,114,4835 +fused_transactions_loadpdi,115,4827 +fused_transactions_loadpdi,116,4840 +fused_transactions_loadpdi,117,4826 +fused_transactions_loadpdi,118,4827 +fused_transactions_loadpdi,119,4825 +fused_transactions_loadpdi,120,4831 +fused_transactions_loadpdi,121,4834 +fused_transactions_loadpdi,122,4829 +fused_transactions_loadpdi,123,4832 +fused_transactions_loadpdi,124,4830 +fused_transactions_loadpdi,125,4831 +fused_transactions_loadpdi,126,4836 +fused_transactions_loadpdi,127,4826 +fused_transactions_loadpdi,128,4823 +fused_transactions_loadpdi,129,4826 +fused_transactions_loadpdi,130,4829 +fused_transactions_loadpdi,131,4825 +fused_transactions_loadpdi,132,4821 +fused_transactions_loadpdi,133,4826 +fused_transactions_loadpdi,134,4828 +fused_transactions_loadpdi,135,4825 +fused_transactions_loadpdi,136,4831 +fused_transactions_loadpdi,137,4833 +fused_transactions_loadpdi,138,4835 +fused_transactions_loadpdi,139,4822 +fused_transactions_loadpdi,140,4826 +fused_transactions_loadpdi,141,4832 +fused_transactions_loadpdi,142,4830 +fused_transactions_loadpdi,143,4827 +fused_transactions_loadpdi,144,4824 +fused_transactions_loadpdi,145,4828 +fused_transactions_loadpdi,146,4849 +fused_transactions_loadpdi,147,4887 +fused_transactions_loadpdi,148,4845 +fused_transactions_loadpdi,149,4840 +fused_transactions_loadpdi,150,4842 +fused_transactions_loadpdi,151,4840 +fused_transactions_loadpdi,152,4809 +fused_transactions_loadpdi,153,4807 +fused_transactions_loadpdi,154,4808 +fused_transactions_loadpdi,155,4807 +fused_transactions_loadpdi,156,4800 +fused_transactions_loadpdi,157,4825 +fused_transactions_loadpdi,158,4825 +fused_transactions_loadpdi,159,4827 +fused_transactions_loadpdi,160,4819 +fused_transactions_loadpdi,161,4833 +fused_transactions_loadpdi,162,4829 +fused_transactions_loadpdi,163,4826 +fused_transactions_loadpdi,164,4826 +fused_transactions_loadpdi,165,4824 +fused_transactions_loadpdi,166,4826 +fused_transactions_loadpdi,167,4827 +fused_transactions_loadpdi,168,4831 +fused_transactions_loadpdi,169,4820 +fused_transactions_loadpdi,170,4828 +fused_transactions_loadpdi,171,4824 +fused_transactions_loadpdi,172,4822 +fused_transactions_loadpdi,173,4829 +fused_transactions_loadpdi,174,4828 +fused_transactions_loadpdi,175,4818 +fused_transactions_loadpdi,176,4826 +fused_transactions_loadpdi,177,4825 +fused_transactions_loadpdi,178,4816 +fused_transactions_loadpdi,179,4828 +fused_transactions_loadpdi,180,4834 +fused_transactions_loadpdi,181,4831 +fused_transactions_loadpdi,182,4821 +fused_transactions_loadpdi,183,4827 +fused_transactions_loadpdi,184,4824 +fused_transactions_loadpdi,185,4820 +fused_transactions_loadpdi,186,4828 +fused_transactions_loadpdi,187,4821 +fused_transactions_loadpdi,188,4828 +fused_transactions_loadpdi,189,4823 +fused_transactions_loadpdi,190,4823 +fused_transactions_loadpdi,191,4832 +fused_transactions_loadpdi,192,4823 +fused_transactions_loadpdi,193,4822 +fused_transactions_loadpdi,194,4830 +fused_transactions_loadpdi,195,4826 +fused_transactions_loadpdi,196,4823 +fused_transactions_loadpdi,197,4824 +fused_transactions_loadpdi,198,4824 +fused_transactions_loadpdi,199,4826 +fused_transactions_loadpdi,200,4829 +fused_transactions_loadpdi,201,4827 +fused_transactions_loadpdi,202,4827 +fused_transactions_loadpdi,203,4829 +fused_transactions_loadpdi,204,4826 +fused_transactions_loadpdi,205,4827 +fused_transactions_loadpdi,206,4827 +fused_transactions_loadpdi,207,4825 +fused_transactions_loadpdi,208,4827 +fused_transactions_loadpdi,209,4832 +fused_transactions_loadpdi,210,4822 +fused_transactions_loadpdi,211,4837 +fused_transactions_loadpdi,212,4841 +fused_transactions_loadpdi,213,4825 +fused_transactions_loadpdi,214,4827 +fused_transactions_loadpdi,215,4824 +fused_transactions_loadpdi,216,4828 +fused_transactions_loadpdi,217,4822 +fused_transactions_loadpdi,218,4826 +fused_transactions_loadpdi,219,4819 +fused_transactions_loadpdi,220,4824 +fused_transactions_loadpdi,221,4823 +fused_transactions_loadpdi,222,4824 +fused_transactions_loadpdi,223,4832 +fused_transactions_loadpdi,224,4831 +fused_transactions_loadpdi,225,4822 +fused_transactions_loadpdi,226,4824 +fused_transactions_loadpdi,227,4827 +fused_transactions_loadpdi,228,4830 +fused_transactions_loadpdi,229,4826 +fused_transactions_loadpdi,230,4831 +fused_transactions_loadpdi,231,4826 +fused_transactions_loadpdi,232,4826 +fused_transactions_loadpdi,233,4827 +fused_transactions_loadpdi,234,4826 +fused_transactions_loadpdi,235,4822 +fused_transactions_loadpdi,236,4820 +fused_transactions_loadpdi,237,4831 +fused_transactions_loadpdi,238,4822 +fused_transactions_loadpdi,239,4826 +fused_transactions_loadpdi,240,4828 +fused_transactions_loadpdi,241,4822 +fused_transactions_loadpdi,242,4825 +fused_transactions_loadpdi,243,4832 +fused_transactions_loadpdi,244,4827 +fused_transactions_loadpdi,245,4826 +fused_transactions_loadpdi,246,4828 +fused_transactions_loadpdi,247,4832 +fused_transactions_loadpdi,248,4828 +fused_transactions_loadpdi,249,4831 +fused_transactions_loadpdi,250,4823 +fused_transactions_loadpdi,251,4827 +fused_transactions_loadpdi,252,4834 +fused_transactions_loadpdi,253,4827 +fused_transactions_loadpdi,254,4828 +fused_transactions_loadpdi,255,4832 +fused_transactions_loadpdi,256,4825 +fused_transactions_loadpdi,257,4832 +fused_transactions_loadpdi,258,4826 +fused_transactions_loadpdi,259,4826 +fused_transactions_loadpdi,260,4825 +fused_transactions_loadpdi,261,4825 +fused_transactions_loadpdi,262,4823 +fused_transactions_loadpdi,263,4824 +fused_transactions_loadpdi,264,4837 +fused_transactions_loadpdi,265,4825 +fused_transactions_loadpdi,266,4822 +fused_transactions_loadpdi,267,4832 +fused_transactions_loadpdi,268,4831 +fused_transactions_loadpdi,269,4826 +fused_transactions_loadpdi,270,4827 +fused_transactions_loadpdi,271,4828 +fused_transactions_loadpdi,272,4827 +fused_transactions_loadpdi,273,4828 +fused_transactions_loadpdi,274,4829 +fused_transactions_loadpdi,275,4823 +fused_transactions_loadpdi,276,4825 +fused_transactions_loadpdi,277,4826 +fused_transactions_loadpdi,278,4824 +fused_transactions_loadpdi,279,4827 +fused_transactions_loadpdi,280,4830 +fused_transactions_loadpdi,281,4828 +fused_transactions_loadpdi,282,4827 +fused_transactions_loadpdi,283,4820 +fused_transactions_loadpdi,284,4829 +fused_transactions_loadpdi,285,4830 +fused_transactions_loadpdi,286,4828 +fused_transactions_loadpdi,287,4841 +fused_transactions_loadpdi,288,4832 +fused_transactions_loadpdi,289,4832 +fused_transactions_loadpdi,290,4828 +fused_transactions_loadpdi,291,4829 +fused_transactions_loadpdi,292,4839 +fused_transactions_loadpdi,293,4827 +fused_transactions_loadpdi,294,4834 +fused_transactions_loadpdi,295,4834 +fused_transactions_loadpdi,296,4832 +fused_transactions_loadpdi,297,4837 +fused_transactions_loadpdi,298,4836 +fused_transactions_loadpdi,299,4832 +fused_transactions_loadpdi,300,4837 +fused_transactions_loadpdi,301,4833 +fused_transactions_loadpdi,302,4830 +fused_transactions_loadpdi,303,4829 +fused_transactions_loadpdi,304,4827 +fused_transactions_loadpdi,305,4830 +fused_transactions_loadpdi,306,4823 +fused_transactions_loadpdi,307,4824 +fused_transactions_loadpdi,308,4824 +fused_transactions_loadpdi,309,4829 +fused_transactions_loadpdi,310,4823 +fused_transactions_loadpdi,311,4827 +fused_transactions_loadpdi,312,4827 +fused_transactions_loadpdi,313,4830 +fused_transactions_loadpdi,314,4827 +fused_transactions_loadpdi,315,4832 +fused_transactions_loadpdi,316,4827 +fused_transactions_loadpdi,317,4827 +fused_transactions_loadpdi,318,4830 +fused_transactions_loadpdi,319,4834 +fused_transactions_loadpdi,320,4830 +fused_transactions_loadpdi,321,4825 +fused_transactions_loadpdi,322,4824 +fused_transactions_loadpdi,323,4824 +fused_transactions_loadpdi,324,4830 +fused_transactions_loadpdi,325,4831 +fused_transactions_loadpdi,326,4826 +fused_transactions_loadpdi,327,4828 +fused_transactions_loadpdi,328,4815 +fused_transactions_loadpdi,329,4835 +fused_transactions_loadpdi,330,4826 +fused_transactions_loadpdi,331,4831 +fused_transactions_loadpdi,332,4826 +fused_transactions_loadpdi,333,4837 +fused_transactions_loadpdi,334,4839 +fused_transactions_loadpdi,335,4837 +fused_transactions_loadpdi,336,4821 +fused_transactions_loadpdi,337,4829 +fused_transactions_loadpdi,338,4828 +fused_transactions_loadpdi,339,4825 +fused_transactions_loadpdi,340,4830 +fused_transactions_loadpdi,341,4825 +fused_transactions_loadpdi,342,4831 +fused_transactions_loadpdi,343,4829 +fused_transactions_loadpdi,344,4829 +fused_transactions_loadpdi,345,4826 +fused_transactions_loadpdi,346,4833 +fused_transactions_loadpdi,347,4823 +fused_transactions_loadpdi,348,4820 +fused_transactions_loadpdi,349,4833 +fused_transactions_loadpdi,350,4836 +fused_transactions_loadpdi,351,4823 +fused_transactions_loadpdi,352,4835 +fused_transactions_loadpdi,353,4826 +fused_transactions_loadpdi,354,4831 +fused_transactions_loadpdi,355,4825 +fused_transactions_loadpdi,356,4833 +fused_transactions_loadpdi,357,4827 +fused_transactions_loadpdi,358,4828 +fused_transactions_loadpdi,359,4862 +fused_transactions_loadpdi,360,4865 +fused_transactions_loadpdi,361,4832 +fused_transactions_loadpdi,362,4825 +fused_transactions_loadpdi,363,4825 +fused_transactions_loadpdi,364,4823 +fused_transactions_loadpdi,365,4829 +fused_transactions_loadpdi,366,4833 +fused_transactions_loadpdi,367,4828 +fused_transactions_loadpdi,368,4831 +fused_transactions_loadpdi,369,4827 +fused_transactions_loadpdi,370,4832 +fused_transactions_loadpdi,371,4827 +fused_transactions_loadpdi,372,4830 +fused_transactions_loadpdi,373,4835 +fused_transactions_loadpdi,374,4826 +fused_transactions_loadpdi,375,4847 +fused_transactions_loadpdi,376,4830 +fused_transactions_loadpdi,377,4829 +fused_transactions_loadpdi,378,4829 +fused_transactions_loadpdi,379,4821 +fused_transactions_loadpdi,380,4825 +fused_transactions_loadpdi,381,4831 +fused_transactions_loadpdi,382,4832 +fused_transactions_loadpdi,383,4824 +fused_transactions_loadpdi,384,4831 +fused_transactions_loadpdi,385,4827 +fused_transactions_loadpdi,386,4825 +fused_transactions_loadpdi,387,4828 +fused_transactions_loadpdi,388,4825 +fused_transactions_loadpdi,389,4828 +fused_transactions_loadpdi,390,4823 +fused_transactions_loadpdi,391,4831 +fused_transactions_loadpdi,392,4828 +fused_transactions_loadpdi,393,4825 +fused_transactions_loadpdi,394,4825 +fused_transactions_loadpdi,395,4834 +fused_transactions_loadpdi,396,4827 +fused_transactions_loadpdi,397,4839 +fused_transactions_loadpdi,398,4835 +fused_transactions_loadpdi,399,4828 +fused_transactions_loadpdi,400,4834 +fused_transactions_loadpdi,401,4825 +fused_transactions_loadpdi,402,4834 +fused_transactions_loadpdi,403,4829 +fused_transactions_loadpdi,404,4825 +fused_transactions_loadpdi,405,4831 +fused_transactions_loadpdi,406,4836 +fused_transactions_loadpdi,407,4827 +fused_transactions_loadpdi,408,4830 +fused_transactions_loadpdi,409,4839 +fused_transactions_loadpdi,410,4832 +fused_transactions_loadpdi,411,4830 +fused_transactions_loadpdi,412,4829 +fused_transactions_loadpdi,413,4828 +fused_transactions_loadpdi,414,4833 +fused_transactions_loadpdi,415,4836 +fused_transactions_loadpdi,416,4839 +fused_transactions_loadpdi,417,4832 +fused_transactions_loadpdi,418,4825 +fused_transactions_loadpdi,419,4829 +fused_transactions_loadpdi,420,4822 +fused_transactions_loadpdi,421,4835 +fused_transactions_loadpdi,422,4823 +fused_transactions_loadpdi,423,4831 +fused_transactions_loadpdi,424,4823 +fused_transactions_loadpdi,425,4823 +fused_transactions_loadpdi,426,4824 +fused_transactions_loadpdi,427,4827 +fused_transactions_loadpdi,428,4829 +fused_transactions_loadpdi,429,4825 +fused_transactions_loadpdi,430,4831 +fused_transactions_loadpdi,431,4824 +fused_transactions_loadpdi,432,4826 +fused_transactions_loadpdi,433,4826 +fused_transactions_loadpdi,434,4820 +fused_transactions_loadpdi,435,4819 +fused_transactions_loadpdi,436,4824 +fused_transactions_loadpdi,437,4825 +fused_transactions_loadpdi,438,4845 +fused_transactions_loadpdi,439,4828 +fused_transactions_loadpdi,440,4829 +fused_transactions_loadpdi,441,4827 +fused_transactions_loadpdi,442,4825 +fused_transactions_loadpdi,443,4827 +fused_transactions_loadpdi,444,4831 +fused_transactions_loadpdi,445,4829 +fused_transactions_loadpdi,446,4822 +fused_transactions_loadpdi,447,4826 +fused_transactions_loadpdi,448,4825 +fused_transactions_loadpdi,449,4829 +fused_transactions_loadpdi,450,4822 +fused_transactions_loadpdi,451,4822 +fused_transactions_loadpdi,452,4826 +fused_transactions_loadpdi,453,4831 +fused_transactions_loadpdi,454,4830 +fused_transactions_loadpdi,455,4822 +fused_transactions_loadpdi,456,4826 +fused_transactions_loadpdi,457,4826 +fused_transactions_loadpdi,458,4835 +fused_transactions_loadpdi,459,4824 +fused_transactions_loadpdi,460,4825 +fused_transactions_loadpdi,461,4830 +fused_transactions_loadpdi,462,4826 +fused_transactions_loadpdi,463,4821 +fused_transactions_loadpdi,464,4829 +fused_transactions_loadpdi,465,4821 +fused_transactions_loadpdi,466,4832 +fused_transactions_loadpdi,467,4817 +fused_transactions_loadpdi,468,4832 +fused_transactions_loadpdi,469,4826 +fused_transactions_loadpdi,470,4822 +fused_transactions_loadpdi,471,4826 +fused_transactions_loadpdi,472,4826 +fused_transactions_loadpdi,473,4818 +fused_transactions_loadpdi,474,4821 +fused_transactions_loadpdi,475,4828 +fused_transactions_loadpdi,476,4832 +fused_transactions_loadpdi,477,4832 +fused_transactions_loadpdi,478,4835 +fused_transactions_loadpdi,479,4826 +fused_transactions_loadpdi,480,4829 +fused_transactions_loadpdi,481,4824 +fused_transactions_loadpdi,482,4825 +fused_transactions_loadpdi,483,4821 +fused_transactions_loadpdi,484,4824 +fused_transactions_loadpdi,485,4821 +fused_transactions_loadpdi,486,4824 +fused_transactions_loadpdi,487,4826 +fused_transactions_loadpdi,488,4824 +fused_transactions_loadpdi,489,4827 +fused_transactions_loadpdi,490,4826 +fused_transactions_loadpdi,491,4822 +fused_transactions_loadpdi,492,4827 +fused_transactions_loadpdi,493,4829 +fused_transactions_loadpdi,494,4823 +fused_transactions_loadpdi,495,4830 +fused_transactions_loadpdi,496,4828 +fused_transactions_loadpdi,497,4824 +fused_transactions_loadpdi,498,4830 +fused_transactions_loadpdi,499,4843 +fused_transactions_loadpdi,500,4837 +fused_transactions_loadpdi,501,4831 +fused_transactions_loadpdi,502,4829 +fused_transactions_loadpdi,503,4828 +fused_transactions_loadpdi,504,4821 +fused_transactions_loadpdi,505,4830 +fused_transactions_loadpdi,506,4829 +fused_transactions_loadpdi,507,4829 +fused_transactions_loadpdi,508,4828 +fused_transactions_loadpdi,509,4830 +fused_transactions_loadpdi,510,4833 +fused_transactions_loadpdi,511,4825 +fused_transactions_loadpdi,512,4836 +fused_transactions_loadpdi,513,4829 +fused_transactions_loadpdi,514,4839 +fused_transactions_loadpdi,515,4821 +fused_transactions_loadpdi,516,4829 +fused_transactions_loadpdi,517,4833 +fused_transactions_loadpdi,518,4835 +fused_transactions_loadpdi,519,4828 +fused_transactions_loadpdi,520,4846 +fused_transactions_loadpdi,521,4833 +fused_transactions_loadpdi,522,4830 +fused_transactions_loadpdi,523,4831 +fused_transactions_loadpdi,524,4828 +fused_transactions_loadpdi,525,4829 +fused_transactions_loadpdi,526,4818 +fused_transactions_loadpdi,527,4840 +fused_transactions_loadpdi,528,4836 +fused_transactions_loadpdi,529,4827 +fused_transactions_loadpdi,530,4822 +fused_transactions_loadpdi,531,4830 +fused_transactions_loadpdi,532,4825 +fused_transactions_loadpdi,533,4826 +fused_transactions_loadpdi,534,4826 +fused_transactions_loadpdi,535,4824 +fused_transactions_loadpdi,536,4829 +fused_transactions_loadpdi,537,4824 +fused_transactions_loadpdi,538,4825 +fused_transactions_loadpdi,539,4824 +fused_transactions_loadpdi,540,4826 +fused_transactions_loadpdi,541,4827 +fused_transactions_loadpdi,542,4825 +fused_transactions_loadpdi,543,4826 +fused_transactions_loadpdi,544,4818 +fused_transactions_loadpdi,545,4821 +fused_transactions_loadpdi,546,4823 +fused_transactions_loadpdi,547,4828 +fused_transactions_loadpdi,548,4825 +fused_transactions_loadpdi,549,4825 +fused_transactions_loadpdi,550,4832 +fused_transactions_loadpdi,551,4817 +fused_transactions_loadpdi,552,4822 +fused_transactions_loadpdi,553,4827 +fused_transactions_loadpdi,554,4831 +fused_transactions_loadpdi,555,4821 +fused_transactions_loadpdi,556,4823 +fused_transactions_loadpdi,557,4818 +fused_transactions_loadpdi,558,4824 +fused_transactions_loadpdi,559,4826 +fused_transactions_loadpdi,560,4824 +fused_transactions_loadpdi,561,4826 +fused_transactions_loadpdi,562,4829 +fused_transactions_loadpdi,563,4822 +fused_transactions_loadpdi,564,4821 +fused_transactions_loadpdi,565,4830 +fused_transactions_loadpdi,566,4817 +fused_transactions_loadpdi,567,4813 +fused_transactions_loadpdi,568,4820 +fused_transactions_loadpdi,569,4827 +fused_transactions_loadpdi,570,4827 +fused_transactions_loadpdi,571,4829 +fused_transactions_loadpdi,572,4828 +fused_transactions_loadpdi,573,4819 +fused_transactions_loadpdi,574,4825 +fused_transactions_loadpdi,575,4821 +fused_transactions_loadpdi,576,4832 +fused_transactions_loadpdi,577,4825 +fused_transactions_loadpdi,578,4830 +fused_transactions_loadpdi,579,4826 +fused_transactions_loadpdi,580,4830 +fused_transactions_loadpdi,581,4825 +fused_transactions_loadpdi,582,4829 +fused_transactions_loadpdi,583,4828 +fused_transactions_loadpdi,584,4825 +fused_transactions_loadpdi,585,4822 +fused_transactions_loadpdi,586,4827 +fused_transactions_loadpdi,587,4822 +fused_transactions_loadpdi,588,4829 +fused_transactions_loadpdi,589,4829 +fused_transactions_loadpdi,590,4829 +fused_transactions_loadpdi,591,4823 +fused_transactions_loadpdi,592,4822 +fused_transactions_loadpdi,593,4828 +fused_transactions_loadpdi,594,4811 +fused_transactions_loadpdi,595,4805 +fused_transactions_loadpdi,596,4809 +fused_transactions_loadpdi,597,4808 +fused_transactions_loadpdi,598,4800 +fused_transactions_loadpdi,599,4809 +fused_transactions_loadpdi,600,4803 +fused_transactions_loadpdi,601,4810 +fused_transactions_loadpdi,602,4813 +fused_transactions_loadpdi,603,4808 +fused_transactions_loadpdi,604,4810 +fused_transactions_loadpdi,605,4804 +fused_transactions_loadpdi,606,4805 +fused_transactions_loadpdi,607,4801 +fused_transactions_loadpdi,608,4814 +fused_transactions_loadpdi,609,4810 +fused_transactions_loadpdi,610,4820 +fused_transactions_loadpdi,611,4823 +fused_transactions_loadpdi,612,4815 +fused_transactions_loadpdi,613,4812 +fused_transactions_loadpdi,614,4815 +fused_transactions_loadpdi,615,4818 +fused_transactions_loadpdi,616,4813 +fused_transactions_loadpdi,617,4819 +fused_transactions_loadpdi,618,4811 +fused_transactions_loadpdi,619,4815 +fused_transactions_loadpdi,620,4819 +fused_transactions_loadpdi,621,4812 +fused_transactions_loadpdi,622,4819 +fused_transactions_loadpdi,623,4816 +fused_transactions_loadpdi,624,4814 +fused_transactions_loadpdi,625,4810 +fused_transactions_loadpdi,626,4812 +fused_transactions_loadpdi,627,4817 +fused_transactions_loadpdi,628,4818 +fused_transactions_loadpdi,629,4813 +fused_transactions_loadpdi,630,4811 +fused_transactions_loadpdi,631,4822 +fused_transactions_loadpdi,632,4832 +fused_transactions_loadpdi,633,4821 +fused_transactions_loadpdi,634,4815 +fused_transactions_loadpdi,635,4817 +fused_transactions_loadpdi,636,4818 +fused_transactions_loadpdi,637,4813 +fused_transactions_loadpdi,638,4816 +fused_transactions_loadpdi,639,4810 +fused_transactions_loadpdi,640,4811 +fused_transactions_loadpdi,641,4818 +fused_transactions_loadpdi,642,4813 +fused_transactions_loadpdi,643,4816 +fused_transactions_loadpdi,644,4817 +fused_transactions_loadpdi,645,4809 +fused_transactions_loadpdi,646,4814 +fused_transactions_loadpdi,647,4821 +fused_transactions_loadpdi,648,4814 +fused_transactions_loadpdi,649,4814 +fused_transactions_loadpdi,650,4818 +fused_transactions_loadpdi,651,4820 +fused_transactions_loadpdi,652,4816 +fused_transactions_loadpdi,653,4817 +fused_transactions_loadpdi,654,4813 +fused_transactions_loadpdi,655,4814 +fused_transactions_loadpdi,656,4813 +fused_transactions_loadpdi,657,4815 +fused_transactions_loadpdi,658,4817 +fused_transactions_loadpdi,659,4816 +fused_transactions_loadpdi,660,4818 +fused_transactions_loadpdi,661,4822 +fused_transactions_loadpdi,662,4814 +fused_transactions_loadpdi,663,4813 +fused_transactions_loadpdi,664,4819 +fused_transactions_loadpdi,665,4823 +fused_transactions_loadpdi,666,4818 +fused_transactions_loadpdi,667,4815 +fused_transactions_loadpdi,668,4812 +fused_transactions_loadpdi,669,4829 +fused_transactions_loadpdi,670,4815 +fused_transactions_loadpdi,671,4814 +fused_transactions_loadpdi,672,4817 +fused_transactions_loadpdi,673,4821 +fused_transactions_loadpdi,674,4813 +fused_transactions_loadpdi,675,4824 +fused_transactions_loadpdi,676,4818 +fused_transactions_loadpdi,677,4816 +fused_transactions_loadpdi,678,4816 +fused_transactions_loadpdi,679,4819 +fused_transactions_loadpdi,680,4821 +fused_transactions_loadpdi,681,4815 +fused_transactions_loadpdi,682,4816 +fused_transactions_loadpdi,683,4819 +fused_transactions_loadpdi,684,4811 +fused_transactions_loadpdi,685,4801 +fused_transactions_loadpdi,686,4820 +fused_transactions_loadpdi,687,4814 +fused_transactions_loadpdi,688,4815 +fused_transactions_loadpdi,689,4812 +fused_transactions_loadpdi,690,4814 +fused_transactions_loadpdi,691,4815 +fused_transactions_loadpdi,692,4813 +fused_transactions_loadpdi,693,4818 +fused_transactions_loadpdi,694,4812 +fused_transactions_loadpdi,695,4822 +fused_transactions_loadpdi,696,4821 +fused_transactions_loadpdi,697,4811 +fused_transactions_loadpdi,698,4811 +fused_transactions_loadpdi,699,4823 +fused_transactions_loadpdi,700,4813 +fused_transactions_loadpdi,701,4814 +fused_transactions_loadpdi,702,4810 +fused_transactions_loadpdi,703,4816 +fused_transactions_loadpdi,704,4815 +fused_transactions_loadpdi,705,4813 +fused_transactions_loadpdi,706,4818 +fused_transactions_loadpdi,707,4812 +fused_transactions_loadpdi,708,4823 +fused_transactions_loadpdi,709,4811 +fused_transactions_loadpdi,710,4809 +fused_transactions_loadpdi,711,4817 +fused_transactions_loadpdi,712,4819 +fused_transactions_loadpdi,713,4815 +fused_transactions_loadpdi,714,4816 +fused_transactions_loadpdi,715,4818 +fused_transactions_loadpdi,716,4815 +fused_transactions_loadpdi,717,4820 +fused_transactions_loadpdi,718,4811 +fused_transactions_loadpdi,719,4821 +fused_transactions_loadpdi,720,4813 +fused_transactions_loadpdi,721,4812 +fused_transactions_loadpdi,722,4816 +fused_transactions_loadpdi,723,4814 +fused_transactions_loadpdi,724,4811 +fused_transactions_loadpdi,725,4818 +fused_transactions_loadpdi,726,4824 +fused_transactions_loadpdi,727,4819 +fused_transactions_loadpdi,728,4814 +fused_transactions_loadpdi,729,4818 +fused_transactions_loadpdi,730,4817 +fused_transactions_loadpdi,731,4821 +fused_transactions_loadpdi,732,4811 +fused_transactions_loadpdi,733,4815 +fused_transactions_loadpdi,734,4813 +fused_transactions_loadpdi,735,4817 +fused_transactions_loadpdi,736,4814 +fused_transactions_loadpdi,737,4841 +fused_transactions_loadpdi,738,4826 +fused_transactions_loadpdi,739,4820 +fused_transactions_loadpdi,740,4828 +fused_transactions_loadpdi,741,4816 +fused_transactions_loadpdi,742,4815 +fused_transactions_loadpdi,743,4814 +fused_transactions_loadpdi,744,4809 +fused_transactions_loadpdi,745,4822 +fused_transactions_loadpdi,746,4823 +fused_transactions_loadpdi,747,4812 +fused_transactions_loadpdi,748,4818 +fused_transactions_loadpdi,749,4817 +fused_transactions_loadpdi,750,4814 +fused_transactions_loadpdi,751,4817 +fused_transactions_loadpdi,752,4809 +fused_transactions_loadpdi,753,4808 +fused_transactions_loadpdi,754,4822 +fused_transactions_loadpdi,755,4818 +fused_transactions_loadpdi,756,4812 +fused_transactions_loadpdi,757,4812 +fused_transactions_loadpdi,758,4808 +fused_transactions_loadpdi,759,4819 +fused_transactions_loadpdi,760,4812 +fused_transactions_loadpdi,761,4818 +fused_transactions_loadpdi,762,4817 +fused_transactions_loadpdi,763,4816 +fused_transactions_loadpdi,764,4815 +fused_transactions_loadpdi,765,4809 +fused_transactions_loadpdi,766,4814 +fused_transactions_loadpdi,767,4818 +fused_transactions_loadpdi,768,4818 +fused_transactions_loadpdi,769,4822 +fused_transactions_loadpdi,770,4816 +fused_transactions_loadpdi,771,4812 +fused_transactions_loadpdi,772,4814 +fused_transactions_loadpdi,773,4817 +fused_transactions_loadpdi,774,4817 +fused_transactions_loadpdi,775,4819 +fused_transactions_loadpdi,776,4817 +fused_transactions_loadpdi,777,4813 +fused_transactions_loadpdi,778,4820 +fused_transactions_loadpdi,779,4807 +fused_transactions_loadpdi,780,4819 +fused_transactions_loadpdi,781,4814 +fused_transactions_loadpdi,782,4814 +fused_transactions_loadpdi,783,4811 +fused_transactions_loadpdi,784,4812 +fused_transactions_loadpdi,785,4818 +fused_transactions_loadpdi,786,4824 +fused_transactions_loadpdi,787,4814 +fused_transactions_loadpdi,788,4809 +fused_transactions_loadpdi,789,4816 +fused_transactions_loadpdi,790,4814 +fused_transactions_loadpdi,791,4821 +fused_transactions_loadpdi,792,4819 +fused_transactions_loadpdi,793,4817 +fused_transactions_loadpdi,794,4818 +fused_transactions_loadpdi,795,4816 +fused_transactions_loadpdi,796,4815 +fused_transactions_loadpdi,797,4807 +fused_transactions_loadpdi,798,4818 +fused_transactions_loadpdi,799,4820 +fused_transactions_loadpdi,800,4818 +fused_transactions_loadpdi,801,4811 +fused_transactions_loadpdi,802,4816 +fused_transactions_loadpdi,803,4818 +fused_transactions_loadpdi,804,4811 +fused_transactions_loadpdi,805,4816 +fused_transactions_loadpdi,806,4816 +fused_transactions_loadpdi,807,4814 +fused_transactions_loadpdi,808,4855 +fused_transactions_loadpdi,809,4855 +fused_transactions_loadpdi,810,4869 +fused_transactions_loadpdi,811,4821 +fused_transactions_loadpdi,812,4811 +fused_transactions_loadpdi,813,4814 +fused_transactions_loadpdi,814,4811 +fused_transactions_loadpdi,815,4813 +fused_transactions_loadpdi,816,4814 +fused_transactions_loadpdi,817,4814 +fused_transactions_loadpdi,818,4809 +fused_transactions_loadpdi,819,4813 +fused_transactions_loadpdi,820,4813 +fused_transactions_loadpdi,821,4814 +fused_transactions_loadpdi,822,4812 +fused_transactions_loadpdi,823,4812 +fused_transactions_loadpdi,824,4811 +fused_transactions_loadpdi,825,4817 +fused_transactions_loadpdi,826,4813 +fused_transactions_loadpdi,827,4820 +fused_transactions_loadpdi,828,4814 +fused_transactions_loadpdi,829,4814 +fused_transactions_loadpdi,830,4814 +fused_transactions_loadpdi,831,4828 +fused_transactions_loadpdi,832,4818 +fused_transactions_loadpdi,833,4822 +fused_transactions_loadpdi,834,4823 +fused_transactions_loadpdi,835,4809 +fused_transactions_loadpdi,836,4809 +fused_transactions_loadpdi,837,4807 +fused_transactions_loadpdi,838,4821 +fused_transactions_loadpdi,839,4815 +fused_transactions_loadpdi,840,4810 +fused_transactions_loadpdi,841,4825 +fused_transactions_loadpdi,842,4828 +fused_transactions_loadpdi,843,4827 +fused_transactions_loadpdi,844,4834 +fused_transactions_loadpdi,845,4830 +fused_transactions_loadpdi,846,4823 +fused_transactions_loadpdi,847,4824 +fused_transactions_loadpdi,848,4819 +fused_transactions_loadpdi,849,4822 +fused_transactions_loadpdi,850,4825 +fused_transactions_loadpdi,851,4828 +fused_transactions_loadpdi,852,4833 +fused_transactions_loadpdi,853,4835 +fused_transactions_loadpdi,854,4831 +fused_transactions_loadpdi,855,4835 +fused_transactions_loadpdi,856,4825 +fused_transactions_loadpdi,857,4829 +fused_transactions_loadpdi,858,4825 +fused_transactions_loadpdi,859,4827 +fused_transactions_loadpdi,860,4822 +fused_transactions_loadpdi,861,4827 +fused_transactions_loadpdi,862,4825 +fused_transactions_loadpdi,863,4823 +fused_transactions_loadpdi,864,4825 +fused_transactions_loadpdi,865,4822 +fused_transactions_loadpdi,866,4830 +fused_transactions_loadpdi,867,4828 +fused_transactions_loadpdi,868,4824 +fused_transactions_loadpdi,869,4834 +fused_transactions_loadpdi,870,4830 +fused_transactions_loadpdi,871,4818 +fused_transactions_loadpdi,872,4825 +fused_transactions_loadpdi,873,4825 +fused_transactions_loadpdi,874,4828 +fused_transactions_loadpdi,875,4827 +fused_transactions_loadpdi,876,4823 +fused_transactions_loadpdi,877,4839 +fused_transactions_loadpdi,878,4821 +fused_transactions_loadpdi,879,4826 +fused_transactions_loadpdi,880,4820 +fused_transactions_loadpdi,881,4824 +fused_transactions_loadpdi,882,4825 +fused_transactions_loadpdi,883,4819 +fused_transactions_loadpdi,884,4825 +fused_transactions_loadpdi,885,4824 +fused_transactions_loadpdi,886,4824 +fused_transactions_loadpdi,887,4824 +fused_transactions_loadpdi,888,4821 +fused_transactions_loadpdi,889,4822 +fused_transactions_loadpdi,890,4822 +fused_transactions_loadpdi,891,4814 +fused_transactions_loadpdi,892,4829 +fused_transactions_loadpdi,893,4834 +fused_transactions_loadpdi,894,4828 +fused_transactions_loadpdi,895,4825 +fused_transactions_loadpdi,896,4828 +fused_transactions_loadpdi,897,4829 +fused_transactions_loadpdi,898,4825 +fused_transactions_loadpdi,899,4826 +fused_transactions_loadpdi,900,4822 +fused_transactions_loadpdi,901,4826 +fused_transactions_loadpdi,902,4818 +fused_transactions_loadpdi,903,4820 +fused_transactions_loadpdi,904,4827 +fused_transactions_loadpdi,905,4820 +fused_transactions_loadpdi,906,4825 +fused_transactions_loadpdi,907,4832 +fused_transactions_loadpdi,908,4826 +fused_transactions_loadpdi,909,4823 +fused_transactions_loadpdi,910,4819 +fused_transactions_loadpdi,911,4825 +fused_transactions_loadpdi,912,4829 +fused_transactions_loadpdi,913,4816 +fused_transactions_loadpdi,914,4829 +fused_transactions_loadpdi,915,4824 +fused_transactions_loadpdi,916,4824 +fused_transactions_loadpdi,917,4822 +fused_transactions_loadpdi,918,4826 +fused_transactions_loadpdi,919,4825 +fused_transactions_loadpdi,920,4822 +fused_transactions_loadpdi,921,4826 +fused_transactions_loadpdi,922,4820 +fused_transactions_loadpdi,923,4829 +fused_transactions_loadpdi,924,4833 +fused_transactions_loadpdi,925,4825 +fused_transactions_loadpdi,926,4820 +fused_transactions_loadpdi,927,4828 +fused_transactions_loadpdi,928,4832 +fused_transactions_loadpdi,929,4825 +fused_transactions_loadpdi,930,4822 +fused_transactions_loadpdi,931,4825 +fused_transactions_loadpdi,932,4823 +fused_transactions_loadpdi,933,4830 +fused_transactions_loadpdi,934,4822 +fused_transactions_loadpdi,935,4832 +fused_transactions_loadpdi,936,4821 +fused_transactions_loadpdi,937,4830 +fused_transactions_loadpdi,938,4833 +fused_transactions_loadpdi,939,4826 +fused_transactions_loadpdi,940,4824 +fused_transactions_loadpdi,941,4824 +fused_transactions_loadpdi,942,4830 +fused_transactions_loadpdi,943,4827 +fused_transactions_loadpdi,944,4841 +fused_transactions_loadpdi,945,4844 +fused_transactions_loadpdi,946,4821 +fused_transactions_loadpdi,947,4830 +fused_transactions_loadpdi,948,4824 +fused_transactions_loadpdi,949,4824 +fused_transactions_loadpdi,950,4828 +fused_transactions_loadpdi,951,4828 +fused_transactions_loadpdi,952,4826 +fused_transactions_loadpdi,953,4822 +fused_transactions_loadpdi,954,4822 +fused_transactions_loadpdi,955,4829 +fused_transactions_loadpdi,956,4823 +fused_transactions_loadpdi,957,4826 +fused_transactions_loadpdi,958,4836 +fused_transactions_loadpdi,959,4825 +fused_transactions_loadpdi,960,4821 +fused_transactions_loadpdi,961,4821 +fused_transactions_loadpdi,962,4821 +fused_transactions_loadpdi,963,4818 +fused_transactions_loadpdi,964,4827 +fused_transactions_loadpdi,965,4829 +fused_transactions_loadpdi,966,4824 +fused_transactions_loadpdi,967,4822 +fused_transactions_loadpdi,968,4825 +fused_transactions_loadpdi,969,4821 +fused_transactions_loadpdi,970,4826 +fused_transactions_loadpdi,971,4827 +fused_transactions_loadpdi,972,4820 +fused_transactions_loadpdi,973,4822 +fused_transactions_loadpdi,974,4825 +fused_transactions_loadpdi,975,4832 +fused_transactions_loadpdi,976,4825 +fused_transactions_loadpdi,977,4827 +fused_transactions_loadpdi,978,4829 +fused_transactions_loadpdi,979,4832 +fused_transactions_loadpdi,980,4824 +fused_transactions_loadpdi,981,4823 +fused_transactions_loadpdi,982,4822 +fused_transactions_loadpdi,983,4824 +fused_transactions_loadpdi,984,4829 +fused_transactions_loadpdi,985,4825 +fused_transactions_loadpdi,986,4821 +fused_transactions_loadpdi,987,4834 +fused_transactions_loadpdi,988,4810 +fused_transactions_loadpdi,989,4816 +fused_transactions_loadpdi,990,4810 +fused_transactions_loadpdi,991,4812 +fused_transactions_loadpdi,992,4816 +fused_transactions_loadpdi,993,4808 +fused_transactions_loadpdi,994,4809 +fused_transactions_loadpdi,995,4810 +fused_transactions_loadpdi,996,4812 +fused_transactions_loadpdi,997,4819 +fused_transactions_loadpdi,998,4811 +fused_transactions_loadpdi,999,4815 +fused_transactions_write32s,0,2325 +fused_transactions_write32s,1,2305 +fused_transactions_write32s,2,2295 +fused_transactions_write32s,3,2299 +fused_transactions_write32s,4,2297 +fused_transactions_write32s,5,2300 +fused_transactions_write32s,6,2300 +fused_transactions_write32s,7,2305 +fused_transactions_write32s,8,2304 +fused_transactions_write32s,9,2302 +fused_transactions_write32s,10,2295 +fused_transactions_write32s,11,2296 +fused_transactions_write32s,12,2293 +fused_transactions_write32s,13,2293 +fused_transactions_write32s,14,2304 +fused_transactions_write32s,15,2290 +fused_transactions_write32s,16,2302 +fused_transactions_write32s,17,2298 +fused_transactions_write32s,18,2298 +fused_transactions_write32s,19,2297 +fused_transactions_write32s,20,2298 +fused_transactions_write32s,21,2293 +fused_transactions_write32s,22,2293 +fused_transactions_write32s,23,2292 +fused_transactions_write32s,24,2298 +fused_transactions_write32s,25,2297 +fused_transactions_write32s,26,2303 +fused_transactions_write32s,27,2300 +fused_transactions_write32s,28,2301 +fused_transactions_write32s,29,2295 +fused_transactions_write32s,30,2296 +fused_transactions_write32s,31,2295 +fused_transactions_write32s,32,2294 +fused_transactions_write32s,33,2297 +fused_transactions_write32s,34,2294 +fused_transactions_write32s,35,2307 +fused_transactions_write32s,36,2293 +fused_transactions_write32s,37,2295 +fused_transactions_write32s,38,2301 +fused_transactions_write32s,39,2295 +fused_transactions_write32s,40,2293 +fused_transactions_write32s,41,2293 +fused_transactions_write32s,42,2294 +fused_transactions_write32s,43,2298 +fused_transactions_write32s,44,2296 +fused_transactions_write32s,45,2294 +fused_transactions_write32s,46,2296 +fused_transactions_write32s,47,2293 +fused_transactions_write32s,48,2297 +fused_transactions_write32s,49,2286 +fused_transactions_write32s,50,2292 +fused_transactions_write32s,51,2301 +fused_transactions_write32s,52,2302 +fused_transactions_write32s,53,2296 +fused_transactions_write32s,54,2298 +fused_transactions_write32s,55,2299 +fused_transactions_write32s,56,2293 +fused_transactions_write32s,57,2297 +fused_transactions_write32s,58,2294 +fused_transactions_write32s,59,2292 +fused_transactions_write32s,60,2294 +fused_transactions_write32s,61,2293 +fused_transactions_write32s,62,2296 +fused_transactions_write32s,63,2293 +fused_transactions_write32s,64,2294 +fused_transactions_write32s,65,2294 +fused_transactions_write32s,66,2293 +fused_transactions_write32s,67,2297 +fused_transactions_write32s,68,2301 +fused_transactions_write32s,69,2298 +fused_transactions_write32s,70,2295 +fused_transactions_write32s,71,2297 +fused_transactions_write32s,72,2295 +fused_transactions_write32s,73,2296 +fused_transactions_write32s,74,2293 +fused_transactions_write32s,75,2297 +fused_transactions_write32s,76,2298 +fused_transactions_write32s,77,2296 +fused_transactions_write32s,78,2297 +fused_transactions_write32s,79,2297 +fused_transactions_write32s,80,2297 +fused_transactions_write32s,81,2297 +fused_transactions_write32s,82,2297 +fused_transactions_write32s,83,2297 +fused_transactions_write32s,84,2296 +fused_transactions_write32s,85,2293 +fused_transactions_write32s,86,2298 +fused_transactions_write32s,87,2296 +fused_transactions_write32s,88,2301 +fused_transactions_write32s,89,2295 +fused_transactions_write32s,90,2300 +fused_transactions_write32s,91,2298 +fused_transactions_write32s,92,2296 +fused_transactions_write32s,93,2297 +fused_transactions_write32s,94,2301 +fused_transactions_write32s,95,2302 +fused_transactions_write32s,96,2300 +fused_transactions_write32s,97,2299 +fused_transactions_write32s,98,2302 +fused_transactions_write32s,99,2300 +fused_transactions_write32s,100,2297 +fused_transactions_write32s,101,2298 +fused_transactions_write32s,102,2296 +fused_transactions_write32s,103,2292 +fused_transactions_write32s,104,2295 +fused_transactions_write32s,105,2292 +fused_transactions_write32s,106,2293 +fused_transactions_write32s,107,2297 +fused_transactions_write32s,108,2293 +fused_transactions_write32s,109,2297 +fused_transactions_write32s,110,2293 +fused_transactions_write32s,111,2296 +fused_transactions_write32s,112,2296 +fused_transactions_write32s,113,2297 +fused_transactions_write32s,114,2296 +fused_transactions_write32s,115,2294 +fused_transactions_write32s,116,2293 +fused_transactions_write32s,117,2294 +fused_transactions_write32s,118,2297 +fused_transactions_write32s,119,2296 +fused_transactions_write32s,120,2297 +fused_transactions_write32s,121,2295 +fused_transactions_write32s,122,2298 +fused_transactions_write32s,123,2296 +fused_transactions_write32s,124,2294 +fused_transactions_write32s,125,2297 +fused_transactions_write32s,126,2296 +fused_transactions_write32s,127,2298 +fused_transactions_write32s,128,2297 +fused_transactions_write32s,129,2298 +fused_transactions_write32s,130,2293 +fused_transactions_write32s,131,2295 +fused_transactions_write32s,132,2300 +fused_transactions_write32s,133,2301 +fused_transactions_write32s,134,2296 +fused_transactions_write32s,135,2295 +fused_transactions_write32s,136,2298 +fused_transactions_write32s,137,2293 +fused_transactions_write32s,138,2301 +fused_transactions_write32s,139,2294 +fused_transactions_write32s,140,2296 +fused_transactions_write32s,141,2299 +fused_transactions_write32s,142,2295 +fused_transactions_write32s,143,2299 +fused_transactions_write32s,144,2296 +fused_transactions_write32s,145,2293 +fused_transactions_write32s,146,2293 +fused_transactions_write32s,147,2293 +fused_transactions_write32s,148,2298 +fused_transactions_write32s,149,2293 +fused_transactions_write32s,150,2296 +fused_transactions_write32s,151,2294 +fused_transactions_write32s,152,2294 +fused_transactions_write32s,153,2297 +fused_transactions_write32s,154,2293 +fused_transactions_write32s,155,2296 +fused_transactions_write32s,156,2296 +fused_transactions_write32s,157,2294 +fused_transactions_write32s,158,2294 +fused_transactions_write32s,159,2300 +fused_transactions_write32s,160,2296 +fused_transactions_write32s,161,2294 +fused_transactions_write32s,162,2295 +fused_transactions_write32s,163,2294 +fused_transactions_write32s,164,2292 +fused_transactions_write32s,165,2297 +fused_transactions_write32s,166,2293 +fused_transactions_write32s,167,2296 +fused_transactions_write32s,168,2294 +fused_transactions_write32s,169,2297 +fused_transactions_write32s,170,2295 +fused_transactions_write32s,171,2296 +fused_transactions_write32s,172,2305 +fused_transactions_write32s,173,2296 +fused_transactions_write32s,174,2298 +fused_transactions_write32s,175,2296 +fused_transactions_write32s,176,2293 +fused_transactions_write32s,177,2298 +fused_transactions_write32s,178,2295 +fused_transactions_write32s,179,2300 +fused_transactions_write32s,180,2298 +fused_transactions_write32s,181,2298 +fused_transactions_write32s,182,2300 +fused_transactions_write32s,183,2299 +fused_transactions_write32s,184,2294 +fused_transactions_write32s,185,2294 +fused_transactions_write32s,186,2304 +fused_transactions_write32s,187,2293 +fused_transactions_write32s,188,2299 +fused_transactions_write32s,189,2294 +fused_transactions_write32s,190,2294 +fused_transactions_write32s,191,2298 +fused_transactions_write32s,192,2295 +fused_transactions_write32s,193,2297 +fused_transactions_write32s,194,2293 +fused_transactions_write32s,195,2296 +fused_transactions_write32s,196,2294 +fused_transactions_write32s,197,2296 +fused_transactions_write32s,198,2296 +fused_transactions_write32s,199,2294 +fused_transactions_write32s,200,2296 +fused_transactions_write32s,201,2297 +fused_transactions_write32s,202,2297 +fused_transactions_write32s,203,2293 +fused_transactions_write32s,204,2298 +fused_transactions_write32s,205,2300 +fused_transactions_write32s,206,2291 +fused_transactions_write32s,207,2294 +fused_transactions_write32s,208,2292 +fused_transactions_write32s,209,2307 +fused_transactions_write32s,210,2296 +fused_transactions_write32s,211,2296 +fused_transactions_write32s,212,2294 +fused_transactions_write32s,213,2298 +fused_transactions_write32s,214,2292 +fused_transactions_write32s,215,2299 +fused_transactions_write32s,216,2298 +fused_transactions_write32s,217,2295 +fused_transactions_write32s,218,2294 +fused_transactions_write32s,219,2294 +fused_transactions_write32s,220,2296 +fused_transactions_write32s,221,2294 +fused_transactions_write32s,222,2296 +fused_transactions_write32s,223,2300 +fused_transactions_write32s,224,2294 +fused_transactions_write32s,225,2296 +fused_transactions_write32s,226,2308 +fused_transactions_write32s,227,2299 +fused_transactions_write32s,228,2297 +fused_transactions_write32s,229,2296 +fused_transactions_write32s,230,2292 +fused_transactions_write32s,231,2297 +fused_transactions_write32s,232,2298 +fused_transactions_write32s,233,2297 +fused_transactions_write32s,234,2296 +fused_transactions_write32s,235,2294 +fused_transactions_write32s,236,2295 +fused_transactions_write32s,237,2298 +fused_transactions_write32s,238,2294 +fused_transactions_write32s,239,2298 +fused_transactions_write32s,240,2295 +fused_transactions_write32s,241,2297 +fused_transactions_write32s,242,2294 +fused_transactions_write32s,243,2298 +fused_transactions_write32s,244,2299 +fused_transactions_write32s,245,2297 +fused_transactions_write32s,246,2301 +fused_transactions_write32s,247,2301 +fused_transactions_write32s,248,2297 +fused_transactions_write32s,249,2293 +fused_transactions_write32s,250,2296 +fused_transactions_write32s,251,2297 +fused_transactions_write32s,252,2297 +fused_transactions_write32s,253,2293 +fused_transactions_write32s,254,2295 +fused_transactions_write32s,255,2293 +fused_transactions_write32s,256,2295 +fused_transactions_write32s,257,2296 +fused_transactions_write32s,258,2295 +fused_transactions_write32s,259,2297 +fused_transactions_write32s,260,2296 +fused_transactions_write32s,261,2295 +fused_transactions_write32s,262,2295 +fused_transactions_write32s,263,2307 +fused_transactions_write32s,264,2293 +fused_transactions_write32s,265,2296 +fused_transactions_write32s,266,2300 +fused_transactions_write32s,267,2295 +fused_transactions_write32s,268,2296 +fused_transactions_write32s,269,2295 +fused_transactions_write32s,270,2293 +fused_transactions_write32s,271,2296 +fused_transactions_write32s,272,2298 +fused_transactions_write32s,273,2297 +fused_transactions_write32s,274,2295 +fused_transactions_write32s,275,2295 +fused_transactions_write32s,276,2296 +fused_transactions_write32s,277,2297 +fused_transactions_write32s,278,2298 +fused_transactions_write32s,279,2295 +fused_transactions_write32s,280,2294 +fused_transactions_write32s,281,2297 +fused_transactions_write32s,282,2294 +fused_transactions_write32s,283,2297 +fused_transactions_write32s,284,2295 +fused_transactions_write32s,285,2294 +fused_transactions_write32s,286,2295 +fused_transactions_write32s,287,2296 +fused_transactions_write32s,288,2295 +fused_transactions_write32s,289,2300 +fused_transactions_write32s,290,2293 +fused_transactions_write32s,291,2294 +fused_transactions_write32s,292,2299 +fused_transactions_write32s,293,2294 +fused_transactions_write32s,294,2295 +fused_transactions_write32s,295,2294 +fused_transactions_write32s,296,2296 +fused_transactions_write32s,297,2295 +fused_transactions_write32s,298,2296 +fused_transactions_write32s,299,2293 +fused_transactions_write32s,300,2301 +fused_transactions_write32s,301,2293 +fused_transactions_write32s,302,2293 +fused_transactions_write32s,303,2297 +fused_transactions_write32s,304,2298 +fused_transactions_write32s,305,2295 +fused_transactions_write32s,306,2298 +fused_transactions_write32s,307,2296 +fused_transactions_write32s,308,2298 +fused_transactions_write32s,309,2296 +fused_transactions_write32s,310,2298 +fused_transactions_write32s,311,2295 +fused_transactions_write32s,312,2299 +fused_transactions_write32s,313,2298 +fused_transactions_write32s,314,2299 +fused_transactions_write32s,315,2293 +fused_transactions_write32s,316,2295 +fused_transactions_write32s,317,2297 +fused_transactions_write32s,318,2297 +fused_transactions_write32s,319,2297 +fused_transactions_write32s,320,2299 +fused_transactions_write32s,321,2294 +fused_transactions_write32s,322,2298 +fused_transactions_write32s,323,2298 +fused_transactions_write32s,324,2295 +fused_transactions_write32s,325,2296 +fused_transactions_write32s,326,2296 +fused_transactions_write32s,327,2301 +fused_transactions_write32s,328,2297 +fused_transactions_write32s,329,2298 +fused_transactions_write32s,330,2299 +fused_transactions_write32s,331,2293 +fused_transactions_write32s,332,2297 +fused_transactions_write32s,333,2300 +fused_transactions_write32s,334,2293 +fused_transactions_write32s,335,2296 +fused_transactions_write32s,336,2297 +fused_transactions_write32s,337,2297 +fused_transactions_write32s,338,2298 +fused_transactions_write32s,339,2294 +fused_transactions_write32s,340,2294 +fused_transactions_write32s,341,2297 +fused_transactions_write32s,342,2301 +fused_transactions_write32s,343,2296 +fused_transactions_write32s,344,2298 +fused_transactions_write32s,345,2295 +fused_transactions_write32s,346,2293 +fused_transactions_write32s,347,2293 +fused_transactions_write32s,348,2298 +fused_transactions_write32s,349,2297 +fused_transactions_write32s,350,2296 +fused_transactions_write32s,351,2297 +fused_transactions_write32s,352,2298 +fused_transactions_write32s,353,2295 +fused_transactions_write32s,354,2296 +fused_transactions_write32s,355,2297 +fused_transactions_write32s,356,2282 +fused_transactions_write32s,357,2279 +fused_transactions_write32s,358,2281 +fused_transactions_write32s,359,2284 +fused_transactions_write32s,360,2284 +fused_transactions_write32s,361,2285 +fused_transactions_write32s,362,2297 +fused_transactions_write32s,363,2294 +fused_transactions_write32s,364,2282 +fused_transactions_write32s,365,2278 +fused_transactions_write32s,366,2282 +fused_transactions_write32s,367,2284 +fused_transactions_write32s,368,2289 +fused_transactions_write32s,369,2286 +fused_transactions_write32s,370,2273 +fused_transactions_write32s,371,2268 +fused_transactions_write32s,372,2269 +fused_transactions_write32s,373,2268 +fused_transactions_write32s,374,2267 +fused_transactions_write32s,375,2272 +fused_transactions_write32s,376,2270 +fused_transactions_write32s,377,2268 +fused_transactions_write32s,378,2268 +fused_transactions_write32s,379,2276 +fused_transactions_write32s,380,2282 +fused_transactions_write32s,381,2282 +fused_transactions_write32s,382,2283 +fused_transactions_write32s,383,2285 +fused_transactions_write32s,384,2294 +fused_transactions_write32s,385,2292 +fused_transactions_write32s,386,2289 +fused_transactions_write32s,387,2292 +fused_transactions_write32s,388,2294 +fused_transactions_write32s,389,2293 +fused_transactions_write32s,390,2290 +fused_transactions_write32s,391,2291 +fused_transactions_write32s,392,2297 +fused_transactions_write32s,393,2294 +fused_transactions_write32s,394,2291 +fused_transactions_write32s,395,2292 +fused_transactions_write32s,396,2291 +fused_transactions_write32s,397,2290 +fused_transactions_write32s,398,2294 +fused_transactions_write32s,399,2296 +fused_transactions_write32s,400,2299 +fused_transactions_write32s,401,2296 +fused_transactions_write32s,402,2290 +fused_transactions_write32s,403,2294 +fused_transactions_write32s,404,2289 +fused_transactions_write32s,405,2292 +fused_transactions_write32s,406,2301 +fused_transactions_write32s,407,2294 +fused_transactions_write32s,408,2294 +fused_transactions_write32s,409,2295 +fused_transactions_write32s,410,2291 +fused_transactions_write32s,411,2290 +fused_transactions_write32s,412,2299 +fused_transactions_write32s,413,2300 +fused_transactions_write32s,414,2291 +fused_transactions_write32s,415,2293 +fused_transactions_write32s,416,2294 +fused_transactions_write32s,417,2297 +fused_transactions_write32s,418,2294 +fused_transactions_write32s,419,2292 +fused_transactions_write32s,420,2292 +fused_transactions_write32s,421,2298 +fused_transactions_write32s,422,2294 +fused_transactions_write32s,423,2292 +fused_transactions_write32s,424,2294 +fused_transactions_write32s,425,2292 +fused_transactions_write32s,426,2289 +fused_transactions_write32s,427,2293 +fused_transactions_write32s,428,2295 +fused_transactions_write32s,429,2293 +fused_transactions_write32s,430,2296 +fused_transactions_write32s,431,2292 +fused_transactions_write32s,432,2292 +fused_transactions_write32s,433,2291 +fused_transactions_write32s,434,2291 +fused_transactions_write32s,435,2290 +fused_transactions_write32s,436,2294 +fused_transactions_write32s,437,2292 +fused_transactions_write32s,438,2290 +fused_transactions_write32s,439,2295 +fused_transactions_write32s,440,2290 +fused_transactions_write32s,441,2290 +fused_transactions_write32s,442,2293 +fused_transactions_write32s,443,2289 +fused_transactions_write32s,444,2295 +fused_transactions_write32s,445,2291 +fused_transactions_write32s,446,2292 +fused_transactions_write32s,447,2292 +fused_transactions_write32s,448,2291 +fused_transactions_write32s,449,2292 +fused_transactions_write32s,450,2301 +fused_transactions_write32s,451,2301 +fused_transactions_write32s,452,2298 +fused_transactions_write32s,453,2301 +fused_transactions_write32s,454,2297 +fused_transactions_write32s,455,2292 +fused_transactions_write32s,456,2294 +fused_transactions_write32s,457,2293 +fused_transactions_write32s,458,2293 +fused_transactions_write32s,459,2292 +fused_transactions_write32s,460,2288 +fused_transactions_write32s,461,2298 +fused_transactions_write32s,462,2294 +fused_transactions_write32s,463,2292 +fused_transactions_write32s,464,2298 +fused_transactions_write32s,465,2292 +fused_transactions_write32s,466,2293 +fused_transactions_write32s,467,2293 +fused_transactions_write32s,468,2289 +fused_transactions_write32s,469,2293 +fused_transactions_write32s,470,2292 +fused_transactions_write32s,471,2290 +fused_transactions_write32s,472,2293 +fused_transactions_write32s,473,2288 +fused_transactions_write32s,474,2294 +fused_transactions_write32s,475,2293 +fused_transactions_write32s,476,2289 +fused_transactions_write32s,477,2293 +fused_transactions_write32s,478,2296 +fused_transactions_write32s,479,2297 +fused_transactions_write32s,480,2297 +fused_transactions_write32s,481,2297 +fused_transactions_write32s,482,2295 +fused_transactions_write32s,483,2287 +fused_transactions_write32s,484,2286 +fused_transactions_write32s,485,2293 +fused_transactions_write32s,486,2293 +fused_transactions_write32s,487,2294 +fused_transactions_write32s,488,2293 +fused_transactions_write32s,489,2294 +fused_transactions_write32s,490,2299 +fused_transactions_write32s,491,2290 +fused_transactions_write32s,492,2292 +fused_transactions_write32s,493,2302 +fused_transactions_write32s,494,2300 +fused_transactions_write32s,495,2289 +fused_transactions_write32s,496,2297 +fused_transactions_write32s,497,2289 +fused_transactions_write32s,498,2293 +fused_transactions_write32s,499,2293 +fused_transactions_write32s,500,2293 +fused_transactions_write32s,501,2296 +fused_transactions_write32s,502,2294 +fused_transactions_write32s,503,2293 +fused_transactions_write32s,504,2297 +fused_transactions_write32s,505,2302 +fused_transactions_write32s,506,2294 +fused_transactions_write32s,507,2291 +fused_transactions_write32s,508,2296 +fused_transactions_write32s,509,2294 +fused_transactions_write32s,510,2293 +fused_transactions_write32s,511,2290 +fused_transactions_write32s,512,2294 +fused_transactions_write32s,513,2292 +fused_transactions_write32s,514,2291 +fused_transactions_write32s,515,2294 +fused_transactions_write32s,516,2288 +fused_transactions_write32s,517,2290 +fused_transactions_write32s,518,2293 +fused_transactions_write32s,519,2301 +fused_transactions_write32s,520,2297 +fused_transactions_write32s,521,2300 +fused_transactions_write32s,522,2294 +fused_transactions_write32s,523,2292 +fused_transactions_write32s,524,2294 +fused_transactions_write32s,525,2299 +fused_transactions_write32s,526,2291 +fused_transactions_write32s,527,2297 +fused_transactions_write32s,528,2300 +fused_transactions_write32s,529,2295 +fused_transactions_write32s,530,2291 +fused_transactions_write32s,531,2299 +fused_transactions_write32s,532,2293 +fused_transactions_write32s,533,2301 +fused_transactions_write32s,534,2301 +fused_transactions_write32s,535,2300 +fused_transactions_write32s,536,2300 +fused_transactions_write32s,537,2297 +fused_transactions_write32s,538,2294 +fused_transactions_write32s,539,2291 +fused_transactions_write32s,540,2298 +fused_transactions_write32s,541,2298 +fused_transactions_write32s,542,2303 +fused_transactions_write32s,543,2293 +fused_transactions_write32s,544,2292 +fused_transactions_write32s,545,2290 +fused_transactions_write32s,546,2293 +fused_transactions_write32s,547,2301 +fused_transactions_write32s,548,2290 +fused_transactions_write32s,549,2303 +fused_transactions_write32s,550,2293 +fused_transactions_write32s,551,2290 +fused_transactions_write32s,552,2295 +fused_transactions_write32s,553,2299 +fused_transactions_write32s,554,2301 +fused_transactions_write32s,555,2297 +fused_transactions_write32s,556,2300 +fused_transactions_write32s,557,2297 +fused_transactions_write32s,558,2301 +fused_transactions_write32s,559,2301 +fused_transactions_write32s,560,2294 +fused_transactions_write32s,561,2297 +fused_transactions_write32s,562,2302 +fused_transactions_write32s,563,2299 +fused_transactions_write32s,564,2287 +fused_transactions_write32s,565,2289 +fused_transactions_write32s,566,2287 +fused_transactions_write32s,567,2288 +fused_transactions_write32s,568,2289 +fused_transactions_write32s,569,2289 +fused_transactions_write32s,570,2285 +fused_transactions_write32s,571,2290 +fused_transactions_write32s,572,2297 +fused_transactions_write32s,573,2289 +fused_transactions_write32s,574,2293 +fused_transactions_write32s,575,2287 +fused_transactions_write32s,576,2293 +fused_transactions_write32s,577,2297 +fused_transactions_write32s,578,2289 +fused_transactions_write32s,579,2291 +fused_transactions_write32s,580,2290 +fused_transactions_write32s,581,2291 +fused_transactions_write32s,582,2289 +fused_transactions_write32s,583,2290 +fused_transactions_write32s,584,2297 +fused_transactions_write32s,585,2290 +fused_transactions_write32s,586,2293 +fused_transactions_write32s,587,2296 +fused_transactions_write32s,588,2286 +fused_transactions_write32s,589,2288 +fused_transactions_write32s,590,2298 +fused_transactions_write32s,591,2288 +fused_transactions_write32s,592,2297 +fused_transactions_write32s,593,2286 +fused_transactions_write32s,594,2291 +fused_transactions_write32s,595,2286 +fused_transactions_write32s,596,2290 +fused_transactions_write32s,597,2288 +fused_transactions_write32s,598,2287 +fused_transactions_write32s,599,2288 +fused_transactions_write32s,600,2288 +fused_transactions_write32s,601,2297 +fused_transactions_write32s,602,2291 +fused_transactions_write32s,603,2287 +fused_transactions_write32s,604,2298 +fused_transactions_write32s,605,2294 +fused_transactions_write32s,606,2286 +fused_transactions_write32s,607,2285 +fused_transactions_write32s,608,2299 +fused_transactions_write32s,609,2299 +fused_transactions_write32s,610,2299 +fused_transactions_write32s,611,2289 +fused_transactions_write32s,612,2291 +fused_transactions_write32s,613,2291 +fused_transactions_write32s,614,2291 +fused_transactions_write32s,615,2297 +fused_transactions_write32s,616,2289 +fused_transactions_write32s,617,2303 +fused_transactions_write32s,618,2297 +fused_transactions_write32s,619,2301 +fused_transactions_write32s,620,2297 +fused_transactions_write32s,621,2300 +fused_transactions_write32s,622,2292 +fused_transactions_write32s,623,2290 +fused_transactions_write32s,624,2292 +fused_transactions_write32s,625,2289 +fused_transactions_write32s,626,2300 +fused_transactions_write32s,627,2290 +fused_transactions_write32s,628,2295 +fused_transactions_write32s,629,2290 +fused_transactions_write32s,630,2292 +fused_transactions_write32s,631,2289 +fused_transactions_write32s,632,2295 +fused_transactions_write32s,633,2292 +fused_transactions_write32s,634,2295 +fused_transactions_write32s,635,2291 +fused_transactions_write32s,636,2294 +fused_transactions_write32s,637,2292 +fused_transactions_write32s,638,2290 +fused_transactions_write32s,639,2295 +fused_transactions_write32s,640,2293 +fused_transactions_write32s,641,2297 +fused_transactions_write32s,642,2293 +fused_transactions_write32s,643,2289 +fused_transactions_write32s,644,2294 +fused_transactions_write32s,645,2292 +fused_transactions_write32s,646,2293 +fused_transactions_write32s,647,2293 +fused_transactions_write32s,648,2290 +fused_transactions_write32s,649,2293 +fused_transactions_write32s,650,2292 +fused_transactions_write32s,651,2297 +fused_transactions_write32s,652,2293 +fused_transactions_write32s,653,2294 +fused_transactions_write32s,654,2292 +fused_transactions_write32s,655,2292 +fused_transactions_write32s,656,2290 +fused_transactions_write32s,657,2296 +fused_transactions_write32s,658,2293 +fused_transactions_write32s,659,2293 +fused_transactions_write32s,660,2296 +fused_transactions_write32s,661,2291 +fused_transactions_write32s,662,2295 +fused_transactions_write32s,663,2294 +fused_transactions_write32s,664,2297 +fused_transactions_write32s,665,2297 +fused_transactions_write32s,666,2294 +fused_transactions_write32s,667,2296 +fused_transactions_write32s,668,2278 +fused_transactions_write32s,669,2293 +fused_transactions_write32s,670,2292 +fused_transactions_write32s,671,2292 +fused_transactions_write32s,672,2293 +fused_transactions_write32s,673,2293 +fused_transactions_write32s,674,2293 +fused_transactions_write32s,675,2297 +fused_transactions_write32s,676,2288 +fused_transactions_write32s,677,2290 +fused_transactions_write32s,678,2298 +fused_transactions_write32s,679,2292 +fused_transactions_write32s,680,2288 +fused_transactions_write32s,681,2294 +fused_transactions_write32s,682,2293 +fused_transactions_write32s,683,2291 +fused_transactions_write32s,684,2286 +fused_transactions_write32s,685,2295 +fused_transactions_write32s,686,2296 +fused_transactions_write32s,687,2291 +fused_transactions_write32s,688,2292 +fused_transactions_write32s,689,2291 +fused_transactions_write32s,690,2292 +fused_transactions_write32s,691,2290 +fused_transactions_write32s,692,2292 +fused_transactions_write32s,693,2292 +fused_transactions_write32s,694,2290 +fused_transactions_write32s,695,2290 +fused_transactions_write32s,696,2289 +fused_transactions_write32s,697,2301 +fused_transactions_write32s,698,2289 +fused_transactions_write32s,699,2294 +fused_transactions_write32s,700,2293 +fused_transactions_write32s,701,2292 +fused_transactions_write32s,702,2294 +fused_transactions_write32s,703,2292 +fused_transactions_write32s,704,2294 +fused_transactions_write32s,705,2297 +fused_transactions_write32s,706,2294 +fused_transactions_write32s,707,2292 +fused_transactions_write32s,708,2293 +fused_transactions_write32s,709,2293 +fused_transactions_write32s,710,2294 +fused_transactions_write32s,711,2294 +fused_transactions_write32s,712,2291 +fused_transactions_write32s,713,2294 +fused_transactions_write32s,714,2297 +fused_transactions_write32s,715,2292 +fused_transactions_write32s,716,2296 +fused_transactions_write32s,717,2294 +fused_transactions_write32s,718,2293 +fused_transactions_write32s,719,2296 +fused_transactions_write32s,720,2297 +fused_transactions_write32s,721,2295 +fused_transactions_write32s,722,2297 +fused_transactions_write32s,723,2292 +fused_transactions_write32s,724,2307 +fused_transactions_write32s,725,2295 +fused_transactions_write32s,726,2294 +fused_transactions_write32s,727,2300 +fused_transactions_write32s,728,2296 +fused_transactions_write32s,729,2296 +fused_transactions_write32s,730,2294 +fused_transactions_write32s,731,2293 +fused_transactions_write32s,732,2293 +fused_transactions_write32s,733,2293 +fused_transactions_write32s,734,2292 +fused_transactions_write32s,735,2293 +fused_transactions_write32s,736,2296 +fused_transactions_write32s,737,2296 +fused_transactions_write32s,738,2295 +fused_transactions_write32s,739,2296 +fused_transactions_write32s,740,2294 +fused_transactions_write32s,741,2297 +fused_transactions_write32s,742,2292 +fused_transactions_write32s,743,2297 +fused_transactions_write32s,744,2293 +fused_transactions_write32s,745,2295 +fused_transactions_write32s,746,2296 +fused_transactions_write32s,747,2297 +fused_transactions_write32s,748,2298 +fused_transactions_write32s,749,2301 +fused_transactions_write32s,750,2294 +fused_transactions_write32s,751,2292 +fused_transactions_write32s,752,2291 +fused_transactions_write32s,753,2298 +fused_transactions_write32s,754,2298 +fused_transactions_write32s,755,2296 +fused_transactions_write32s,756,2300 +fused_transactions_write32s,757,2293 +fused_transactions_write32s,758,2292 +fused_transactions_write32s,759,2294 +fused_transactions_write32s,760,2293 +fused_transactions_write32s,761,2294 +fused_transactions_write32s,762,2303 +fused_transactions_write32s,763,2312 +fused_transactions_write32s,764,2295 +fused_transactions_write32s,765,2294 +fused_transactions_write32s,766,2295 +fused_transactions_write32s,767,2294 +fused_transactions_write32s,768,2296 +fused_transactions_write32s,769,2294 +fused_transactions_write32s,770,2296 +fused_transactions_write32s,771,2293 +fused_transactions_write32s,772,2295 +fused_transactions_write32s,773,2296 +fused_transactions_write32s,774,2301 +fused_transactions_write32s,775,2295 +fused_transactions_write32s,776,2292 +fused_transactions_write32s,777,2298 +fused_transactions_write32s,778,2294 +fused_transactions_write32s,779,2296 +fused_transactions_write32s,780,2301 +fused_transactions_write32s,781,2304 +fused_transactions_write32s,782,2297 +fused_transactions_write32s,783,2293 +fused_transactions_write32s,784,2294 +fused_transactions_write32s,785,2292 +fused_transactions_write32s,786,2296 +fused_transactions_write32s,787,2294 +fused_transactions_write32s,788,2295 +fused_transactions_write32s,789,2295 +fused_transactions_write32s,790,2293 +fused_transactions_write32s,791,2293 +fused_transactions_write32s,792,2298 +fused_transactions_write32s,793,2296 +fused_transactions_write32s,794,2295 +fused_transactions_write32s,795,2296 +fused_transactions_write32s,796,2296 +fused_transactions_write32s,797,2296 +fused_transactions_write32s,798,2299 +fused_transactions_write32s,799,2297 +fused_transactions_write32s,800,2295 +fused_transactions_write32s,801,2294 +fused_transactions_write32s,802,2292 +fused_transactions_write32s,803,2297 +fused_transactions_write32s,804,2294 +fused_transactions_write32s,805,2292 +fused_transactions_write32s,806,2301 +fused_transactions_write32s,807,2304 +fused_transactions_write32s,808,2298 +fused_transactions_write32s,809,2304 +fused_transactions_write32s,810,2300 +fused_transactions_write32s,811,2296 +fused_transactions_write32s,812,2297 +fused_transactions_write32s,813,2301 +fused_transactions_write32s,814,2297 +fused_transactions_write32s,815,2298 +fused_transactions_write32s,816,2297 +fused_transactions_write32s,817,2297 +fused_transactions_write32s,818,2288 +fused_transactions_write32s,819,2289 +fused_transactions_write32s,820,2297 +fused_transactions_write32s,821,2296 +fused_transactions_write32s,822,2289 +fused_transactions_write32s,823,2297 +fused_transactions_write32s,824,2297 +fused_transactions_write32s,825,2291 +fused_transactions_write32s,826,2291 +fused_transactions_write32s,827,2297 +fused_transactions_write32s,828,2291 +fused_transactions_write32s,829,2292 +fused_transactions_write32s,830,2296 +fused_transactions_write32s,831,2297 +fused_transactions_write32s,832,2289 +fused_transactions_write32s,833,2292 +fused_transactions_write32s,834,2290 +fused_transactions_write32s,835,2293 +fused_transactions_write32s,836,2296 +fused_transactions_write32s,837,2293 +fused_transactions_write32s,838,2293 +fused_transactions_write32s,839,2297 +fused_transactions_write32s,840,2296 +fused_transactions_write32s,841,2299 +fused_transactions_write32s,842,2295 +fused_transactions_write32s,843,2293 +fused_transactions_write32s,844,2289 +fused_transactions_write32s,845,2301 +fused_transactions_write32s,846,2295 +fused_transactions_write32s,847,2296 +fused_transactions_write32s,848,2293 +fused_transactions_write32s,849,2293 +fused_transactions_write32s,850,2293 +fused_transactions_write32s,851,2294 +fused_transactions_write32s,852,2293 +fused_transactions_write32s,853,2298 +fused_transactions_write32s,854,2299 +fused_transactions_write32s,855,2293 +fused_transactions_write32s,856,2295 +fused_transactions_write32s,857,2301 +fused_transactions_write32s,858,2295 +fused_transactions_write32s,859,2299 +fused_transactions_write32s,860,2293 +fused_transactions_write32s,861,2292 +fused_transactions_write32s,862,2293 +fused_transactions_write32s,863,2294 +fused_transactions_write32s,864,2306 +fused_transactions_write32s,865,2301 +fused_transactions_write32s,866,2297 +fused_transactions_write32s,867,2294 +fused_transactions_write32s,868,2291 +fused_transactions_write32s,869,2294 +fused_transactions_write32s,870,2297 +fused_transactions_write32s,871,2300 +fused_transactions_write32s,872,2295 +fused_transactions_write32s,873,2306 +fused_transactions_write32s,874,2313 +fused_transactions_write32s,875,2294 +fused_transactions_write32s,876,2292 +fused_transactions_write32s,877,2296 +fused_transactions_write32s,878,2294 +fused_transactions_write32s,879,2302 +fused_transactions_write32s,880,2294 +fused_transactions_write32s,881,2294 +fused_transactions_write32s,882,2294 +fused_transactions_write32s,883,2294 +fused_transactions_write32s,884,2296 +fused_transactions_write32s,885,2299 +fused_transactions_write32s,886,2293 +fused_transactions_write32s,887,2293 +fused_transactions_write32s,888,2293 +fused_transactions_write32s,889,2293 +fused_transactions_write32s,890,2291 +fused_transactions_write32s,891,2310 +fused_transactions_write32s,892,2296 +fused_transactions_write32s,893,2298 +fused_transactions_write32s,894,2294 +fused_transactions_write32s,895,2295 +fused_transactions_write32s,896,2293 +fused_transactions_write32s,897,2291 +fused_transactions_write32s,898,2293 +fused_transactions_write32s,899,2293 +fused_transactions_write32s,900,2298 +fused_transactions_write32s,901,2295 +fused_transactions_write32s,902,2294 +fused_transactions_write32s,903,2293 +fused_transactions_write32s,904,2295 +fused_transactions_write32s,905,2290 +fused_transactions_write32s,906,2294 +fused_transactions_write32s,907,2295 +fused_transactions_write32s,908,2294 +fused_transactions_write32s,909,2297 +fused_transactions_write32s,910,2295 +fused_transactions_write32s,911,2295 +fused_transactions_write32s,912,2295 +fused_transactions_write32s,913,2294 +fused_transactions_write32s,914,2296 +fused_transactions_write32s,915,2292 +fused_transactions_write32s,916,2302 +fused_transactions_write32s,917,2297 +fused_transactions_write32s,918,2293 +fused_transactions_write32s,919,2294 +fused_transactions_write32s,920,2308 +fused_transactions_write32s,921,2301 +fused_transactions_write32s,922,2292 +fused_transactions_write32s,923,2300 +fused_transactions_write32s,924,2294 +fused_transactions_write32s,925,2295 +fused_transactions_write32s,926,2294 +fused_transactions_write32s,927,2293 +fused_transactions_write32s,928,2297 +fused_transactions_write32s,929,2297 +fused_transactions_write32s,930,2296 +fused_transactions_write32s,931,2296 +fused_transactions_write32s,932,2299 +fused_transactions_write32s,933,2297 +fused_transactions_write32s,934,2297 +fused_transactions_write32s,935,2294 +fused_transactions_write32s,936,2298 +fused_transactions_write32s,937,2293 +fused_transactions_write32s,938,2294 +fused_transactions_write32s,939,2296 +fused_transactions_write32s,940,2292 +fused_transactions_write32s,941,2295 +fused_transactions_write32s,942,2294 +fused_transactions_write32s,943,2296 +fused_transactions_write32s,944,2296 +fused_transactions_write32s,945,2293 +fused_transactions_write32s,946,2293 +fused_transactions_write32s,947,2298 +fused_transactions_write32s,948,2295 +fused_transactions_write32s,949,2294 +fused_transactions_write32s,950,2293 +fused_transactions_write32s,951,2297 +fused_transactions_write32s,952,2297 +fused_transactions_write32s,953,2292 +fused_transactions_write32s,954,2294 +fused_transactions_write32s,955,2296 +fused_transactions_write32s,956,2295 +fused_transactions_write32s,957,2295 +fused_transactions_write32s,958,2294 +fused_transactions_write32s,959,2296 +fused_transactions_write32s,960,2293 +fused_transactions_write32s,961,2297 +fused_transactions_write32s,962,2294 +fused_transactions_write32s,963,2295 +fused_transactions_write32s,964,2294 +fused_transactions_write32s,965,2296 +fused_transactions_write32s,966,2299 +fused_transactions_write32s,967,2295 +fused_transactions_write32s,968,2293 +fused_transactions_write32s,969,2293 +fused_transactions_write32s,970,2293 +fused_transactions_write32s,971,2295 +fused_transactions_write32s,972,2298 +fused_transactions_write32s,973,2298 +fused_transactions_write32s,974,2300 +fused_transactions_write32s,975,2294 +fused_transactions_write32s,976,2293 +fused_transactions_write32s,977,2292 +fused_transactions_write32s,978,2293 +fused_transactions_write32s,979,2293 +fused_transactions_write32s,980,2293 +fused_transactions_write32s,981,2293 +fused_transactions_write32s,982,2293 +fused_transactions_write32s,983,2295 +fused_transactions_write32s,984,2296 +fused_transactions_write32s,985,2293 +fused_transactions_write32s,986,2293 +fused_transactions_write32s,987,2296 +fused_transactions_write32s,988,2293 +fused_transactions_write32s,989,2297 +fused_transactions_write32s,990,2302 +fused_transactions_write32s,991,2296 +fused_transactions_write32s,992,2295 +fused_transactions_write32s,993,2295 +fused_transactions_write32s,994,2292 +fused_transactions_write32s,995,2293 +fused_transactions_write32s,996,2292 +fused_transactions_write32s,997,2293 +fused_transactions_write32s,998,2294 +fused_transactions_write32s,999,2296 diff --git a/programming_examples/reconfiguration/benchmark_results.png b/programming_examples/reconfiguration/benchmark_results.png new file mode 100644 index 0000000000000000000000000000000000000000..e30f38b7118916983d198a11a86823f9a5505e52 GIT binary patch literal 180048 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

ia@BVA9O6FgP|IMo59T^Lk9>=MlLWb>05N zW3``zO$hSP#Z+(S&OhL2w1e8ez7NvjE%*j3hz?*3Rp5YFBf%73bzwV@ zcqI%;sY0Ye{$5;Myr~AaW&aX9@q5@q^3JG~IA9>y0H$SiKs&g|>aKyDoGa$;=?9tq z`)gXC%iY7_I}o5(faNs^B4TktL4ij*FBjKNu)C8dCdN)swA}~IwvUlaoIHoOvq=JVC=-Lr=RiUUiL+Z=syH+(CmLRH9?A*yFA+&1M zcJlvFP!Runr19ie;{Tcp+_*xsH~;v<56?k=jmM4pEc~;ZjOU@HH!EM{oyp7nJmENw z{Zf~F@RI&;qFSW8!*F*zrYmVu@-WDi6R_$*K(JDP*lmz9_8}Bb(I1}8T5(5aF4Sks zIMU2tsE!Ty*zMni$n*aWA4n%+#w$dfQ#9xUhbEw)uxmTg4T#-nyy&pjX)N#;=$ zwCZx5v!J3C4~49bkG=1TpFH8Uyas`qSnZUqq_GFXYWjno1gLJEZ**`&8+o`jclk)NfjLXQ>PFCs)-)0QpSLzrjCxIeqLF>ekjgS zRZ|-TE20CDfHDH*Tl$-4elzo@*B$Skm^=M277D2Nc{WhAo8yOkN*{z4gm9wz3(}az#276>=Y;3KRls*i91sD$2 z18pk1BQ*uEJv8A>=?$~~=YO6c7y{y-dGgIU@R$-Xq;!jf%-5$D^_+j_Uk2`&C1wWw zOxW-X7Z zICjk+a~8=-g7iGXvB_L3xwSe@TaEtt`RyIRZhd-uv3|@jR}~wtYr?%j zUtiA2)EH%is6#!Ci9q^)7tZ~7$6=uDHcWdPrsyiep!Hu7owvI2+ni5|FZRmGRiKhJ z09^AZdLtyxOgPzyWp5$<%r>AA8c6u$$1N-@Bpe2!K8=stV9MB&g61Y=-?HZ?UJa?UZxaiArP z9BTj{^)da|Gf=*z4&107>z1ZS(!jg&X!vW^4ipnnQO+`7ai-~jo!~?WvxiJcsGE4B<(TOi43H`1$DrtG=C+$?egWz2;_vSIYwS&+oxbC z-Cn4A?}A@lm$MJ5IaoS!AXvp?&$tIN0S1CDcEF+fbEZ|;+3s9#n<|0ofDVTn$hT{s}3BM2NKa^d|t z(UO>|Yw-1!Qoh9uVfLRtg92Xm|+=?W~rae>Y)-Yr=PTB$r2M+G~&I_ zeSH159U?FfW|G!z$`}Zm-!h^Zq?nEre-Opn=e@{C01#H8vKI~F2AjktK|uv@*2x?U z;LvMb0q?5d$On=KuI(s^-!8KVyEH zD<~Mty)Qd|92qgitr`Vo*-Zc?1oX^MjEk7)X@Az&U!a_7K_Fs!M|ws^G{jk0fA~Rp z*RG332M^j{0|FiPK9Y0&`cG=vXFg9Dm6l0u9d__hzz$XD#lW}b5cw{mKienpZP}uW zT4^=Xd~Xkr-vBMn`u_W3h=KpE{q+Nln#T*BE*4E6ajTXnd}H6hfXJZ9p+mgD8}QgF zQO`((YxA!$$HYIrt@eF~k}Zp+a?xvH3Eu`8{bWY;4`i@G9MFB&)nyJ+S^e2%KF`4O zi$vYHh=Yfl+w{R7b4DR}X$|2n$#*~k5`idS1)R==v~S5qjjwNmkIUrlNs5H4Y~jOQ z1HFV6)gm6nDge@=SjFPvFNXF-0acFph^VBXxE)Uc;YU&-{0?p#FN0%(VVk5qur&=s^?~p%{3y zV+>;Ev49~RBXtrIB(L@stNrwK))B(RTv`wk&ikAIOeGfiCmBCX#SF*t2hgp7k%bbD zLvaX}2eCh5LFJ-vGCd8aNWB4UnV0b5Q&dtCwhaQD8}YGtd-7eBGPjI_Z*QLv`YXy` zv}LRCPqM0TcmqJ){1kt{%al?g0 zy11~wY0ATI-_1pSB>v;lbs;-1xUrW4u!`H3m7Y#Y=N#*ec4jPA|9S(aJ1~Ra7;j{x zKdz9}TDEK%BNs_BVXcBE6$vW7KNyy|wpoa!B>Vx*B6wW~b_ zuV(Y|SXw*gBiI%{Po^h~<@$`HCR%Mbo}Y%b^}W**BPNs>QRId^h0~Y&t6Skxe2(yG z<>pVQ2vFrYI#FzvBZYHALGJvuj+pz6Djn*Mj9@P>uj)vpmG58WWZg5>Sc+JM))nA^ zgB^(mIhhDYBGE*W2U4g1#7OJP3zsgLVP>#XhJ?w*5ufBS~9Zx>lORtJo5%{ z2TIyku+?Bg=O@ozutKB&pfxYUAmcGA9(q`YbQYgJed>E}XJg}oB~V{q-_+fGoS*lp z;Kq$=XmAXnTFHjuir%+x--_6FX;BhP$r=R_fBs3RN9(fAcke>yELw8}p`*Q`;=im) zD%0V`gw^vDv+qk9LR94UmRMJ2iPx`R-(ItJucBhOW0uL%i@V%8qmlQPD=zcNsnD~+ zeL*4RHUMuKz{MWu9mV~MhBMcVR0`g76?2|r4?p!)sk8q2+Vy0ZyH!IK_DjLS+S>Z; z!C?#)mN1P+p~b#sNdzK;2r)!uEg9~ImtMqpfY)szO>f^C^^*)<)_Z?HzZjUNqnN19 zI)6TmN|jH%2DI$et5>!!zplMWH#0GrD9=pW_eWiof+V$H*8)I^H_UrgWmh7YR-3Jf z+JQnZG_a2a>FS_lGcsgiYz+ILFp7+yx--9h%wA>q3Nh7z{#qJpEN}Vb>C-CwErQqs zV|XT%s@y0#{jc@5a&o=B>+Fn07F|=7hDz}ERsrq1kJzp)UH>2=hwd2Donhyg!U=9V ztmA;%!K_>c(qAdi^+96r3JB;sqpMZ>sSjS}aDOdaUG%(-9`G@TToEH`M^GVR#w$v4 z@&-Rc9^KT_bK+`cMFqm`yW3lx(47L#{@p?(F`6jnxYe6|`q&%sF{Ny)7oxML=}lmR zVYS)X-oVC7Ww$$R--+#p@X3|4_3hg`&=d@lw<^*PLHMKjzkaa~1IB^smi~`1M9Hl1 z$}$ergQGuVUU3z61#2M0*5lD+5k`bvC}_ z(zCQB2r962W1m<|0V91+1&`2JZGuNPwU&eJMrjIj;{xp3RE7*^#_Oa_>{7e^H>JT9 zAdd(uR#a1?iHzRT#zwH$;o^a&413f9)XganMQe}(xisWYphUzDU^}#kvp++A1zm|q zTuLag*-EoZ3sy41WWCJmdeAIUfe0{8#sSTk`v6-3Pl^XTsq=W&tXZb@=@t%9)t2u^ zHh#3<)EuVr2HLHICh+)tjWEdry!^F|qOfPHp(*J=F#hAhP`$4ZJXI=tbLn_PxfPm0yFL#!LdcF zicVTDyblz*0{$-H=heHSFt^-Rw}xsQS6Hpi&5KEZv7qtFjC2_6I>1QZZT!~7^%x#m zM|tR_Xkj>CT)gV`?dPzz*navc1Vgu+=GHt5l8VJrmc^aCZ(l~p4Q_vlnmitQWa#c| z#mHJ<44?GpzQrSWmgXDx>+WkSH1G^d-}P@qxDC%IjYg$#ok(7Idkrk+_n9rzp?J1k z50P4mIfA7e_rV;|Y6iBSi07|sxaG`5wql?}I3hajF>)IE*{4(p&4SFmwyY-%8GKxS zSKy5s5r~}lgoK_AoZua98~|(bC~$3j)HpKs>ui1h0{6J`Xc6|K;Gw$FvPLX~Dt}hI z*;1bf1MqHY^C3JQ@n8aAA?5sN;V95K1L8zSW#l#7!7zAsGfW!FLmJ*6*k7$_X!`NP zn}WK>2FTUbTV^>nzkwp~H4HlVrU6a9o?+NF+Da1HR2(3j5#g&J>ky38ZSYlU@7;v6 zNWiSL?TOOP)Pr`a^P%C~JvhaQ5B1xz4CLn4A71~C5Y&&gD?!p& z7{zCBfCwtAHo)!_s&)#w$7x@`1_dw_5(v;bcmBKv(nwI=Xwv`@bH&C32%k#4BomXD zHip=vltrNe+1KB%2Ihhyf;PlpZMgLNod(<2FWZSy~Pp<#wx9v=> z=n9-FT-UF%F$h!eu)+axMW+F z1%)Yj;uqAkmIxbEB_Dju#?DUBtas7i*O6V)%H52%bngp!tFwEzU zh92jQkJg;1GYsyLl~qBsvTF6}5}U@VD)o4S9360Ugle2)?*hIN)V>?`!~(@OWOkbp z{SojW>c+SPpH*9MyF>b7kx0{X!^IR~cOrZQ&Q^1K$0hJpv|mTpeECeGUe9tA5)vXa z6Rjn@Y16*(v0+UZ$A5}zk4J#54(5Niz;_geE&@CYc1J;^tmO5`WU`^c@j4yYD&+{9uBj;uL4G?SZNL?%WSa^U8i^TW{h~GU&k=v^4fwK5 zBz>GXUhuZ`ROUTQ3W~EsIZ1VzAs8YDcXuMlD97_CV&2@57XR&Y2Q9_6Y>7pvPCGRh ztRJe(!AaW|Jv1XkwJnEp}3%D|Pn+pNF13DWFpU?XvCK5jn#0<0PEDu7U&1Uf$X zdaVWXMKMO#-F?6k?>P(}t&UPzU1o-atP=BkaMn3k|=xsnPJN)*WK4*jK@Z4ln*j5%Tr+adyBkymjBKC5;K6W7qx8KBYSi1^EHYA zQRI4enho|eZYz_uCf@~nLuf3~+cW?>kcn!5m1>1LPSBmLkhmT8nXhZAdEc)+7KBaZ1#J` zC5y9=E;3&sZ)2acp9FWy!+NB>)KeWiw%rlakA40|KqaE46+1nxKYg@-nNtLsF5K$? z2fVQWaucBn{p9Un2VxLdGjdS`RrfuYgWo(X=cB{(UI6l^vq18LOLPwcH~0{hn(Y0=#P#c$W?6Mj(zE^&Ncs`0!yW#n?EY-yaXG z!btxT7R1qTsA2)Zx;2U&8Z&F|V(+49Shz0+{7^J&JjZg^K+Csmg~H~BF!Tg(oBs?% zHx^@R=>K%-ApZKA6<1aBdA#wn_B-^FsKQ)_>!e_RM0^C5U{jft#oIrk_m`EGC8}qH zn4<&|iwAhLBJ45l=q++eS2#*I>sCZt2I%xFjm_N^F~)rrX7KgDUebW39=Qej=h0V zA_)k->83*E3D6sZxSW9!JD>o-C5zIID)J*6tistQ)7z!_Ay@!_2E5!#niH*-2YF~V${*Xgg;Kr)f zdZ+$UjxDxvI5%!k*uQ-YSJwIZuk$+Dr;<^*4u!XQ!8D8eg}=5z9g++9J%oZ8b_fW; z)`~?+hGbeaheVEIu#PgJ(gdVW<@E|&KuMaGFaSW*JIG)eFTIFmz=1kMiAW0!)pKMv zRGB0+>km!SAxIifJ;zpiYCB4|i-}8|y@NDv2Zd+{mI4v1!t|r|Hg8&%c!ktwLscmg z!7jHfGJjC2?&&kGy1H&C*j#_|e5sYyHLSK+Db;h!(K6zQrRGEJK-=90!%BE8{`ljM zHlm7yV75!m)>Z^WFDR@I9=otg1w`1}=pEbZM0W@>j6(6EVGm@fa@$*16vi z0bC8D@7==ik@2Z5&6@+N!cA}QFqrY@qg8hSx_9DiEl*C9$(4t;Z{I%95u2#<4(6Z( zn4_)s7?nf{06rC4-Q9T_tzrj|V`#s_{-SKVc5I8dcr?OuN*X0>yP^OBv^Yx4ay?NI zChGtkseb?}{wR0Ifgi^Js82}m>_e0;HC3bKjQpA>TD-$AFXFjzDjreLTJRXEHlvt+ zb=k%>WsdtFuDb_Vo2aS~(Au1{34jAOHhX5xg}F-xAY%}X`VTB_6tu{A#!(5hFN7J6 z0fHP+X6H%H`Nw4&!j@{@%v0JrvXkmnT!=Y#!s7}L`qA^oOD+NQ7}*Le9TK(R16GbG zNi9OY9FbBaWEFQuPDkFx4~&wJU@R#t)lJIh4T7EeE;ld;sE4E2Y^E2fxST2;2o{7+ zJ|mnIcu777sJxw+d>}CNicm|yCg^YYjX+UsJwzmVFb#=Vu^q_kRN;tRbA-acJVC95 zQ8f(wj~~T@aH%cWmZh_YgE)cD307m4CuXG;pK->_Alyf(Nzk7UXn_r#ULAE?vI8r&8 z)@V33ingb>udmjfvLnnp$HLN8f{F=SI7sWBVJJ#=Ag5*kz-WSJqar@_9-zT99>uJ7 zR9;7sSIHX&Ev^BVqRVH~)G@q^!4Co!#v`kW`Uq7#vU=8I1yCuCLP_h9v07~6b`S`v zvA%$_&%zR*RYwTB!sggDJUpF{eWKE{YfcYhqnju4P?p@jV+T72N6cqP7*ql?9mHzk z6BSK8v_xwb`B-b#Cy3QV4?Ote+sAly0^Y8MSBjy412?z%IycVm!!|D-rG3~)T(Xa^ zt*k*IunM+(VIq@w7LX;K@GI54fmBw9?_FYMh&SFtzmU`8M7@l=J4dJ=>AUaeB^4r4 z@CLIuU%Qz8}uy~5s%~K0zk~B~>B%*0GdNoyh z4lcb2GW*^fv?xf+c=qQ;i!f==-g#K03b!^Ca46yXfa%>E+X`5)qc%B|FgYl2se?t+ z*V|jZ`kJKb{Abnq48YJ~HD0<&1n~o|K7&UfIP5~@RP-##C z-%DfxcTVv;U|{qun*v$ps}S?7DYsm*wWYVB-o^d%|4Bs1>aIq4!=~-|?|A4pLBhlS zBZ!3`ycNKmwl5z#`kLguM9lhSk^|1 z5W&D5thL1w6ZBJnxRsoGT$)v@A`w}L?glf)zGx9h+t!G#cVG!K=$^u@-8$|{FbYMM z*me47?BE{?(zpuy!1wIQlatD8@a@uX5Z{WNcqN&Uu9s_Lj2(;ew(wvkvdRdtVaKKi zO)Gv`v`DQ3J$7)@g0)^;hK7wsi55UykS(3|6w2#aDSFg<$3&JQ0$zwx>6l4^2CWbv zR^Bo)g=cUPlukhxdRVf0wo*mA13TpQJ9LAjIu0Kn2bI82%JDvKmHD%&#mReBPAy6E z`AyfMk9U*ru#Ho~jC_Z;7jB}}453JYpBk0C@z2<-sjpbPUqX6H6oDcod5rN0%uB?cLgJuK)vP4F@^d8WHl5m>D1HvpBtpE3BM^WL6tyA%_cyj3N-C`z4ux`>4hs znhQM*^W4p^p=z_P0Ol`sucD@fOy0R5XZIZ#Orj0O_2R&k+GjOsdcbV8!-$px z$~WieL5PU+j6u*yiw4MFvDglLEncth%2~|5Utq*nxle-@3JUc#m@lWX|A4>s$YEdj zcry@N2umE=di?ltiYNx)`@oXmkpf8Waz?^5wv5Lkg*E~hRskxSEFk)kdhK93W0`d z(^hKiKvPi~=65x~*i)%WejIvNe;~ndv#`;qM3y2?mrsiT_Wkki%V>MqgU#Lsuqm|= zF;6wt!27#H@U$kbyRUK>SI)6ru&UDDkhMT1&Ud0$9BX9 z@<62|E|G#TAn9r_)I_aTPdA%FOQ0|yZUs18Se76dAh~LX9jVr-lW842_?IS9F9%SE zM6uZ`(*cvB;-m{h&mi_V;0Hx?KVRbF0~-?Os&V8<6w=+U8~z8D60}Whiq4*gV1N;Y zA3>T~nsdS~in3s^6Le4HXn2AX7K5U9JACr}AYLd4eve7S8od;HDp6X-Hkmqi(2tyANs?+)X$hC?_wh#ePznDdk#lcy9#IIixBtrtY)pzL$wT6dI~FByJ!bysNl5&UMKMjguiCJx)So_w9Zs@1yZ zl~kFX(f#f;peL2}Fb@q8_JH;Z!NQccGIZ)K*f0`^1mod7B~T)x891vl`A(R{-1>=J z;Ey8j$DvroZZ-j4iG2UuUw--Nr~T-iU>mg;2EKrK@#|3AWe)`hp?SzLgn0%y5#nui zj#U6b3q^U|zRs2xnsxQL3&{$s>x;?2>A~U z^fczlC*;5)ptJv?={DW1W6dI9TfGBei;*#RvA`2Mz3#FFXs+Q)$usHB)3DfPvRulc zDk85RWFv*KdCMiLTBNYz4^+WE)_;z#q+2s}hwumIOHRGecOMN|-dmP{mXEEs;e`o; zn+Rv3tg3yZ-#rB9=wJA_pkNugTxGh|LU;YR`nTWy60yVF$yx3T=FJm7D?G+Xgv3Mk?cHO+yf`X+V(dT!C2=_&)Ss5A2z^#dp0!imMR-1o~ zFIbW`-N;X_xVX4DJ=VWE%MtRSUN-fx+duN~@Lc-r7%}}^C%;#ttK|vDa-Q3A(deSX zYb zCAh`ZLIA#~EqDVpH9ZYTZjeZL?-0BhAilLNOSyye{oVwylVhXu1m57KF2dHOv7R8s z=J)T9U4@EQBns3^#7`j5h&YA%#s&8@Edg*seWOo+xFge@f^AHtS&p%fAKNgKQS-J{ zapzQO=n^Y~%vZh_tu1b%+rT^oA`p=q5)z`?>Z6N&#Aj<`lRCD-=K?zQFSlZ6Q3_Xq z>)?YYxp3hEnOy!bc60L zQ;<`@&NlXVhhRRAfPVxcDmX-!UkSp1a76UTks(V?y%`ZBQxtj1`C3wp3Rs;%>#;3O zzOx0G>Yxeg*8~^Oe>#=K@^a2{)R0FkCf^I=Z|;`{7zgyUM;tY%<0DTIIO&AofS@t6 zPXKdU?d$A*w`{G-JM($_{xcZpgyYU%o&yL+x_Ybu5%)pa|H z0Z`nVTsSs5T4!vC-cl41h;9gC9QCx};e)mbOGF-~>n=g%*NH~$xBlQo(I6zR5M0+f zJO*fK2Ub!?V_shBlVfN?B4D4u9t2SYgQ8+u4qI>CQN`C;PmCUbo&>(>TejmP6HuS= z8_fmF73hraro{CiRdt%yBI4c{&Hz^<2h%mAJ%^SKdJiMtHvH@&7Z1-t zZJhGXd7me;O8Yev^r8`eKH>mpKoiuz-MI(Hz!!40I%A>ZTYu0I1TpHjKF(33^3Sdd zhh7f**#Bf8T|WW>dVFU}c8s~X5?$)RmHYjp*ymZu&-j=0*v{zKP; z{H^ykc;=?apio8iU9%v z@=Cl%lWIC`Xc#Kgn5jQ(d zOs%}yhZ-tLt*xz*C}$HL8`SmdlS%O)4$BLu6u7K1ingJZ*6GNvic3pNIaY!>2?|@9 z{RGUFe8Dl4A7;6ij_aVXQ#uxaQY%uL)K@NVQMsU^FcyJ*;f>bmWok_9#DXBNu|wHZ ze9}pcd14O~b7KLbUS38np!Ch`OQ5&b0W%8X3ooiT92*Y(8C`b6ELOm^U;hv=m+YLJ z5`mkrmABr)W#4!~jMOLx%9~Jp%;(q!){(Kpg2%9YM+6yOLQB${QLGe1^CGNRA|)dr zQSJ3a6H5ZjNGA-PkO~2rm7d&t0h1hf?}p$X2|-_gmcdUb$P@dDu_zNQ^2QR;N&E!X z5Re2^xO#N6r%VtUMqP!_(yeFc8O>?Cw9mdi9sU^D=ResR0M2L z_FQA&7%wR$wfEjWG)M8h$~$u=xutbQu%p!OE{(rey`G@ul3ap{G21rJJm_=9Ug2AB zk!SEDv=PeC&)5x)i-I$NqWhgI+}Y5(3aVtC$Pj^Jm3o#-+R*Ic(@vz8D4hg>Q)4in z_l}g`+3+$J<|1PF1tfW{mCmw5CCpFK{%-UM>=5qaPzaCce7+S8)5+ z*kilJEf{-(G6IkfG)=@UY_=8^1MwW(typ3a0lX=;yMkg1fv(It6fk{~n^60P2WNqo z@(OClcBpy%r#&L z$LiBnbnly!ck@BH845d{2vdX^Uhe)7ykJs<;+!n6ov2N^UEk2qf2IG!2W0?(U74EQ z^>aIfW2f_pgf-MojAyRkywd5zSrQj$s)wg;$3xvT2qJJuelOH}eM>KxiW9Q{<=mpG zG^~&Jz=E_o)veLv!{67G4bx=W_WZW}=-kXV6lD;Az7c+;z(Qb-;|=ZlvK$Z!s~-om@C<>oGE(F51O2cGyU62=(R*Xtw= zJqb{Rw5@M1{%0ytFO}am{V~1k{q08J7xAPP*m6cqtvmLkrk0l{Ew z_`f|Dv}xaU)H>FpfCi49r_h;YoFI~*817q0#!FH0bL=bywB{ksb4{&5kD`Lb^uvnD zOi8?U(wdcp^Uu$}u&65zt|_&`Pb?wlh-P>X4!6_J9@g(Up5!1NT?bJTa2MhaqRo~h zVzAc~s61&J2n*F2o0!XgG8pKE3O#hRW!^jaW;>OrVeCq*Rs{n-qKXhTn2dBpL?Rzf_RrOZPXDtpHpoA`<{w$w;-oJS*m?Dp81@Eu?kDDx^^IBju@G$Pl4rg z2k?sS7;^1c!_y<-^AafGy!c4uZ!3bIw|l=D+Ghsu5iRCy8+ z4%Dta#@xRwA<8}x`+LB8uR#!HnzQ~*@%Eg6w>b}*B)J7lvf(w+^Sgyw-bP{4i`TSU zDgzN9lx{jV<>uj8BDQIG(apKP=wA2sW;3(UJ#E%fbF)$HsjKIfv~xj=^$lv&7os}J zKeVV03>Y0XJscvd`8)561y{XzRDRYv6uqyZTvlCH@$@$`3(omi@M(L#U*N-1%-Xa1 z8zm{o=30;A*+=X~%INVK3*))xD!24zOVPUv2PyhEIHSOs~WEln6p!~oSwJ;&j% z;2O(Z$GJcLNC3gBQ}2ExX&Zpbq?!OyOmk09B3K|#N=pUHJ`q4qHv&u6Jo7%jih|5d zpS}-6CCKc<>%T^FZ86t`sL`9^54zRog`!o3TnKdvLXAIxK97JO4XM=8UIi9hXD!$g zgwrG8yFcVS(tOizgRv`c3hGrcJM+x04I>38YZ<^a7+xaoKMN=)K?`_eYVj8n6D!LL z2Bac2K2Qnx?9DhAo*IAlrwK=g?%JZF=-QrRP@iG;rz)5s^;DyX3}JG-GgSZq%ETj| zUzqdQ)=t>}v!Yqq@TZJznry>cXCv(GEGrn1_YcOY9mPVT@RG`^DCBF+{k8|vJ;;O< z5nv1Sj!v$WC_NaKmZY4uGJhE$4ig3A3ovvuUlrA%QL!Lm+xx~mLnHyDqX8OSGlCgJ z9c=&smD7$l5Mh+R9v-0rC=`$rKE$X+DmP6$(WnNSPf7_u3abGW3{b#>+kpl<;&F@) zy{9gI-`oKNaFGlC!3F@6=xV4b?{`iN4R#RKb!XtZj|F zuX2ni>iZ#NbGcWBh}56+M`N?}V!H(+4V#P0P1VIw&Pojq>~0g`_xaef&BJ5gr(rIa z9ID+?HQvP%*yCEYt~YN~;)cK3V%J>-&`JdT%jhulHJCep{-%Z_elNkf5jj|RW!2;6 z;qeow(sN7$bW|HfkJh+1El~ zAi;U^YqxraB%JmXb?SiZmn42^Eg0FqW6iG}$_Cfa*K!0nCX_l9%>sb0rwxy1Y&(y= zUEGrD?BparY{oXc@z?=`@NsxVv0wx-a`EKakSV2=Os}Jla-%r`QmExX&EpP!V~7Yp zVo@KSA+?24O`dxDJUYSl+zY|QDDX?n1g&A*@ID71S5)QNkTYNR6E^E83WNy1ZaW!n zo9rcEU$G*A+C))$5S0?o06ES9vhE@PW1U)CbKk6ylFF$Sj|dOH^|oF~Zf%)!v7_+h z@_v2vp3{gWRY&oeOoV^^QnJFkZEf$*UoJs{Tc!v~(H+KbIgVJ9U_#pVNR*FAStS07 zN(qIB=w(PnV*b`ZF}x3(uO09z;^jR-{^!C=8t0I%H>2?(u9(!U4H-2k!r4Hap)vp& zP3%-(C1NMn>|`M)9CKgRCa?iTPk%ZESoV(ASSz_dUteFNGW1h!DBw{Fy4OBz zvH(Hoefzka73r$i!3*Wn0=lBY`6UMU!I;A?H&k*{A!&<+~&o>tY9mPtW?PFZ?5^UJ7{Z|hjsM)WlifJ-Pm zjE&E&ThXA*A&y7MctRC2KFN#;{B-~jq->^>jto*A4csWIIROx(${`xU5l>l<4wxdt z-wDP6ckW`xamC^iBr^AoH%Jh14Q(@|GK34GcEWKqMMfk8#k_F;ctZ^06U25h;AB;! zYe@bedMK$owFBRX?4!y9Rce&f_flCMFRX6}A4LMyZ$~=C=qUzP;8HAPr=o+ERgI^K zFt|Kogwi5r{%|{33FS=m)rkQCudl<5k_b4PX8ZJA8s(7Rg9B8;{t~q80-&NDk-3P0_k};cgS@u%KC6; z3>e=yrSJqanj;+DCx|(5WgqJeC0n)zK3klj6kO6%^0comGJBXmfi^B0Yxo%f;N9=r zdqW_(5G%0MN^Sn@AKI5MN3l?&;4PP%iRf+<6;o}=SQy>>HOtnU7>BX-e1G`UH4jVK z4R@CZ7HS;8Fo1UK5(HflH!%7HINP(j31&kpZ=nbeE(s@@2S$joT7oh6uoPU@h{-MI8&Ag5 zsN0kne4va#AS*QA9y{$+P-7Z#z3m~1qe+Vlx9O0Y0jUn6*cW{QwMMF)C`^fIDUaxn zgv9sl1EUbaPt+aX+3o;vkYlUUsmpGImVlj)08m5m>N*!@`zf3IKtXU#H#FOiU&X~m$v|2_?Gho?zd;y3Mq#pKwL<5V(?V}Cjf(L;8P-& zO;05I0i53kLy{Di5D09Rdi@a-Kq>(UCc+q*L8*iiSkyy&OwJHNA21X6QW~IY$B!eU zMRCU2RCtP0>hlD5i}Su6wBkCE)uC97Hq&_zpQBCYHcHKP#_#ceDsEGU3^PW?hSWh_ zPoE*Igfi#`_AVq;0*w}+d#x*g6BA}^MXZt>)P$D6bDP(!SyM*s{-AH^=6$jS27uMu z-(~0va=Dt`^ZLHbH7vaBCMF{d{=?hEzG3OJ?2B6yyk(_&$E$eNP5+3kxSGHmIUpbu zh08NDg#99~tAJ)0;=>^VMcF9h=MR<6#lnuIVHFy*Ql+j0Edfb9_ z$g;<#S*0ZJviSSI)LLhWD4Cuf* z0Q3m`w)J>pu0Azmp=_zcFg5TYAq|xGs&#%{f;1I{2g!FEHf#_vuU&^$gL3tx*5>AL zgcYb=JIizvI}!K3a-1&%bzM2CAi^ZLoq?Rnf!L#rzahKr}M2B23sHE0l#oQR*O65lc?d-8+|)X|9uARGW~ zr=mc~&CNcZpND^-ZWoYlZxOwHq2Ux&L3ttj=pRzR(g>h7tr<+YdzTA}PEA>c#vWsb z@-fNC=`oN=B?K9esPVEMiM9Z~L=DB}b*;sfKX5mXSc(jrQ3fswL7Eg&N%0?wMmeP2 z)RrO>fM2->OZurwpuF|2no!Z6oTj#^^}@n3|1Ml>=fl9g@8FHd98e1n?ma*7Q*1qN zbbH{@5a|nu!x7YWNIQa2cOkH%^$02=*4C_)s{qiDq83)<%+w$9EO;Bn(MCxQAC^Qo zO>}=!AHj{H9y?$L-lk6{L-ctBWq?J&I%kdw&^GW3xzNodt7>F)huR3huSYr=7m&cl zeAFyYVz)2pYL5E&xG%ljmuvo#Lf=|f9*oxO0Joe4)<{Lb_98niiMKX)`_rKR?e zz!@>PE4OMs^9qACS}Zn%+`4?PaE|)x`Uf4rF zkcD&R&aH&@4k%juC`3X5n-4TW*w$(+#pQu3@E#Y|*C34r1ZX}(COe3L_l1Zp3ISxy z6b>S`1Py5`o@1iOv^CEB`l3|iZr-Iwu<%YC- zxqa9j4a!ptHx4el>1n)_EtKt2K}zP)Ye5}tA}*`+PxWXl;~Uv#&LXo>Rak||_xGoq z^Z&C%mb3=3`5~5aTuQ%;Bx>VOB31231qOl%bq+=A=5@|-guPoknAv;`iwwfZX@!W? z5yxtueMb@>L|$T+04PGDY8wJS)&`U52E3GsV|^f%5oCe~T7GYr$}C4zYEq78wy!aB zg5aW{UOJR{n{5mhdhu-6h1ya8gFfo z2M!Ps3-iHrLfBD5f>&}3H!vsG2$&`GN&iA>_QUrRBjTTCzknr^&3?pgy*pHjV2A1@ zFH%O9coDgm+=Hk)%qmut{vmg?_|+VQ0yA@$kZ2^}K!xC~QjNU`jfqSd-Gfv|gES|{ zys5Il`FM{kW2F6aYnw>I{Kamt+Vc9lI=C-Cu*rIDjUHpjT;r0SMHuC9A`XX`vj<#7 zp{yf*GyMvYhnB6BtWNsL+emXvu4X|PZsqBZzY_%QLka&NaNt4s8_F;vDhCOrcZ|^g zU)u%w~J~ zmfwTaw-VQX*l(LnhdMAh_6#M|rU*(x2vb@&jF>3~Xech*n=z?Bw3w%65NUS1A=go%bBu-E-|slwlIq> zUNmUkfph3nX-ofOa@DweF7ptTV4wIS2TkEQ81qb}9K?R9PZB^Dp=Acc8A+!Oc5@B# z9P%(o7!f$=Bg7|vfb*(`?*cvd}OB-N-FaO8EgMU4TQ<+O8=)>a8qK=r2O7) zq(Q3Cg-M0T#x|v1J$Go@$U)sU&3-|9UyuFk{IjFr9SoqcN^4ACPmdIbTDI_@o`u=dB1pgugi^w4NhYq9ExjI)5m6GrE7e8w6K{DCsoLNQL=g9Z z489ZlpvBFChR{&0BG+6Nt~#+RJkD@*?lE@1FsyhzI26^Br>)&KjEDUjytJYGZ^^PkE*6G4?3?K@-~$0Spj}_=5tr4Mjim^05vntB@Rkbn^~UGECP2 zz!3|h!5y>`Kn}_QFV?T7JDqfmiu_2G!1)lcG@sJCL%)jUlPRscC?^thQy;kQ%8m2~ z9YjPAr?6p?(jWc=<7OfNbWuYour2Na2RbfZ%5x~Vo>UYL5x582-2&Z3Y7Iew8|oWb zf6M7fTVz0`*%ORh%~Pk+k$XX8Nf(INK8ov5OF*sI2gKI&bTKNoqP9f&G#)T#Af>1D z3Sk50v0Q>F1Y7(7T&g~{PC)hq24hRY4Ptc++$sdG4*^S1Cb&+oru7JUcZLhrmUsXL zLWXw~aihE9v>jD01PNy9s9mJIMMf~_wC)PA3cyfcqL>0MH}>F|JO`JBC!xAI`S;2H zOKXr|<)vp+OLo8EBoq4Yx6EG%d6B>6B)i;5N#dVZ{_p=5hEAHzl(PEgO|yGHeBiBi z0&Qf=v{q~W3Z`hlKkwlTL%Yx4%INvIdQ3qg=I_-taC-okyDNqk6H6*oElM3QAR2%| zE9nghI@l`Vemx-lM9NPcvG)89)*8$8kO*A3sJR@0D?H=IVX>hRb5|Al}@U5bZu0d0TSB zDEsaw&$u|ZZzgx3OYCKI3z8fe#b`d~puTmuEGQnS*bT2C7*CV$? z1iG%5FI!koEsk_K@wokoVltL&Rg(wH4;mW&`*>00>LIMtPui@)7y2D(9=wnTLl+wcroDHybeTwz>Mm#ARIWwHJ^x|#9*@~WCu_O0`1|IFT z?6s~5oNMTX^74?0iLqIG!@FX^#@OE-9&qoDocwZV_WKCcLiOUJJHo};ho^UPQgzXs zjqINoop<#tc9^MLi8Buj5KEbtLcjl2cEh~z$5sn=S%f{}igH+f#>_lftLorT<*4%q zYvVPMI%E1Vj!}>6TNME5c`ppi?|~cuy`rQ^MW3W1K;>iRnEz;sCuwvvKDItumlgB5 z;)u3hfE(wDLx` z&lAyDarKwtv|)w5BURFhK`V+CWi>j=7s+X57)0-O-y*?m-r!Yj8tAEdlX?l&Df1xY z?5i3_6DA)84yU|uzHlwt=>;t1pWXC8)j8QTThNkq(DD<)TU+gEH3H>aT1*{}4X5@Z zZ}OtNV>dO&b&js@+T`y#1QdCq>~!Vj#``yS*iN0L>%%v*91H9>Xjv34=8n`VTQ?6C zL{uXbY;}K`dJFRpUib0-8+`5R_v*H8Q%1Mg8+#z}e|l4uu7 zTkAH!`itg5cyy}bQ*S_x&Gcraqq)45=zVD$`0*H4NqD^9HYc~3n)u&%mY5iu9OfIT z-!|Is#x9Xzbm?y`Mdd$PRgz3Pi|mIa50LyN>Gc!dOk!KdJEs>k^F+ffEDPqd_A~zu z+_e~&2N+IZU=X!F2&8wKo&uF#yMCJ)kdS|?A>IboNq=Dj7U__SwKVEE4-tcs>8v|{F42P#RY1^B8 zft>vP3F!%br@tnzl!muf1&r|S5ep0FY@RA|NVD_XVRu<2PU!>s779Z zDXBj(n?dN{k*Ocw~JrsYuE2SO9158ul!fI=RxQsAWaS$1mf0>1dg&sXJ8d1 zvOs;6RLykgGXSpA+}<7y{yIrdA|Urdj}~DoYoiq;~QOKe@7ME5$#CaMLKbt(Md-%@&W@MXwv~x$N<+c9>DRQ zOecp%@a)2XY`olP{2vFBW>*KahcZnBGUH_zf0Kn4&U5Hi$)&cS>SIlOGF%AOHZW>J z*MQMMd;-Qv7+GFe=Q9cP7*Z%$;4A=NtJ8`)OY)q-}Lb@ zc9oKpG}rkIxH}nnq3tm+Lt>aioxc2D=HFw|A^OpZbi@@yaQc^16OLduHESCBGs^T? zYVR7C7#;qv@e=vQ_-g0~yDo1= z+;=FiDpQrselp~&b!kSUI*HpF*`yA*(dkqzmhO8Qq1eDY^#Wy0$ zWzOU99u8x|9y348!eXw0XHE$eO$qSqNyn|xK6777fCR&upe@-}2PBjT{HafrJWygWQ^6Vi%*M6wMulRDO^z6MffrN|KO zb2-=z@jy>?A9Gy1P5euc8JaDpS}13Hi%YB$_RJW{xY#p#B<m!*5De!%C>{>1d$(T=swP{SZ-{&+_7V(P-A ziDFao$;WDweuw;nCiMnPcL~mT5_;ST#W)iZw+8hl6)inT_h!6f@`tEz1O9;&X8d0B zJgf5qic6ulcC2Fy3TpEx?VItQsUMmWQ8F7xg9!r-G;zHs8xmg)GbUeuPPXe&*>}VE zbAF=F#=9_=Zo>%lq{=&+t8mlVdwZGrf6f6-C-FQJ@Z_0U}ORB1s3%MP= z9NGoh&w8sa@{!y5lZ=cwt60GI-v>3W6te9;EB@ERE~%%jDU7(G@vgCqgieEz+2=bu zfBf>)y7Xjk&yG?+^$`>9nkPPI1U&ipQ!otUpI z=)onsb0_D?{BL@buQ|u%FPia<`R=Y;lk8C7D9nRiIj+i+>oSPa>p}T8XiJ`P$X}Jp zXAgnY#1R?fa1`Y;iB+qhMz93S_1bXmaL%ltnO0;XwCy{`pMOSy^$J*lj{pQ?!Zh4P zZ?B_RS49~BdG^klGz!aq_qsu_Q+k@+J{>&gHD;($i^4NmboQ>IfSv#+=3( zH&U5bW@W7-CYAip%%GLm0sjszs^RV3Gp^J{!iQ}dKArkS?Jqw}i$_ge!1w?24>m*p z^y_!uepv)V-`6*ovHs=jiOW})bSUKB^Y6N15TiY!A=IEhxPsLr24z(a@LMjUwuy(1 zZOL&t6x87!nuE6NVb~S zoUT9{hIa3zZJ&OFW=p`53b#M?PA2AJG3n$xtNQFYzL()GvXlW zjVd~A-*jw%M06V-zfc^xTAKU)4jKt{@tI)3I0$GZ{R$its>EO_xuF~PF_`%&OK0ST zE{7x9PSpOg?X=U*Z0ETKei0T}WZkw}C$g{)`8~Oc;?ZjFDXTx@BK(4}{lO<&KVQ7* zI@4A`iSK8+_``#rF>$^*KCSWoOuO=<2JFgecd=D+a<5jbSE%$w>B9U~ws^`Yf|+7n zJFu}+>Slb2h_KA^+D^2T?A*yEyYT0qArN#ZVi3YEi+=XV`YRFCyIYJI-w`sx3*!i$ zcOL@-$)Dbv7z!soo9T%-!)t$ z+BhUnG!P-Ma{+XiPtf32`OX=~eD1_%v;PF5)}Md&h%kjMJoWnQEe87H4kg&`e1zz5 zWBkk~*RO(G0WJ8ZZ*62fAF1qK?(_e!_uWxZool~iOk!e3M69TY4OD`lq6k>9U;zt= zf`UR6K?MN;VQ9vfAVut*5>V+y0jUFMC>8|ieTblm;;2d%ydApXb+}JuO2=E6?C!pLMG~GNMx{jePKg3c9?4;TBczPumT*FyJPmR&h=AO zfi-NB=Ec|CZcK(3M_+#qeiM0w9*~L8(|zFQ4r%E^C2yntkJl6&KED3xHUlAW<7~kD zeAjF;wDV`7q0L5A!R-;%vo*)@Tm&g5F9TLP2rtQ;g>**AvM*1+${)HJIT}B|9@@Ik z|6!+GTr*~y5w>EVG0yMSwqZ)VtYpUKA|?BJuF6^mu?y^ned{@mY+(GI6EO!8*~@pw z<}iN8e)%Ho{bFJ;Xn7zGA$zWR_tTT`zuJMksL;-I{mO|>J8jpVA_bS;E}TrVAD9J1 zxq(t>2GvPRv3J(#Du<;LRK81SAu5h;jU{8lEtWS$%Q z<#%FRvCF|RW{iSXOsoLq=sO(3$nKjB8Pj-ZTf8vTC!5+M=uyA%`%|a%>0Y>T_FWp? z%qfD1zyw;$Gg8bYc_{48OU8d;WpG#hg}eWGHy3Xc?Q1}5svBSdoDGWo`koeA>2P68 z5fd}JnGKPkVmPC|TGjrqv)J3+9kZyG7G-cX=lYJvXrlc%6_@}L_~iR-&#+E(5;p!cF~SZOg@@+fL@a@70Vl#!Y`YikjzO)P)c-ume&I?N_q+G9q{GOYWJ zMRBF7nin-RGGTM2_wwl-US|N;4#`@1cLr?>J0FQEm^Ur0em#{^rC8rC?YC+(Aqn{6 ziR@H5#kpxw!8Y9(9d)Z~vN5{`J~d@}cXAsUwg1bN66^Lyr!8wZX!|=C7U+QR>0~r%Em~nuYu@1>78V8}o;z-B4n?zv z*E9ZDhL*(2m}QV0IJV&8aVF~V`WS!U<@MoG<>5Xun!{BYKgcQ$L-htIGS}HK`Gnb! zxr}$$?Iw{Q{JrRpD_%o~P@l$>mjxG%v34Vf=Si%H4TivCpI()ZULVk^lO~tw#4lhF=V`!C;^M z>Dx{WR?l0*JmB4O$1BAk^C0ny|9<(urV#yNADO{?=UJ1+{z>-y`3c=d{%6#~|0$P& zjWl2>)U@6R8Bk5oDpG=ru@VT?<{`{3+HD#&cp*XOJYc-hxOq=ZtWA(Upqkd#Vkvo& zc|w;{qu7b08#J4u9fD5uZ~PAPU=|6V2!Zv;NsDD@!$)M%IqC-?m~J}>d+cJ8C=Dn# z$NV0Mw5bA|1G{motOUrX0FP5hL_}_cwu#@LQk+k>Ism1MuCA^_6R9;(5`m^`b7H4sptYmwTc&Xe7=|4gLe@^H^v%ZRW&7 z*eV9h&l4KAH>yUsc?f2hYv}m??lcSK-s%Q5Nl4qYPxqkcg&xoHw!_;S4*B6>VaBN3 zs4~ofM)YG^6PLs8eXs56ftosSHD_|umVdpt_x?kFW?6IAhunfAGdHy=foMBiiYW+&bGipWj2bo2cv2z!|*338S<%i0;bM z+1JK9-dV3_XegCXV`p&ra%!Jz8C7H_VMDPG-341}y{A#HF*nvGZ~0vLReCk{>B5@p z%WV!>)S#s6YSc^DH;vxBC`pF*ODdI{@nwbv^)wz%RdQ2xYoO;M4_tRyWw1j2U*xCg zlD1t69Mjx~iElo1!*Q?N-7TH!r&v9kA3XkKShg(`DLD|20n&l|*(ysyuh}|M+vVdW zTCdfPuz)IHaPNxRaF?K303GHv{xX_g(^Qu7Dlmnyu~`vcyuRefE{hsS)Vnh0s%>vl z@g8(DD#ttTmzS=4Zq#qx`)Z7LQqK?DtYM^fYT{yaL8yFpb z^v!*6Bm1K43pMAyiJXg!>1YAcLoe(`(_m49lzD<^%&XP$DBoc&SGLz?>(QFzB~3%Lys$3tN112l+)_mSuxjM zyp|h)D@7R8ctod&iP3`08tCT@v|4lEea!|0@G8~RwfnhIV_*N;F{+mn)L#88ZeGoX z4YVN=j{ZlEg3vU3xH<~p5%6t2maE7(`HSzNEWqxz9bG&!6V8&ga{G=QpDxYqGa{+#^CFS3sb_oVfniBnxUiF>7NcSDRBx07ZA0Yr&nvlF`VhRe&uHomhfur2gtU=yQL!=QD zlizaE(K^xD2hjQhdmBDx!^M>Yhsu=VBTp~Rc4%shE$eX7 z_BGQx(Nww+YVXnj`)@~1JfC2JeVERg1k+PBSK^N9z7u1)efzOtqg&;b%hx0wzh(uT z>h&ACEunB}zwc<4(rlM}JbO3QU~F99H0{HE#nv>z@#ppN&@SX8r1!N{_oUSJS>*bw zt6!=t8Tg4zR->W_RNR|*%yfx;=TRUrqgr=5KfKv*9dEEPykDm~P?)5MhtrJB=S{DS->)V>gnPoQOl*a4#_X8zoUv8dWfFo<4H4I#B^<(l(P93xvhH z6q^ifeVK>$qSL4S?=qzOYRAA z5$@&R^sWfL&t6gt0|Rn`B~o-v@W5`o7@9JxX73)s99BR`myOJ-mWKyBrUOi!>{DyQ zYTOn7D7|Qi+r3O&0(7tqM-daVpR;**>5bb|uW3O@UEQq6z>FYHA>rvS#_!G<0JrY&m_j{YsD79orC=F8ZJJUVBz2r#n$ZNDGtPqS!n0$FYnYk zOXwiZfBW*C2K#xlrgv|IXk9Idk6f<$EJ>s4S+Nr?HU5?W_I$~^KJ2Td`q4f1yphew zY+OK<;*Z?$!KdaeU@|Ya(S(3$FtMMTVv#r#l(7U3kaIGcA6*(3!}oc8@xe{44cI;` ze||cGhvN%_V^fzWv;tJ6vD!h)iN_Cc9Z|q3ppB(2-zJ|1mNy;y znb(mgkd_9hre2&V@Nw-m*=tvEa7miMEt7N0=UDbVndOrSPQ^Ys;fotJN4z`*FLxd0 z9(u`WTF>M(zDjL;#km==H)(Mz9%WZYu=+GHF`S@QsC06m7kDr&*$*=Cl0WRxaDOZ% z&BeR1NS4v8yK_m)1NF!TdL{C&E!ZqdP%9i_B0hfUrJY7tWZsD`3= zIvrcokq{z{6WJ3g_BR~bNvPNrL(av*WM)y*l_0cEw=7M;D~FI}nV7|qBdW&zRNN%=rM!K+<2>w}Tu zb)*WEOlEz?0(zk_>!S`si9O&HFH58Z0@14gc5@OAeT(D%Am6%N2Y3TnX2HG_pvpPn zEd=T%i4)LdBz8_1F)RL16Z5ub?p}?Xnz%cZvB!Xn7LjU%w%_B+$;wLCwfun644~uU z$n?1{ZZB87C{xk00`$Mnh((Dr7NvF7iQogg6KKS!@;FB=8b~!M49hnDR(wNmt9`m> zZC|Us!u||5<=zj!2ifzuA|L@=L+-6*@>1;P`v4NETfSK2EyR$+QqV=J_pSUta48xjR+C=>L*4)wao~e7_a~j zq$GhX1w4SFUcajoeJmL)c|Y3Sphu=`{E`;I2OWmF3R4styiTu5oA(;Cu9omP1Swew0mJ;F`W zAH_pFH=X(bJZLqZ9R~okPaDScsx%ca+NHzmp$L!^YkMQ_x}4a4G0R^&@!7@j0-Qq& zv4psDauIp+Fr!{o3&FfyFDzZev8{XlK3Zh~2uWw7?c2rhblarV88?;1PC!AkZ8{Qr z4il*3PO!zN)*U^R0+JqyXQt{^T3X&c;m4;JDTj+@&I^trz&&-JC6bQYa40WrJ;k`` zE^i#y6ur9F>V3#kISh&3Z8{xE}D?Db3)nHy)1*>A(jC5WA(Lfi#xKo0C3 zCa<4dAWH6kLh#h#y!OE`njf%9Od|ZOql&VND=axsweWf0>VUgrLX zs1N{tk2!ya03C4KlW{Qlz#X_A>pchvASQZ=(|byEH70ewSmVQJV=@dQo_^c;%jjv7 zMP(rJ)AmxGS+s zcupNb)4hqQO6$s!pU|_Bap#(6-`ujFf@Ru%pWgoi#GSs9#h&htHF$L#cyt!J;HR@- z!X079*tl7pQUn&O(eKQLssNnyi0XBz(~7C-qqkK732!GMhBX0IMDPr4I#g#PoBR)D zY;W~J)B6rXjKLe*AuS!9GMX2KQRv4-x`hkf%*{p$`<)&LWr$XSw4IPd6onO_2rmqhjMf6mS+{n2&r6GvzifY^M;g#gnk_U+HpJx-2R32R-s_qz z7<-n9J$k(6#pXE1*~3!Oz-a;@vIHJpi7Fo2jZ%QNj@)EKv;3Xrfr|sZy%Y&ZPoa5m zG`sn>PoA-ulyvBHk~i{0xLug;Jw9NnNn!&@k1P={__x0gE!V6%^<}jP!*#h)ikhph zy_80<{jHLLmN2r3v6I*SBrqD_8{wP;)oKenIsrG z2Tj11MhGxhj7HWY+9Yh;bR1ktW_}WF$emIU{#cJ4)D!T!=EX#0umr&|nxY$v|D`<4 zbwqsJ$Nrv(l=BA@8KkG%A!6}pA0#*%c-dIsbhx>MN_Z1-pQ1z0nK~=PRM_Jrg-6+) z+IZaKYi+NYS2Gt^OqBui2T+8KeyhqXNN>H?roK zAa6!(UYg~*w4U-kCmEC?3%go$RKQ;6(w%c{&(o zo>T2CCvE0!sFrC$@F&(tX{(Jo-wHpu9xaKrIZ64T)#H$YlN4Zxw-?+U z^`X_re;;)pCFQpzsp#&kAEmn|Sn?Rl*KMCJU}A)jW@0my0#u5h$N8}rBn_l(KFVl^ z>*S2OH!awg9JksQvtjyEr}Ugt>v^ZDFsQ}QKnWM}JkhE?5M!j0Vz|i9t0%Yy`tQRD zjc~j)-QWM{Cpc=iX=qSqhoWH`!4Jkq86W88jllE+mXNcGwRJ8$i9X?qo?%ke0Zt3W zdEu5ONFgwC&Y-@*h59ZKSjw-@uf_i0?!NoJ@jCkOH%bP8VO&Yzx>PZ>uA(#N92lN? z^BvfkIC!BZB3vZ5F(S7oJ~zNPx5Y(0RhGPPGlnjR#n&zVo)R(NL~e%YKe85SNbX(vqg;?Ybm;HSr39z$ zkEynBy(vbjBPcADk4<;+-|6=dn~kY3bkbM>^*N;Pic&hMQcMguV_w{#Cr8a8IJiqA zictY=m}aYUD1MCcA8sdWh1_cfdOA9pIA47CI5Qv9HK-2}{4Py}W3?lc+BeR0MkP0f zRW~SYttSjUmnH!G3x z=ahER!HSt##t^tA@!8;?=)k&sxw-Nkf~ybo0{?rFvegou84<>sBoI8tzZyA@a->0vK=2b%@>Mbq1;B2OV^Ts?tM0_ix zxnvP?MLW!*IQtKehUI`FH^Jank{G-L(uAUq-Jnw2t#tyaP?)HbPLKnLoJG?8;*j#9 zesBSymyLYp5!OrvQ>PT(=WF-Oa6r$Ywg&CZ@kPhMW~B;ic<0bsy=l?DD6@#uQJBhC zIdaT(DJlU-mPSl|^~D)I9NI)oCQ(!C_-#y9vnm#(!b4hYl(mzLb>zug@`BCMo75O(4y|w_~KH!usY#bT7~@yCkTXNg+9M zF5{5}ET>)!Wl8gG+e-JWMeHOT@|YbwFmXb*cYaWh-aWc zR2`l}rap;whO07n=hqNrxmA+N0_6Dx1GGrP5kv6VKie+Tj*s(NwB6uuN5(LJ!@5xH zHh_+xa=~sRP4)A_*UF#$2DqMsu!ZUB=)8`^6y+CRZDo|3ta!P`3@&to?WK5j3vy>L zfAm-Us48}l``{JvHcLxG$FB2tei=;pYCH+C$|qlq7TBsalso#_KPsd=cX!9gyg4Ez zFyf#yAs_g{eX{{u82Kyfk)KCK0%;MfiWXU7kaX&a9!_+3cX{Xco7-G5W)r6s(aLx( z67Yd7=-B<)ABTsc2+Ip6z7R1@p#&<|BgNqy;SaFmAeppd-r$1ChWhw4y!3UL zi|YLsQbC2*RGVA{t6YT~2sWYTH^ECzo6Ej1|9fU5rz-#O`~u@i9$t@{8_Er2e0zhb zT1KUtXo)28a3qVvj9&4k((L9T1!=}*ztF+nv=31yRuu=YVf~|Q*)=o8{@Ve@ckS0x zI{Rt8b`@Sriz^E7iKI1AaoUr6{_;srF#ye({A!faK zuMJH6A~k-fb{1N<5r6vvOtmXN;LwDdmjxc-4FB^hV9i@W_5++Xtu`=4kZ1(d*$8DZ z#y2(Z#UBQPip)06i|+0xA*dU%oZ%8;6^GzO!HbkfC;j-t;}}05vX4rGe18a?@Juu` zfSLU5&r^v?$3%h}3b5hI%o?XS0)K(PZ<5Pm#{eM%k()bi(;6QJ62VgWWCrj@$g>VEff_(&zP#C;;>i{9uO{wi#zZc3ODl)Q>zC^m-`*_6(Ygr_q zN$atb89)^ISBA2|aarFnyD3;8VwOm@=nuT29zbfZg#i2u9SbSU=kj7_!7zZj0F(`= z*=^GuV19l0Z<=3shSkRC)$$rQzhj(YZZ#!%r@yjgJj(GY0K_m8`r*r2jQ_sM7e@d_ zzxIWF@r6ypRT{(>#`ZyNrFW5e@%x%;er%o{{yLZuOP^-O`gL0~f8%~03df3BY{vT^ux(ZV8@*R$;$ts#Q3E#O;A5i0pf!FK}?L!oY(W1-(Y~}v5Fv*!AOJM=Iw)? zOF*djzp0p*9F8p*5jzoMT8}^K2{xOIG=LM2dKhov%Q%Ux`zhE^0i5_x9aQgP8~4^nwq9h^xXXs8!mlB#M!lx5qa zF)lw)nNPFJQUUn2VO&WjTyc{DedT|tH$MCoo2)X>U!^IcXfa z@c340EOD}`TKzt1StjOz*oT?|3a=*y9iAC^9Fq@*djU34(ME+OISGv)_s!oBmUCht&q*eNGO^|ffsbNwRk(sW;wXcOw4aI`K zkVpe++p2poXvGTy&=v!(j)JZ0nMf4w1YeC8?a~fBe=HM)<9}qV$lnPr10wokpM=+> zD%ee8pmw6YNythvWSe}FnqxIZ#C{>fpYs)a-D@0*rl&ij_r%U2BUm}IBU&qvOfUs7 zZ%CUj$_5mT!+gN7UAIlmMZPh8f-bhCuN@kORQj7 z17+J}fgdDQ4oy8@S4m6L!$Bl&ZY1#_^g?^IO|7=jv@FY33XS4xpKgp&sNnwqqYPt%CG@mOOR4N zzMtm!8FIqXt6mzGG?hRsJIKPZbe&lF=AyWlvy?Q64y=ddys5+ZJ}ajAUJ z3Y7sakRo~^rS)woq@5niS(7&0uA417F?e71G1?k6Si6!72C_YDQDHSML*nB;ZZ)DihZCP2p=mSA2&;_qqL zYg=|jLvivtGCbd~s9kliEDts%LEf!g3?Sc|q3KaXSO9rLkJQBCNa{)-5Tpqs^jIsQ%rKC30P*FM%&z;0Z1?GpNdpasA+Es1u?IR`Iw4Xd}9ZZk^ARP!U zQY08Ps}NOuqh9AuRYSW~hXq*NJ=Uu-jdgevw8c0^*;**xhnJ=VoZ`Un zc=vpZU^rPg2@bOTg)eQ_JHijYb4g+?y1gTjdx~Oz=?v5M_azB+r37g!w}ARjFsEjQ z+?re7o~kLZ9+*j0%;5lt$Rr%Ub_*Z5Wa|w!|vxQ!XBn|=b^(25Hl}ff_iKYJ$kddcNv4`tM zE;-^@`cm|(8@~9}BqA%Wg%aNw!fqnb$Vl$QW7m2@^Os2qKru1W_(I4j5Un9J%=RZ; zaS;wpzBNDVU29Cp*Nw(aL^Q!Piw9LTYAS3fW8>tIseX^Npr^US>=Q?w;DUyy4htmz zN2&5@w|r#2nuh3>v^$y_t99m8>&CD$qHZXdtjE2ZXFjE}bJ4$^Z~f9y3q}8y+a>h+ zOPh^%e|$tjhM{;T`5Ztsm_V#mkie@ta1+V7nPq96@wD;Ul^dzLm*PnNRuIvjm-qM> zb#{OO<}K{YS2x5Otub>yZr{_~-0iobD2i}+49hi6Fo)`RW~{@0`#ZOqrYC;G@;I%& z;j3bcs(V{S>tIHD1FJaF{IqK@G~{QYT4u5K=T~4t+#|yV$f zqA9|+bzhp312-8s;HcIFY=@=#HYts(H}8pS_YHRa(0)v2HMpJ z#BqQ>kA(KvH^qwQi(11!fm`8MNeBta7zk_1h6UX&+1{S5TMOG*KJS9ssO5k2+n~$y zhGR;Rw+EP{eYu`$$5IpsAeX}J{h|MT8wm|iRyodoEx|4xhMLAW3M%$Q-~5XGH#=d= zU5L#e{7#;WEO;g^7$8`O)Fk@6n>hBK7|@j1C9RSDHBiMg)dW*ML-~PUAwV2_u88(& z;#R>CwEJNbJsQjg1~jnD5+KeyvWf`CxOT1eW`_$V5he}b#?YBaR6IG6XnH!VVIlU> zs)PMC-!->bEM}d)kbwJmUCBukBd&d3dsX`P7Nv!`BCZpJ!DGv<~cR)^!E@| zKB`1`tY}C<#ZM;oBtGUGAMuUEIU(}b%NGma2AqSMRPV?a3sQ6e3OQ57DL0~*tW%zg zlIM}0dYzfsdo2MuRS2>mAc_nQycDYW+F;)aFEzY0XX~@7BE&v)p_-fQ-<@lUB|9Oh zfp!*4=OzOy^v!QL1HcznPFS#eTf+^ku5siuT^}SXewrtKV01{Dmy%7T|ElmJldQVAo9qeviQ~?nYNL4hX(r-CJk6 zrX)}xW)oYSKie*Ql4&M&N>pTHOOd96_Z=QEmrWi#3M7D6b8qw)WxOx#_H@+4cwUx7 zV|@rR%mQ7ygI7rnl+){3)6c?(KZAP0>UI!$Ije_Fiz~91g1HJ6o}w|>2Y#!#SlbzS zr0kQ(KmHvHv9kOmyuW;w6k*FzQgCiGs2AK4*Ku60>@og zXE2~m!1&^FDPBAd-hFASqi0TTXNtVhWHNvOR_C{a$d&(%OrifZg7yEdmHVH&@vrsq zf0H-$&)WFc{bT*eyc?K6!u8#7WZzX`eR}61Ztk;@(x(^CKNE0%`~xeuua;~Xzi@^D7sucdimX)9jDICn!0J`ud6P<+PM74{5sZ?8DmdRxnRZ{b*pxIpVPVg zL)v4UI$c;s(eZiu4QXl^w;EOT=0Nv?{Higm?+3qzUk^@H_-YVtI%CM-_0Jka2X7pl zFebzNj4al;K{)h(&Sk7>Im*ENhdqF4WF3Yd1p%}uz>$C{K3%VKLw~E3)8sj$$)+PWZhZvOIQmgNJvmznG{CcY$m=pNDUK_FZlaU5B9aw zzwPw#DIFfe1?iY3E26_F!wE=Ben?p`+Yj(4iDpUu_^f&-EX$<9C-)KQQwxM-L_h=# zH@rexnqt;4Otqq^owcpTI+j6OOr1v|47(xzAVV-Y(GKjEmkvZD4vft-6B&%8ge-t? zNtQne1s?26vLtFrY<}=uc2v_kjj2d;AxlCw{`Lgo3a|7y>4OtA!5rc?04i6fK=z9X z+1@bhWDzMvh0X2Tx4qayG9EpX{5-=hzyl)ev0y~2g3{2zQ+QP`DmV`?LYY)sp_YD?|XEi$&=SyC(u;O8?(RPfd8Y4M;`0zUP ztX_!qq(X8m+6hh7=lH0k@h6kO+}p?3gsGwJAvF$xp1Q5{q{xFIQgg#wvK!OHD%;5% zK^0*a%=r`Jj|`~HIe+b%Bw#KtxD&FWbCz{-MUh4|xY+>?Aku8YJw?$OSd_Xv;6jA4 zktvpLwYxi2$x_4qf6fREfD zf(Zw&N;U!SxT5Ho{AKCgFXFbn!XvA@ZIgEv@F(xSJ)na&4$oPhwB?D2&e+K(K{_-n zWQmpNls$%LL-Kd8JXS{kf@O@jw2V`AXn@X<2oPpFJ&WDEA}T+T2uY5RdnNJ+z8IcQ zdK~nd6Ug2sJF>~S5+TuOs2mRJ9|MzG04vt;d~e*vW0aM8ZBnT)4uP-oFz#N|Pe3jt z$)9$aX|a^AfB$(B<0=VKI&8-TlY$#qNu+cyGzUr&{vj8D+GK*#Po}|?D~HnfvOavN z>In0GUQ>(YTFOl@$4IBtoQO9`Pyhzqxg!$~KG##xPm(oyY5br!wHa&d{6h=e2c^R= zXJBxh-(i1R3IvwW;=Ub*P`~@teL!xt4AMIaHzmhVV=9EO*jg-`*aH?(qrkXjSg z-<A-0ubCH@&OI87htLln2JhH8&VE|$u&$x4Sye)z)_#!t0WkQ#HuB7^X8QY zm7-D39Lhe(H-{)8iM{#PZbM{fdpUCOp+d9v4BGkVOC*n z&_iIRli%xZ_XjeibgT~>z@g&sjuamV)V=atcR9D(_GuXY);j_^DODc&;=}oI>PVRL@Q!N0t(vgOH_f7>=pnYZzP@>5sf&z~E zqsbOl=S4auV_^iDs=9mzx_quL zw>fkao!2o-`Y_|My$fZ!JWeRD5QuiNMi730V zxTFPwTx_dFr6dYmuPWp>U3-Yvzf;QST=+&XY@OdVt?LzTb|o4{E-FzP<2gALeisA) zdeV!B>G-@ljjl#8kI>262Ipk6SgB{1Kyoa3rxM>>HK-$tKHP9|b2falUw+UcH3Mf^ zjh(?PUIdn4Png4P!Y;Ix1c>omctCp5V1|9j#rafNN@OFQYPyXyZ59m1?^1ki*H`l2 zW3=j7N`LV~9L-^Ly@9+aGhn-P)C8B3w+ow{UUx4-Bg0J=u*S(SBCJYg%$+-z%-EC^ zu_GQoM>epVC!;BA1~1*UT|#KlCS#8d{Xn6Nk|c7~CotzqCx)7xh4U*d*HriWW)7n0 zMIuYRw2xOr227l++wocxy-HPs6%vzju;UiyIniJ6_-2BC_jL@T?!T=i{eVSa_+-EO;lBLb&?|PmLwRFv!bvcELL)073EEb zbQ=JDr%JJ!AeWxNbfvZi*oK+ z3m<%-q9HU?vM=I+1Bzsr7=~#Exq9|GPzzxl=lWhiwpY}zPeG&vQxF378dF}Z7PBrg zLkquOfmkTgrfG&_4AFd~Bl#cpC)WpR(LlVep_P+&U7q}Yl=!) zgim}$Uw|hgg0x_v`YYUkaH0uwzus@ed~Mbc@JU=ob@hPIwG4%(&|x4>qKT4 zU>+C4z@99k+*`t+vv~%n*~rF-lSlV%AJP*&Nm@(fb938*ry1P2Jb-J$LUWYiTjMrt z?Wu*Yk0{7Mj5CPj((?eOY=Vlj4X{xTuCbmtoq8C|y#c?Nn(4C^&t|+<-#^LE_rc>? zhfR1#{GQlDS|q0pGi4Vr^_+soB}zUB}Ovf(&S z94N6jA&4YRrc(md&GIEHXS3LAGbex6_;qe4vpy671$b+8T5!Rhih0Vj@F>NbcEW|< zg=26WMwe@skjEAXw>v?_7o^Cbi%+-?m0%s=PFSYvH8OFc7?X++2XrwPa@V`Q&d`jG zyYX8bl0NT6s^56Os*`Rer4>-WLU{)$K`2Vi9o6MM=id~hDKxAN8pCzCuzL8NwqKp| zZGbGJ{o6m?>0^8nHmYEAdc#LfS6fNSgWdjAor5AW`S8c1&`O*T#?aE=KmO`*W{;CG z6mb*>K;?B38?BY^!>FhX!}l-igVT)@)iHIg)X={M-bNy9D1li_jP5ucBxIB#hZW7( zju#Mkjq1}<0fI+oze#S57Yw>T58@A4Ks_7eemOILoq910Qr&rUW&xkpiqOU(Mnx?p z3g|>)cp!o%Z=dXWA1vN`WudVnBNj!l6mc$bc9{$m>Gezsi#6CKCcjc zTAc0b)vMz>hwkSw>oy6DQ=3P27z$U}8ILZXwq;VQ78p{sPiBa%;rmc-Dq#4ihEO9@ z>Qtf!si~z9Oc+-=``X@d=xZeWgcO^BzWM3lsOO7P7Eo$qTqU8XwEoxgDn#ua$sHwH zpFV$145kJiQBfmGzC|_z#IoSMrCqOhFO1Nks)8o7TUaFH!GAhGbFiPS%sZY}oTK zEWD}=yAve})`4oWqIa^T0xwk^Z4Y-j7e68_PK~_(bip`x?=|9o&e2+*v*r3&s8kvR z%J!gO*JJ5PBRvcQyQZSg!0-Ze0h#o8=@*eEp3?0opduBo2RoGz8Y>LPA=gAvqbr)O zacQ$zn#@HeE88@JF1*H&Bd4yeP8`x3HH5~6?f4-o4&&}}AkUJkDMOEyNOn`?1No5D z0-0j8ehYwV5GA8zUVPX`k^Y3}Bd%{JrW;4RIOVj^QHwyPdg#kD3us#)76MWt^F-D&Yh8oSM#ic;u(S z$u5tHz~d-tU?l`uX1plC6tt-#``RzLidqJ2NEdG1nu0au3D$+DP(M&axIYaCDakWAgnqZ^F0X*87`o!#p~!atL6ExtY+6iaMJmG0G-ZJ zHX_YBd6h=(55$9$u{}Rmj>7Vs-GmFGDM4!d5(PVM8lDE-i%Ff4t$G)s$C$;n}rT zPohH;nzkjh$>0`meQV9qnPSA)vSgnK}u6e~ec z!x2O{n+b>xgV|cXizpjS#p3P*jI;_9VdsEqu!VAY=6QNau?W$fE(GQMQJL6m&s$xciO30xY&@+(Iq> z*Ll(yx4w-Q%t&FD+v!t`E|$gmF93rxOu2aVXQ3~xsf&1jq$2rP{w}*jJ-{T zfk3f_B~VHi72Xubft_U@k;bdzXA%|y z!ktLbj;XNQ?zujeb@9rrmd_>AZm08M%`=9j?%*$cwPQ%R5Sd36j5S7W{gzd-fl-lc z)InuIaqv`a%C=Y{6@SaErSzBeUR)ZoiqF_tS>tR0e(5cb5S#@Tk$EhkX4h8nA*)_6 zxq@*;kSx&KDrjtmAg&%enkHt^S6%w}4%Y(cGOOwph?@H&_Apn7zp)e348sFFGdLnr(_{XjSD8%xfzC8?-r_gM z;iWB)Kce?Ahc$W} z{_LD*T`WqrJ#s)5MbeSd1yqI6;NgcGhK&Ad&~L|yX3GBBZKxKuuiozOWdiLOZ`ZsQ zQ-9%shZ~gl$2S+QsG7x^di(eIV_p=jQbq2D_k<#qeT4c zc9wG28|J!Zv6Lq=KM8Bq|GVtrzX^%?Z*m#LrLO8GR~E|YbEJpCo16}OlXRzFQ5uXR7gQlJ{^$SrU>n= zT!zTF>!^5nl@INfRKJnbSCpCnIs=gYmR~;#r00^ze4GHr@TS0Ouxcm+k2cw>D z130ta;Dq*%dNo7PbqG1i?6LE;2@}`_A4CSkXkk4tV^^=(*fCd7*>y>3hvmoK)_1j%7 zmPI#Hnfg?-uh_y1q$NeoK9P!Vo->b4jAd)vn2>f|r~&4xM_C3|ir!-5ji7dkl777z5-9 zT;e#2Hb+^Z!yytb($e`zdNT9s_TZk1lX;ey7t$i4pxtnn_$DTyxhcOB6WGAm`|3+h zn2=41ZxF7F1i55Dr&eP}6J_!OW->5~rZ;Ch-mu~x3YI1E`Aw@4lH7Yy6S3p*if_5g)c} ztzm2^0V}^^4@<-YP&LOpxX|7e>{A^9O_3M`G!7b$h#h3DyW8>ty&urQ%OKZc0lMmj zYHMU7`?jc*3?51BBOkRse-l`5#L87N5V_>yQwfX|{4Q)_aiWDnRDpFm@cgL90^N>? zu$js3BHtD=$S&xU^cN=n?RV8m2EAIMn}Hhq@W87juA*MktcLmp6 zYUg5{CgE(Eh5|UTJ>Z+r3Dq0?fu-pK|BFCOq}h08P1p(!6-RgU7xIJ}$Sw|qJ|>h; zSXJ-G+O&?aQ05+}qp_dI>bw%|G#j?8+q-T-&Tz(*%I=4Tfc@92ssmq*quA>3;^2-X z&U@V+-!~=UP0U*)LDfjP3T+Ws)hdylpdyzW0*4r$PmtX)4*FrQo~vBYd^I6x)yGRn z%&rWMP`q1vLnk_nJAWr2&s^nR8od-}3q~tR@XO81I};2a!v3)Mwg0RkvR4h#T|WJr z{peM1%p1DxSFn!HXj2&$U~Su%H^gn|x!M)Y@&IKXlp>^>b@|dIaY3!CD|s(ME2(ye zg(t5=fR8lLxI{sewg|G=;YSRq2PbAVEK#H=DmZ>4? zkgCuPqQ8CF-`~GQjMaI>fg}2xTl-6UkNU7;YL8U3yW{_`ew>l+LYG<2vwh!eKbkf5 z@JEB!sP+-YfUWaTq`gJyirBI*=(w=LSpMd|vU~$VNK)OMKa_Ni;9=&NMp@pTH_t0qyXj^E;L>{@AE0+yT~% zwJr@Toz|bGsm3Bd|NN;WSN~gdFWEU3%Ccy4Sd(rFv#W6v(VhS?j^IxyS6M~IP}*6O zk_H6ZGs#T1PIBMn0`{h11(PwUyP&&Jh@s*^s94(64*G`v`4qv`=AZ`_yq^ZZY_rVD z?}X;|1!)7dU$eHw_97)dYm;5`6I|P>UwZR~gjDApqZtBIH`2fCy->THbv&cZ;Mcw^ zyfP0;RT4ff{Luia82Zq(9fd)vBuB=(dGqH#eYX!h*k%L!cQ0oKwYO9S50o`LA93eO z>&~8PZij4N-p9rgTjoaS0XsnhMY7UNC_Lsn<}|T}T#uwPX%li0ejR5EqCs(mk>db1 z-{;i{pjqO&32y|2P*NCvul0-d(6<``IFW7Va~8)bTK)O%6<(z%IlS@&*x?=voQ(l3 zkvoUes*87#;KM79CB?ps4Nq1&Ccz)|j{&7GQgX76NTCBhtsL;GVY&bUsLcknQ*TE! zfUN%jiksc9gtCrH;f0hHya&8j3^7bRKucS+-f5eh!`hkq1-8_xF_5$<___4FCvrRN zAwDFr3FJZ&cC=ERLP~++WSq*nqYE+BAPb?V{`wdPo=GR3H8x2*Oj*%!$SY(6D%;b_ z9b5}I;IvizpHd~#s!*FNF@XzTyYPGdk;i8Urrgo>F5qLuXqJeXiU%9 zd)JWkEtNf}W5SQS4&I7!_6RSawa>wAu6LhxZet1VpCnD(NyP|?v-~7*qXgQ=t2NxV z2}GEdgkLD4i%HrQX$K|Fu9NqmN0f5zC@5Y5Sf9c>H#LaP;h&rlKITGbI(}r(=6!j? zeoOTNRD&l$rxQ%ARf5u;$Yuf)HP{^J3l*SkC{D(+Aa#74{EI7gG$0iZe@7GLKa;A; zESho$MI^FolR>Qq`Ljhwk{1nxGK(jQxn;BS!NK+O<-5Qx{;0)`6eCVEeCusx1seJ? z*Z0JZ^*l!)!6rbuC0e_Y(JDpCN22^NJ{ZfNBtPUeBL=@XjZC)0EntS`p~`L&2!VZ< z^ToJQt_QZLxily%*qkf6uaweKIjNP zi1nt8y6;DyO4y7O^mxzm^R-8WTsa7@niU{k%J80uO{V{)F}QG1R6I6P@^HaPEeqT3 zdB^^%kc ziNu;ChCdO?G`W$lNMuQNA7Yy*dY)Y}c(eInmWI6n7yMM8M`gBXz!Q8OPVYAxdC*fN zE=a|$*&RmnOrWEZ*n7AQYJ~LAbHvb0KjQ8v7nG_z!pJDdii>aoQTQ!(r(wCw-AHX_ z%!X&69Hx?Ah_dHOxJ@9-%A4fh9SoeqJR6-J{)1jHw(|eZO7MRZ5aplC_-w`fySN1Y zc_{xpluviy{J*P_<)0<`&l3G-iT=k>_Wvc$v;VJOShvawDYw40pm~g;Ng#xVWK+QL zXmTcHarmGem|YnTNmM~P62_oCf_iZob)yIfAesoiye(glK&#NdLXeq4a2tt>sWl|! zBbgfby=2fpBgnJyC)pgOBT@?v1x84&D$yepYODaYt#c#4B-&+(3q}`^*7BKCKd=Jw zN7Z9O$U!t1R?))Z*I%?13DYM*m9ZB(JW;?EWMlDyDF~b*s0T`$J+IP8h)qL}sH-Gd z6=5{n{lU3pa|GNe0OAeL2&v;CpAJc?6mV&zcU$i)ZQja+Jnm9w(w|T434!P4G7$ob zx$=W$Q1z!{M6^&u7pz)@(3s^@sMr|Qj&19mNe+R~<%(Gm3FMrE-Zm9B0b+&XOhL4H zki;tO!x{M>iw8Gr+a>@h%tY&SyF3M|vk5*cKW>E8<*qpa3Qm+FMJc`LP$l;zpEwJc zILo!K%=NCXDl#`HZ!O$9npAI;ZLuo_7(gIoRHAW&PD6g`U40@ty=GHr}n z*9>yJiRQBHN^cAc4+Kzur4v}x+B)_Adi6qcBDn~z#RuCFPs9MF&LKy@3+wQ1Y$t^0%W}d6wEt*(QrkUM7wAKh-jjM!x^!9`RIdW=< zaEfGHL>p96iG?D$X{F>xAU>jrT}eXxzG)P#qu)Y`X5832kJXlZ3H-NgpphIT?1Y*> zrP7gfD zgBy477Fpc@aMZ)X!a?rce{6>Gs5rIN>XmnmYt-Xh@lN*=bM=L|XK+n7g0w3VO$U4D^uCW` zJc`5hEPb5GzzA4=PGxvU^Ou~)72-5Pmg5!MWI)mQLG2X$5D2c1bbn%EFo<~&2MVFC z@55+7vlng&UH80%pp@(!>p7Ud0OI6*#q)5zGT+YiWK6-*oaFl+ZimVhB%57g9+w}R zk@hT9?#Xc0u*m~czu$Jhx`!{q$7iP7uw?aA@@atS(6a!guY@-dp>Vvn^nmLHgyh6? z>4x4Ncv%JAQ8uqU&6zD*y{lB^c^EjZh4pH8P33rFnr|i-acNR4&6pK-oI?`G1_%eo z-5A!nu0~7s0U`0f;gJ!EVf4JI?dF6)m~ zmujWet7ajR^8_H=BODvK+Q*LqPmDbV*m_dB3ABz9X|Z#J#V6!HtMFKEqDMx+@UeY5 zI+xp2AS@^<9W`0$iN62MRz{xawhMIH+}zpIWCP;pMHdnN;U9dLR0Q8+A8e!~b?klz zPuzokl(zrk9#Uu`Tz&51G0mQV@;~x+A_Izh10yMji-|sVq+CtJFnlDsNV56e4G<4* zBXj$N#5cs$s@VO$9eOI(lb6-Y-X0RMH852E7@2^z^Mr`<(!1$edJ=cj)%1G)ya;nh z9Z0R}?3ja>YTT`1oms7ckDo0Y!V*e|p5w)z`%kN~R=p50R4NId(N*ifgJcZJv7FW^ z33}qWKCe2$_Fndt{#o3&43SmWx-Vt4>h>#T%iPq>rFg$Unif`c`IY-uwQn+-_Ayf=IIkcf#2HJ3i zVP@XG)_yvsP?g9zZP=r=vMm$ReeoTlNwu)Jfn*=d(b3+OO8_$TDI3FU0H=zW@qDs5 zcmu!<77cfW^B}3vkXS$`%n%B-1y@BPnECdupr`Bn*sYr3HE>eWu%Y2!R6);nLhO3p zf=W6_NL3q2++S2m8{;Ld6`{HI5t!#mQB&4zkn-qoBFMJqQtyD8>~A@g4Crc(VXWL0zcTBw&U->+TMvr80;Ok+7Re zf_MRdcz2i(2O{DI>xGEk7v7+_A_$gr-lst#Li0KHy^a0T74TfuVB5B_s7%k1R3Y^E ze#qNtO4)Y&S3=66JYR<$3iiN`^mW9v&;Y}oZ-g{1l}ZmX4DX1ingX7<0eQ^jlA7+^ zv7L;hH*G{62 z?IIz=9#dZls_^t_$^BVY@uUuL$dX1Q01>b~i9eXFzq}4Btr;39Z@hI`(4dg;eW86V z9GBy$tgK6I&-26)UB%Yt5(P{ad1n>`C*>V3b79gSf8X7RS&!XrF(#D5z%J56gWq!~bbe2DP@p+;I zj+Wy;Fty7pxBo^tC;wk}oBv>TpH)u(Aef)s4A%eQ-EbR-=BSKGIFdYNSU>0KiArkNs)nnxAvq zS859dzZ&JS1=I4A1l8yRvvK`d<*Nz7@5zrLs+a;QX4dVT6=My3zz$=83MN*M6ymTfo4tt}?%^?Rj1Wuv>&S;*F*)xvD za?Oq9Cc(Ctu9YbdoWI<4pl@>@rU8W46C6Yx3UF2Z-#LtNDt1e4%~OV+x1@fSbjdU; z{OS$3kO}z}1+q~F3UHLt{bN2ihPe4&_*vCX7Co#L1llxxbf*tyGS7yJD(GZWWC9{@ zBtp|^3NOL;%I^YBo5uuy{=Q}8t$!?~a)ko{44RX{_oDu}o(XXT!pFw5B_v~gRinW6o$Exu@%`7JuH^n2ry^oPnXuM6y!jEK< z8xE=H&8^UEmF{+BejrbLpvlCZG>&$VPwO(KK_v&T`oj)!8xqXW94OcPH6UgUkA#f* zU;kv}ZN>*V15te!#vS`QA{uZ}cnp`6T|~efN?kV%d&B(pITrsv9C`LJ4Cm&0eeEt)E*sP(C0mJwIXzxv< zsywr8VXP!&nN&=`zCja1qks}HsDNN91uCErdO?s<8Y2n@2q3*_tOzP92#6vW5OHr1 z6a=I{Wdx)VN~LcTTHSO3qzC!t+;!`m%J}ZD`|pl%Yn*W^l|oOUXrk{ylIj|CBq?eNSK?xq7B?{w&5n#@&Ix|ES7RB8;R35F1Rh0khr&1wQj-9 z+XSKMaAXw-H;UsYTKPH^V{Pie0FG(?3UZbl7Ypi#>20oFzh+mUe?yp8K6tO?#J2|9#VyklN9AC8GraZ6(y{7M?|;H->IS&X1)9b!YtV zet}-tW8hWMzWr2U+-rk;Z8f;w6-u0~aIupA?*sni+DrFJ4Ld0YgWLbn$UShZqNPT3 zwIho#A+K^bC0-()bFia;gT1B1VdeVU8@f4v2B?0qJc|V_RF2Gxh%eOp6~sC{ilB) zUH8P>1fccE%EJly@;jCHB)&Am&#;FPD6Y8gfjI!liot`XWUI7fwhM~I1xul@^&VRq=OY-p738j4yarb6h9EXkn zxcZL7*|W4e6q_@y1sqJA`zuU|bGqvxeBhEh@x%a&%VO$k5vIh;dpLWg{E{iosgWFU zZm<&D^Z@>^Jf?N;6M<>7G?LGe$=`kz9K3CZN1oX#i)Y~VA#F39D|f)_t7%Y5;>%D9 z-#k0|Xdp@tug-IJvqz}+il+b7=JBv=UJymx9)Csu8T<*&`vOBSUozm?fV;k8^z!I2Jbu=qEtv$HKA%Fn+~} zG^9Q^Y@dpl&ZhJUlQDbf8tCcM0GE$=_|HTa!SC`T>LxIM(CPpopsGFmht(a6QMKI* zC#!;P*cb(T-rZRAM+x_5cwsLgPIa2X8m=Fg*nL|a!xCFL-!UJej`+4x-w&k3i7~`sXvdrIuXxa(U&)&HKP%qAc z1!DFv6|Q2kuytDo-cty9Cxgymq)tC8)1W*U7bQT?5OFH9lkH_Vp;V4au z=nLRjcMOF$ElDw#y~trVOFPhbB+o719730A+@z7VY9TF~)_(KPzdS>;M}JrRZ8^MQ zN**u5^Y39+p5^hZATOq5Iz1vFl2}9`5Wg|?<`>43@Emx}Xce4*n@KY#`Zd7`=e>HMS7BzcVd0X zO(kmV=}^UyB_0?jt_*B=Iw(LRpX2_l+;-wXe^#?A1z`WSIVX#(E1>_nGO1xO`cf9Z zA3P+^1Ch(Pol6BCt+Xx2!HUnyTO`qC47)uS?~mm%dOVNVR*XQmjDH>{pX>4LY2Zyp z9om;8aLF{cF4dmtUxFCH?rslUT*W^XDmn$hp1b{$&ToUAL;sEn zmBYWGJHD?!Q(Bv;wPNYg#}Lza2GKlMlk^6iogDU&4yS<^vgA_OY=`m} zlG%vw$!9}_Jzu@gK}$~%`iz;exCDm18mF_+VbVE&7|26cKtQdUQ%hs1C$lbw*E{%q zaD<*#ep1MNs4$W5N}RiP)sinCRm2{w%u2vN=Mo$=G#}8s!Lar6$L%zyd+U#XK8u_1 z7*X9Gzke9TZ!ze7Cf!*Fp{ipu3|~Ao45Qa^o=rbDrX=U+?F+Scoww3gbrPtTD4~Xs zvR|IXHHl6(H8}4`%74v=z-t)xX|-PU`d{HIi8D5>%y5>u<$!mASO~Oqbq97)8EMUN zcVlufm5-r$;M_t+Z^N$}G(a4}DmxJOiXc((rjgbg4 z^8NbRj{w-b35Q{^u%-Seu1OhL2Dfl7)bA$TVI4L)iJJKa;E=6lNW1zeeekQ=^sEXA z<~k`)WiXZqNBI)jTu-U@6g>E^QiGWErke!@p6i!iUZSyb8A5o)z!1n8;dGSSv~lB| z;p#m&IpLHzPkTJmUEyepCV9drAPXA`V{jyHJ@UoF$2ugf2^sj2DNm@y0!?v;xKakj z!$#3Ab7+P3*S^AYh<5xD)_)3qs4V0pFXQaW5s691jW(Gfi>M2`xcr`@>Q1q{&Tmz_ z+s6@0No&j+`C&5Nzk$(s8A6u+Ks|n1IBgrCg*GxAnn8&l#yYDE+?9%exo{ahyvZvq z$i8I=3eNsBOYx?DXt0V;nfoVhzZ_Szj^J`c<|^0W7|X=>&lR6YxD#)m{v7{G0}h`I zWW9T$?fcMl$Kdz`pf-k*UNr1bh;$5ejg#K8?eG~^_xp0_%0rEsJ&Y_9J_rOEWR*v^6~gvJ+5R~&QSN@N>X>)XHAgmi z3=P_8TN`!pqGWU(rfYT3b) z1rerxXvgur;R|SZ?6ZCqL2F2<}eq{%C7hS?JpvA8}~BV?z&ANxzpYu zW>=K%63cUY%$JNq5Pezf_BUn^*tiT-?&#V+>)Id0e-?OEP==@;wMM$(9ZmF83j3}o zJw>f;)7g9*-}vLlRZ@uqKf;qi)d$g|ymeu-vD7%WPn!&$aSq{*)o>Jq<|4JSOuKGf zUHhtZYzJxIlpU9IXJEh(SAQ~J*RiIjEDf}%EfZa_>GaCC8tcWgGJwfYv}YcxSrX^F zUdI@Lkew3uGf1shNRUn1IhBdvREGa;=Bf#Ca{)?5h1xjWnN7!VH!Q029)vd_-(6v; zmdp&eu@R9c!`jl*r5bCut8$(q_V#>p_|X9Ct}d`NpZEk68(FtX8V1rk#{Jrl(TtfO z6CJJf+J9lyCnMWalLzlqPFN!yhjFz=Qtue7W#qxZ-(wLVtn#VtU~kd|Wk9uXj**1B zX$>A7%4#k}0#Jx4Qd&onaXN~`l%^m&vM?l5gN7wvI4p}eTsabiGos?$`F z*Lkb*?5!89#7;Xyo04KoT&EC@B7Fm$b<6J4AzwJl#v!Hs`pLl2>)o;6=OxJWtD$m$ zRD8z68QOK9GPpJg$F#Ntj$T}1xZ@}5x>0lmnwhbzfs+T)G$uaz;fd_KZ%I7Kdts=# znYwbBDiStzsT8Z2;9+n3Elm* zse`Z?>Y!s4zE~-jIL5?QU_#M}a=t?8B$kbit`!$6&Dll~+&@Pu-Y||?QHvKM&l&_{ z1FbC7Q`~%>Vw0n~&9!AEix=(?0U)>45lHSz+I(;JvVTWg|dDkgLxUN=)W64t3zHDX1um%T#Qp zWD7usC|fKV(Gra?ow2lW6FZx29G--qvOR$>l(noWiCBzg<7}5Kv$T<9vqMjbN1o#4 z>D<&I8~ZaYm|<&0`&_Qep}F{m4P0JABigGkMkiCaC!`bi;a?yzUj=Uh9LBC(RXn>f zpvoSriD{2oIa7o=#+3#;X*{W&@HrPR7)FY87ac{V+)330e#6mq*I}s3o{UEv13^Eb z9cy~-iy|II2leOyi{5dYSx?4%6dUqnf%3%Tm+JyLiO0i=R^_%3I%a^u-idyz(pii9 zB-vWit8)y-it+v9@!A-%q^BFENY|vrRB-7EG|Fgq*9c7YDQCA6vDlFccR_7Z2x?ju%7S3)lO9ie}a_vG?tJ2`WyF zIV&?(X7ukpZ{=KtX< z*Vjf@w~S9X;oXu(T9cEVDS*|-F!!S(*6Po?@SLG`Cc)G>=ELDvUNcxi0iXS~l3bD6 zHseYAR~%N=3LbM{OP>w(1)r^n@zP<7U9s7&bw={bRhhAB8&RzG?=!|jma^3KK^6)} zZIf0rf@`~<#|PP(gUPOm<+?^pzElyY z+-K}wFZRO$sAzfrI4*V>mJa`X3m~gt1aVuROGl(EuitqYvI>_%FHA;{`$BBML1!%) zj_Vk;(Gszs3y)+!hs$O&Gy@S?ywc^4D~~fVFhSX+4%?A1ng^9Ly1v3$5Z%XBQMLkI z-Mu|vLKcU^kVjFJ%L%b^T*9M^>&KrbENSXi@8(m9B) zX^@UPWu}QSwbuykz>lGo6rRAx55sjWd~7RXytAHanT5-j-dHCpnoSw~-i4z#q=t^8 z>@9bh2NizH{R`Sy_`x`LNU}x2*<*6sfQa#`o+U z4FP&v#-9MlosNGhM?sbjDy++93OJ2T&o0#aThY0ag5* z%yz+ZNqkE!V$hgEDq$6_<|Ti81w%20jPALhi`{`}M?dby6`|!4?_@lQzf?7sjBnHq zGM;r^raLiEigUR(aPn6{{YM+ZzI|(<96*cxT3#>qZ^4`Ue zT6K}wo{khMnaT z(pxC=yHgY7O3qKMt2g)V@?8;2_jB1poCB;cLxpiefyR?vAi5t*M~*XVghcV?;~4wl zJE%$H8Jva$ksAd=BGk~r8P z8Y9d`mgu_q{bJ#7Gk?SB7x-eC;a)>l$0YU%j{4EBS>Qk_gl@?LN!Epq}uaxs@5M}!)=aeOCqc-b&Gzkohne&kxi)6 z{D{%kjGLPiy(S0ovr_tKO;&Sb=&aF_&XBgy0KDKbRQq;^uZ!0!w((=QPQ@?$F6$tw zn&(K-s(r{~@(k6cp5nm#!+zAP;W(c?ubU2`1rxw1|DT_1&@?_T&6BrA3e5kameme`SX#>i{)>-7L3*1x_9qhiw4Tzz09U&1qdox*4k^j zbpe7I?0Yiz+mE}Hj8hTx1#ev^@)5eD$?Zc=ap|-5+h`d*Re;Sk zT}N~Yzt>D|+k_|fr~4T?Rx>{p&9n}s3+=8i^1~Tg^lq_y$+=PtcOr$OIHI2<)yvo| z^5gbHlWr!e6uTq>9e&2wY~*9l;D;Fd88^-)UE490$?xD^tvz!hINYRycBKxO4JwZg z6&vXz%etIdVRH7Y1BMTRA1=M~-tsFuUS)i>v}m$<&B=V@jxWB~rG~K#1!ee^+j541 zPfN4zYlXzk=C-0Cv+KB3Kf=Y}iW6#z>+r+&-?*8ByK)Od5p>3d^Vekb(usE6NeETQ zZsQg&vm5*!KC}56*}Z3<_{7b?snu{SDgIoGu1;{clV!>QMo;MW&XnhU zdN^z7uus|^;K~LvUglTchMqLr0hw5!(QR9)67N)UzE(XoIrNERtTQcT-z#t$o#nZf zTJd#0K!)Z7qDR zypd}FUdO!9K!I-8;m|T5)4%9rg?H^EjaFrJoosGcSE8hrt+j`BkH0ezlcnvYbB|UO ze(BT*uv+akyC$2Ol4W;0X$6`zWkSevmXIv;hJAPXhKHRjgZtoN50$e{k^iVh=R`g5L~%bQ2~+kNa3QD{nqL#F&1j zkNF^2Q7ZuQpQkf@GjP0hYO;f{{Y>{cUd3R=^JaU9k_a4b<921WjF|6l;EDs`8}8>w z=^F%3tPBPIR?p*ou1>^w3!Dh;LEj%Y<%cV4u=dt0+j)qyHJY9Yzeh!BwT9RH-}9EU%E~`Hw>JE?{Z9SF4AC>(6Vk(EYhFlHt5sBUsV(5 z(+VxZt-lqPg#PpzzxK%hL0Pz68g?z3HDZ45TrBvW>}Xll8?D0%trs|o;^^mlR7FSh&A>K+bW(qYXMg_GqFis@9<2eIoLHeBmgGiRXMvt1Sn?#pb`K_KVQ6O~UncyZ^|6jFz>`h(k+Uvqnt#5U z*pt;;{&$s%Bvkiu?AXlgDyD5XP!zZqpS)^Z_l_1J6$Nh?G&;<+$>@cRj@yJU^1HBF zO~19<4Wo@^avM%wL<+oBvJdsGJ~6Vf+;egBHj&sKrM?Qibf(KL7R&_Ot$Qy9zD{uO z>p$C`_eISjFw=++SR+w-L^N{;2iHkeDzyWKRB>&2n9^s5>?;Ud3nbgBUK;Ez9Q*k@ z_ge7e#fA`~`-Ecp#vJ;vu;yUTJWF0`;*zGfxBGi2q0Vk^RrnQzg!6DBJW3Xo&D}mt zl!PV~%$n(`c}RxbqO-Mv=GK^j^(G&;^22Cc+zl#m*3Na1L^E`B0Gb4y<=Ag@0$W(L z0&zd0ntSRC$1}N{&&dZTzzsRIJG;~THYbe;xlHI=G4SE+HEN$>eoY_%AP4V68_NX`s!6)7!Z9a`h6 z!`SqKruOAPpAV|qBP`UrZF+YiU@qaKvvAy1QF>ztT}9-{5Hdg*PRr;ZiT+v30w9YqV;*;f<|N)Sk2& zj52SfhEh!#i{)NS_G~YTu7A_5nwE>I@?ZTP@Q+|*DwX81+5V%ulKti9i?DTWBkcv> ztso_e?uIq?j!(s_E{!+??DZrF#*L=$RxI$3M9=Df-s(+t=)IH2#3%lmSmp?PM74qo z>;&Dk!_TbgD@5m5dAgz@ZPBqV1>bUM|YQn-8}t1Y7n97&un7tw0kvD5+A~ z4!?UA5BcLmL?syVhCzty&TPd+JiY?C*bcCd)4DZ0w%i1kGp212_W@aV3qFrsCOx}H z2Ut{Yxyw4NF%@)^)toeqcGKYfH=G)Hwn7l^U^`ANGCCm~-aoIrbj{|;k6^vrj+{aC zHJ!s~V|!fdCd+4qJx$d%OP4OaC8Z&@&cqf-LzkuNPxqu>=z0O?$yKE6I{Dx;T?81e z##LiGQ1Pf=&X-G% z(9v5(a09bx1u(ZwnKr{i#lTEIR=fE}iJLu22kw28v?#ghO2wijjf2-Ml0-W|nYmZTSZntU>S6TPeBvpThLXULnFYWtg zP?&F>ulB4$1en}YSK6cK*P?FM>|x%e`lGr3n+?rBBuGDnMtT)vfYTIMK6ei zXHr3WVy>&_`BmO^Zmqx*#7vrQQbIica6(r&qV1^I3_!Z*9lo`?c4h8`%*W6-Le%b+ zGb^_2_xx@IT3&i});=#M?znZn9f8lVcja#X>FH(r^`B1U+@#$J ztua;5s*@T&+T?|#$j&?%<~mO64#LWt(A&NXY5EzT1P*-%RoRmaI&Y|*-o^E$WJdzx zG|PS3p;_5zW1RL7t)t_cxQZKp43RT3cfe0m0hO!L9i6p>W*3&|4JRrGY;uK5=qbcK zG4$u&UEYAE6wyAUBiNBM@Z2B-_YllAooov~BOw5gtR@0Sta!qX9Y>^=NOAh&=~;$? zmH2b=gTeHEgi9ivmG0)*STPRh&NB00L^^&Xm)6lxD7utqLTaH(HBMyBw^`{+=lge} zi12xJR2!Xzrj^~4TzuD2E20Xuo(fuV{a3Y$XPOROH zAIdG8f}(n0!Q;RxDo05E1x3IrJFaiIq53<_v&knB*6c>1)^T*#j1|X+|0dJGwc)24 z^^5V|cb+)9%EkMR48UfV` z7~EHiQs2{zM>BLg@?7kb*bAK0M4YIBAJZLl{T80d_IXWKrJlv@NjAz|rn5ive7{&@ zW3q3pN}9EQpi)#$fB6+9+_EidT^jO+YF2j`930_mp&v~7(^kvYewG(Hl%{j(7N z%30dUj?L29pKilI4HF(stBn=BmqYHU&o(d&q%1Ae(V~ji{E-U8Js>*(F~*}GvC6jc z|Ir5rDRJGYjmnH{`{p>aKt?;$*NU)452(Jt-8#XGz73ID#>p6$v2knN@Xzbtd) zTnY<-h|zH#1G6>AgQ<~)PWJc&ZsaYdo;7(bjN^iDZaB5dtObTrIbV7bC|oW)YmL#MDojL-4C`PRWP6gB#{&B_wL&z1|%zT!4isEas zPdKgp6j~7i6jrG(Q^#x7ar_6>>)XE<&MqgxyZ6@jAw5;^z5A}okdb5E{fxQ71#u@4 zwClZdRnDnYg#OpnM6YE=w-f`j^OeCiybo%FQ)IS$zZP1MXpe;`tfg6;2@gG!DSBRK zdRf}1@S7-GuVA1p4v{mjUxkmJv+Ux%!H4(4G*_p2RS34FR%#L`cEoXXNl= zuC)S>B<;0E)(leEO7^WzKD?r>LxJ0g!=`|eGqI&hAHrd?@7K@0+%t?HllQojTq0_P zxJHN5GtOvP_*9{TNA|Y^-Z>Sz&lEj$u4vs;#zGWM&4KC6SB5E#VQTX1Op3Qy%%`Z3uOdx$#s$ zjMNt7Z+v4_R)T1*I-iC|V-cL4(*(XyV&C$jYsSVPF`eY-T-J4eJ5cLMgx>Z1d*qjL zob_-ZtGNS12f;VHz&k$ZSgMcO_cW1iEf0axLF8faM{uyRgDXKu067=Gaq zXoEN`%x~KAcmbHTG$3&UAQN%QpPWN}R@!gVu#H=a0|7QhJq$NK=G?K;b2#Vkkf4-4!(O=(t@4W=%*Tl%=L7!UTn{{U0 z*&nSh(kh;@o86EV*e-G2%1cg6U=xo2@LC{=p0Dp8gv zaS+to)!p{QDz`qXe#aJVKQ4-$p6tjrl$qGhZ3mhqYxY9qkEC^gZALqAEh+^!M6+#Y z%J0lxmXx@;4=B`m3L?aoG&sWKf6A56q;O-)};XyaGK?K-FBxSu@Q> zA(9f4wruKBb+8>-NOaQj4;+;egeH3=0Wk1yS5^m(XP{*MM4`6crlxM(xK+Q|i(`|q zzod68Ig@kfLV9j@-)QD1>p$N(C`?WbVg4S*qHR?c+9vYO;G?bMDkpAP7)Ehgg8Q|m zdgtiA&99eB{H@n4+D)>NsK%eyY*XTL>K&+v$f#E~z756=$ImN2`|3+V@WUYaYXwff zhzq#Fz}>mxqdRwP$8Ou%Q*PR! zX@Pa-PVI%10HQpNI#rF*XQ^`0th+y2a2n0gb_hkm$7;Q9C_DCGJ|%1#$gh|fUn}W` zmijSBaicZ%980oW#-muzVImonXmM$|AFaxImi*-8d)1oLv$|VCg0?A+sw*B!O3}G@ zEqyDZU|#@87M`N};3nP`4gJMD@I4_&heK;Ve}&_>xI`%qbV6I?bxkKu5%yjE^kY)8 zB_)xTFOa&6B&l<2$#7P?ZQ9F`@#@#i6M*ziss<_gemn^t$o5{H%7MOi$$;fm@3fLG zjdpLptUd#hcJh`VJ0bJ-zvX3C;E? zLr<^G36mf7;*I-}3nehQj<}s{GAGo)EJWW%MYiKb{cFtEjCSI;FUvCa54)Gr^{mOn zHZD!N74*VReq7j6eM~+%xtxIZbus_YztW1@pi__(8-l_$?fF|@OGw-~#ukT77r|*( z^!6B0sh|N`34h99#RI6CwsSr}2?qYIBo{4Pi_|23^BG0kUy3GL8fn8wI;juy;^1_` z6eOeom64|BP;k+TUAyP7qDm3Xg=yj&JRP)S{(~Q_FSXotaZBN3$5#j~PCg)|s$gm6 z)lUz9amG{8b_2}=Z z6kx$8Dar3`mJ?4ngjW;e=4vrrmw6Mpg5tW0lnE=#*}M~^h zf7U3i>Qj`W)Ud?ne)m`W;!Yg*5JZQ>#a&9EiKtz=w!`fR_$?2cW?Dh4tXZ}{-FP;# z1!}5|#ywo3Dt$GVsSF>dN;rqtceFLip8^Qe3St1A06;2)uKUL_Czl;Tz%=d%*%~K{ z>h2tn>w?Onb`U+p>-0FlfPb_4akWP9Q8g$7*lt=$@4{VRE*UW0|GpQbMHTcdeI!0GasKjpTf zR#_W_SlM9|G;OM*LrREv(;sZAjsVb)KKD`$KpBlr(~92s2HR&8UoKDyO4^6MU95-ZpCuFv*T}t9fIj%zo4 z60i2Wno${v$3vKbTagrLp!txHR!NID`b=988BT0p`-?cDs zdzNNbM4@lbNnlVRV5uk9Xy}@ks)$%YAQf({$XREHW*}(T=LKX|HRg|L6_{e=&oy^A zj|sWC7A^`ITJ?|DT0F}+clIo*k6nG9{a=Mto8v$$C!t`eH)_4?0$hR>dj9LX8vYig zp5_5@TqO)jaoaHSc6(WHWg z!F7Fi%6i+-+E%tUZgB7GrNn|Qa9wvcD3jJ((6;9eQVHeluog+`Gu-XIY0a?Y)LaF0 zGFPkuQBifm?lzceg0bljAgV}ijs*j{LeLE^oW{w3yF$X`w59c&>WC|jU*w{B9koX> zCxtck#YHO?NZeUfJS4L5-)R{eFE28Fj*T-?EGR|y)5raiRh{0J&|c&9crKNWfUAzi zT=q?QFc)#{>d#~lh(Wd%eEyg%*RnAH?fPbCmPXCEwyk-O6QI-8c-7V3QO;&r%^v$J z50hmD^`<{$Ve0Wm<4Ai5QCZ5cI zwg0%9I9{s6avc0Er$`QaIQew;Q|epnt~(S<+K$vr1xYgk@A)=KGp{wEo)|DmMt7rz zd<>o3Xj8U7`+8^fW`{a1xWZdYB|%8Iw>L3{FWSoFjog1ZH*HOPwe_+1Dz;h z>dZg;b<2i$I44@wx8g}Ve+~Hih1f9S#kBX^EZhjkgT)7u88XL7mZ@9km3@n|So{&> za&K08(>R4u*}b1_+-_q?Ot`|y_6^Ff{hNnQST0m>MWPUM{oIF#bR{I5cMmIG93R4U z&2677**?;G04RJN2z&bM%5oIoIRa6xWO#bsPMo+0E9)7nB|o?^$e`+RKSj-*jWXk=mHF>1_5dkCzx# z`VO9q3m7kZ^>Ftw_o;zRhsLpPOd-?8Jg}W`rdhnq=bos#uc{c-a*AxW5E!w2rOE4- z5@G=#|F||xKVMPtaN5gGj6wd!Vwejio%1xW2~Ttu?+PM8cl3FZ|7w&@55VfkfJm%| z-sNY;2v||QAo}}KCNF9-j4&LS=809?%!e07rMfVF@O)u_62g#};bqR@TBN!HK)ve0M9DAn07E>+cItE42^ z=!6Yw|Cw+t>gl*mWBse!*Ih%1NVP^?cg@|zajzAy_ixCyvZ_zp`)uGY@HVTbx@L7i zVlG=3Vz6p5s^v(Ij>(E`Etn;>pd9oWvh%F)va!6*Wx*`LoN~xsZf<|GEjgFmb9U^4I|@k6u1JN+o(d zAAI#}1A74s#=6d_7!;qk5|&&ozM7c3GNb0r)x=XrT0w!nnxn#H!sYvZz}~MDJ%5)( z994E}YY&aNXZg(t_!FPOzY2AX=M_U*@B#UIoap*WQ-=W^w}?|-NK z@R#q<2?ky^Z70W-y=c0|f7#U#y?6-?O>__eE>6sR$NQswPQYN5{d_^qi0(c3rzKCBx+V(dUIsoPnrm&r!vn0j#%EY<=r`gS(h9D7*J_OKa|J z@wkzT+{$zP5$6qJ%nsBAQW9rc!Q(V2{kDYHSA8Yl#H#kc=4yDbCEQ|DQU;c^^c%DsdQr;Vmpn0}bCj>~zks6EJAcUf< zw_Hn*hEOq#k$%@VCPzFs6&g)Mr1>ZAo`?p`LK=`@nbLaLg)ED82>7oB3uz!=+G?A8 zMbs2~uKKVoiW`b=-J1)5ykuw}4#=bMPwk=wF2E_!#wY=>sy&Hk@aMHV?o}48Xl=u* zHN9(pmSQ1~KR7;4lK+K%$=!9Z_b{NYl<0MFH_o2LYVJ>WLUcf#`EcqS_c(*qYz5?H1d&`t9k5*(dI+$Zp|qsxvd`Je!FWe4ya z@axDl3g>L`7)DmYSrTRmyva^`qKb&j3B?DHCuuceJ$xtJu?O*Xc`X2xRcg*=s+el- z%fZ7>64|0v>n>ccOBi3hD6V~O(A(67;@BJn;4l!`63a7>y^vD}1QCuTd9-{#(v*2N zo}`tFW-}?4>iCo4oK=vmX=)580Ml1c+O+jD>9NuE_cgA2aZln*>Jcw0#0=~qfam*K z%kvG*gINpJ_EJTQ#zHy6AG6aiqQoLH^}AC$p_@f z5UH!;dZ;$jPvqK|-%d>5%o^k4GI3I5P=y*q@YuUgze}LiDp?m>=FQ$Fc;4De|8Pmf(#|L1dHOWY@ATr@wUh zMVs;C9s&E)2kNQ0lPOD@nP!Qg%ITr~%d>kSvk2$DbG5qtVKNkqJ;yRkljbeZ+ObPg zm`BGY*FMuW5tb0DA$)xGepa?7K2OK!T66U_FYw_LMO&ctQOCN9aIm5h%f~<^&p{O3 z+8r|F9g$hJ#`WRHF9zvO#7s@;rvBz;^p;dg?$69aIC3DZF=L*kW>^OU7QHR>P$e4N zeSyK81DeS)5QbtPqsV$x&kdbqnwj)b;vJ?O@XCOC)2-e7CagFFo%aak3lHg*_9uUm zHMG@rJI-O(o?X+%BgkO)A8Xr!{AA*p2WKJS427+|V|Jdk=7Mct-&|q`Cp&&n(|a(6 z>I^aU3=b6@VZ^Dq@`KeVDz7OVY|A$relqT3Q9o{T;K0=;*RZY^1C#J~QZ)7gxliCz z*x_+tS-~EhH6uD2nccu&$&`2l2(iNU~7} zdKGS*usbm;lN0(Wt)0j>VRW3&ae$$`z#YCRhAfYzIvZ3%9V zSUXSi75$jehjUv`A)U!ku`mLt$86F+J1%V+mragEt~>tOm7D;|!!U#K(D$Fm3nz!5 zyKp%~PkYG`5oX|UcOl0r4L67Fzmgd%YP=Pbso?%lrk0WXYQL%>sM1bSYf)Q%%1_14e;5=6LeO^M=6vv9s1@+NGXTp*BVJtjsn%bIGGp z7+x<%Gyynr&>+mH_nyAyro69ey7HaLB-b+j24k}_XlcafR#y8U_4(w5)Y#`#sZnPx zDCMRfl8ef)a>J@)Lrk+R<>v))pX>>(l#v$KG?f}5K@((Rm7%4L^xgL;_QUx2PXY98 zQiiO4v3=ycePtN_YowDfuOMw6O}&Y00c-FYUtV;?kqbW*keje~R>{Dslk#PG1{i^7 z9b5-UOW}nXftQCYE~Ao4o$%#Uq*p2~&-HMz!BrAoLU!eSL%b4T;^rH^%{#R;?)qI} zdY$Q#8OblqHaHi&MPa$&GDq2da|iT(WrWIVH8@XF^6jk)=oZzTkq2GNa@*niqK`%^W;8fL*L<5K*Mf*2pr;-2UpdJfqcB|^choyk z8jCD!eBLTVPa{XMYTexCL4D7b;GBUSGoe$lmjO26Sa z)T$#0YDY6a$cD;?vIadJSNrrEDuR*M?BmTu&U=fjio^j}?mHb^Z1}gFEec`dO?>o0;R#e?V)nfiIl$VcYC>Ac<{-g&& zir3k2yH7R%-9DbKVQ4EYU$k3CtV{zESS`wI27Kp^@vw|!&Oll{Wctg>y!;AZ#-B@% zHJaqb)DD<7o7NJ6ri*$ut!vgs!8wR`#BKZa6U~Btzf+Wu`TW8E7+!xA%WJDl+k^5& zP6VS06I9!eV^UP%dm^WmCtKW*jtS&?&Hc~-*KUiIiIbBVN8(lXc*;nYVcm<^@20Y*QE|lFZjgO0}jbT?6BdyRn{(mQt6<8&wlDu7OP?~-aJ>O;k0QrdKJZIX(&O= zul5scsBFzSCw#f3Zp!zhF#YNK(i#scuOC@z-uCb(Q2xrmyKb)8FX>L(qbrSGj@6!q zVMak8C}W6DCC;PzpR$&WD}?n0{_vst?z`Tf6c1{rcUs~4igo$OIkl$BLXEr{Q z8ea|fRk6g6TUcZPb|_DH8ig4xd`--+Zec!d1RQ%BFQ+j>aUxDOgJYXYAfp~eD6G<* zL=G8654E)W7Wom^cSjp9N54Uf6^-~ThVD3Oa!6=puW}Z{$|DCbRv4b-W-E$KEZfum zm%ef59`lRYc+8KQAW=Eg6YP!GVgUO7dMX;rj@_U(jB(Wgoh9DBzsav}%9+P7sx%Wl zbfe0YotzICREj&l{Tes83{}@Pv4#~(8KYnHy~f3e^oi$uF@|M$^oVA8S(@bKe&o(F z`ZRQ*0M^F{^h;68Up;Tku9l>lhri&8PxlzeVsg|#sKSg6?4E(H`fClb;GsQnH~PEH z{Uf^W(AdbL6t1rDBZ4DGUPkm#1q8{=proRtlt@v?KwH5s^kjS44!}zwUuR}&=akxp zFuGbzp&YUj9dHyU9w1yk7zc)@G~dNUcK?OGk!9vnhcE{_FjBd-`ikH4UMe)Xv`G*0 z)hN>bZEUFGo-lJ#=!L1^H&(yW!Z%`p!+ZVetr?PhfF+m1TOjt7m?M0p( zvUgCl-Z}==EdawR-%;kRb$=fcrGMSnO`5cKDTih$Bw=#OjfdA_jCMP>MRadS*17MW zzummGhYvc2rb9(=!E^w~#17kFc8kN-pk~~sE@Ypl3JZS2i_s@Rp^I(BM9&&(zN$3( zQo1lP^iGH4*SpQ^*uX1y2a`|^r0=rn%w)k21=m_Gez>7|FtHS{pV{ScEy>9?=kDaR}+Iga%`N~jm7 z=^V>JWG#!ttWg1~W);vk#FmQqnDlKDyT1V!Q9(Ry8ayPR9{>#(fadDpC(&7fh6psz z+Xo^y?2@F=eh3F#>mC9WFD0cM70ok%1b2{cxoZn3!7`Mehe(Q4YZ7l7#lLlg<51KD z+_g#rHnAiDZ{+v`<=VT5iuZ93b!jYy_{(LITtJ8uxf73QIkI#J{&uYwcGGPX?{7sG zypQIWivW+Hqr$y7FXnIqOUZ04kQQ%`9BjxB3e04mI`cfVl=T zqFPzv$qM_(eqf16-tfOsD7|{7T8J`32lN1DSn}?)oXX4ZfBjKAg`e~+In-=}Dvg^| z(_H=_5%+$H(&vTn$TZtUo7*d|XbK7k5v8F4Eb7xDjXOX4J@JppaaUUVB%4}*-RD7A0q)<6&O$75u2z>#2LRMdAY`m zPM!brpIy9Ra{=DF(%mT^9;_U=_x`sNbU;OR6 F{|~1;#AyHk literal 0 HcmV?d00001 From bf64901b6ed65bff4614861be6a8c1b91754236c Mon Sep 17 00:00:00 2001 From: andrej Date: Sun, 23 Nov 2025 13:18:39 -0700 Subject: [PATCH 13/40] make which parts to reset upon reconfiguration an option --- .../AIEToConfiguration/AIEToConfiguration.h | 53 ++- .../aie/Dialect/AIEX/Transforms/AIEXPasses.td | 15 + .../AIEToConfiguration/AIEToConfiguration.cpp | 450 ++++++++++++++++-- .../AIEX/Transforms/AIEExpandLoadPdi.cpp | 190 ++++++-- lib/Targets/AIERT.cpp | 116 +---- python/compiler/aiecc/cl_arguments.py | 36 ++ python/compiler/aiecc/main.py | 30 +- 7 files changed, 690 insertions(+), 200 deletions(-) diff --git a/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h b/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h index 462ab8e84ac..f69192451c7 100644 --- a/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h +++ b/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h @@ -19,6 +19,45 @@ namespace xilinx::AIE { class DeviceOp; +// Enum for specifying which tile types to reset +enum class ResetTileType : unsigned { + None = 0, + ShimNOC = 1 << 0, + MemTile = 1 << 1, + CoreTile = 1 << 2, + All = ShimNOC | MemTile | CoreTile +}; + +// Allow bitwise OR operations on ResetTileType +inline ResetTileType operator|(ResetTileType lhs, ResetTileType rhs) { + return static_cast(static_cast(lhs) | static_cast(rhs)); +} + +inline ResetTileType operator&(ResetTileType lhs, ResetTileType rhs) { + return static_cast(static_cast(lhs) & static_cast(rhs)); +} + +inline bool hasFlag(ResetTileType value, ResetTileType flag) { + return static_cast(value & flag) != 0; +} + +// Enum for specifying when to reset +enum class ResetMode { + Never, // Never perform reset + IfUsed, // Reset only if the tile is used in the device + IfChanged, // Reset only if the tile configuration changed from previous + Always // Reset all tiles of the specified type +}; + +// Configuration for different reset operations +struct ResetConfig { + ResetTileType tileType; + ResetMode mode; + + ResetConfig(ResetTileType tt = ResetTileType::None, ResetMode m = ResetMode::Never) + : tileType(tt), mode(m) {} +}; + std::unique_ptr> createConvertAIEToTransactionPass(); @@ -38,7 +77,19 @@ generateAndInsertConfigOps(xilinx::AIE::DeviceOp device, // Generate reset operations for tiles in a device and insert them at a specific point mlir::LogicalResult generateAndInsertResetOps(xilinx::AIE::DeviceOp device, - mlir::Operation *insertionPoint); + mlir::Operation *insertionPoint, + ResetConfig dmaConfig = ResetConfig(), + ResetConfig switchConfig = ResetConfig(), + ResetConfig lockConfig = ResetConfig()); + +// Version with previous device for change detection +mlir::LogicalResult +generateAndInsertResetOps(xilinx::AIE::DeviceOp device, + mlir::Operation *insertionPoint, + ResetConfig dmaConfig, + ResetConfig switchConfig, + ResetConfig lockConfig, + xilinx::AIE::DeviceOp previousDevice); } // namespace xilinx::AIE diff --git a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td index 9cc9f966f8b..c35d70e554a 100644 --- a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td +++ b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td @@ -291,5 +291,20 @@ def AIEExpandLoadPdi : Pass<"aie-expand-load-pdi", "mlir::ModuleOp"> { "xilinx::AIE::AIEDialect", "xilinx::AIEX::AIEXDialect", ]; + + let options = [ + Option<"resetDmasTiles", "reset-dmas-tiles", "std::string", "\"\"", + "Comma-separated list of tile types to reset DMAs for (shim,mem,core)">, + Option<"resetDmasMode", "reset-dmas-mode", "std::string", "\"never\"", + "When to reset DMAs: never, ifused, ifchanged, always">, + Option<"resetSwitchesTiles", "reset-switches-tiles", "std::string", "\"\"", + "Comma-separated list of tile types to reset switches for (shim,mem,core)">, + Option<"resetSwitchesMode", "reset-switches-mode", "std::string", "\"never\"", + "When to reset switches: never, ifused, ifchanged, always">, + Option<"resetLocksTiles", "reset-locks-tiles", "std::string", "\"\"", + "Comma-separated list of tile types to reset locks for (mem,core)">, + Option<"resetLocksMode", "reset-locks-mode", "std::string", "\"never\"", + "When to reset locks: never, ifused, ifchanged, always">, + ]; } #endif diff --git a/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp b/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp index e29888d1849..ad1abc62286 100644 --- a/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp +++ b/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp @@ -911,10 +911,26 @@ xilinx::AIE::generateAndInsertConfigOps(xilinx::AIE::DeviceOp device, return success(); } +// Version without previous device (first load) +mlir::LogicalResult +xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, + mlir::Operation *insertionPoint, + ResetConfig dmaConfig, + ResetConfig switchConfig, + ResetConfig lockConfig) { + // Call the full version with a null DeviceOp + return generateAndInsertResetOps(device, insertionPoint, dmaConfig, + switchConfig, lockConfig, nullptr); +} + // Generate reset operations for all tiles used in the device mlir::LogicalResult xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, - mlir::Operation *insertionPoint) { + mlir::Operation *insertionPoint, + ResetConfig dmaConfig, + ResetConfig switchConfig, + ResetConfig lockConfig, + xilinx::AIE::DeviceOp previousDevice) { const AIETargetModel &targetModel = (const AIETargetModel &)device.getTargetModel(); @@ -930,45 +946,413 @@ xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, ctl.startTransaction(); - // Reset all tiles in the device using target model dimensions int numCols = targetModel.columns(); int numRows = targetModel.rows(); - // Reset cores and DMAs first - for (int col = 0; col < numCols; col++) { - for (int row = 0; row < numRows; row++) { - if (targetModel.isShimNOCTile(col, row)) { - // Shim NOC tiles - reset switches and perf counters - if (failed(ctl.resetSwitch(col, row))) - return failure(); - } else if (targetModel.isMemTile(col, row)) { - // Mem tiles - reset DMA, switches, locks, perf counters - if (failed(ctl.resetDMA(col, row, false))) - return failure(); - if (failed(ctl.resetSwitch(col, row))) - return failure(); - if (failed(ctl.resetLocks(col, row, 64))) - return failure(); - } else if (targetModel.isCoreTile(col, row)) { - // Core tiles - reset core, DMA, switches, locks, perf counters - if (failed(ctl.resetCore(col, row))) - return failure(); - if (failed(ctl.resetDMA(col, row, false))) - return failure(); - if (failed(ctl.resetSwitch(col, row))) - return failure(); - if (failed(ctl.resetLocks(col, row, 16))) - return failure(); - // Unreset the core after resetting - // if (failed(ctl.resetCoreUnreset(col, row))) - // return failure(); + // Helper function to compare two switchbox ops for equivalence + auto switchboxesEquivalent = [](SwitchboxOp sb1, SwitchboxOp sb2) -> bool { + if (!sb1 || !sb2) + return sb1 == sb2; // Both null means equivalent + + // Compare all connection ops + auto conns1 = sb1.getOps(); + auto conns2 = sb2.getOps(); + + llvm::SmallVector vec1(conns1.begin(), conns1.end()); + llvm::SmallVector vec2(conns2.begin(), conns2.end()); + + if (vec1.size() != vec2.size()) + return false; + + // Sort by source/dest to make comparison order-independent + auto connComparator = [](ConnectOp a, ConnectOp b) { + if (a.getSourceBundle() != b.getSourceBundle()) + return static_cast(a.getSourceBundle()) < static_cast(b.getSourceBundle()); + if (a.getSourceChannel() != b.getSourceChannel()) + return a.getSourceChannel() < b.getSourceChannel(); + if (a.getDestBundle() != b.getDestBundle()) + return static_cast(a.getDestBundle()) < static_cast(b.getDestBundle()); + return a.getDestChannel() < b.getDestChannel(); + }; + + llvm::sort(vec1, connComparator); + llvm::sort(vec2, connComparator); + + for (size_t i = 0; i < vec1.size(); ++i) { + if (vec1[i].getSourceBundle() != vec2[i].getSourceBundle() || + vec1[i].getSourceChannel() != vec2[i].getSourceChannel() || + vec1[i].getDestBundle() != vec2[i].getDestBundle() || + vec1[i].getDestChannel() != vec2[i].getDestChannel()) + return false; + } + + return true; + }; + + // Helper function to compare two core ops for equivalence + auto coresEquivalent = [](CoreOp c1, CoreOp c2) -> bool { + if (!c1 || !c2) + return c1 == c2; // Both null means equivalent + + // Compare ELF files + auto elf1 = c1.getElfFileAttr(); + auto elf2 = c2.getElfFileAttr(); + + if (elf1 && elf2) + return elf1 == elf2; + + return !elf1 && !elf2; + }; + + // Helper function to compare DMA configuration for equivalence + auto dmasEquivalent = [](Operation *dma1, Operation *dma2) -> bool { + if (!dma1 || !dma2) + return dma1 == dma2; + + // For MemOp, MemTileDMAOp, ShimDMAOp, compare their contained operations + // This is a simplified structural comparison + auto ®ion1 = dma1->getRegion(0); + auto ®ion2 = dma2->getRegion(0); + + if (region1.empty() != region2.empty()) + return false; + + if (region1.empty()) + return true; + + auto &block1 = region1.front(); + auto &block2 = region2.front(); + + auto ops1 = block1.without_terminator(); + auto ops2 = block2.without_terminator(); + + auto it1 = ops1.begin(); + auto it2 = ops2.begin(); + + while (it1 != ops1.end() && it2 != ops2.end()) { + if (it1->getName() != it2->getName()) + return false; + ++it1; + ++it2; + } + + return it1 == ops1.end() && it2 == ops2.end(); + }; + + // Helper lambda to check if a tile is used in the device + auto isTileUsed = [&](int col, int row) -> bool { + for (auto tileOp : device.getOps()) { + if (tileOp.colIndex() == col && tileOp.rowIndex() == row) { + return true; + } + } + return false; + }; + + // Helper lambda to check if a tile has a core + auto hasCoreOp = [&](int col, int row) -> bool { + for (auto coreOp : device.getOps()) { + auto tileOp = cast(coreOp.getTile().getDefiningOp()); + if (tileOp.colIndex() == col && tileOp.rowIndex() == row) { + return true; + } + } + return false; + }; + + // Helper lambda to check if a tile has a switchbox + auto hasSwitchboxOp = [&](int col, int row) -> bool { + for (auto switchboxOp : device.getOps()) { + auto tileOp = cast(switchboxOp.getTile().getDefiningOp()); + if (tileOp.colIndex() == col && tileOp.rowIndex() == row) { + return true; + } + } + return false; + }; + + // Helper lambda to check if a tile has locks + auto hasLockOp = [&](int col, int row) -> bool { + for (auto lockOp : device.getOps()) { + auto tileOp = cast(lockOp.getTile().getDefiningOp()); + if (tileOp.colIndex() == col && tileOp.rowIndex() == row) { + return true; + } + } + return false; + }; + + // Helper functions to find ops in previous device + auto findPreviousSwitchbox = [&](int col, int row) -> SwitchboxOp { + if (!previousDevice) + return nullptr; + for (auto sb : previousDevice.getOps()) { + auto tile = cast(sb.getTile().getDefiningOp()); + if (tile.colIndex() == col && tile.rowIndex() == row) + return sb; + } + return nullptr; + }; + + auto findPreviousCore = [&](int col, int row) -> CoreOp { + if (!previousDevice) + return nullptr; + for (auto core : previousDevice.getOps()) { + auto tile = cast(core.getTile().getDefiningOp()); + if (tile.colIndex() == col && tile.rowIndex() == row) + return core; + } + return nullptr; + }; + + auto findPreviousDMA = [&](int col, int row) -> Operation* { + if (!previousDevice) + return nullptr; + // Check MemOp + for (auto mem : previousDevice.getOps()) { + auto tile = cast(mem.getTile().getDefiningOp()); + if (tile.colIndex() == col && tile.rowIndex() == row) + return mem.getOperation(); + } + // Check MemTileDMAOp + for (auto mem : previousDevice.getOps()) { + auto tile = cast(mem.getTile().getDefiningOp()); + if (tile.colIndex() == col && tile.rowIndex() == row) + return mem.getOperation(); + } + // Check ShimDMAOp + for (auto shim : previousDevice.getOps()) { + auto tile = cast(shim.getTile().getDefiningOp()); + if (tile.colIndex() == col && tile.rowIndex() == row) + return shim.getOperation(); + } + return nullptr; + }; + + auto findCurrentSwitchbox = [&](int col, int row) -> SwitchboxOp { + for (auto sb : device.getOps()) { + auto tile = cast(sb.getTile().getDefiningOp()); + if (tile.colIndex() == col && tile.rowIndex() == row) + return sb; + } + return nullptr; + }; + + auto findCurrentCore = [&](int col, int row) -> CoreOp { + for (auto core : device.getOps()) { + auto tile = cast(core.getTile().getDefiningOp()); + if (tile.colIndex() == col && tile.rowIndex() == row) + return core; + } + return nullptr; + }; + + auto findCurrentDMA = [&](int col, int row) -> Operation* { + // Check MemOp + for (auto mem : device.getOps()) { + auto tile = cast(mem.getTile().getDefiningOp()); + if (tile.colIndex() == col && tile.rowIndex() == row) + return mem.getOperation(); + } + // Check MemTileDMAOp + for (auto mem : device.getOps()) { + auto tile = cast(mem.getTile().getDefiningOp()); + if (tile.colIndex() == col && tile.rowIndex() == row) + return mem.getOperation(); + } + // Check ShimDMAOp + for (auto shim : device.getOps()) { + auto tile = cast(shim.getTile().getDefiningOp()); + if (tile.colIndex() == col && tile.rowIndex() == row) + return shim.getOperation(); + } + return nullptr; + }; + + // Build tile lists for DMA resets + std::vector> dmaTiles; + if (dmaConfig.mode != ResetMode::Never) { + for (int col = 0; col < numCols; col++) { + for (int row = 0; row < numRows; row++) { + bool shouldReset = false; + + if (targetModel.isMemTile(col, row) && hasFlag(dmaConfig.tileType, ResetTileType::MemTile)) { + if (dmaConfig.mode == ResetMode::Always) { + shouldReset = true; + } else if (dmaConfig.mode == ResetMode::IfUsed) { + shouldReset = isTileUsed(col, row); + } else if (dmaConfig.mode == ResetMode::IfChanged) { + auto currentDMA = findCurrentDMA(col, row); + auto prevDMA = findPreviousDMA(col, row); + shouldReset = currentDMA && !dmasEquivalent(currentDMA, prevDMA); + } + } else if (targetModel.isCoreTile(col, row) && hasFlag(dmaConfig.tileType, ResetTileType::CoreTile)) { + if (dmaConfig.mode == ResetMode::Always) { + shouldReset = true; + } else if (dmaConfig.mode == ResetMode::IfUsed) { + shouldReset = isTileUsed(col, row); + } else if (dmaConfig.mode == ResetMode::IfChanged) { + auto currentDMA = findCurrentDMA(col, row); + auto prevDMA = findPreviousDMA(col, row); + shouldReset = currentDMA && !dmasEquivalent(currentDMA, prevDMA); + } + } else if (targetModel.isShimNOCTile(col, row) && hasFlag(dmaConfig.tileType, ResetTileType::ShimNOC)) { + if (dmaConfig.mode == ResetMode::Always) { + shouldReset = true; + } else if (dmaConfig.mode == ResetMode::IfUsed) { + shouldReset = isTileUsed(col, row); + } else if (dmaConfig.mode == ResetMode::IfChanged) { + auto currentDMA = findCurrentDMA(col, row); + auto prevDMA = findPreviousDMA(col, row); + shouldReset = currentDMA && !dmasEquivalent(currentDMA, prevDMA); + } + } + + if (shouldReset) { + dmaTiles.push_back({col, row}); + } + } + } + } + + // Build tile lists for switch resets + std::vector> switchTiles; + if (switchConfig.mode != ResetMode::Never) { + for (int col = 0; col < numCols; col++) { + for (int row = 0; row < numRows; row++) { + bool shouldReset = false; + + if (targetModel.isMemTile(col, row) && hasFlag(switchConfig.tileType, ResetTileType::MemTile)) { + if (switchConfig.mode == ResetMode::Always) { + shouldReset = true; + } else if (switchConfig.mode == ResetMode::IfUsed) { + shouldReset = isTileUsed(col, row) && hasSwitchboxOp(col, row); + } else if (switchConfig.mode == ResetMode::IfChanged) { + auto currentSB = findCurrentSwitchbox(col, row); + auto prevSB = findPreviousSwitchbox(col, row); + shouldReset = currentSB && !switchboxesEquivalent(currentSB, prevSB); + } + } else if (targetModel.isCoreTile(col, row) && hasFlag(switchConfig.tileType, ResetTileType::CoreTile)) { + if (switchConfig.mode == ResetMode::Always) { + shouldReset = true; + } else if (switchConfig.mode == ResetMode::IfUsed) { + shouldReset = isTileUsed(col, row) && hasSwitchboxOp(col, row); + } else if (switchConfig.mode == ResetMode::IfChanged) { + auto currentSB = findCurrentSwitchbox(col, row); + auto prevSB = findPreviousSwitchbox(col, row); + shouldReset = currentSB && !switchboxesEquivalent(currentSB, prevSB); + } + } else if (targetModel.isShimNOCTile(col, row) && hasFlag(switchConfig.tileType, ResetTileType::ShimNOC)) { + if (switchConfig.mode == ResetMode::Always) { + shouldReset = true; + } else if (switchConfig.mode == ResetMode::IfUsed) { + shouldReset = isTileUsed(col, row) && hasSwitchboxOp(col, row); + } else if (switchConfig.mode == ResetMode::IfChanged) { + auto currentSB = findCurrentSwitchbox(col, row); + auto prevSB = findPreviousSwitchbox(col, row); + shouldReset = currentSB && !switchboxesEquivalent(currentSB, prevSB); + } + } + + if (shouldReset) { + switchTiles.push_back({col, row}); + } } } } - // Reset partition - now uses direct register writes instead of XAie_RunOp - // if (failed(ctl.resetPartition())) - // return failure(); + // Build tile lists for lock resets + std::vector> lockTiles; // col, row, numLocks + if (lockConfig.mode != ResetMode::Never) { + for (int col = 0; col < numCols; col++) { + for (int row = 0; row < numRows; row++) { + bool shouldReset = false; + int numLocks = 0; + + if (targetModel.isMemTile(col, row) && hasFlag(lockConfig.tileType, ResetTileType::MemTile)) { + numLocks = 64; + if (lockConfig.mode == ResetMode::Always) { + shouldReset = true; + } else if (lockConfig.mode == ResetMode::IfUsed) { + shouldReset = isTileUsed(col, row) && hasLockOp(col, row); + } else if (lockConfig.mode == ResetMode::IfChanged) { + // For locks, we reset if the tile configuration changed (conservative) + auto currentDMA = findCurrentDMA(col, row); + auto prevDMA = findPreviousDMA(col, row); + shouldReset = currentDMA && !dmasEquivalent(currentDMA, prevDMA); + } + } else if (targetModel.isCoreTile(col, row) && hasFlag(lockConfig.tileType, ResetTileType::CoreTile)) { + numLocks = 16; + if (lockConfig.mode == ResetMode::Always) { + shouldReset = true; + } else if (lockConfig.mode == ResetMode::IfUsed) { + shouldReset = isTileUsed(col, row) && hasLockOp(col, row); + } else if (lockConfig.mode == ResetMode::IfChanged) { + // For locks, we reset if the tile configuration changed (conservative) + auto currentDMA = findCurrentDMA(col, row); + auto prevDMA = findPreviousDMA(col, row); + shouldReset = currentDMA && !dmasEquivalent(currentDMA, prevDMA); + } + } + + if (shouldReset && numLocks > 0) { + lockTiles.push_back({col, row, numLocks}); + } + } + } + } + + // Build tile list for core resets (cores need special handling) + std::vector> coreTiles; + if (hasFlag(dmaConfig.tileType, ResetTileType::CoreTile) || + hasFlag(switchConfig.tileType, ResetTileType::CoreTile) || + hasFlag(lockConfig.tileType, ResetTileType::CoreTile)) { + for (int col = 0; col < numCols; col++) { + for (int row = 0; row < numRows; row++) { + if (targetModel.isCoreTile(col, row)) { + // For cores, we check if there's a CoreOp rather than just a TileOp + bool shouldReset = false; + if (dmaConfig.mode == ResetMode::Always || switchConfig.mode == ResetMode::Always || lockConfig.mode == ResetMode::Always) { + shouldReset = true; + } else if (dmaConfig.mode == ResetMode::IfUsed || switchConfig.mode == ResetMode::IfUsed || lockConfig.mode == ResetMode::IfUsed) { + shouldReset = hasCoreOp(col, row); + } else if (dmaConfig.mode == ResetMode::IfChanged || switchConfig.mode == ResetMode::IfChanged || lockConfig.mode == ResetMode::IfChanged) { + auto currentCore = findCurrentCore(col, row); + auto prevCore = findPreviousCore(col, row); + shouldReset = currentCore && !coresEquivalent(currentCore, prevCore); + } + + if (shouldReset) { + coreTiles.push_back({col, row}); + } + } + } + } + } + + // Perform core resets + for (auto [col, row] : coreTiles) { + if (failed(ctl.resetCore(col, row))) + return failure(); + } + + // Perform DMA resets + for (auto [col, row] : dmaTiles) { + if (failed(ctl.resetDMA(col, row, false))) + return failure(); + } + + // Perform switch resets + for (auto [col, row] : switchTiles) { + if (failed(ctl.resetSwitch(col, row))) + return failure(); + } + + // Perform lock resets + for (auto [col, row, numLocks] : lockTiles) { + if (failed(ctl.resetLocks(col, row, numLocks))) + return failure(); + } // Export the reset transactions std::vector txn_data = ctl.exportSerializedTransaction(); diff --git a/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp b/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp index 2ed37d3b2c6..fbc56ca17e3 100644 --- a/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp @@ -7,6 +7,21 @@ // (c) Copyright 2025 Advanced Micro Devices Inc. // //===----------------------------------------------------------------------===// +// +// This pass expands `npu.load_pdi` operations that reference a device into: +// 1. An empty device PDI load +// 2. Optional reset operations based on command-line configuration +// 3. Explicit configuration operations (write32/blockwrite) +// +// Example command-line usage: +// aie-opt --aie-expand-load-pdi \ +// --reset-switches-tiles=shim,mem,core \ +// --reset-switches-mode=ifused \ +// --reset-locks-tiles=mem,core \ +// --reset-locks-mode=always \ +// input.mlir +// +//===----------------------------------------------------------------------===// #include "aie/Conversion/AIEToConfiguration/AIEToConfiguration.h" #include "aie/Dialect/AIE/IR/AIEDialect.h" @@ -19,16 +34,66 @@ #include "mlir/Transforms/DialectConversion.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/Support/raw_ostream.h" + #define DEBUG_TYPE "aie-expand-load-pdi" using namespace mlir; using namespace xilinx; using namespace xilinx::AIEX; +using namespace xilinx::AIE; namespace { +// Helper function to parse tile types from comma-separated string +static ResetTileType parseTileTypes(llvm::StringRef str) { + if (str.empty()) + return ResetTileType::None; + + ResetTileType result = ResetTileType::None; + llvm::SmallVector tokens; + str.split(tokens, ',', -1, false); + + for (auto token : tokens) { + token = token.trim(); + if (token == "shim" || token == "shimnoc") + result = result | ResetTileType::ShimNOC; + else if (token == "mem" || token == "memtile") + result = result | ResetTileType::MemTile; + else if (token == "core" || token == "coretile") + result = result | ResetTileType::CoreTile; + else if (token == "all") + result = ResetTileType::All; + } + + return result; +} + +// Helper function to parse reset mode from string +static ResetMode parseResetMode(llvm::StringRef str) { + auto trimmed = str.trim().lower(); + if (trimmed == "never") + return ResetMode::Never; + else if (trimmed == "ifused" || trimmed == "if-used") + return ResetMode::IfUsed; + else if (trimmed == "ifchanged" || trimmed == "if-changed") + return ResetMode::IfChanged; + else if (trimmed == "always" || trimmed == "all") + return ResetMode::Always; + else + return ResetMode::Never; +} + struct ExpandLoadPdiPattern : public OpRewritePattern { - using OpRewritePattern::OpRewritePattern; + const ResetConfig dmaConfig; + const ResetConfig switchConfig; + const ResetConfig lockConfig; + mutable AIE::DeviceOp previousDevice; + + ExpandLoadPdiPattern(MLIRContext *context, ResetConfig dma, ResetConfig sw, ResetConfig lock) + : OpRewritePattern(context), + dmaConfig(dma), switchConfig(sw), lockConfig(lock), previousDevice(nullptr) {} LogicalResult matchAndRewrite(NpuLoadPdiOp loadPdiOp, PatternRewriter &rewriter) const override { @@ -53,54 +118,67 @@ struct ExpandLoadPdiPattern : public OpRewritePattern { if (referencedDevice.getSymName().starts_with("empty")) return failure(); - // Create a unique empty device for this reset to avoid PDI address caching - OpBuilder::InsertionGuard guard(rewriter); - rewriter.setInsertionPointToStart(moduleOp.getBody()); - - // Find a unique name for the empty device - std::string emptyName; - int emptyIndex = 0; - do { - emptyName = "empty_" + std::to_string(emptyIndex++); - } while (moduleOp.lookupSymbol(emptyName)); + // Determine if this is the first load_pdi (no previous device) + bool isFirstLoadPdi = !previousDevice; - auto deviceType = referencedDevice.getDevice(); - auto loc = rewriter.getUnknownLoc(); - auto emptyDevice = rewriter.create( - loc, deviceType, rewriter.getStringAttr(emptyName)); - emptyDevice.getRegion().emplaceBlock(); - - // Add empty cores in all columns to trigger column reset - Block *deviceBlock = &emptyDevice.getRegion().front(); - - //const auto &targetModel = referencedDevice.getTargetModel(); - //int numCols = targetModel.columns(); - //for (int col = 0; col < numCols; col++) { - // rewriter.setInsertionPointToEnd(deviceBlock); - // auto tile = rewriter.create(loc, col, 2); - // rewriter.setInsertionPointToEnd(deviceBlock); - // auto core = rewriter.create(loc, tile.getResult()); - // Region &coreRegion = core.getBody(); - // Block *coreBlock = rewriter.createBlock(&coreRegion); - // rewriter.setInsertionPointToEnd(coreBlock); - // rewriter.create(loc); - //} - rewriter.setInsertionPointToEnd(deviceBlock); - rewriter.create(loc); - - // Create new load_pdi operation referencing the empty device + // For first load_pdi with no reset modes requiring comparison, skip empty device + bool needsEmptyDevice = !isFirstLoadPdi || + dmaConfig.mode != ResetMode::Never || + switchConfig.mode != ResetMode::Never || + lockConfig.mode != ResetMode::Never; + + AIE::DeviceOp emptyDevice; + if (needsEmptyDevice) { + // Create a unique empty device for this reset to avoid PDI address caching + OpBuilder::InsertionGuard guard(rewriter); + rewriter.setInsertionPointToStart(moduleOp.getBody()); + + // Find a unique name for the empty device + std::string emptyName; + int emptyIndex = 0; + do { + emptyName = "empty_" + std::to_string(emptyIndex++); + } while (moduleOp.lookupSymbol(emptyName)); + + auto deviceType = referencedDevice.getDevice(); + auto loc = rewriter.getUnknownLoc(); + emptyDevice = rewriter.create( + loc, deviceType, rewriter.getStringAttr(emptyName)); + emptyDevice.getRegion().emplaceBlock(); + + Block *deviceBlock = &emptyDevice.getRegion().front(); + rewriter.setInsertionPointToEnd(deviceBlock); + rewriter.create(loc); + } + + // Create new load_pdi operation rewriter.setInsertionPoint(loadPdiOp); - auto newLoadPdi = rewriter.create( - loadPdiOp.getLoc(), FlatSymbolRefAttr::get(emptyDevice.getSymNameAttr()), - loadPdiOp.getIdAttr(), loadPdiOp.getSizeAttr(), - loadPdiOp.getAddressAttr()); - - // Generate and insert reset operations after the empty load_pdi - // if (failed(xilinx::AIE::generateAndInsertResetOps( - // referencedDevice, newLoadPdi.getOperation()))) { - // loadPdiOp.emitError("Failed to generate reset operations"); - // return failure(); - // } + NpuLoadPdiOp newLoadPdi; + if (needsEmptyDevice) { + newLoadPdi = rewriter.create( + loadPdiOp.getLoc(), FlatSymbolRefAttr::get(emptyDevice.getSymNameAttr()), + loadPdiOp.getIdAttr(), loadPdiOp.getSizeAttr(), + loadPdiOp.getAddressAttr()); + } else { + // First load_pdi with no resets - keep original device reference + newLoadPdi = rewriter.create( + loadPdiOp.getLoc(), loadPdiOp.getDeviceRefAttr(), + loadPdiOp.getIdAttr(), loadPdiOp.getSizeAttr(), + loadPdiOp.getAddressAttr()); + } + + // Generate and insert reset operations (skip for first load_pdi) + if (!isFirstLoadPdi && + (dmaConfig.mode != ResetMode::Never || + switchConfig.mode != ResetMode::Never || + lockConfig.mode != ResetMode::Never)) { + if (failed(xilinx::AIE::generateAndInsertResetOps( + referencedDevice, newLoadPdi.getOperation(), + dmaConfig, switchConfig, lockConfig, previousDevice))) { + loadPdiOp.emitError("Failed to generate reset operations"); + return failure(); + } + } // Generate and insert the configuration operations after the reset ops // Find the last operation inserted (which should be from reset ops) @@ -120,6 +198,9 @@ struct ExpandLoadPdiPattern : public OpRewritePattern { // Remove the original load_pdi operation rewriter.eraseOp(loadPdiOp); + // Update previous device for next load_pdi + previousDevice = referencedDevice; + return success(); } }; @@ -133,8 +214,21 @@ struct AIEExpandLoadPdiPass void runOnOperation() override { auto module = getOperation(); + // Parse reset configurations from command-line options + ResetTileType dmaTiles = parseTileTypes(resetDmasTiles); + ResetMode dmaMode = parseResetMode(resetDmasMode); + ResetConfig dmaConfig(dmaTiles, dmaMode); + + ResetTileType switchTiles = parseTileTypes(resetSwitchesTiles); + ResetMode switchMode = parseResetMode(resetSwitchesMode); + ResetConfig switchConfig(switchTiles, switchMode); + + ResetTileType lockTiles = parseTileTypes(resetLocksTiles); + ResetMode lockMode = parseResetMode(resetLocksMode); + ResetConfig lockConfig(lockTiles, lockMode); + RewritePatternSet patterns(&getContext()); - patterns.add(&getContext()); + patterns.add(&getContext(), dmaConfig, switchConfig, lockConfig); if (failed(applyPatternsGreedily(module, std::move(patterns)))) { signalPassFailure(); diff --git a/lib/Targets/AIERT.cpp b/lib/Targets/AIERT.cpp index 839404a9807..58cfc2ffb0d 100644 --- a/lib/Targets/AIERT.cpp +++ b/lib/Targets/AIERT.cpp @@ -846,121 +846,7 @@ LogicalResult xilinx::AIE::AIERTControl::addAieElf(uint8_t col, uint8_t row, } LogicalResult xilinx::AIE::AIERTControl::resetPartition() { - // Manual implementation of XAie_ResetPartition that works in transaction mode. - // XAie_ResetPartition calls XAie_RunOp which doesn't work with DISABLE_AUTO_FLUSH. - // We only include the register writes, skipping the XAie_RunOp calls for: - // - XAIE_BACKEND_OP_SET_PROTREG (protected register enable/disable) - // - XAIE_BACKEND_OP_ASSERT_SHIMRST (hardware SHIM reset signal) - - XAie_DevInst *DevInst = &aiert->devInst; - u8 TileType; - const XAie_PlIfMod *PlIfMod; - - // 1. Disable clock buffers for all columns - for (u8 C = 0; C < DevInst->NumCols; C++) { - XAie_LocType Loc = XAie_TileLoc(C, 0); - TileType = DevInst->DevOps->GetTTypefromLoc(DevInst, Loc); - PlIfMod = DevInst->DevProp.DevMod[TileType].PlIfMod; - const XAie_ShimClkBufCntr *ClkBufCntr = PlIfMod->ClkBufCntr; - - u64 RegAddr = ClkBufCntr->RegOff + _XAie_GetTileAddr(DevInst, 0U, Loc.Col); - u32 FldVal = XAie_SetField(XAIE_DISABLE, ClkBufCntr->ClkBufEnable.Lsb, - ClkBufCntr->ClkBufEnable.Mask); - TRY_XAIE_API_LOGICAL_RESULT(XAie_MaskWrite32, DevInst, RegAddr, - ClkBufCntr->ClkBufEnable.Mask, FldVal); - } - - // 2. Assert column reset for all columns - for (u8 C = 0; C < DevInst->NumCols; C++) { - XAie_LocType Loc = XAie_TileLoc(C, 0); - TileType = DevInst->DevOps->GetTTypefromLoc(DevInst, Loc); - PlIfMod = DevInst->DevProp.DevMod[TileType].PlIfMod; - - u64 RegAddr = PlIfMod->ColRstOff + _XAie_GetTileAddr(DevInst, Loc.Row, Loc.Col); - u32 FldVal = XAie_SetField(XAIE_ENABLE, PlIfMod->ColRst.Lsb, PlIfMod->ColRst.Mask); - TRY_XAIE_API_LOGICAL_RESULT(XAie_Write32, DevInst, RegAddr, FldVal); - } - - // 3. Re-enable clock buffers for all columns - for (u8 C = 0; C < DevInst->NumCols; C++) { - XAie_LocType Loc = XAie_TileLoc(C, 0); - TileType = DevInst->DevOps->GetTTypefromLoc(DevInst, Loc); - PlIfMod = DevInst->DevProp.DevMod[TileType].PlIfMod; - const XAie_ShimClkBufCntr *ClkBufCntr = PlIfMod->ClkBufCntr; - - u64 RegAddr = ClkBufCntr->RegOff + _XAie_GetTileAddr(DevInst, 0U, Loc.Col); - u32 FldVal = XAie_SetField(XAIE_ENABLE, ClkBufCntr->ClkBufEnable.Lsb, - ClkBufCntr->ClkBufEnable.Mask); - TRY_XAIE_API_LOGICAL_RESULT(XAie_MaskWrite32, DevInst, RegAddr, - ClkBufCntr->ClkBufEnable.Mask, FldVal); - } - - // 4. Set SHIM reset registers (enable then disable) - // First set all SHIM reset bits to enable - for (u8 C = 0; C < DevInst->NumCols; C++) { - XAie_LocType Loc = XAie_TileLoc(C, 0); - TileType = DevInst->DevOps->GetTTypefromLoc(DevInst, Loc); - PlIfMod = DevInst->DevProp.DevMod[TileType].PlIfMod; - const XAie_ShimRstMod *ShimTileRst = PlIfMod->ShimTileRst; - - u64 RegAddr = ShimTileRst->RegOff + _XAie_GetTileAddr(DevInst, Loc.Row, Loc.Col); - u32 FldVal = XAie_SetField(XAIE_ENABLE, ShimTileRst->RstCntr.Lsb, - ShimTileRst->RstCntr.Mask); - TRY_XAIE_API_LOGICAL_RESULT(XAie_Write32, DevInst, RegAddr, FldVal); - } - - // Note: Skipping XAie_RunOp(XAIE_BACKEND_OP_ASSERT_SHIMRST) calls - // These are hardware backend operations that can't be recorded in transactions - - // Then set all SHIM reset bits to disable - for (u8 C = 0; C < DevInst->NumCols; C++) { - XAie_LocType Loc = XAie_TileLoc(C, 0); - TileType = DevInst->DevOps->GetTTypefromLoc(DevInst, Loc); - PlIfMod = DevInst->DevProp.DevMod[TileType].PlIfMod; - const XAie_ShimRstMod *ShimTileRst = PlIfMod->ShimTileRst; - - u64 RegAddr = ShimTileRst->RegOff + _XAie_GetTileAddr(DevInst, Loc.Row, Loc.Col); - u32 FldVal = XAie_SetField(XAIE_DISABLE, ShimTileRst->RstCntr.Lsb, - ShimTileRst->RstCntr.Mask); - TRY_XAIE_API_LOGICAL_RESULT(XAie_Write32, DevInst, RegAddr, FldVal); - } - - // 5. Block NSU AXI MM errors for all SHIM NOC tiles - // Note: Skipping XAie_RunOp(XAIE_BACKEND_OP_SET_PROTREG) to enable protected regs - for (u8 C = 0; C < DevInst->NumCols; C++) { - XAie_LocType Loc = XAie_TileLoc(C, 0); - TileType = DevInst->DevOps->GetTTypefromLoc(DevInst, Loc); - - if (TileType != XAIEGBL_TILE_TYPE_SHIMNOC) { - continue; - } - - PlIfMod = DevInst->DevProp.DevMod[TileType].PlIfMod; - const XAie_ShimNocAxiMMConfig *ShimNocAxiMM = PlIfMod->ShimNocAxiMM; - - u64 RegAddr = ShimNocAxiMM->RegOff + _XAie_GetTileAddr(DevInst, Loc.Row, Loc.Col); - u32 FldVal = XAie_SetField(XAIE_ENABLE, ShimNocAxiMM->NsuSlvErr.Lsb, - ShimNocAxiMM->NsuSlvErr.Mask); - FldVal |= XAie_SetField(XAIE_ENABLE, ShimNocAxiMM->NsuDecErr.Lsb, - ShimNocAxiMM->NsuDecErr.Mask); - TRY_XAIE_API_LOGICAL_RESULT(XAie_Write32, DevInst, RegAddr, FldVal); - } - // Note: Skipping XAie_RunOp(XAIE_BACKEND_OP_SET_PROTREG) to disable protected regs - - // 6. Disable clock buffers again - for (u8 C = 0; C < DevInst->NumCols; C++) { - XAie_LocType Loc = XAie_TileLoc(C, 0); - TileType = DevInst->DevOps->GetTTypefromLoc(DevInst, Loc); - PlIfMod = DevInst->DevProp.DevMod[TileType].PlIfMod; - const XAie_ShimClkBufCntr *ClkBufCntr = PlIfMod->ClkBufCntr; - - u64 RegAddr = ClkBufCntr->RegOff + _XAie_GetTileAddr(DevInst, 0U, Loc.Col); - u32 FldVal = XAie_SetField(XAIE_DISABLE, ClkBufCntr->ClkBufEnable.Lsb, - ClkBufCntr->ClkBufEnable.Mask); - TRY_XAIE_API_LOGICAL_RESULT(XAie_MaskWrite32, DevInst, RegAddr, - ClkBufCntr->ClkBufEnable.Mask, FldVal); - } - + TRY_XAIE_API_LOGICAL_RESULT(XAie_ResetPartition, &aiert->devInst); return success(); } diff --git a/python/compiler/aiecc/cl_arguments.py b/python/compiler/aiecc/cl_arguments.py index f705956e92f..c3b277208e2 100644 --- a/python/compiler/aiecc/cl_arguments.py +++ b/python/compiler/aiecc/cl_arguments.py @@ -170,6 +170,42 @@ def parse_args(args=None): action="store_true", help="Use packet switched flows when lowering object fifos", ) + parser.add_argument( + "--reset-dmas-tiles", + dest="reset_dmas_tiles", + default="", + help="Comma-separated list of tile types to reset DMAs for (shim,mem,core)", + ) + parser.add_argument( + "--reset-dmas-mode", + dest="reset_dmas_mode", + default="never", + help="When to reset DMAs: never, ifused, ifchanged, always", + ) + parser.add_argument( + "--reset-switches-tiles", + dest="reset_switches_tiles", + default="", + help="Comma-separated list of tile types to reset switches for (shim,mem,core)", + ) + parser.add_argument( + "--reset-switches-mode", + dest="reset_switches_mode", + default="never", + help="When to reset switches: never, ifused, ifchanged, always", + ) + parser.add_argument( + "--reset-locks-tiles", + dest="reset_locks_tiles", + default="", + help="Comma-separated list of tile types to reset locks for (mem,core)", + ) + parser.add_argument( + "--reset-locks-mode", + dest="reset_locks_mode", + default="never", + help="When to reset locks: never, ifused, ifchanged, always", + ) parser.add_argument( "host_args", action="store", diff --git a/python/compiler/aiecc/main.py b/python/compiler/aiecc/main.py index 1b1e7ba30a8..68a6572561f 100644 --- a/python/compiler/aiecc/main.py +++ b/python/compiler/aiecc/main.py @@ -148,7 +148,15 @@ def _create_aie_lower_to_llvm_pipeline( AIE_LOWER_TO_LLVM = _create_aie_lower_to_llvm_pipeline # pipeline to lower and legalize runtime sequence for NPU -def _create_npu_lowering_pipeline(expand_load_pdis=False): +def _create_npu_lowering_pipeline( + expand_load_pdis=False, + reset_dmas_tiles="", + reset_dmas_mode="never", + reset_switches_tiles="", + reset_switches_mode="never", + reset_locks_tiles="", + reset_locks_mode="never", +): pipeline = ( Pipeline() .add_pass("aie-materialize-runtime-sequences") @@ -164,7 +172,15 @@ def _create_npu_lowering_pipeline(expand_load_pdis=False): ) ) if expand_load_pdis: - pipeline = pipeline.add_pass("aie-expand-load-pdi") + pipeline = pipeline.add_pass( + "aie-expand-load-pdi", + reset_dmas_tiles=reset_dmas_tiles, + reset_dmas_mode=reset_dmas_mode, + reset_switches_tiles=reset_switches_tiles, + reset_switches_mode=reset_switches_mode, + reset_locks_tiles=reset_locks_tiles, + reset_locks_mode=reset_locks_mode, + ) return pipeline NPU_LOWERING_PIPELINE = _create_npu_lowering_pipeline() @@ -1707,7 +1723,15 @@ async def run_flow(self): input_physical_with_elfs_module = Module.parse( await read_file_async(input_physical_with_elfs) ) - npu_pipeline = _create_npu_lowering_pipeline(opts.expand_load_pdis) + npu_pipeline = _create_npu_lowering_pipeline( + opts.expand_load_pdis, + reset_dmas_tiles=opts.reset_dmas_tiles, + reset_dmas_mode=opts.reset_dmas_mode, + reset_switches_tiles=opts.reset_switches_tiles, + reset_switches_mode=opts.reset_switches_mode, + reset_locks_tiles=opts.reset_locks_tiles, + reset_locks_mode=opts.reset_locks_mode, + ) pass_pipeline = npu_pipeline.materialize(module=True) npu_insts_file = self.prepend_tmp(f"npu_insts.mlir") self.progress_bar.update( From 81bcdb9620b12725367d7da909f3474f5cc49824 Mon Sep 17 00:00:00 2001 From: andrej Date: Sun, 23 Nov 2025 13:19:32 -0700 Subject: [PATCH 14/40] more thoroughly verify correctness of results --- .../fused_transactions_loadpdi/test.cpp | 200 +++++++++--- .../fused_transactions_write32s/test.cpp | 200 +++++++++--- .../swiglu/generate_reference.py | 99 ++++-- .../reconfiguration/swiglu/runlist/test.cpp | 284 ++++++++++++++---- .../swiglu/separate_xclbins/test.cpp | 268 +++++++++++++---- 5 files changed, 816 insertions(+), 235 deletions(-) mode change 100644 => 100755 programming_examples/reconfiguration/swiglu/generate_reference.py diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/test.cpp b/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/test.cpp index 68127a7259f..db3406d1bda 100644 --- a/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/test.cpp +++ b/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/test.cpp @@ -1,4 +1,6 @@ +#include #include +#include #include #include #include @@ -6,6 +8,7 @@ #include #include #include +#include #include #include @@ -19,8 +22,9 @@ constexpr int EMBEDDING_DIM = 2048; constexpr int HIDDEN_DIM = 8192; constexpr int NUM_ITERATIONS = 1000; +constexpr int NUM_TEST_CASES = 2; -using dtype = uint16_t; +using dtype = std::bfloat16_t; struct BufferInfo { std::string name; @@ -39,7 +43,7 @@ std::vector buffers_config = { {"output", EMBEDDING_DIM}, }; -std::vector load_reference(const std::string &filename) { +std::vector load_bfloat16(const std::string &filename) { std::ifstream file(filename, std::ios::binary); if (!file) { return {}; @@ -47,11 +51,59 @@ std::vector load_reference(const std::string &filename) { file.seekg(0, std::ios::end); size_t size = file.tellg(); file.seekg(0, std::ios::beg); - std::vector data(size / sizeof(uint16_t)); - file.read(reinterpret_cast(data.data()), size); + std::vector raw_data(size / sizeof(uint16_t)); + file.read(reinterpret_cast(raw_data.data()), size); + + std::vector data(raw_data.size()); + std::memcpy(data.data(), raw_data.data(), size); return data; } +bool almost_equal(dtype a, dtype b, float rtol = 1e-1, float atol = 1e-2) { + float fa = static_cast(a); + float fb = static_cast(b); + return std::abs(fa - fb) <= (atol + rtol * std::abs(fb)); +} + +struct Mismatch { + size_t index; + dtype got; + dtype expected; + float error; +}; + +bool verify_output(const dtype *output, const std::vector &reference, + size_t size, const std::string &test_name) { + std::vector mismatches; + + for (size_t i = 0; i < size && i < reference.size(); i++) { + if (!almost_equal(output[i], reference[i])) { + float error = std::abs(static_cast(output[i]) - static_cast(reference[i])); + mismatches.push_back({i, output[i], reference[i], error}); + } + } + + if (mismatches.empty()) { + std::cerr << test_name << " PASSED: all outputs match reference" << std::endl; + return true; + } else { + std::cerr << test_name << " FAILED: " << mismatches.size() << " mismatches" << std::endl; + + // Sort by error to find top 5 diverging values + std::sort(mismatches.begin(), mismatches.end(), + [](const Mismatch &a, const Mismatch &b) { return a.error > b.error; }); + + std::cerr << "Top 5 diverging values:" << std::endl; + for (size_t i = 0; i < std::min(size_t(5), mismatches.size()); i++) { + const auto &m = mismatches[i]; + std::cerr << " [" << m.index << "] got " << static_cast(m.got) + << ", expected " << static_cast(m.expected) + << ", error " << m.error << std::endl; + } + return false; + } +} + int main(int argc, const char *argv[]) { unsigned int device_index = 0; auto device = xrt::device(device_index); @@ -76,53 +128,111 @@ int main(int argc, const char *argv[]) { offset += binfo.size; } - for (size_t i = 0; i < buffers_config[0].size; i++) { // input - buffer_ptrs["input"][i] = 0x3F80; - } - for (size_t i = 0; i < buffers_config[1].size; i++) { // weights_1 - buffer_ptrs["weights_1"][i] = 0x3F00; - } - for (size_t i = 0; i < buffers_config[2].size; i++) { // weights_2 - buffer_ptrs["weights_2"][i] = 0x3F00; - } - for (size_t i = 0; i < buffers_config[3].size; i++) { // weights_3 - buffer_ptrs["weights_3"][i] = 0x3F00; - } - - bo_inout.sync(XCL_BO_SYNC_BO_TO_DEVICE); - auto run = xrt::run(kernel); run.set_arg(0, bo_inout); - std::cerr << "Running verification..." << std::endl; - run.start(); - run.wait2(); - - bo_inout.sync(XCL_BO_SYNC_BO_FROM_DEVICE); - dtype *output_verify = buffer_ptrs["output"]; - - auto reference = load_reference("../../reference_output.bin"); - if (!reference.empty()) { - int mismatches = 0; - for (size_t i = 0; i < EMBEDDING_DIM && i < reference.size(); i++) { - if (output_verify[i] != reference[i]) { - mismatches++; - if (mismatches <= 10) { - std::cerr << "Mismatch at " << i << ": got 0x" << std::hex - << output_verify[i] << ", expected 0x" << reference[i] - << std::dec << std::endl; - } - } + // Run verification on multiple test cases + bool all_tests_passed = true; + + for (int test_case = 0; test_case < NUM_TEST_CASES; test_case++) { + std::cerr << "\n=== Test Case " << test_case << " ===" << std::endl; + + // Load inputs for this test case + auto input_data = load_bfloat16("../../input_" + std::to_string(test_case) + ".bin"); + auto weights_1_data = load_bfloat16("../../weights_1_" + std::to_string(test_case) + ".bin"); + auto weights_2_data = load_bfloat16("../../weights_2_" + std::to_string(test_case) + ".bin"); + auto weights_3_data = load_bfloat16("../../weights_3_" + std::to_string(test_case) + ".bin"); + auto reference = load_bfloat16("../../reference_output_" + std::to_string(test_case) + ".bin"); + + if (input_data.empty() || weights_1_data.empty() || weights_2_data.empty() || + weights_3_data.empty() || reference.empty()) { + std::cerr << "Warning: test case " << test_case << " data not found, skipping" << std::endl; + continue; + } + + // Copy input data to buffers + std::memcpy(buffer_ptrs["input"], input_data.data(), + std::min(input_data.size(), buffers_config[0].size) * sizeof(dtype)); + std::memcpy(buffer_ptrs["weights_1"], weights_1_data.data(), + std::min(weights_1_data.size(), buffers_config[1].size) * sizeof(dtype)); + std::memcpy(buffer_ptrs["weights_2"], weights_2_data.data(), + std::min(weights_2_data.size(), buffers_config[2].size) * sizeof(dtype)); + std::memcpy(buffer_ptrs["weights_3"], weights_3_data.data(), + std::min(weights_3_data.size(), buffers_config[3].size) * sizeof(dtype)); + + bo_inout.sync(XCL_BO_SYNC_BO_TO_DEVICE); + + // Run kernel + run.start(); + run.wait2(); + + bo_inout.sync(XCL_BO_SYNC_BO_FROM_DEVICE); + + // Load reference data for intermediates + auto reference_left = load_bfloat16("../../reference_left_" + std::to_string(test_case) + ".bin"); + auto reference_right = load_bfloat16("../../reference_right_" + std::to_string(test_case) + ".bin"); + auto reference_left_swished = load_bfloat16("../../reference_left_swished_" + std::to_string(test_case) + ".bin"); + auto reference_intermediate = load_bfloat16("../../reference_intermediate_" + std::to_string(test_case) + ".bin"); + + // Verify all intermediate buffers + bool passed = true; + + if (!reference_left.empty()) { + dtype *left_ptr = buffer_ptrs["left"]; + passed = verify_output(left_ptr, reference_left, HIDDEN_DIM, + "Test case " + std::to_string(test_case) + " - left") && passed; + } + + if (!reference_right.empty()) { + dtype *right_ptr = buffer_ptrs["right"]; + passed = verify_output(right_ptr, reference_right, HIDDEN_DIM, + "Test case " + std::to_string(test_case) + " - right") && passed; + } + + if (!reference_left_swished.empty()) { + dtype *left_swished_ptr = buffer_ptrs["left_swished"]; + passed = verify_output(left_swished_ptr, reference_left_swished, HIDDEN_DIM, + "Test case " + std::to_string(test_case) + " - left_swished") && passed; + } + + if (!reference_intermediate.empty()) { + dtype *intermediate_ptr = buffer_ptrs["intermediate"]; + passed = verify_output(intermediate_ptr, reference_intermediate, HIDDEN_DIM, + "Test case " + std::to_string(test_case) + " - intermediate") && passed; } - if (mismatches == 0) { - std::cerr << "Verification PASSED: all outputs match reference" << std::endl; - } else { - std::cerr << "Verification FAILED: " << mismatches << " mismatches" - << std::endl; + + if (!reference.empty()) { + dtype *output_verify = buffer_ptrs["output"]; + passed = verify_output(output_verify, reference, EMBEDDING_DIM, + "Test case " + std::to_string(test_case) + " - output") && passed; } + + all_tests_passed = all_tests_passed && passed; + } + + if (!all_tests_passed) { + std::cerr << "\nSome verification tests failed!" << std::endl; } else { - std::cerr << "Warning: reference output not found, skipping validation" - << std::endl; + std::cerr << "\nAll verification tests passed!" << std::endl; + } + + // For benchmarking, use the first test case + auto input_data = load_bfloat16("../../input_0.bin"); + auto weights_1_data = load_bfloat16("../../weights_1_0.bin"); + auto weights_2_data = load_bfloat16("../../weights_2_0.bin"); + auto weights_3_data = load_bfloat16("../../weights_3_0.bin"); + + if (!input_data.empty() && !weights_1_data.empty() && + !weights_2_data.empty() && !weights_3_data.empty()) { + std::memcpy(buffer_ptrs["input"], input_data.data(), + std::min(input_data.size(), buffers_config[0].size) * sizeof(dtype)); + std::memcpy(buffer_ptrs["weights_1"], weights_1_data.data(), + std::min(weights_1_data.size(), buffers_config[1].size) * sizeof(dtype)); + std::memcpy(buffer_ptrs["weights_2"], weights_2_data.data(), + std::min(weights_2_data.size(), buffers_config[2].size) * sizeof(dtype)); + std::memcpy(buffer_ptrs["weights_3"], weights_3_data.data(), + std::min(weights_3_data.size(), buffers_config[3].size) * sizeof(dtype)); + bo_inout.sync(XCL_BO_SYNC_BO_TO_DEVICE); } std::cerr << "Running timed iterations..." << std::endl; diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/test.cpp b/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/test.cpp index 8d8b7fd238d..a8a7a56e1ae 100644 --- a/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/test.cpp +++ b/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/test.cpp @@ -1,4 +1,6 @@ +#include #include +#include #include #include #include @@ -6,6 +8,7 @@ #include #include #include +#include #include #include @@ -19,8 +22,9 @@ constexpr int EMBEDDING_DIM = 2048; constexpr int HIDDEN_DIM = 8192; constexpr int NUM_ITERATIONS = 1000; +constexpr int NUM_TEST_CASES = 2; -using dtype = uint16_t; +using dtype = std::bfloat16_t; struct BufferInfo { std::string name; @@ -39,7 +43,7 @@ std::vector buffers_config = { {"output", EMBEDDING_DIM}, }; -std::vector load_reference(const std::string &filename) { +std::vector load_bfloat16(const std::string &filename) { std::ifstream file(filename, std::ios::binary); if (!file) { return {}; @@ -47,11 +51,59 @@ std::vector load_reference(const std::string &filename) { file.seekg(0, std::ios::end); size_t size = file.tellg(); file.seekg(0, std::ios::beg); - std::vector data(size / sizeof(uint16_t)); - file.read(reinterpret_cast(data.data()), size); + std::vector raw_data(size / sizeof(uint16_t)); + file.read(reinterpret_cast(raw_data.data()), size); + + std::vector data(raw_data.size()); + std::memcpy(data.data(), raw_data.data(), size); return data; } +bool almost_equal(dtype a, dtype b, float rtol = 1e-1, float atol = 1e-2) { + float fa = static_cast(a); + float fb = static_cast(b); + return std::abs(fa - fb) <= (atol + rtol * std::abs(fb)); +} + +struct Mismatch { + size_t index; + dtype got; + dtype expected; + float error; +}; + +bool verify_output(const dtype *output, const std::vector &reference, + size_t size, const std::string &test_name) { + std::vector mismatches; + + for (size_t i = 0; i < size && i < reference.size(); i++) { + if (!almost_equal(output[i], reference[i])) { + float error = std::abs(static_cast(output[i]) - static_cast(reference[i])); + mismatches.push_back({i, output[i], reference[i], error}); + } + } + + if (mismatches.empty()) { + std::cerr << test_name << " PASSED: all outputs match reference" << std::endl; + return true; + } else { + std::cerr << test_name << " FAILED: " << mismatches.size() << " mismatches" << std::endl; + + // Sort by error to find top 5 diverging values + std::sort(mismatches.begin(), mismatches.end(), + [](const Mismatch &a, const Mismatch &b) { return a.error > b.error; }); + + std::cerr << "Top 5 diverging values:" << std::endl; + for (size_t i = 0; i < std::min(size_t(5), mismatches.size()); i++) { + const auto &m = mismatches[i]; + std::cerr << " [" << m.index << "] got " << static_cast(m.got) + << ", expected " << static_cast(m.expected) + << ", error " << m.error << std::endl; + } + return false; + } +} + int main(int argc, const char *argv[]) { unsigned int device_index = 0; auto device = xrt::device(device_index); @@ -76,53 +128,111 @@ int main(int argc, const char *argv[]) { offset += binfo.size; } - for (size_t i = 0; i < buffers_config[0].size; i++) { // input - buffer_ptrs["input"][i] = 0x3F80; - } - for (size_t i = 0; i < buffers_config[1].size; i++) { // weights_1 - buffer_ptrs["weights_1"][i] = 0x3F00; - } - for (size_t i = 0; i < buffers_config[2].size; i++) { // weights_2 - buffer_ptrs["weights_2"][i] = 0x3F00; - } - for (size_t i = 0; i < buffers_config[3].size; i++) { // weights_3 - buffer_ptrs["weights_3"][i] = 0x3F00; - } - - bo_inout.sync(XCL_BO_SYNC_BO_TO_DEVICE); - auto run = xrt::run(kernel); run.set_arg(0, bo_inout); - std::cerr << "Running verification..." << std::endl; - run.start(); - run.wait2(); - - bo_inout.sync(XCL_BO_SYNC_BO_FROM_DEVICE); - dtype *output_verify = buffer_ptrs["output"]; - - auto reference = load_reference("../../reference_output.bin"); - if (!reference.empty()) { - int mismatches = 0; - for (size_t i = 0; i < EMBEDDING_DIM && i < reference.size(); i++) { - if (output_verify[i] != reference[i]) { - mismatches++; - if (mismatches <= 10) { - std::cerr << "Mismatch at " << i << ": got 0x" << std::hex - << output_verify[i] << ", expected 0x" << reference[i] - << std::dec << std::endl; - } - } + // Run verification on multiple test cases + bool all_tests_passed = true; + + for (int test_case = 0; test_case < NUM_TEST_CASES; test_case++) { + std::cerr << "\n=== Test Case " << test_case << " ===" << std::endl; + + // Load inputs for this test case + auto input_data = load_bfloat16("../../input_" + std::to_string(test_case) + ".bin"); + auto weights_1_data = load_bfloat16("../../weights_1_" + std::to_string(test_case) + ".bin"); + auto weights_2_data = load_bfloat16("../../weights_2_" + std::to_string(test_case) + ".bin"); + auto weights_3_data = load_bfloat16("../../weights_3_" + std::to_string(test_case) + ".bin"); + auto reference = load_bfloat16("../../reference_output_" + std::to_string(test_case) + ".bin"); + + if (input_data.empty() || weights_1_data.empty() || weights_2_data.empty() || + weights_3_data.empty() || reference.empty()) { + std::cerr << "Warning: test case " << test_case << " data not found, skipping" << std::endl; + continue; + } + + // Copy input data to buffers + std::memcpy(buffer_ptrs["input"], input_data.data(), + std::min(input_data.size(), buffers_config[0].size) * sizeof(dtype)); + std::memcpy(buffer_ptrs["weights_1"], weights_1_data.data(), + std::min(weights_1_data.size(), buffers_config[1].size) * sizeof(dtype)); + std::memcpy(buffer_ptrs["weights_2"], weights_2_data.data(), + std::min(weights_2_data.size(), buffers_config[2].size) * sizeof(dtype)); + std::memcpy(buffer_ptrs["weights_3"], weights_3_data.data(), + std::min(weights_3_data.size(), buffers_config[3].size) * sizeof(dtype)); + + bo_inout.sync(XCL_BO_SYNC_BO_TO_DEVICE); + + // Run kernel + run.start(); + run.wait2(); + + bo_inout.sync(XCL_BO_SYNC_BO_FROM_DEVICE); + + // Load reference data for intermediates + auto reference_left = load_bfloat16("../../reference_left_" + std::to_string(test_case) + ".bin"); + auto reference_right = load_bfloat16("../../reference_right_" + std::to_string(test_case) + ".bin"); + auto reference_left_swished = load_bfloat16("../../reference_left_swished_" + std::to_string(test_case) + ".bin"); + auto reference_intermediate = load_bfloat16("../../reference_intermediate_" + std::to_string(test_case) + ".bin"); + + // Verify all intermediate buffers + bool passed = true; + + if (!reference_left.empty()) { + dtype *left_ptr = buffer_ptrs["left"]; + passed = verify_output(left_ptr, reference_left, HIDDEN_DIM, + "Test case " + std::to_string(test_case) + " - left") && passed; + } + + if (!reference_right.empty()) { + dtype *right_ptr = buffer_ptrs["right"]; + passed = verify_output(right_ptr, reference_right, HIDDEN_DIM, + "Test case " + std::to_string(test_case) + " - right") && passed; + } + + if (!reference_left_swished.empty()) { + dtype *left_swished_ptr = buffer_ptrs["left_swished"]; + passed = verify_output(left_swished_ptr, reference_left_swished, HIDDEN_DIM, + "Test case " + std::to_string(test_case) + " - left_swished") && passed; + } + + if (!reference_intermediate.empty()) { + dtype *intermediate_ptr = buffer_ptrs["intermediate"]; + passed = verify_output(intermediate_ptr, reference_intermediate, HIDDEN_DIM, + "Test case " + std::to_string(test_case) + " - intermediate") && passed; } - if (mismatches == 0) { - std::cerr << "Verification PASSED: all outputs match reference" << std::endl; - } else { - std::cerr << "Verification FAILED: " << mismatches << " mismatches" - << std::endl; + + if (!reference.empty()) { + dtype *output_verify = buffer_ptrs["output"]; + passed = verify_output(output_verify, reference, EMBEDDING_DIM, + "Test case " + std::to_string(test_case) + " - output") && passed; } + + all_tests_passed = all_tests_passed && passed; + } + + if (!all_tests_passed) { + std::cerr << "\nSome verification tests failed!" << std::endl; } else { - std::cerr << "Warning: reference output not found, skipping validation" - << std::endl; + std::cerr << "\nAll verification tests passed!" << std::endl; + } + + // For benchmarking, use the first test case + auto input_data = load_bfloat16("../../input_0.bin"); + auto weights_1_data = load_bfloat16("../../weights_1_0.bin"); + auto weights_2_data = load_bfloat16("../../weights_2_0.bin"); + auto weights_3_data = load_bfloat16("../../weights_3_0.bin"); + + if (!input_data.empty() && !weights_1_data.empty() && + !weights_2_data.empty() && !weights_3_data.empty()) { + std::memcpy(buffer_ptrs["input"], input_data.data(), + std::min(input_data.size(), buffers_config[0].size) * sizeof(dtype)); + std::memcpy(buffer_ptrs["weights_1"], weights_1_data.data(), + std::min(weights_1_data.size(), buffers_config[1].size) * sizeof(dtype)); + std::memcpy(buffer_ptrs["weights_2"], weights_2_data.data(), + std::min(weights_2_data.size(), buffers_config[2].size) * sizeof(dtype)); + std::memcpy(buffer_ptrs["weights_3"], weights_3_data.data(), + std::min(weights_3_data.size(), buffers_config[3].size) * sizeof(dtype)); + bo_inout.sync(XCL_BO_SYNC_BO_TO_DEVICE); } std::cerr << "Running timed iterations..." << std::endl; diff --git a/programming_examples/reconfiguration/swiglu/generate_reference.py b/programming_examples/reconfiguration/swiglu/generate_reference.py old mode 100644 new mode 100755 index a49a57ed765..dbef9d58fff --- a/programming_examples/reconfiguration/swiglu/generate_reference.py +++ b/programming_examples/reconfiguration/swiglu/generate_reference.py @@ -5,38 +5,99 @@ EMBEDDING_DIM = 2048 HIDDEN_DIM = 8192 +NUM_TEST_CASES = 2 def silu(x): return x / (1.0 + np.exp(-x)) -def swiglu_reference(): - input_data = np.ones(EMBEDDING_DIM, dtype=bfloat16) - weights_1 = np.full((EMBEDDING_DIM, HIDDEN_DIM), 0.5, dtype=bfloat16) - weights_2 = np.full((EMBEDDING_DIM, HIDDEN_DIM), 0.5, dtype=bfloat16) - weights_3 = np.full((HIDDEN_DIM, EMBEDDING_DIM), 0.5, dtype=bfloat16) - - left = np.dot(input_data, weights_1) - right = np.dot(input_data, weights_2) +def swiglu_reference(input_data, weights_1, weights_2, weights_3): + left = np.dot(input_data, weights_1.T) + right = np.dot(input_data, weights_2.T) left_swished = silu(left) intermediate = left_swished * right - output = np.dot(intermediate, weights_3) + output = np.dot(intermediate, weights_3.T) - return output.astype(bfloat16) + # Return all intermediate results + return { + 'left': left.astype(bfloat16), + 'right': right.astype(bfloat16), + 'left_swished': left_swished.astype(bfloat16), + 'intermediate': intermediate.astype(bfloat16), + 'output': output.astype(bfloat16) + } -def save_reference(): - output = swiglu_reference() +def generate_random_inputs(): + """Generate random inputs for testing""" + np.random.seed(42) # Fixed seed for reproducibility + + inputs = [] + weights = [] - with open('reference_output.bin', 'wb') as f: - output.tofile(f) + for i in range(NUM_TEST_CASES): + # Generate random input and weights with reasonable ranges + input_data = (np.random.rand(EMBEDDING_DIM).astype(np.float32)).astype(bfloat16) + w1 = (np.random.randn(HIDDEN_DIM, EMBEDDING_DIM).astype(np.float32) * 0.2).astype(bfloat16) + w2 = (np.random.randn(HIDDEN_DIM, EMBEDDING_DIM).astype(np.float32) * 0.2).astype(bfloat16) + w3 = (np.random.randn(EMBEDDING_DIM, HIDDEN_DIM).astype(np.float32) * 0.2).astype(bfloat16) + + inputs.append(input_data) + weights.append((w1, w2, w3)) + + return inputs, weights + +def save_reference(): + inputs, weights = generate_random_inputs() - print(f"Reference output saved: {len(output)} elements") - print(f"Output shape: {output.shape}") - print(f"Output dtype: {output.dtype}") - print(f"First 10 values: {output[:10]}") - print(f"Last 10 values: {output[-10:]}") + for test_idx in range(NUM_TEST_CASES): + input_data = inputs[test_idx] + w1, w2, w3 = weights[test_idx] + + # Save inputs + with open(f'input_{test_idx}.bin', 'wb') as f: + input_data.tofile(f) + + with open(f'weights_1_{test_idx}.bin', 'wb') as f: + w1.tofile(f) + + with open(f'weights_2_{test_idx}.bin', 'wb') as f: + w2.tofile(f) + + with open(f'weights_3_{test_idx}.bin', 'wb') as f: + w3.tofile(f) + + # Compute and save all reference outputs (including intermediates) + results = swiglu_reference(input_data, w1, w2, w3) + + with open(f'reference_left_{test_idx}.bin', 'wb') as f: + results['left'].tofile(f) + + with open(f'reference_right_{test_idx}.bin', 'wb') as f: + results['right'].tofile(f) + + with open(f'reference_left_swished_{test_idx}.bin', 'wb') as f: + results['left_swished'].tofile(f) + + with open(f'reference_intermediate_{test_idx}.bin', 'wb') as f: + results['intermediate'].tofile(f) + + with open(f'reference_output_{test_idx}.bin', 'wb') as f: + results['output'].tofile(f) + + print(f"\nTest case {test_idx}:") + print(f" Input shape: {input_data.shape}, dtype: {input_data.dtype}") + print(f" Weights_1 shape: {w1.shape}, dtype: {w1.dtype}") + print(f" Weights_2 shape: {w2.shape}, dtype: {w2.dtype}") + print(f" Weights_3 shape: {w3.shape}, dtype: {w3.dtype}") + print(f" Left shape: {results['left'].shape}, dtype: {results['left'].dtype}") + print(f" Right shape: {results['right'].shape}, dtype: {results['right'].dtype}") + print(f" Left_swished shape: {results['left_swished'].shape}, dtype: {results['left_swished'].dtype}") + print(f" Intermediate shape: {results['intermediate'].shape}, dtype: {results['intermediate'].dtype}") + print(f" Output shape: {results['output'].shape}, dtype: {results['output'].dtype}") + print(f" Output first 5 values: {results['output'][:5]}") + print(f" Output last 5 values: {results['output'][-5:]}") if __name__ == "__main__": save_reference() diff --git a/programming_examples/reconfiguration/swiglu/runlist/test.cpp b/programming_examples/reconfiguration/swiglu/runlist/test.cpp index 1745b8b826d..d90768354b8 100644 --- a/programming_examples/reconfiguration/swiglu/runlist/test.cpp +++ b/programming_examples/reconfiguration/swiglu/runlist/test.cpp @@ -1,4 +1,6 @@ +#include #include +#include #include #include #include @@ -6,6 +8,7 @@ #include #include #include +#include #include #include @@ -17,8 +20,9 @@ constexpr int EMBEDDING_DIM = 2048; constexpr int HIDDEN_DIM = 8192; constexpr int NUM_ITERATIONS = 1000; +constexpr int NUM_TEST_CASES = 2; -using dtype = uint16_t; +using dtype = std::bfloat16_t; struct KernelInfo { std::string name; @@ -64,6 +68,67 @@ std::vector runlist_config = { {3, {"weights_3", "intermediate", "output"}}, }; +std::vector load_bfloat16(const std::string &filename) { + std::ifstream file(filename, std::ios::binary); + if (!file) { + return {}; + } + file.seekg(0, std::ios::end); + size_t size = file.tellg(); + file.seekg(0, std::ios::beg); + std::vector raw_data(size / sizeof(uint16_t)); + file.read(reinterpret_cast(raw_data.data()), size); + + std::vector data(raw_data.size()); + std::memcpy(data.data(), raw_data.data(), size); + return data; +} + +bool almost_equal(dtype a, dtype b, float rtol = 1e-2, float atol = 1e-3) { + float fa = static_cast(a); + float fb = static_cast(b); + return std::abs(fa - fb) <= (atol + rtol * std::abs(fb)); +} + +struct Mismatch { + size_t index; + dtype got; + dtype expected; + float error; +}; + +bool verify_output(const dtype *output, const std::vector &reference, + size_t size, const std::string &test_name) { + std::vector mismatches; + + for (size_t i = 0; i < size && i < reference.size(); i++) { + if (!almost_equal(output[i], reference[i])) { + float error = std::abs(static_cast(output[i]) - static_cast(reference[i])); + mismatches.push_back({i, output[i], reference[i], error}); + } + } + + if (mismatches.empty()) { + std::cerr << test_name << " PASSED: all outputs match reference" << std::endl; + return true; + } else { + std::cerr << test_name << " FAILED: " << mismatches.size() << " mismatches" << std::endl; + + // Sort by error to find top 5 diverging values + std::sort(mismatches.begin(), mismatches.end(), + [](const Mismatch &a, const Mismatch &b) { return a.error > b.error; }); + + std::cerr << "Top 5 diverging values:" << std::endl; + for (size_t i = 0; i < std::min(size_t(5), mismatches.size()); i++) { + const auto &m = mismatches[i]; + std::cerr << " [" << m.index << "] got " << static_cast(m.got) + << ", expected " << static_cast(m.expected) + << ", error " << m.error << std::endl; + } + return false; + } +} + std::vector load_reference(const std::string &filename) { std::ifstream file(filename, std::ios::binary); if (!file) { @@ -121,77 +186,166 @@ int main(int argc, const char *argv[]) { bo_instrs[i].sync(XCL_BO_SYNC_BO_TO_DEVICE); } - dtype *input_ptr = buffers["input"].map(); - for (int i = 0; i < EMBEDDING_DIM; i++) { - input_ptr[i] = 0x3F80; - } - buffers["input"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - - dtype *weights_1_ptr = buffers["weights_1"].map(); - for (int i = 0; i < EMBEDDING_DIM * HIDDEN_DIM; i++) { - weights_1_ptr[i] = 0x3F00; - } - buffers["weights_1"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - - dtype *weights_2_ptr = buffers["weights_2"].map(); - for (int i = 0; i < EMBEDDING_DIM * HIDDEN_DIM; i++) { - weights_2_ptr[i] = 0x3F00; - } - buffers["weights_2"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - - dtype *weights_3_ptr = buffers["weights_3"].map(); - for (int i = 0; i < HIDDEN_DIM * EMBEDDING_DIM; i++) { - weights_3_ptr[i] = 0x3F00; - } - buffers["weights_3"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - unsigned int opcode = 3; - std::cerr << "Running verification..." << std::endl; - xrt::runlist runlist_verify = xrt::runlist(context); - for (const auto &op : runlist_config) { - int kidx = op.kernel_idx; - if (op.buffer_names.size() == 3) { - auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), - buffers[op.buffer_names[0]], - buffers[op.buffer_names[1]], - buffers[op.buffer_names[2]]); - runlist_verify.add(run); - } else if (op.buffer_names.size() == 2) { - auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), - buffers[op.buffer_names[0]], - buffers[op.buffer_names[1]]); - runlist_verify.add(run); + // Run verification on multiple test cases + bool all_tests_passed = true; + + for (int test_case = 0; test_case < NUM_TEST_CASES; test_case++) { + std::cerr << "\n=== Test Case " << test_case << " ===" << std::endl; + + // Load inputs for this test case + auto input_data = load_bfloat16("../../input_" + std::to_string(test_case) + ".bin"); + auto weights_1_data = load_bfloat16("../../weights_1_" + std::to_string(test_case) + ".bin"); + auto weights_2_data = load_bfloat16("../../weights_2_" + std::to_string(test_case) + ".bin"); + auto weights_3_data = load_bfloat16("../../weights_3_" + std::to_string(test_case) + ".bin"); + auto reference = load_bfloat16("../../reference_output_" + std::to_string(test_case) + ".bin"); + + if (input_data.empty() || weights_1_data.empty() || weights_2_data.empty() || + weights_3_data.empty() || reference.empty()) { + std::cerr << "Warning: test case " << test_case << " data not found, skipping" << std::endl; + continue; } - } - runlist_verify.execute(); - runlist_verify.wait(); - - buffers["output"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); - dtype *output_verify = buffers["output"].map(); - - auto reference = load_reference("../../reference_output.bin"); - if (!reference.empty()) { - int mismatches = 0; - for (size_t i = 0; i < EMBEDDING_DIM && i < reference.size(); i++) { - if (output_verify[i] != reference[i]) { - mismatches++; - if (mismatches <= 10) { - std::cerr << "Mismatch at " << i << ": got 0x" << std::hex - << output_verify[i] << ", expected 0x" << reference[i] - << std::dec << std::endl; - } + + // Copy input data to buffers + dtype *input_ptr = buffers["input"].map(); + dtype *weights_1_ptr = buffers["weights_1"].map(); + dtype *weights_2_ptr = buffers["weights_2"].map(); + dtype *weights_3_ptr = buffers["weights_3"].map(); + + std::memcpy(input_ptr, input_data.data(), + std::min(input_data.size(), size_t(EMBEDDING_DIM)) * sizeof(dtype)); + std::memcpy(weights_1_ptr, weights_1_data.data(), + std::min(weights_1_data.size(), size_t(EMBEDDING_DIM * HIDDEN_DIM)) * sizeof(dtype)); + std::memcpy(weights_2_ptr, weights_2_data.data(), + std::min(weights_2_data.size(), size_t(EMBEDDING_DIM * HIDDEN_DIM)) * sizeof(dtype)); + std::memcpy(weights_3_ptr, weights_3_data.data(), + std::min(weights_3_data.size(), size_t(HIDDEN_DIM * EMBEDDING_DIM)) * sizeof(dtype)); + + // Zero-initialize output buffer + dtype *output_ptr = buffers["output"].map(); + std::memset(output_ptr, 0, EMBEDDING_DIM * sizeof(dtype)); + + buffers["input"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["weights_1"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["weights_2"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["weights_3"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["left"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["left_swished"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["right"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["intermediate"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["output"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + + // Run kernel + xrt::runlist runlist_verify = xrt::runlist(context); + for (const auto &op : runlist_config) { + int kidx = op.kernel_idx; + if (op.buffer_names.size() == 3) { + auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), + buffers[op.buffer_names[0]], + buffers[op.buffer_names[1]], + buffers[op.buffer_names[2]]); + runlist_verify.add(run); + } else if (op.buffer_names.size() == 2) { + auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), + buffers[op.buffer_names[0]], + buffers[op.buffer_names[1]]); + runlist_verify.add(run); } } - if (mismatches == 0) { - std::cerr << "Verification PASSED: all outputs match reference" << std::endl; - } else { - std::cerr << "Verification FAILED: " << mismatches << " mismatches" - << std::endl; + runlist_verify.execute(); + runlist_verify.wait(); + + // Sync all buffers from device to verify intermediates + buffers["left"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); + buffers["right"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); + buffers["left_swished"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); + buffers["intermediate"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); + buffers["output"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); + + // Load reference data for intermediates + auto reference_left = load_bfloat16("../../reference_left_" + std::to_string(test_case) + ".bin"); + auto reference_right = load_bfloat16("../../reference_right_" + std::to_string(test_case) + ".bin"); + auto reference_left_swished = load_bfloat16("../../reference_left_swished_" + std::to_string(test_case) + ".bin"); + auto reference_intermediate = load_bfloat16("../../reference_intermediate_" + std::to_string(test_case) + ".bin"); + + // Verify all intermediate buffers + bool passed = true; + + if (!reference_left.empty()) { + dtype *left_ptr = buffers["left"].map(); + passed = verify_output(left_ptr, reference_left, HIDDEN_DIM, + "Test case " + std::to_string(test_case) + " - left") && passed; + } + + if (!reference_right.empty()) { + dtype *right_ptr = buffers["right"].map(); + passed = verify_output(right_ptr, reference_right, HIDDEN_DIM, + "Test case " + std::to_string(test_case) + " - right") && passed; + } + + if (!reference_left_swished.empty()) { + dtype *left_swished_ptr = buffers["left_swished"].map(); + passed = verify_output(left_swished_ptr, reference_left_swished, HIDDEN_DIM, + "Test case " + std::to_string(test_case) + " - left_swished") && passed; } + + if (!reference_intermediate.empty()) { + dtype *intermediate_ptr = buffers["intermediate"].map(); + passed = verify_output(intermediate_ptr, reference_intermediate, HIDDEN_DIM, + "Test case " + std::to_string(test_case) + " - intermediate") && passed; + } + + if (!reference.empty()) { + dtype *output_verify = buffers["output"].map(); + passed = verify_output(output_verify, reference, EMBEDDING_DIM, + "Test case " + std::to_string(test_case) + " - output") && passed; + } + + all_tests_passed = all_tests_passed && passed; + } + + if (!all_tests_passed) { + std::cerr << "\nSome verification tests failed!" << std::endl; } else { - std::cerr << "Warning: reference output not found, skipping validation" - << std::endl; + std::cerr << "\nAll verification tests passed!" << std::endl; + } + + // For benchmarking, use the first test case + auto input_data = load_bfloat16("../../input_0.bin"); + auto weights_1_data = load_bfloat16("../../weights_1_0.bin"); + auto weights_2_data = load_bfloat16("../../weights_2_0.bin"); + auto weights_3_data = load_bfloat16("../../weights_3_0.bin"); + + if (!input_data.empty() && !weights_1_data.empty() && + !weights_2_data.empty() && !weights_3_data.empty()) { + dtype *input_ptr = buffers["input"].map(); + dtype *weights_1_ptr = buffers["weights_1"].map(); + dtype *weights_2_ptr = buffers["weights_2"].map(); + dtype *weights_3_ptr = buffers["weights_3"].map(); + + std::memcpy(input_ptr, input_data.data(), + std::min(input_data.size(), size_t(EMBEDDING_DIM)) * sizeof(dtype)); + std::memcpy(weights_1_ptr, weights_1_data.data(), + std::min(weights_1_data.size(), size_t(EMBEDDING_DIM * HIDDEN_DIM)) * sizeof(dtype)); + std::memcpy(weights_2_ptr, weights_2_data.data(), + std::min(weights_2_data.size(), size_t(EMBEDDING_DIM * HIDDEN_DIM)) * sizeof(dtype)); + std::memcpy(weights_3_ptr, weights_3_data.data(), + std::min(weights_3_data.size(), size_t(HIDDEN_DIM * EMBEDDING_DIM)) * sizeof(dtype)); + + // Zero-initialize output buffer + dtype *output_ptr = buffers["output"].map(); + std::memset(output_ptr, 0, EMBEDDING_DIM * sizeof(dtype)); + + buffers["input"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["weights_1"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["weights_2"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["weights_3"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["left"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["left_swished"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["right"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["intermediate"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["output"].sync(XCL_BO_SYNC_BO_TO_DEVICE); } xrt::runlist runlist = xrt::runlist(context); diff --git a/programming_examples/reconfiguration/swiglu/separate_xclbins/test.cpp b/programming_examples/reconfiguration/swiglu/separate_xclbins/test.cpp index 636f8e6c7c5..50de042d607 100644 --- a/programming_examples/reconfiguration/swiglu/separate_xclbins/test.cpp +++ b/programming_examples/reconfiguration/swiglu/separate_xclbins/test.cpp @@ -1,4 +1,6 @@ +#include #include +#include #include #include #include @@ -6,6 +8,7 @@ #include #include #include +#include #include #include @@ -16,8 +19,9 @@ constexpr int EMBEDDING_DIM = 2048; constexpr int HIDDEN_DIM = 8192; constexpr int NUM_ITERATIONS = 1000; +constexpr int NUM_TEST_CASES = 2; -using dtype = uint16_t; +using dtype = std::bfloat16_t; struct KernelInfo { std::string name; @@ -63,7 +67,7 @@ std::vector runlist_config = { {3, {"weights_3", "intermediate", "output"}}, }; -std::vector load_reference(const std::string &filename) { +std::vector load_bfloat16(const std::string &filename) { std::ifstream file(filename, std::ios::binary); if (!file) { return {}; @@ -71,11 +75,59 @@ std::vector load_reference(const std::string &filename) { file.seekg(0, std::ios::end); size_t size = file.tellg(); file.seekg(0, std::ios::beg); - std::vector data(size / sizeof(uint16_t)); - file.read(reinterpret_cast(data.data()), size); + std::vector raw_data(size / sizeof(uint16_t)); + file.read(reinterpret_cast(raw_data.data()), size); + + std::vector data(raw_data.size()); + std::memcpy(data.data(), raw_data.data(), size); return data; } +bool almost_equal(dtype a, dtype b, float rtol = 1e-1, float atol = 1e-2) { + float fa = static_cast(a); + float fb = static_cast(b); + return std::abs(fa - fb) <= (atol + rtol * std::abs(fb)); +} + +struct Mismatch { + size_t index; + dtype got; + dtype expected; + float error; +}; + +bool verify_output(const dtype *output, const std::vector &reference, + size_t size, const std::string &test_name) { + std::vector mismatches; + + for (size_t i = 0; i < size && i < reference.size(); i++) { + if (!almost_equal(output[i], reference[i])) { + float error = std::abs(static_cast(output[i]) - static_cast(reference[i])); + mismatches.push_back({i, output[i], reference[i], error}); + } + } + + if (mismatches.empty()) { + std::cerr << test_name << " PASSED: all outputs match reference" << std::endl; + return true; + } else { + std::cerr << test_name << " FAILED: " << mismatches.size() << " mismatches" << std::endl; + + // Sort by error to find top 5 diverging values + std::sort(mismatches.begin(), mismatches.end(), + [](const Mismatch &a, const Mismatch &b) { return a.error > b.error; }); + + std::cerr << "Top 5 diverging values:" << std::endl; + for (size_t i = 0; i < std::min(size_t(5), mismatches.size()); i++) { + const auto &m = mismatches[i]; + std::cerr << " [" << m.index << "] got " << static_cast(m.got) + << ", expected " << static_cast(m.expected) + << ", error " << m.error << std::endl; + } + return false; + } +} + std::vector load_instr_binary(const std::string &filename) { std::ifstream file(filename, std::ios::binary); file.seekg(0, std::ios::end); @@ -131,73 +183,167 @@ int main(int argc, const char *argv[]) { bo_instrs[i].sync(XCL_BO_SYNC_BO_TO_DEVICE); } - dtype *input_ptr = buffers["input"].map(); - dtype *weights_1_ptr = buffers["weights_1"].map(); - dtype *weights_2_ptr = buffers["weights_2"].map(); - dtype *weights_3_ptr = buffers["weights_3"].map(); + unsigned int opcode = 3; - for (int i = 0; i < EMBEDDING_DIM; i++) { - input_ptr[i] = 0x3F80; - } - for (int i = 0; i < EMBEDDING_DIM * HIDDEN_DIM; i++) { - weights_1_ptr[i] = 0x3F00; - weights_2_ptr[i] = 0x3F00; - } - for (int i = 0; i < HIDDEN_DIM * EMBEDDING_DIM; i++) { - weights_3_ptr[i] = 0x3F00; - } + // Run verification on multiple test cases + bool all_tests_passed = true; + + for (int test_case = 0; test_case < NUM_TEST_CASES; test_case++) { + std::cerr << "\n=== Test Case " << test_case << " ===" << std::endl; + + // Load inputs for this test case + auto input_data = load_bfloat16("../../input_" + std::to_string(test_case) + ".bin"); + auto weights_1_data = load_bfloat16("../../weights_1_" + std::to_string(test_case) + ".bin"); + auto weights_2_data = load_bfloat16("../../weights_2_" + std::to_string(test_case) + ".bin"); + auto weights_3_data = load_bfloat16("../../weights_3_" + std::to_string(test_case) + ".bin"); + auto reference = load_bfloat16("../../reference_output_" + std::to_string(test_case) + ".bin"); + + if (input_data.empty() || weights_1_data.empty() || weights_2_data.empty() || + weights_3_data.empty() || reference.empty()) { + std::cerr << "Warning: test case " << test_case << " data not found, skipping" << std::endl; + continue; + } + + // Copy input data to buffers + dtype *input_ptr = buffers["input"].map(); + dtype *weights_1_ptr = buffers["weights_1"].map(); + dtype *weights_2_ptr = buffers["weights_2"].map(); + dtype *weights_3_ptr = buffers["weights_3"].map(); + + std::memcpy(input_ptr, input_data.data(), + std::min(input_data.size(), size_t(EMBEDDING_DIM)) * sizeof(dtype)); + std::memcpy(weights_1_ptr, weights_1_data.data(), + std::min(weights_1_data.size(), size_t(EMBEDDING_DIM * HIDDEN_DIM)) * sizeof(dtype)); + std::memcpy(weights_2_ptr, weights_2_data.data(), + std::min(weights_2_data.size(), size_t(EMBEDDING_DIM * HIDDEN_DIM)) * sizeof(dtype)); + std::memcpy(weights_3_ptr, weights_3_data.data(), + std::min(weights_3_data.size(), size_t(HIDDEN_DIM * EMBEDDING_DIM)) * sizeof(dtype)); + + // Zero-initialize output buffer + dtype *output_ptr = buffers["output"].map(); + std::memset(output_ptr, 0, EMBEDDING_DIM * sizeof(dtype)); - buffers["input"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["weights_1"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["weights_2"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["weights_3"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + // Initialize left_swished with indices and right with alternating pattern + buffers["input"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["weights_1"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["weights_2"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["weights_3"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["left"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["left_swished"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["right"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["intermediate"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["output"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - unsigned int opcode = 3; - std::cerr << "Running verification..." << std::endl; - for (const auto &op : runlist_config) { - int kidx = op.kernel_idx; - std::vector op_buffers; - for (const auto &bname : op.buffer_names) { - op_buffers.push_back(&buffers[bname]); + // Run kernel + for (const auto &op : runlist_config) { + int kidx = op.kernel_idx; + std::vector op_buffers; + for (const auto &bname : op.buffer_names) { + op_buffers.push_back(&buffers[bname]); + } + + if (op_buffers.size() == 3) { + auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), + *op_buffers[0], *op_buffers[1], *op_buffers[2]); + run.wait2(); + } else if (op_buffers.size() == 2) { + auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), + *op_buffers[0], *op_buffers[1]); + run.wait2(); + } } - if (op_buffers.size() == 3) { - auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), - *op_buffers[0], *op_buffers[1], *op_buffers[2]); - run.wait2(); - } else if (op_buffers.size() == 2) { - auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), - *op_buffers[0], *op_buffers[1]); - run.wait2(); + // Sync all buffers from device to verify intermediates + buffers["left"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); + buffers["right"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); + buffers["left_swished"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); + buffers["intermediate"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); + buffers["output"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); + + // Load reference data for intermediates + auto reference_left = load_bfloat16("../../reference_left_" + std::to_string(test_case) + ".bin"); + auto reference_right = load_bfloat16("../../reference_right_" + std::to_string(test_case) + ".bin"); + auto reference_left_swished = load_bfloat16("../../reference_left_swished_" + std::to_string(test_case) + ".bin"); + auto reference_intermediate = load_bfloat16("../../reference_intermediate_" + std::to_string(test_case) + ".bin"); + + // Verify all intermediate buffers + bool passed = true; + + if (!reference_left.empty()) { + dtype *left_ptr = buffers["left"].map(); + passed = verify_output(left_ptr, reference_left, HIDDEN_DIM, + "Test case " + std::to_string(test_case) + " - left") && passed; } - } - - buffers["output"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); - dtype *output_verify = buffers["output"].map(); - - auto reference = load_reference("../../reference_output.bin"); - if (!reference.empty()) { - int mismatches = 0; - for (int i = 0; i < EMBEDDING_DIM && i < reference.size(); i++) { - if (output_verify[i] != reference[i]) { - mismatches++; - if (mismatches <= 10) { - std::cerr << "Mismatch at " << i << ": got 0x" << std::hex - << output_verify[i] << ", expected 0x" << reference[i] - << std::dec << std::endl; - } - } + + if (!reference_right.empty()) { + dtype *right_ptr = buffers["right"].map(); + passed = verify_output(right_ptr, reference_right, HIDDEN_DIM, + "Test case " + std::to_string(test_case) + " - right") && passed; + } + + if (!reference_left_swished.empty()) { + dtype *left_swished_ptr = buffers["left_swished"].map(); + passed = verify_output(left_swished_ptr, reference_left_swished, HIDDEN_DIM, + "Test case " + std::to_string(test_case) + " - left_swished") && passed; + } + + if (!reference_intermediate.empty()) { + dtype *intermediate_ptr = buffers["intermediate"].map(); + passed = verify_output(intermediate_ptr, reference_intermediate, HIDDEN_DIM, + "Test case " + std::to_string(test_case) + " - intermediate") && passed; } - if (mismatches == 0) { - std::cerr << "Verification PASSED: all outputs match reference" << std::endl; - } else { - std::cerr << "Verification FAILED: " << mismatches << " mismatches" - << std::endl; + + if (!reference.empty()) { + dtype *output_verify = buffers["output"].map(); + passed = verify_output(output_verify, reference, EMBEDDING_DIM, + "Test case " + std::to_string(test_case) + " - output") && passed; } + + all_tests_passed = all_tests_passed && passed; + } + + if (!all_tests_passed) { + std::cerr << "\nSome verification tests failed!" << std::endl; } else { - std::cerr << "Warning: reference output not found, skipping validation" - << std::endl; + std::cerr << "\nAll verification tests passed!" << std::endl; + } + + // For benchmarking, use the first test case + auto input_data = load_bfloat16("../../input_0.bin"); + auto weights_1_data = load_bfloat16("../../weights_1_0.bin"); + auto weights_2_data = load_bfloat16("../../weights_2_0.bin"); + auto weights_3_data = load_bfloat16("../../weights_3_0.bin"); + + if (!input_data.empty() && !weights_1_data.empty() && + !weights_2_data.empty() && !weights_3_data.empty()) { + dtype *input_ptr = buffers["input"].map(); + dtype *weights_1_ptr = buffers["weights_1"].map(); + dtype *weights_2_ptr = buffers["weights_2"].map(); + dtype *weights_3_ptr = buffers["weights_3"].map(); + + std::memcpy(input_ptr, input_data.data(), + std::min(input_data.size(), size_t(EMBEDDING_DIM)) * sizeof(dtype)); + std::memcpy(weights_1_ptr, weights_1_data.data(), + std::min(weights_1_data.size(), size_t(EMBEDDING_DIM * HIDDEN_DIM)) * sizeof(dtype)); + std::memcpy(weights_2_ptr, weights_2_data.data(), + std::min(weights_2_data.size(), size_t(EMBEDDING_DIM * HIDDEN_DIM)) * sizeof(dtype)); + std::memcpy(weights_3_ptr, weights_3_data.data(), + std::min(weights_3_data.size(), size_t(HIDDEN_DIM * EMBEDDING_DIM)) * sizeof(dtype)); + + // Zero-initialize output buffer + dtype *output_ptr = buffers["output"].map(); + std::memset(output_ptr, 0, EMBEDDING_DIM * sizeof(dtype)); + + buffers["input"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["weights_1"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["weights_2"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["weights_3"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["left"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["left_swished"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["right"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["intermediate"].sync(XCL_BO_SYNC_BO_TO_DEVICE); + buffers["output"].sync(XCL_BO_SYNC_BO_TO_DEVICE); } std::cerr << "Running timed iterations..." << std::endl; From 52ac16492306973bc03bb447db9052b86eb0ef85 Mon Sep 17 00:00:00 2001 From: andrej Date: Sun, 23 Nov 2025 15:02:38 -0700 Subject: [PATCH 15/40] add fine grained reset generation --- .../AIEToConfiguration/AIEToConfiguration.h | 14 +- .../aie/Dialect/AIEX/Transforms/AIEXPasses.td | 8 +- include/aie/Targets/AIERT.h | 4 + .../AIEToConfiguration/AIEToConfiguration.cpp | 240 ++++++++++++++++-- .../AIEX/Transforms/AIEExpandLoadPdi.cpp | 20 +- lib/Targets/AIERT.cpp | 43 ++++ python/compiler/aiecc/cl_arguments.py | 48 +++- python/compiler/aiecc/main.py | 46 +++- 8 files changed, 381 insertions(+), 42 deletions(-) diff --git a/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h b/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h index f69192451c7..4aefd33f818 100644 --- a/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h +++ b/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h @@ -43,10 +43,12 @@ inline bool hasFlag(ResetTileType value, ResetTileType flag) { // Enum for specifying when to reset enum class ResetMode { - Never, // Never perform reset - IfUsed, // Reset only if the tile is used in the device - IfChanged, // Reset only if the tile configuration changed from previous - Always // Reset all tiles of the specified type + Never, // Never perform reset + IfUsed, // Reset only if the tile is used in the device + IfUsedFineGrained, // Reset only individual locks/connections that are used + IfChanged, // Reset only if the tile configuration changed from previous + IfChangedFineGrained, // Reset only individual locks/connections that changed + Always // Reset all tiles of the specified type }; // Configuration for different reset operations @@ -80,7 +82,8 @@ generateAndInsertResetOps(xilinx::AIE::DeviceOp device, mlir::Operation *insertionPoint, ResetConfig dmaConfig = ResetConfig(), ResetConfig switchConfig = ResetConfig(), - ResetConfig lockConfig = ResetConfig()); + ResetConfig lockConfig = ResetConfig(), + ResetConfig coreConfig = ResetConfig()); // Version with previous device for change detection mlir::LogicalResult @@ -89,6 +92,7 @@ generateAndInsertResetOps(xilinx::AIE::DeviceOp device, ResetConfig dmaConfig, ResetConfig switchConfig, ResetConfig lockConfig, + ResetConfig coreConfig, xilinx::AIE::DeviceOp previousDevice); } // namespace xilinx::AIE diff --git a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td index c35d70e554a..2975923e49c 100644 --- a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td +++ b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td @@ -300,11 +300,15 @@ def AIEExpandLoadPdi : Pass<"aie-expand-load-pdi", "mlir::ModuleOp"> { Option<"resetSwitchesTiles", "reset-switches-tiles", "std::string", "\"\"", "Comma-separated list of tile types to reset switches for (shim,mem,core)">, Option<"resetSwitchesMode", "reset-switches-mode", "std::string", "\"never\"", - "When to reset switches: never, ifused, ifchanged, always">, + "When to reset switches: never, ifused, ifusedfinegrained, ifchanged, ifchangedfinegrained, always">, Option<"resetLocksTiles", "reset-locks-tiles", "std::string", "\"\"", "Comma-separated list of tile types to reset locks for (mem,core)">, Option<"resetLocksMode", "reset-locks-mode", "std::string", "\"never\"", - "When to reset locks: never, ifused, ifchanged, always">, + "When to reset locks: never, ifused, ifusedfinegrained, ifchanged, ifchangedfinegrained, always">, + Option<"resetCoresTiles", "reset-cores-tiles", "std::string", "\"\"", + "Comma-separated list of tile types to reset cores for (core)">, + Option<"resetCoresMode", "reset-cores-mode", "std::string", "\"never\"", + "When to reset cores: never, ifused, ifchanged, always">, ]; } #endif diff --git a/include/aie/Targets/AIERT.h b/include/aie/Targets/AIERT.h index da4b480efcb..1538de0332f 100644 --- a/include/aie/Targets/AIERT.h +++ b/include/aie/Targets/AIERT.h @@ -52,6 +52,10 @@ struct AIERTControl { mlir::LogicalResult resetCoreUnreset(int col, int row); mlir::LogicalResult resetSwitch(int col, int row); mlir::LogicalResult resetLocks(int col, int row, int numLocks); + mlir::LogicalResult resetLock(int col, int row, int lockId); + mlir::LogicalResult resetSwitchConnection(int col, int row, + WireBundle sourceBundle, int sourceChannel, + WireBundle destBundle, int destChannel); mlir::LogicalResult resetPerfCounters(int col, int row); private: diff --git a/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp b/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp index ad1abc62286..346b707ccac 100644 --- a/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp +++ b/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp @@ -911,16 +911,61 @@ xilinx::AIE::generateAndInsertConfigOps(xilinx::AIE::DeviceOp device, return success(); } +// Helper structures for fine-grained resets +struct ConnectionToReset { + int col, row; + WireBundle sourceBundle; + int sourceChannel; + WireBundle destBundle; + int destChannel; +}; + +struct LockToReset { + int col, row; + int lockId; +}; + +// Helper function to collect connections from a switchbox +static void collectConnections(SwitchboxOp sb, + SmallVectorImpl> &connections) { + if (!sb) return; + + for (auto connectOp : sb.getOps()) { + connections.push_back({connectOp.getSourceBundle(), + connectOp.getSourceChannel(), + connectOp.getDestBundle(), + connectOp.getDestChannel()}); + } +} + +// Helper function to collect lock IDs from a device at a specific location +static void collectLockIds(DeviceOp device, int col, int row, SmallVectorImpl &lockIds) { + if (!device) return; + + for (auto lockOp : device.getOps()) { + if (auto tileValue = lockOp.getTile()) { + if (auto tileOp = tileValue.getDefiningOp()) { + if (tileOp.getCol() == col && tileOp.getRow() == row) { + if (auto lockId = lockOp.getLockID()) { + lockIds.push_back(*lockId); + } + } + } + } + } +} + // Version without previous device (first load) mlir::LogicalResult xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, mlir::Operation *insertionPoint, ResetConfig dmaConfig, ResetConfig switchConfig, - ResetConfig lockConfig) { + ResetConfig lockConfig, + ResetConfig coreConfig) { // Call the full version with a null DeviceOp return generateAndInsertResetOps(device, insertionPoint, dmaConfig, - switchConfig, lockConfig, nullptr); + switchConfig, lockConfig, coreConfig, nullptr); } // Generate reset operations for all tiles used in the device @@ -930,6 +975,7 @@ xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, ResetConfig dmaConfig, ResetConfig switchConfig, ResetConfig lockConfig, + ResetConfig coreConfig, xilinx::AIE::DeviceOp previousDevice) { const AIETargetModel &targetModel = (const AIETargetModel &)device.getTargetModel(); @@ -1179,9 +1225,9 @@ xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, if (targetModel.isMemTile(col, row) && hasFlag(dmaConfig.tileType, ResetTileType::MemTile)) { if (dmaConfig.mode == ResetMode::Always) { shouldReset = true; - } else if (dmaConfig.mode == ResetMode::IfUsed) { + } else if (dmaConfig.mode == ResetMode::IfUsed || dmaConfig.mode == ResetMode::IfUsedFineGrained) { shouldReset = isTileUsed(col, row); - } else if (dmaConfig.mode == ResetMode::IfChanged) { + } else if (dmaConfig.mode == ResetMode::IfChanged || dmaConfig.mode == ResetMode::IfChangedFineGrained) { auto currentDMA = findCurrentDMA(col, row); auto prevDMA = findPreviousDMA(col, row); shouldReset = currentDMA && !dmasEquivalent(currentDMA, prevDMA); @@ -1189,9 +1235,9 @@ xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, } else if (targetModel.isCoreTile(col, row) && hasFlag(dmaConfig.tileType, ResetTileType::CoreTile)) { if (dmaConfig.mode == ResetMode::Always) { shouldReset = true; - } else if (dmaConfig.mode == ResetMode::IfUsed) { + } else if (dmaConfig.mode == ResetMode::IfUsed || dmaConfig.mode == ResetMode::IfUsedFineGrained) { shouldReset = isTileUsed(col, row); - } else if (dmaConfig.mode == ResetMode::IfChanged) { + } else if (dmaConfig.mode == ResetMode::IfChanged || dmaConfig.mode == ResetMode::IfChangedFineGrained) { auto currentDMA = findCurrentDMA(col, row); auto prevDMA = findPreviousDMA(col, row); shouldReset = currentDMA && !dmasEquivalent(currentDMA, prevDMA); @@ -1199,9 +1245,9 @@ xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, } else if (targetModel.isShimNOCTile(col, row) && hasFlag(dmaConfig.tileType, ResetTileType::ShimNOC)) { if (dmaConfig.mode == ResetMode::Always) { shouldReset = true; - } else if (dmaConfig.mode == ResetMode::IfUsed) { + } else if (dmaConfig.mode == ResetMode::IfUsed || dmaConfig.mode == ResetMode::IfUsedFineGrained) { shouldReset = isTileUsed(col, row); - } else if (dmaConfig.mode == ResetMode::IfChanged) { + } else if (dmaConfig.mode == ResetMode::IfChanged || dmaConfig.mode == ResetMode::IfChangedFineGrained) { auto currentDMA = findCurrentDMA(col, row); auto prevDMA = findPreviousDMA(col, row); shouldReset = currentDMA && !dmasEquivalent(currentDMA, prevDMA); @@ -1302,21 +1348,19 @@ xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, } } - // Build tile list for core resets (cores need special handling) + // Build tile list for core resets std::vector> coreTiles; - if (hasFlag(dmaConfig.tileType, ResetTileType::CoreTile) || - hasFlag(switchConfig.tileType, ResetTileType::CoreTile) || - hasFlag(lockConfig.tileType, ResetTileType::CoreTile)) { + if (coreConfig.mode != ResetMode::Never && hasFlag(coreConfig.tileType, ResetTileType::CoreTile)) { for (int col = 0; col < numCols; col++) { for (int row = 0; row < numRows; row++) { if (targetModel.isCoreTile(col, row)) { - // For cores, we check if there's a CoreOp rather than just a TileOp bool shouldReset = false; - if (dmaConfig.mode == ResetMode::Always || switchConfig.mode == ResetMode::Always || lockConfig.mode == ResetMode::Always) { + + if (coreConfig.mode == ResetMode::Always) { shouldReset = true; - } else if (dmaConfig.mode == ResetMode::IfUsed || switchConfig.mode == ResetMode::IfUsed || lockConfig.mode == ResetMode::IfUsed) { + } else if (coreConfig.mode == ResetMode::IfUsed || coreConfig.mode == ResetMode::IfUsedFineGrained) { shouldReset = hasCoreOp(col, row); - } else if (dmaConfig.mode == ResetMode::IfChanged || switchConfig.mode == ResetMode::IfChanged || lockConfig.mode == ResetMode::IfChanged) { + } else if (coreConfig.mode == ResetMode::IfChanged || coreConfig.mode == ResetMode::IfChangedFineGrained) { auto currentCore = findCurrentCore(col, row); auto prevCore = findPreviousCore(col, row); shouldReset = currentCore && !coresEquivalent(currentCore, prevCore); @@ -1330,6 +1374,156 @@ xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, } } + // Build fine-grained switch connection resets + std::vector connectionsToReset; + if (switchConfig.mode == ResetMode::IfUsedFineGrained || + switchConfig.mode == ResetMode::IfChangedFineGrained) { + for (int col = 0; col < numCols; col++) { + for (int row = 0; row < numRows; row++) { + bool shouldCheck = false; + + if (targetModel.isMemTile(col, row) && hasFlag(switchConfig.tileType, ResetTileType::MemTile)) { + shouldCheck = true; + } else if (targetModel.isCoreTile(col, row) && hasFlag(switchConfig.tileType, ResetTileType::CoreTile)) { + shouldCheck = true; + } else if (targetModel.isShimNOCTile(col, row) && hasFlag(switchConfig.tileType, ResetTileType::ShimNOC)) { + shouldCheck = true; + } + + if (!shouldCheck) continue; + + auto currentSB = findCurrentSwitchbox(col, row); + if (!currentSB) continue; + + // Collect current connections + SmallVector> currentConns; + collectConnections(currentSB, currentConns); + + if (switchConfig.mode == ResetMode::IfUsedFineGrained) { + // For each source port used in current design, disable all possible + // destination connections that are NOT used in the current design. + // This prevents backpressure from stale destinations. + + // Collect all unique source ports used in current design + llvm::DenseSet> usedSources; + for (auto [srcBundle, srcChan, dstBundle, dstChan] : currentConns) { + usedSources.insert({srcBundle, srcChan}); + } + + // For each used source, check all possible destinations + for (auto [srcBundle, srcChan] : usedSources) { + // Get all possible destination bundles for this tile type + llvm::SmallVector possibleDests; + if (targetModel.isMemTile(col, row)) { + possibleDests = {WireBundle::DMA, WireBundle::North, WireBundle::South}; + } else if (targetModel.isCoreTile(col, row)) { + possibleDests = {WireBundle::Core, WireBundle::DMA, WireBundle::North, + WireBundle::South, WireBundle::West, WireBundle::East}; + } else if (targetModel.isShimNOCTile(col, row)) { + possibleDests = {WireBundle::DMA, WireBundle::North, WireBundle::South}; + } + + // For each possible destination, check all channels (0-7 is typical) + for (auto dstBundle : possibleDests) { + for (int dstChan = 0; dstChan < 8; dstChan++) { + // Check if this specific connection exists in current design + bool isUsed = false; + for (auto [cSrcBundle, cSrcChan, cDstBundle, cDstChan] : currentConns) { + if (srcBundle == cSrcBundle && srcChan == cSrcChan && + dstBundle == cDstBundle && dstChan == cDstChan) { + isUsed = true; + break; + } + } + + // If this destination is NOT used, disable it to prevent backpressure + if (!isUsed) { + connectionsToReset.push_back({col, row, srcBundle, srcChan, dstBundle, dstChan}); + } + } + } + } + } else if (switchConfig.mode == ResetMode::IfChangedFineGrained) { + // Disable connections that existed in previous design but are NOT in current design. + // This prevents backpressure from stale destinations while preserving active ones. + auto prevSB = findPreviousSwitchbox(col, row); + SmallVector> prevConns; + collectConnections(prevSB, prevConns); + + // Find connections that were in previous but are NOT in current + for (auto [pSrcBundle, pSrcChan, pDstBundle, pDstChan] : prevConns) { + bool stillUsed = false; + for (auto [cSrcBundle, cSrcChan, cDstBundle, cDstChan] : currentConns) { + if (pSrcBundle == cSrcBundle && pSrcChan == cSrcChan && + pDstBundle == cDstBundle && pDstChan == cDstChan) { + stillUsed = true; + break; + } + } + + // If this connection was in previous but NOT in current, disable it + if (!stillUsed) { + connectionsToReset.push_back({col, row, pSrcBundle, pSrcChan, pDstBundle, pDstChan}); + } + } + } + } + } + } + + // Build fine-grained lock resets + std::vector locksToReset; + if (lockConfig.mode == ResetMode::IfUsedFineGrained || + lockConfig.mode == ResetMode::IfChangedFineGrained) { + for (int col = 0; col < numCols; col++) { + for (int row = 0; row < numRows; row++) { + bool shouldCheck = false; + + if (targetModel.isMemTile(col, row) && hasFlag(lockConfig.tileType, ResetTileType::MemTile)) { + shouldCheck = true; + } else if (targetModel.isCoreTile(col, row) && hasFlag(lockConfig.tileType, ResetTileType::CoreTile)) { + shouldCheck = true; + } + + if (!shouldCheck) continue; + + // Collect current lock IDs + SmallVector currentLockIds; + collectLockIds(device, col, row, currentLockIds); + + if (currentLockIds.empty()) continue; + + if (lockConfig.mode == ResetMode::IfUsedFineGrained) { + // Reset all used locks + for (int lockId : currentLockIds) { + locksToReset.push_back({col, row, lockId}); + } + } else if (lockConfig.mode == ResetMode::IfChangedFineGrained) { + // Reset only changed locks + SmallVector prevLockIds; + if (previousDevice) { + collectLockIds(previousDevice, col, row, prevLockIds); + } + + // Reset locks that are in current but not in previous + for (int lockId : currentLockIds) { + bool foundInPrev = false; + for (int pLockId : prevLockIds) { + if (lockId == pLockId) { + foundInPrev = true; + break; + } + } + // Only reset if new or changed (conservatively reset if changed) + if (!foundInPrev) { + locksToReset.push_back({col, row, lockId}); + } + } + } + } + } + } + // Perform core resets for (auto [col, row] : coreTiles) { if (failed(ctl.resetCore(col, row))) @@ -1348,12 +1542,26 @@ xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, return failure(); } + // Perform fine-grained switch connection resets + for (auto &conn : connectionsToReset) { + if (failed(ctl.resetSwitchConnection(conn.col, conn.row, + conn.sourceBundle, conn.sourceChannel, + conn.destBundle, conn.destChannel))) + return failure(); + } + // Perform lock resets for (auto [col, row, numLocks] : lockTiles) { if (failed(ctl.resetLocks(col, row, numLocks))) return failure(); } + // Perform fine-grained lock resets + for (auto &lock : locksToReset) { + if (failed(ctl.resetLock(lock.col, lock.row, lock.lockId))) + return failure(); + } + // Export the reset transactions std::vector txn_data = ctl.exportSerializedTransaction(); diff --git a/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp b/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp index fbc56ca17e3..1436adb8499 100644 --- a/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp @@ -77,8 +77,12 @@ static ResetMode parseResetMode(llvm::StringRef str) { return ResetMode::Never; else if (trimmed == "ifused" || trimmed == "if-used") return ResetMode::IfUsed; + else if (trimmed == "ifusedfinegrained" || trimmed == "if-used-fine-grained") + return ResetMode::IfUsedFineGrained; else if (trimmed == "ifchanged" || trimmed == "if-changed") return ResetMode::IfChanged; + else if (trimmed == "ifchangedfinegrained" || trimmed == "if-changed-fine-grained") + return ResetMode::IfChangedFineGrained; else if (trimmed == "always" || trimmed == "all") return ResetMode::Always; else @@ -89,11 +93,12 @@ struct ExpandLoadPdiPattern : public OpRewritePattern { const ResetConfig dmaConfig; const ResetConfig switchConfig; const ResetConfig lockConfig; + const ResetConfig coreConfig; mutable AIE::DeviceOp previousDevice; - ExpandLoadPdiPattern(MLIRContext *context, ResetConfig dma, ResetConfig sw, ResetConfig lock) + ExpandLoadPdiPattern(MLIRContext *context, ResetConfig dma, ResetConfig sw, ResetConfig lock, ResetConfig core) : OpRewritePattern(context), - dmaConfig(dma), switchConfig(sw), lockConfig(lock), previousDevice(nullptr) {} + dmaConfig(dma), switchConfig(sw), lockConfig(lock), coreConfig(core), previousDevice(nullptr) {} LogicalResult matchAndRewrite(NpuLoadPdiOp loadPdiOp, PatternRewriter &rewriter) const override { @@ -171,10 +176,11 @@ struct ExpandLoadPdiPattern : public OpRewritePattern { if (!isFirstLoadPdi && (dmaConfig.mode != ResetMode::Never || switchConfig.mode != ResetMode::Never || - lockConfig.mode != ResetMode::Never)) { + lockConfig.mode != ResetMode::Never || + coreConfig.mode != ResetMode::Never)) { if (failed(xilinx::AIE::generateAndInsertResetOps( referencedDevice, newLoadPdi.getOperation(), - dmaConfig, switchConfig, lockConfig, previousDevice))) { + dmaConfig, switchConfig, lockConfig, coreConfig, previousDevice))) { loadPdiOp.emitError("Failed to generate reset operations"); return failure(); } @@ -226,9 +232,13 @@ struct AIEExpandLoadPdiPass ResetTileType lockTiles = parseTileTypes(resetLocksTiles); ResetMode lockMode = parseResetMode(resetLocksMode); ResetConfig lockConfig(lockTiles, lockMode); + + ResetTileType coreTiles = parseTileTypes(resetCoresTiles); + ResetMode coreMode = parseResetMode(resetCoresMode); + ResetConfig coreConfig(coreTiles, coreMode); RewritePatternSet patterns(&getContext()); - patterns.add(&getContext(), dmaConfig, switchConfig, lockConfig); + patterns.add(&getContext(), dmaConfig, switchConfig, lockConfig, coreConfig); if (failed(applyPatternsGreedily(module, std::move(patterns)))) { signalPassFailure(); diff --git a/lib/Targets/AIERT.cpp b/lib/Targets/AIERT.cpp index 58cfc2ffb0d..8e6203ccb95 100644 --- a/lib/Targets/AIERT.cpp +++ b/lib/Targets/AIERT.cpp @@ -905,6 +905,49 @@ LogicalResult xilinx::AIE::AIERTControl::resetLocks(int col, int row, int numLoc return success(); } +LogicalResult xilinx::AIE::AIERTControl::resetLock(int col, int row, int lockId) { + auto tileLoc = XAie_TileLoc(col, row); + // Reset a single lock to value 0 + XAie_Lock lock; + lock.LockId = lockId; + lock.LockVal = 0; + TRY_XAIE_API_LOGICAL_RESULT(XAie_LockSetValue, &aiert->devInst, tileLoc, lock); + return success(); +} + +LogicalResult xilinx::AIE::AIERTControl::resetSwitchConnection(int col, int row, + WireBundle sourceBundle, + int sourceChannel, + WireBundle destBundle, + int destChannel) { + auto tileLoc = XAie_TileLoc(col, row); + + // Helper lambda to map WireBundle to StrmSwPortType + auto mapBundle = [](WireBundle bundle) -> StrmSwPortType { + switch (bundle) { + case WireBundle::Core: return CORE; + case WireBundle::DMA: return DMA; + case WireBundle::FIFO: return FIFO; + case WireBundle::South: return SOUTH; + case WireBundle::West: return WEST; + case WireBundle::North: return NORTH; + case WireBundle::East: return EAST; + case WireBundle::Trace: return TRACE; + default: return SOUTH; + } + }; + + StrmSwPortType sourcePortType = mapBundle(sourceBundle); + StrmSwPortType destPortType = mapBundle(destBundle); + + // Disconnect the specific connection from source to destination + TRY_XAIE_API_LOGICAL_RESULT(XAie_StrmConnCctDisable, &aiert->devInst, tileLoc, + sourcePortType, sourceChannel, + destPortType, destChannel); + + return success(); +} + LogicalResult xilinx::AIE::AIERTControl::resetPerfCounters(int col, int row) { auto tileLoc = XAie_TileLoc(col, row); // Reset performance counters in all modules diff --git a/python/compiler/aiecc/cl_arguments.py b/python/compiler/aiecc/cl_arguments.py index c3b277208e2..0caafbc55cf 100644 --- a/python/compiler/aiecc/cl_arguments.py +++ b/python/compiler/aiecc/cl_arguments.py @@ -170,41 +170,65 @@ def parse_args(args=None): action="store_true", help="Use packet switched flows when lowering object fifos", ) + parser.add_argument( + "--reset-tiles", + dest="reset_tiles", + default="shim,mem,core", + help="Default comma-separated list of tile types to reset (shim,mem,core). Overridden by specific --reset-*-tiles options.", + ) + parser.add_argument( + "--reset-mode", + dest="reset_mode", + default="ifchangedfinegrained", + help="Default reset mode: never, ifused, ifusedfinegrained, ifchanged, ifchangedfinegrained, always. Overridden by specific --reset-*-mode options.", + ) parser.add_argument( "--reset-dmas-tiles", dest="reset_dmas_tiles", - default="", - help="Comma-separated list of tile types to reset DMAs for (shim,mem,core)", + default=None, + help="Comma-separated list of tile types to reset DMAs for (shim,mem,core). Defaults to --reset-tiles if not specified.", ) parser.add_argument( "--reset-dmas-mode", dest="reset_dmas_mode", - default="never", - help="When to reset DMAs: never, ifused, ifchanged, always", + default=None, + help="When to reset DMAs: never, ifused, ifchanged, always. Defaults to --reset-mode if not specified.", ) parser.add_argument( "--reset-switches-tiles", dest="reset_switches_tiles", - default="", - help="Comma-separated list of tile types to reset switches for (shim,mem,core)", + default=None, + help="Comma-separated list of tile types to reset switches for (shim,mem,core). Defaults to --reset-tiles if not specified.", ) parser.add_argument( "--reset-switches-mode", dest="reset_switches_mode", - default="never", - help="When to reset switches: never, ifused, ifchanged, always", + default=None, + help="When to reset switches: never, ifused, ifusedfinegrained, ifchanged, ifchangedfinegrained, always. Defaults to --reset-mode if not specified.", ) parser.add_argument( "--reset-locks-tiles", dest="reset_locks_tiles", - default="", - help="Comma-separated list of tile types to reset locks for (mem,core)", + default=None, + help="Comma-separated list of tile types to reset locks for (mem,core). Defaults to --reset-tiles if not specified.", ) parser.add_argument( "--reset-locks-mode", dest="reset_locks_mode", - default="never", - help="When to reset locks: never, ifused, ifchanged, always", + default=None, + help="When to reset locks: never, ifused, ifusedfinegrained, ifchanged, ifchangedfinegrained, always. Defaults to --reset-mode if not specified.", + ) + parser.add_argument( + "--reset-cores-tiles", + dest="reset_cores_tiles", + default=None, + help="Comma-separated list of tile types to reset cores for (core). Defaults to --reset-tiles if not specified.", + ) + parser.add_argument( + "--reset-cores-mode", + dest="reset_cores_mode", + default=None, + help="When to reset cores: never, ifused, ifchanged, always. Defaults to --reset-mode if not specified.", ) parser.add_argument( "host_args", diff --git a/python/compiler/aiecc/main.py b/python/compiler/aiecc/main.py index 68a6572561f..2e3e5677094 100644 --- a/python/compiler/aiecc/main.py +++ b/python/compiler/aiecc/main.py @@ -156,7 +156,11 @@ def _create_npu_lowering_pipeline( reset_switches_mode="never", reset_locks_tiles="", reset_locks_mode="never", + reset_cores_tiles="", + reset_cores_mode="never" ): + device_pipeline_1 = ( + ) pipeline = ( Pipeline() .add_pass("aie-materialize-runtime-sequences") @@ -180,11 +184,11 @@ def _create_npu_lowering_pipeline( reset_switches_mode=reset_switches_mode, reset_locks_tiles=reset_locks_tiles, reset_locks_mode=reset_locks_mode, + reset_cores_tiles=reset_cores_tiles, + reset_cores_mode=reset_cores_mode, ) return pipeline -NPU_LOWERING_PIPELINE = _create_npu_lowering_pipeline() - async def read_file_async(file_path: str) -> str: async with aiofiles.open(file_path, mode="r") as f: @@ -1731,6 +1735,8 @@ async def run_flow(self): reset_switches_mode=opts.reset_switches_mode, reset_locks_tiles=opts.reset_locks_tiles, reset_locks_mode=opts.reset_locks_mode, + reset_cores_tiles=opts.reset_cores_tiles, + reset_cores_mode=opts.reset_cores_mode ) pass_pipeline = npu_pipeline.materialize(module=True) npu_insts_file = self.prepend_tmp(f"npu_insts.mlir") @@ -1897,6 +1903,24 @@ def run(mlir_module, args=None): if args is not None: opts = aie.compiler.aiecc.cl_arguments.parse_args(args) + # Apply default reset options if specific ones not provided + if opts.reset_dmas_tiles is None: + opts.reset_dmas_tiles = opts.reset_tiles + if opts.reset_dmas_mode is None: + opts.reset_dmas_mode = opts.reset_mode + if opts.reset_switches_tiles is None: + opts.reset_switches_tiles = opts.reset_tiles + if opts.reset_switches_mode is None: + opts.reset_switches_mode = opts.reset_mode + if opts.reset_locks_tiles is None: + opts.reset_locks_tiles = opts.reset_tiles + if opts.reset_locks_mode is None: + opts.reset_locks_mode = opts.reset_mode + if opts.reset_cores_tiles is None: + opts.reset_cores_tiles = opts.reset_tiles + if opts.reset_cores_mode is None: + opts.reset_cores_mode = opts.reset_mode + opts.aietools_path = None # If Ryzen AI Software is installed then use it for aietools @@ -1978,6 +2002,24 @@ def main(): global opts opts = aie.compiler.aiecc.cl_arguments.parse_args() + # Apply default reset options if specific ones not provided + if opts.reset_dmas_tiles is None: + opts.reset_dmas_tiles = opts.reset_tiles + if opts.reset_dmas_mode is None: + opts.reset_dmas_mode = opts.reset_mode + if opts.reset_switches_tiles is None: + opts.reset_switches_tiles = opts.reset_tiles + if opts.reset_switches_mode is None: + opts.reset_switches_mode = opts.reset_mode + if opts.reset_locks_tiles is None: + opts.reset_locks_tiles = opts.reset_tiles + if opts.reset_locks_mode is None: + opts.reset_locks_mode = opts.reset_mode + if opts.reset_cores_tiles is None: + opts.reset_cores_tiles = opts.reset_tiles + if opts.reset_cores_mode is None: + opts.reset_cores_mode = opts.reset_mode + if opts.version: print(f"aiecc.py {aie.compiler.aiecc.configure.git_commit}") sys.exit(0) From 2b11e1ab493ae4787b89683e5ba52e9113dea3ab Mon Sep 17 00:00:00 2001 From: andrej Date: Sun, 23 Nov 2025 15:05:38 -0700 Subject: [PATCH 16/40] add coalesce write32s pass --- .../aie/Dialect/AIEX/Transforms/AIEXPasses.h | 2 + .../aie/Dialect/AIEX/Transforms/AIEXPasses.td | 27 ++ .../AIEX/Transforms/AIECoalesceWrite32s.cpp | 233 ++++++++++++++++++ lib/Dialect/AIEX/Transforms/CMakeLists.txt | 1 + python/compiler/aiecc/cl_arguments.py | 8 + python/compiler/aiecc/main.py | 49 +--- 6 files changed, 278 insertions(+), 42 deletions(-) create mode 100644 lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp diff --git a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h index 730123f3052..005b58d2c0d 100644 --- a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h +++ b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h @@ -54,6 +54,8 @@ std::unique_ptr> createAIELegalizeControlPacketPass(); std::unique_ptr> createAIEExpandLoadPdiPass(); +std::unique_ptr> +createAIECoalesceWrite32sPass(); /// Generate the code for registering passes. #define GEN_PASS_REGISTRATION diff --git a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td index 2975923e49c..713e2820cfe 100644 --- a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td +++ b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td @@ -311,4 +311,31 @@ def AIEExpandLoadPdi : Pass<"aie-expand-load-pdi", "mlir::ModuleOp"> { "When to reset cores: never, ifused, ifchanged, always">, ]; } + +def AIECoalesceWrite32s : Pass<"aie-coalesce-write32s", "AIE::DeviceOp"> { + let summary = "Coalesce consecutive write32 operations into blockwrite operations"; + let description = [{ + This pass optimizes sequences of consecutive npu.write32 operations by + coalescing them into npu.blockwrite operations when their addresses are + contiguous (4-byte increments). + + Since register write instructions cannot be reordered, this optimization + only applies when the write32 operations are immediately adjacent in the + instruction stream. + + For each sequence of N consecutive write32 operations at addresses + [addr, addr+4, addr+8, ...], the pass: + 1. Creates a memref.global with the values + 2. Replaces the write32 sequence with a single npu.blockwrite + + This reduces instruction count and can improve performance. + }]; + + let constructor = "xilinx::AIEX::createAIECoalesceWrite32sPass()"; + let dependentDialects = [ + "mlir::memref::MemRefDialect", + "xilinx::AIE::AIEDialect", + "xilinx::AIEX::AIEXDialect", + ]; +} #endif diff --git a/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp b/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp new file mode 100644 index 00000000000..3b0e7419b3d --- /dev/null +++ b/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp @@ -0,0 +1,233 @@ +//===- AIECoalesceWrite32s.cpp ----------------------------------*- C++ -*-===// +// +// This file is licensed under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// (c) Copyright 2025 Advanced Micro Devices Inc. +// +//===----------------------------------------------------------------------===// +// +// This pass coalesces consecutive npu.write32 operations into npu.blockwrite +// operations when their addresses are contiguous (4-byte increments). +// +// Since register writes cannot be reordered, we only coalesce operations that +// are immediately adjacent in the instruction stream with no intervening ops. +// +//===----------------------------------------------------------------------===// + +#include "aie/Dialect/AIE/IR/AIEDialect.h" +#include "aie/Dialect/AIEX/IR/AIEXDialect.h" +#include "aie/Dialect/AIEX/Transforms/AIEXPasses.h" + +#include "mlir/Dialect/MemRef/IR/MemRef.h" +#include "mlir/IR/Builders.h" +#include "mlir/IR/PatternMatch.h" +#include "mlir/Pass/Pass.h" +#include "mlir/Transforms/GreedyPatternRewriteDriver.h" + +#include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/SmallVector.h" + +#define DEBUG_TYPE "aie-coalesce-write32s" + +using namespace mlir; +using namespace xilinx; +using namespace xilinx::AIEX; +using namespace xilinx::AIE; + +namespace { + +// Represents a sequence of consecutive write32 operations +struct Write32Sequence { + SmallVector ops; + uint32_t startAddress = 0; + SmallVector values; + std::optional firstLoc; + + bool isContiguous() const { + return ops.size() >= 2; + } + + size_t size() const { + return ops.size(); + } +}; + +struct AIECoalesceWrite32sPass + : public AIECoalesceWrite32sBase { + + void runOnOperation() override { + AIE::DeviceOp deviceOp = getOperation(); + + // Collect all runtime sequences in the device + SmallVector runtimeSeqs; + deviceOp.walk([&](RuntimeSequenceOp seqOp) { + runtimeSeqs.push_back(seqOp); + }); + + // Process each runtime sequence + for (auto seqOp : runtimeSeqs) { + coalesceWrite32sInSequence(seqOp); + } + } + +private: + void coalesceWrite32sInSequence(RuntimeSequenceOp seqOp) { + OpBuilder builder(seqOp.getContext()); + + // Walk through the sequence and find consecutive write32 operations + for (Block &block : seqOp.getBody()) { + SmallVector sequences; + Write32Sequence currentSeq; + uint32_t expectedNextAddr = 0; + bool inSequence = false; + + for (Operation &op : llvm::make_early_inc_range(block)) { + if (auto write32Op = dyn_cast(&op)) { + // Check if this write32 has the required attributes + // (must have address but no buffer/column/row for coalescing) + if (write32Op.getBuffer() || write32Op.getColumn() || + write32Op.getRow()) { + // Cannot coalesce symbolic writes + if (inSequence && currentSeq.isContiguous()) { + sequences.push_back(currentSeq); + } + currentSeq = Write32Sequence(); + inSequence = false; + expectedNextAddr = 0; + continue; + } + + uint32_t addr = write32Op.getAddress(); + uint32_t value = write32Op.getValue(); + + if (!inSequence) { + // Start a new sequence + currentSeq = Write32Sequence(); + currentSeq.startAddress = addr; + currentSeq.ops.push_back(write32Op); + currentSeq.values.push_back(value); + currentSeq.firstLoc = write32Op.getLoc(); + expectedNextAddr = addr + 4; + inSequence = true; + } else if (addr == expectedNextAddr) { + // Continue the sequence + currentSeq.ops.push_back(write32Op); + currentSeq.values.push_back(value); + expectedNextAddr = addr + 4; + } else { + // Address not contiguous, save current sequence if valid + if (currentSeq.isContiguous()) { + sequences.push_back(currentSeq); + } + // Start a new sequence + currentSeq = Write32Sequence(); + currentSeq.startAddress = addr; + currentSeq.ops.push_back(write32Op); + currentSeq.values.push_back(value); + currentSeq.firstLoc = write32Op.getLoc(); + expectedNextAddr = addr + 4; + } + } else { + // Non-write32 operation interrupts the sequence + if (inSequence && currentSeq.isContiguous()) { + sequences.push_back(currentSeq); + } + currentSeq = Write32Sequence(); + inSequence = false; + expectedNextAddr = 0; + } + } + + // Don't forget the last sequence + if (inSequence && currentSeq.isContiguous()) { + sequences.push_back(currentSeq); + } + + // Now replace each sequence with a blockwrite + for (auto &seq : sequences) { + replaceSequenceWithBlockWrite(builder, seq, seqOp); + } + } + } + + void replaceSequenceWithBlockWrite(OpBuilder &builder, + const Write32Sequence &seq, + RuntimeSequenceOp seqOp) { + if (seq.ops.empty()) + return; + + MLIRContext *ctx = builder.getContext(); + Location loc = seq.firstLoc.value(); + + // Get or create the module to hold the global + auto moduleOp = seqOp->getParentOfType(); + if (!moduleOp) + return; + + // Get the device to hold the global + auto deviceOp = seqOp->getParentOfType(); + if (!deviceOp) + return; + + // Generate a unique name for the global memref + static unsigned globalCounter = 0; + std::string globalName = "coalesced_write32_" + + std::to_string(seq.startAddress) + "_" + + std::to_string(globalCounter++); + + // Create memref type: memref + auto i32Type = IntegerType::get(ctx, 32); + auto memrefType = MemRefType::get({static_cast(seq.values.size())}, + i32Type); + + // Create DenseIntElementsAttr for initial values + SmallVector signedValues; + for (uint32_t val : seq.values) { + signedValues.push_back(static_cast(val)); + } + auto tensorType = RankedTensorType::get({static_cast(seq.values.size())}, + i32Type); + auto valuesAttr = DenseElementsAttr::get( + tensorType, ArrayRef(signedValues)); + + // Insert the global at the beginning of the device + builder.setInsertionPointToStart(deviceOp.getBody()); + builder.create( + loc, + globalName, + /*sym_visibility=*/builder.getStringAttr("private"), + /*type=*/memrefType, + /*initial_value=*/valuesAttr, + /*constant=*/true, + /*alignment=*/nullptr); + + // Create a GetGlobalOp and BlockWriteOp at the position of the first write32 + builder.setInsertionPoint(seq.ops[0]); + auto getGlobalOp = builder.create( + loc, memrefType, globalName); + + builder.create( + loc, + seq.startAddress, + getGlobalOp.getResult(), + nullptr, // buffer + nullptr, // column + nullptr // row + ); + + // Erase all the original write32 operations + for (auto op : seq.ops) { + op.erase(); + } + } +}; + +} // namespace + +namespace xilinx::AIEX { +std::unique_ptr> createAIECoalesceWrite32sPass() { + return std::make_unique(); +} +} // namespace xilinx::AIEX diff --git a/lib/Dialect/AIEX/Transforms/CMakeLists.txt b/lib/Dialect/AIEX/Transforms/CMakeLists.txt index 5818ea8478d..4679734f2e2 100644 --- a/lib/Dialect/AIEX/Transforms/CMakeLists.txt +++ b/lib/Dialect/AIEX/Transforms/CMakeLists.txt @@ -24,6 +24,7 @@ add_mlir_dialect_library(AIEXTransforms AIETransformBfpTypes.cpp AIETxnToControlPacket.cpp AIEExpandLoadPdi.cpp + AIECoalesceWrite32s.cpp ADDITIONAL_HEADER_DIRS ${AIE_BINARY_DIR}/include diff --git a/python/compiler/aiecc/cl_arguments.py b/python/compiler/aiecc/cl_arguments.py index 0caafbc55cf..6ed9bb9a817 100644 --- a/python/compiler/aiecc/cl_arguments.py +++ b/python/compiler/aiecc/cl_arguments.py @@ -454,6 +454,14 @@ def parse_args(args=None): action="store_true", help="Expand load_pdi operations into explicit device reset and configuration sequences", ) + parser.add_argument( + "--no-coalesce-write32s", + dest="coalesce_write32s", + default=True, + action="store_const", + const=False, + help="Do not coalesce write32 operations into blockwrites in the NPU instruction sequence", + ) opts = parser.parse_args(args) return opts diff --git a/python/compiler/aiecc/main.py b/python/compiler/aiecc/main.py index 2e3e5677094..a75797aa7be 100644 --- a/python/compiler/aiecc/main.py +++ b/python/compiler/aiecc/main.py @@ -156,8 +156,7 @@ def _create_npu_lowering_pipeline( reset_switches_mode="never", reset_locks_tiles="", reset_locks_mode="never", - reset_cores_tiles="", - reset_cores_mode="never" + coalesce_write32s=True, ): device_pipeline_1 = ( ) @@ -184,8 +183,11 @@ def _create_npu_lowering_pipeline( reset_switches_mode=reset_switches_mode, reset_locks_tiles=reset_locks_tiles, reset_locks_mode=reset_locks_mode, - reset_cores_tiles=reset_cores_tiles, - reset_cores_mode=reset_cores_mode, + ) + if coalesce_write32s: + pipeline = pipeline.Nested( + "aie.device", + Pipeline().add_pass("aie-coalesce-write32s"), ) return pipeline @@ -1735,8 +1737,7 @@ async def run_flow(self): reset_switches_mode=opts.reset_switches_mode, reset_locks_tiles=opts.reset_locks_tiles, reset_locks_mode=opts.reset_locks_mode, - reset_cores_tiles=opts.reset_cores_tiles, - reset_cores_mode=opts.reset_cores_mode + opts.coalesce_write32s ) pass_pipeline = npu_pipeline.materialize(module=True) npu_insts_file = self.prepend_tmp(f"npu_insts.mlir") @@ -1903,24 +1904,6 @@ def run(mlir_module, args=None): if args is not None: opts = aie.compiler.aiecc.cl_arguments.parse_args(args) - # Apply default reset options if specific ones not provided - if opts.reset_dmas_tiles is None: - opts.reset_dmas_tiles = opts.reset_tiles - if opts.reset_dmas_mode is None: - opts.reset_dmas_mode = opts.reset_mode - if opts.reset_switches_tiles is None: - opts.reset_switches_tiles = opts.reset_tiles - if opts.reset_switches_mode is None: - opts.reset_switches_mode = opts.reset_mode - if opts.reset_locks_tiles is None: - opts.reset_locks_tiles = opts.reset_tiles - if opts.reset_locks_mode is None: - opts.reset_locks_mode = opts.reset_mode - if opts.reset_cores_tiles is None: - opts.reset_cores_tiles = opts.reset_tiles - if opts.reset_cores_mode is None: - opts.reset_cores_mode = opts.reset_mode - opts.aietools_path = None # If Ryzen AI Software is installed then use it for aietools @@ -2002,24 +1985,6 @@ def main(): global opts opts = aie.compiler.aiecc.cl_arguments.parse_args() - # Apply default reset options if specific ones not provided - if opts.reset_dmas_tiles is None: - opts.reset_dmas_tiles = opts.reset_tiles - if opts.reset_dmas_mode is None: - opts.reset_dmas_mode = opts.reset_mode - if opts.reset_switches_tiles is None: - opts.reset_switches_tiles = opts.reset_tiles - if opts.reset_switches_mode is None: - opts.reset_switches_mode = opts.reset_mode - if opts.reset_locks_tiles is None: - opts.reset_locks_tiles = opts.reset_tiles - if opts.reset_locks_mode is None: - opts.reset_locks_mode = opts.reset_mode - if opts.reset_cores_tiles is None: - opts.reset_cores_tiles = opts.reset_tiles - if opts.reset_cores_mode is None: - opts.reset_cores_mode = opts.reset_mode - if opts.version: print(f"aiecc.py {aie.compiler.aiecc.configure.git_commit}") sys.exit(0) From 254d8099f1a76626d29a0c280972372a152b51be Mon Sep 17 00:00:00 2001 From: andrej Date: Sun, 23 Nov 2025 15:11:55 -0700 Subject: [PATCH 17/40] make DMA comparison more thorough --- .../AIEToConfiguration/AIEToConfiguration.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp b/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp index 346b707ccac..8d62997520e 100644 --- a/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp +++ b/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp @@ -1056,7 +1056,7 @@ xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, return dma1 == dma2; // For MemOp, MemTileDMAOp, ShimDMAOp, compare their contained operations - // This is a simplified structural comparison + // This is a structural comparison including attributes auto ®ion1 = dma1->getRegion(0); auto ®ion2 = dma2->getRegion(0); @@ -1076,8 +1076,23 @@ xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, auto it2 = ops2.begin(); while (it1 != ops1.end() && it2 != ops2.end()) { + // Check operation names match if (it1->getName() != it2->getName()) return false; + + // Check all attributes match + auto attrs1 = it1->getAttrs(); + auto attrs2 = it2->getAttrs(); + + if (attrs1.size() != attrs2.size()) + return false; + + for (auto attr1 : attrs1) { + auto attr2 = it2->getAttr(attr1.getName()); + if (!attr2 || attr1.getValue() != attr2) + return false; + } + ++it1; ++it2; } From 5650c308c25e50dfe1acdde8bdb33be674c9c4fc Mon Sep 17 00:00:00 2001 From: andrej Date: Sun, 23 Nov 2025 15:17:07 -0700 Subject: [PATCH 18/40] fix Python integration of coalesce write32s --- python/compiler/aiecc/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/compiler/aiecc/main.py b/python/compiler/aiecc/main.py index a75797aa7be..4cc2a24df43 100644 --- a/python/compiler/aiecc/main.py +++ b/python/compiler/aiecc/main.py @@ -1737,7 +1737,7 @@ async def run_flow(self): reset_switches_mode=opts.reset_switches_mode, reset_locks_tiles=opts.reset_locks_tiles, reset_locks_mode=opts.reset_locks_mode, - opts.coalesce_write32s + coalesce_write32s=opts.coalesce_write32s ) pass_pipeline = npu_pipeline.materialize(module=True) npu_insts_file = self.prepend_tmp(f"npu_insts.mlir") From 30f0380c8024900b7b4d9e45e39c12df639a700e Mon Sep 17 00:00:00 2001 From: andrej Date: Sun, 23 Nov 2025 15:44:32 -0700 Subject: [PATCH 19/40] coalesce across blockwrites as well --- .../AIEX/Transforms/AIECoalesceWrite32s.cpp | 158 +++++++++++++----- 1 file changed, 112 insertions(+), 46 deletions(-) diff --git a/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp b/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp index 3b0e7419b3d..ce24e828542 100644 --- a/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp +++ b/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp @@ -38,14 +38,47 @@ using namespace xilinx::AIE; namespace { -// Represents a sequence of consecutive write32 operations -struct Write32Sequence { - SmallVector ops; - uint32_t startAddress = 0; +// Represents a write operation that can be either write32 or blockwrite +struct WriteOp { + Operation *op = nullptr; + uint32_t address = 0; SmallVector values; + + WriteOp() = default; + WriteOp(NpuWrite32Op w32) : op(w32.getOperation()), address(w32.getAddress()) { + values.push_back(w32.getValue()); + } + + WriteOp(NpuBlockWriteOp bw) : op(bw.getOperation()) { + auto addr = bw.getAbsoluteAddress(); + if (!addr) return; + address = *addr; + + auto dataWords = bw.getDataWords(); + if (!dataWords) return; + + for (auto val : dataWords.getValues()) { + values.push_back(val.getZExtValue()); + } + } + + bool isValid() const { + return op != nullptr && !values.empty(); + } + + size_t numWords() const { + return values.size(); + } +}; + +// Represents a sequence of consecutive write operations (write32 or blockwrite) +struct WriteSequence { + SmallVector ops; // Don't inline - WriteOp is large + uint32_t startAddress = 0; + SmallVector values; std::optional firstLoc; - bool isContiguous() const { + bool isCoalescable() const { return ops.size() >= 2; } @@ -76,72 +109,105 @@ struct AIECoalesceWrite32sPass void coalesceWrite32sInSequence(RuntimeSequenceOp seqOp) { OpBuilder builder(seqOp.getContext()); - // Walk through the sequence and find consecutive write32 operations + // Walk through the sequence and find consecutive write operations for (Block &block : seqOp.getBody()) { - SmallVector sequences; - Write32Sequence currentSeq; + SmallVector sequences; + WriteSequence currentSeq; uint32_t expectedNextAddr = 0; bool inSequence = false; for (Operation &op : llvm::make_early_inc_range(block)) { + WriteOp writeOp; + + // Skip get_global operations as they don't interrupt sequences + if (isa(&op)) { + continue; + } + if (auto write32Op = dyn_cast(&op)) { // Check if this write32 has the required attributes // (must have address but no buffer/column/row for coalescing) if (write32Op.getBuffer() || write32Op.getColumn() || write32Op.getRow()) { // Cannot coalesce symbolic writes - if (inSequence && currentSeq.isContiguous()) { + if (inSequence && currentSeq.isCoalescable()) { sequences.push_back(currentSeq); } - currentSeq = Write32Sequence(); + currentSeq = WriteSequence(); inSequence = false; expectedNextAddr = 0; continue; } - uint32_t addr = write32Op.getAddress(); - uint32_t value = write32Op.getValue(); + writeOp = WriteOp(write32Op); + } else if (auto blockWriteOp = dyn_cast(&op)) { + // Check if this blockwrite has the required attributes + if (blockWriteOp.getBuffer() || blockWriteOp.getColumn() || + blockWriteOp.getRow()) { + // Cannot coalesce symbolic writes + if (inSequence && currentSeq.isCoalescable()) { + sequences.push_back(currentSeq); + } + currentSeq = WriteSequence(); + inSequence = false; + expectedNextAddr = 0; + continue; + } - if (!inSequence) { - // Start a new sequence - currentSeq = Write32Sequence(); - currentSeq.startAddress = addr; - currentSeq.ops.push_back(write32Op); - currentSeq.values.push_back(value); - currentSeq.firstLoc = write32Op.getLoc(); - expectedNextAddr = addr + 4; - inSequence = true; - } else if (addr == expectedNextAddr) { - // Continue the sequence - currentSeq.ops.push_back(write32Op); - currentSeq.values.push_back(value); - expectedNextAddr = addr + 4; - } else { - // Address not contiguous, save current sequence if valid - if (currentSeq.isContiguous()) { + writeOp = WriteOp(blockWriteOp); + if (!writeOp.isValid()) { + // Invalid blockwrite (couldn't get address or data), skip coalescing + if (inSequence && currentSeq.isCoalescable()) { sequences.push_back(currentSeq); } - // Start a new sequence - currentSeq = Write32Sequence(); - currentSeq.startAddress = addr; - currentSeq.ops.push_back(write32Op); - currentSeq.values.push_back(value); - currentSeq.firstLoc = write32Op.getLoc(); - expectedNextAddr = addr + 4; + currentSeq = WriteSequence(); + inSequence = false; + expectedNextAddr = 0; + continue; } } else { - // Non-write32 operation interrupts the sequence - if (inSequence && currentSeq.isContiguous()) { + // Non-write operation interrupts the sequence + if (inSequence && currentSeq.isCoalescable()) { sequences.push_back(currentSeq); } - currentSeq = Write32Sequence(); + currentSeq = WriteSequence(); inSequence = false; expectedNextAddr = 0; + continue; + } + + // Process the write operation + if (!inSequence) { + // Start a new sequence + currentSeq = WriteSequence(); + currentSeq.startAddress = writeOp.address; + currentSeq.ops.push_back(writeOp); + currentSeq.values.append(writeOp.values.begin(), writeOp.values.end()); + currentSeq.firstLoc = writeOp.op->getLoc(); + expectedNextAddr = writeOp.address + writeOp.numWords() * 4; + inSequence = true; + } else if (writeOp.address == expectedNextAddr) { + // Continue the sequence + currentSeq.ops.push_back(writeOp); + currentSeq.values.append(writeOp.values.begin(), writeOp.values.end()); + expectedNextAddr = writeOp.address + writeOp.numWords() * 4; + } else { + // Address not contiguous, save current sequence if valid + if (currentSeq.isCoalescable()) { + sequences.push_back(currentSeq); + } + // Start a new sequence + currentSeq = WriteSequence(); + currentSeq.startAddress = writeOp.address; + currentSeq.ops.push_back(writeOp); + currentSeq.values.append(writeOp.values.begin(), writeOp.values.end()); + currentSeq.firstLoc = writeOp.op->getLoc(); + expectedNextAddr = writeOp.address + writeOp.numWords() * 4; } } // Don't forget the last sequence - if (inSequence && currentSeq.isContiguous()) { + if (inSequence && currentSeq.isCoalescable()) { sequences.push_back(currentSeq); } @@ -153,7 +219,7 @@ struct AIECoalesceWrite32sPass } void replaceSequenceWithBlockWrite(OpBuilder &builder, - const Write32Sequence &seq, + const WriteSequence &seq, RuntimeSequenceOp seqOp) { if (seq.ops.empty()) return; @@ -203,8 +269,8 @@ struct AIECoalesceWrite32sPass /*constant=*/true, /*alignment=*/nullptr); - // Create a GetGlobalOp and BlockWriteOp at the position of the first write32 - builder.setInsertionPoint(seq.ops[0]); + // Create a GetGlobalOp and BlockWriteOp at the position of the first operation + builder.setInsertionPoint(seq.ops[0].op); auto getGlobalOp = builder.create( loc, memrefType, globalName); @@ -217,9 +283,9 @@ struct AIECoalesceWrite32sPass nullptr // row ); - // Erase all the original write32 operations - for (auto op : seq.ops) { - op.erase(); + // Erase all the original operations + for (const auto &writeOp : seq.ops) { + writeOp.op->erase(); } } }; From 9f221204f418f3a04478f4295cfa75b1a2aacc98 Mon Sep 17 00:00:00 2001 From: andrej Date: Sun, 23 Nov 2025 16:08:44 -0700 Subject: [PATCH 20/40] allow reordering of writes in coalescing --- include/aie/Dialect/AIE/IR/AIETargetModel.h | 64 ++++ .../AIEX/Transforms/AIECoalesceWrite32s.cpp | 358 ++++++++++-------- 2 files changed, 265 insertions(+), 157 deletions(-) diff --git a/include/aie/Dialect/AIE/IR/AIETargetModel.h b/include/aie/Dialect/AIE/IR/AIETargetModel.h index 201d7da658b..8b922890e69 100644 --- a/include/aie/Dialect/AIE/IR/AIETargetModel.h +++ b/include/aie/Dialect/AIE/IR/AIETargetModel.h @@ -325,6 +325,28 @@ class AIETargetModel { // Returns true if the target model supports the given block format. virtual bool isSupportedBlockFormat(std::string const &format) const; + + /// Check if a register at the given address is a "special register" that + /// should not be reordered. Special registers are those that trigger + /// side-effects like device reset, start processing, etc. + /// \param absoluteAddress The full 32-bit address (including tile col/row) + /// \return true if this is a special register that must not be reordered + virtual bool isSpecialRegister(uint32_t absoluteAddress) const { + return false; // Default: no special registers + } + + /// Check if a register at the given tile and offset is a "special register" + /// \param col The column of the tile + /// \param row The row of the tile + /// \param offset The offset within the tile's address space + /// \return true if this is a special register that must not be reordered + virtual bool isSpecialRegister(int col, int row, uint32_t offset) const { + uint32_t absoluteAddress = + ((col & 0xff) << getColumnShift()) | + ((row & 0xff) << getRowShift()) | + (offset & 0xfffff); + return isSpecialRegister(absoluteAddress); + } }; class AIE1TargetModel : public AIETargetModel { @@ -711,6 +733,48 @@ class BaseNPU2TargetModel : public AIE2TargetModel { bool isSupportedBlockFormat(std::string const &format) const override; + /// Check if a register is a special register that should not be reordered + /// for AIE2P (NPU2) devices + bool isSpecialRegister(uint32_t absoluteAddress) const override { + // Extract tile coordinates from absolute address + // Address format: (col << 25) | (row << 20) | offset + int col = (absoluteAddress >> getColumnShift()) & 0xff; + int row = (absoluteAddress >> getRowShift()) & 0x1f; + uint32_t offset = absoluteAddress & 0xfffff; + return isSpecialRegister(col, row, offset); + } + + bool isSpecialRegister(int col, int row, uint32_t offset) const override { + if (isCoreTile(col, row)) { + // Core tile special registers + return offset == 0x32000 || // Core_Control + offset == 0x36070 || // Memory_Control + offset == 0x60000 || // Module_Clock_Control + offset == 0x60010 || // Module_Reset_Control + offset == 0x60020 || // Tile_Control + offset == 0x1DE04 || offset == 0x1DE0C || + offset == 0x1DE14 || offset == 0x1DE1C; + } else if (isShimNOCTile(col, row)) { + // Shim tile special registers + return (offset >= 0x15000 && offset <= 0x15010) || + offset == 0x1D204 || offset == 0x1D20C || + offset == 0x1D214 || offset == 0x1D21C || + offset == 0x40000; + } else if (isMemTile(col, row)) { + // Memory tile special registers + return offset == 0x94008 || offset == 0x96048 || + offset == 0xA0604 || offset == 0xA060C || + offset == 0xA0614 || offset == 0xA061C || + offset == 0xA0624 || offset == 0xA062C || + offset == 0xA0634 || offset == 0xA063C || + offset == 0xA0644 || offset == 0xA064C || + offset == 0xA0654 || offset == 0xA065C || + offset == 0xFFF00 || offset == 0xFFF10 || + offset == 0xFFF20; + } + return false; + } + static bool classof(const AIETargetModel *model) { return model->getKind() >= TK_AIE2_NPU2 && model->getKind() < TK_AIE2_NPU2_Last; diff --git a/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp b/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp index ce24e828542..2d05eba6ec2 100644 --- a/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp +++ b/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp @@ -38,52 +38,26 @@ using namespace xilinx::AIE; namespace { -// Represents a write operation that can be either write32 or blockwrite -struct WriteOp { - Operation *op = nullptr; - uint32_t address = 0; - SmallVector values; +// Represents a single 32-bit write to memory +struct WriteWord { + uint32_t address; + uint32_t value; + Operation *op; // The original operation that created this write - WriteOp() = default; - WriteOp(NpuWrite32Op w32) : op(w32.getOperation()), address(w32.getAddress()) { - values.push_back(w32.getValue()); - } - - WriteOp(NpuBlockWriteOp bw) : op(bw.getOperation()) { - auto addr = bw.getAbsoluteAddress(); - if (!addr) return; - address = *addr; - - auto dataWords = bw.getDataWords(); - if (!dataWords) return; - - for (auto val : dataWords.getValues()) { - values.push_back(val.getZExtValue()); - } - } - - bool isValid() const { - return op != nullptr && !values.empty(); - } - - size_t numWords() const { - return values.size(); + bool operator<(const WriteWord &other) const { + return address < other.address; } }; -// Represents a sequence of consecutive write operations (write32 or blockwrite) -struct WriteSequence { - SmallVector ops; // Don't inline - WriteOp is large - uint32_t startAddress = 0; - SmallVector values; - std::optional firstLoc; - - bool isCoalescable() const { - return ops.size() >= 2; - } +// Represents a slice of execution between special register barriers +// All writes within a slice can be reordered +struct WriteSlice { + SmallVector writes; // All writes in this slice (can be reordered) + SmallVector specialOps; // Special register writes (cannot be reordered) + SmallVector otherOps; // Non-write operations that create barriers - size_t size() const { - return ops.size(); + bool isEmpty() const { + return writes.empty() && specialOps.empty() && otherOps.empty(); } }; @@ -109,154 +83,229 @@ struct AIECoalesceWrite32sPass void coalesceWrite32sInSequence(RuntimeSequenceOp seqOp) { OpBuilder builder(seqOp.getContext()); - // Walk through the sequence and find consecutive write operations + // Get the device and target model + auto deviceOp = seqOp->getParentOfType(); + if (!deviceOp) return; + + const auto &tm = deviceOp.getTargetModel(); + + // Walk through the sequence and partition into slices for (Block &block : seqOp.getBody()) { - SmallVector sequences; - WriteSequence currentSeq; - uint32_t expectedNextAddr = 0; - bool inSequence = false; + SmallVector slices; + WriteSlice currentSlice; - for (Operation &op : llvm::make_early_inc_range(block)) { - WriteOp writeOp; - - // Skip get_global operations as they don't interrupt sequences + for (Operation &op : block) { + // Skip get_global operations - they don't create barriers if (isa(&op)) { continue; } + bool isSpecialWrite = false; + + // Check if this is a write32 operation if (auto write32Op = dyn_cast(&op)) { - // Check if this write32 has the required attributes - // (must have address but no buffer/column/row for coalescing) - if (write32Op.getBuffer() || write32Op.getColumn() || - write32Op.getRow()) { - // Cannot coalesce symbolic writes - if (inSequence && currentSeq.isCoalescable()) { - sequences.push_back(currentSeq); + // Only handle writes with absolute addresses (no buffer/col/row) + if (!write32Op.getBuffer() && !write32Op.getColumn() && + !write32Op.getRow()) { + uint32_t addr = write32Op.getAddress(); + isSpecialWrite = tm.isSpecialRegister(addr); + + if (isSpecialWrite) { + currentSlice.specialOps.push_back(&op); + } else { + WriteWord word{addr, write32Op.getValue(), &op}; + currentSlice.writes.push_back(word); } - currentSeq = WriteSequence(); - inSequence = false; - expectedNextAddr = 0; - continue; - } - - writeOp = WriteOp(write32Op); - } else if (auto blockWriteOp = dyn_cast(&op)) { - // Check if this blockwrite has the required attributes - if (blockWriteOp.getBuffer() || blockWriteOp.getColumn() || - blockWriteOp.getRow()) { - // Cannot coalesce symbolic writes - if (inSequence && currentSeq.isCoalescable()) { - sequences.push_back(currentSeq); + } else { + // Symbolic write creates a barrier + if (!currentSlice.isEmpty()) { + slices.push_back(std::move(currentSlice)); + currentSlice = WriteSlice(); } - currentSeq = WriteSequence(); - inSequence = false; - expectedNextAddr = 0; - continue; + currentSlice.otherOps.push_back(&op); } - - writeOp = WriteOp(blockWriteOp); - if (!writeOp.isValid()) { - // Invalid blockwrite (couldn't get address or data), skip coalescing - if (inSequence && currentSeq.isCoalescable()) { - sequences.push_back(currentSeq); + } + // Check if this is a blockwrite operation + else if (auto blockWriteOp = dyn_cast(&op)) { + // Only handle writes with absolute addresses + if (!blockWriteOp.getBuffer() && !blockWriteOp.getColumn() && + !blockWriteOp.getRow()) { + auto addr = blockWriteOp.getAbsoluteAddress(); + auto dataWords = blockWriteOp.getDataWords(); + + if (addr && dataWords) { + uint32_t baseAddr = *addr; + + // Check if any word writes to a special register + int64_t numWords = dataWords.size(); + for (int64_t i = 0; i < numWords; ++i) { + if (tm.isSpecialRegister(baseAddr + i * 4)) { + isSpecialWrite = true; + break; + } + } + + if (isSpecialWrite) { + currentSlice.specialOps.push_back(&op); + } else { + // Add each word in the blockwrite as a separate WriteWord + int64_t idx = 0; + for (auto val : dataWords.getValues()) { + WriteWord word{ + static_cast(baseAddr + idx * 4), + static_cast(val.getZExtValue()), + &op + }; + currentSlice.writes.push_back(word); + ++idx; + } + } + } else { + // Invalid blockwrite creates a barrier + if (!currentSlice.isEmpty()) { + slices.push_back(std::move(currentSlice)); + currentSlice = WriteSlice(); + } + currentSlice.otherOps.push_back(&op); } - currentSeq = WriteSequence(); - inSequence = false; - expectedNextAddr = 0; - continue; + } else { + // Symbolic write creates a barrier + if (!currentSlice.isEmpty()) { + slices.push_back(std::move(currentSlice)); + currentSlice = WriteSlice(); + } + currentSlice.otherOps.push_back(&op); } - } else { - // Non-write operation interrupts the sequence - if (inSequence && currentSeq.isCoalescable()) { - sequences.push_back(currentSeq); + } + // Any other operation creates a barrier + else { + if (!currentSlice.isEmpty()) { + slices.push_back(std::move(currentSlice)); + currentSlice = WriteSlice(); } - currentSeq = WriteSequence(); - inSequence = false; - expectedNextAddr = 0; - continue; + currentSlice.otherOps.push_back(&op); } - // Process the write operation - if (!inSequence) { - // Start a new sequence - currentSeq = WriteSequence(); - currentSeq.startAddress = writeOp.address; - currentSeq.ops.push_back(writeOp); - currentSeq.values.append(writeOp.values.begin(), writeOp.values.end()); - currentSeq.firstLoc = writeOp.op->getLoc(); - expectedNextAddr = writeOp.address + writeOp.numWords() * 4; - inSequence = true; - } else if (writeOp.address == expectedNextAddr) { - // Continue the sequence - currentSeq.ops.push_back(writeOp); - currentSeq.values.append(writeOp.values.begin(), writeOp.values.end()); - expectedNextAddr = writeOp.address + writeOp.numWords() * 4; - } else { - // Address not contiguous, save current sequence if valid - if (currentSeq.isCoalescable()) { - sequences.push_back(currentSeq); - } - // Start a new sequence - currentSeq = WriteSequence(); - currentSeq.startAddress = writeOp.address; - currentSeq.ops.push_back(writeOp); - currentSeq.values.append(writeOp.values.begin(), writeOp.values.end()); - currentSeq.firstLoc = writeOp.op->getLoc(); - expectedNextAddr = writeOp.address + writeOp.numWords() * 4; + // Special register writes create slice boundaries + if (isSpecialWrite) { + slices.push_back(std::move(currentSlice)); + currentSlice = WriteSlice(); } } - // Don't forget the last sequence - if (inSequence && currentSeq.isCoalescable()) { - sequences.push_back(currentSeq); + // Don't forget the last slice + if (!currentSlice.isEmpty()) { + slices.push_back(std::move(currentSlice)); } - // Now replace each sequence with a blockwrite - for (auto &seq : sequences) { - replaceSequenceWithBlockWrite(builder, seq, seqOp); + // Now process each slice: sort writes and coalesce + for (auto &slice : slices) { + processSlice(builder, slice, deviceOp); } } } - void replaceSequenceWithBlockWrite(OpBuilder &builder, - const WriteSequence &seq, - RuntimeSequenceOp seqOp) { - if (seq.ops.empty()) + void processSlice(OpBuilder &builder, WriteSlice &slice, + AIE::DeviceOp deviceOp) { + // Non-write operations (barriers) are kept in their original positions + // Nothing to do here - they're already in the IR + + // If there are no writes to coalesce, nothing to do + if (slice.writes.empty()) { return; + } + + // Sort writes by address to enable coalescing + llvm::sort(slice.writes); + + // Find contiguous sequences and coalesce them + SmallVector> sequences; + SmallVector currentSeq; + + for (auto &write : slice.writes) { + if (currentSeq.empty()) { + currentSeq.push_back(write); + } else if (write.address == currentSeq.back().address + 4) { + // Contiguous with previous write + currentSeq.push_back(write); + } else { + // Not contiguous, start new sequence + if (currentSeq.size() >= 2) { + sequences.push_back(currentSeq); + } + currentSeq.clear(); + currentSeq.push_back(write); + } + } + + // Don't forget the last sequence + if (currentSeq.size() >= 2) { + sequences.push_back(currentSeq); + } + + // Track which operations to erase + DenseSet toErase; + + // Create blockwrites for each sequence + for (auto &seq : sequences) { + createBlockWrite(builder, seq, deviceOp); - MLIRContext *ctx = builder.getContext(); - Location loc = seq.firstLoc.value(); + // Mark operations for erasure + for (auto &write : seq) { + toErase.insert(write.op); + } + } - // Get or create the module to hold the global - auto moduleOp = seqOp->getParentOfType(); - if (!moduleOp) - return; + // For writes that couldn't be coalesced, keep them as write32 ops + for (auto &write : slice.writes) { + if (!toErase.contains(write.op)) { + // This write wasn't coalesced - keep it but possibly reorder + // The write is already in the IR, we just need to move it if needed + } + } - // Get the device to hold the global - auto deviceOp = seqOp->getParentOfType(); - if (!deviceOp) - return; + // Special register writes stay in their original positions + // Nothing to do here - they're already in the IR + + // Erase operations that were coalesced + for (auto *op : toErase) { + op->erase(); + } + } + + void createBlockWrite(OpBuilder &builder, + const SmallVector &sequence, + AIE::DeviceOp deviceOp) { + if (sequence.empty()) return; + + MLIRContext *ctx = builder.getContext(); + uint32_t startAddr = sequence[0].address; // Generate a unique name for the global memref static unsigned globalCounter = 0; std::string globalName = "coalesced_write32_" + - std::to_string(seq.startAddress) + "_" + + std::to_string(startAddr) + "_" + std::to_string(globalCounter++); - // Create memref type: memref + // Collect values + SmallVector values; + for (auto &write : sequence) { + values.push_back(static_cast(write.value)); + } + + // Create memref type auto i32Type = IntegerType::get(ctx, 32); - auto memrefType = MemRefType::get({static_cast(seq.values.size())}, + auto memrefType = MemRefType::get({static_cast(values.size())}, i32Type); // Create DenseIntElementsAttr for initial values - SmallVector signedValues; - for (uint32_t val : seq.values) { - signedValues.push_back(static_cast(val)); - } - auto tensorType = RankedTensorType::get({static_cast(seq.values.size())}, + auto tensorType = RankedTensorType::get({static_cast(values.size())}, i32Type); auto valuesAttr = DenseElementsAttr::get( - tensorType, ArrayRef(signedValues)); + tensorType, ArrayRef(values)); + + // Get location from first operation + Location loc = sequence[0].op->getLoc(); // Insert the global at the beginning of the device builder.setInsertionPointToStart(deviceOp.getBody()); @@ -269,24 +318,19 @@ struct AIECoalesceWrite32sPass /*constant=*/true, /*alignment=*/nullptr); - // Create a GetGlobalOp and BlockWriteOp at the position of the first operation - builder.setInsertionPoint(seq.ops[0].op); + // Create a GetGlobalOp and BlockWriteOp at the position of the first write + builder.setInsertionPoint(sequence[0].op); auto getGlobalOp = builder.create( loc, memrefType, globalName); builder.create( loc, - seq.startAddress, + startAddr, getGlobalOp.getResult(), nullptr, // buffer nullptr, // column nullptr // row ); - - // Erase all the original operations - for (const auto &writeOp : seq.ops) { - writeOp.op->erase(); - } } }; From cda53e67582ce0a7a490dfa9810301a1e5b69050 Mon Sep 17 00:00:00 2001 From: andrej Date: Sun, 23 Nov 2025 16:14:36 -0700 Subject: [PATCH 21/40] eliminate duplicate write32s --- .../AIEX/Transforms/AIECoalesceWrite32s.cpp | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp b/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp index 2d05eba6ec2..29404491f12 100644 --- a/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp +++ b/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp @@ -215,6 +215,33 @@ struct AIECoalesceWrite32sPass return; } + // Eliminate duplicate writes - keep only the last write to each address + // Map from address to the index of the last write to that address + DenseMap lastWriteIndex; + DenseSet supersededOps; // Operations that are superseded by later writes + + for (size_t i = 0; i < slice.writes.size(); ++i) { + uint32_t addr = slice.writes[i].address; + + // If there was a previous write to this address, mark it as superseded + if (lastWriteIndex.count(addr)) { + supersededOps.insert(slice.writes[lastWriteIndex[addr]].op); + } + + lastWriteIndex[addr] = i; + } + + // Filter writes to keep only the last write to each address + SmallVector uniqueWrites; + for (size_t i = 0; i < slice.writes.size(); ++i) { + if (lastWriteIndex[slice.writes[i].address] == i) { + uniqueWrites.push_back(slice.writes[i]); + } + } + + // Update slice.writes with unique writes + slice.writes = std::move(uniqueWrites); + // Sort writes by address to enable coalescing llvm::sort(slice.writes); @@ -244,7 +271,7 @@ struct AIECoalesceWrite32sPass } // Track which operations to erase - DenseSet toErase; + DenseSet toErase = supersededOps; // Start with superseded ops // Create blockwrites for each sequence for (auto &seq : sequences) { @@ -267,7 +294,7 @@ struct AIECoalesceWrite32sPass // Special register writes stay in their original positions // Nothing to do here - they're already in the IR - // Erase operations that were coalesced + // Erase operations that were coalesced or superseded for (auto *op : toErase) { op->erase(); } From 1f47e9c7775407af28ac5f0073eab41c37f64525 Mon Sep 17 00:00:00 2001 From: andrej Date: Sun, 23 Nov 2025 16:25:56 -0700 Subject: [PATCH 22/40] make min number of writes to coalesce a parameter --- .../aie/Dialect/AIEX/Transforms/AIEXPasses.td | 18 +++++++++++++----- .../AIEX/Transforms/AIECoalesceWrite32s.cpp | 15 ++++++++++----- python/compiler/aiecc/cl_arguments.py | 7 +++++++ python/compiler/aiecc/main.py | 6 ++++-- 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td index 713e2820cfe..4cbc88e03ae 100644 --- a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td +++ b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td @@ -319,18 +319,26 @@ def AIECoalesceWrite32s : Pass<"aie-coalesce-write32s", "AIE::DeviceOp"> { coalescing them into npu.blockwrite operations when their addresses are contiguous (4-byte increments). - Since register write instructions cannot be reordered, this optimization - only applies when the write32 operations are immediately adjacent in the - instruction stream. + The pass can reorder non-special register writes within slices bounded by + special register writes. Special registers (e.g., control registers) act + as barriers and cannot be reordered. For each sequence of N consecutive write32 operations at addresses [addr, addr+4, addr+8, ...], the pass: - 1. Creates a memref.global with the values - 2. Replaces the write32 sequence with a single npu.blockwrite + 1. Eliminates duplicate writes (keeps only the last value for each address) + 2. Reorders writes by address within safe boundaries + 3. Creates a memref.global with the values + 4. Replaces the write32 sequence with a single npu.blockwrite This reduces instruction count and can improve performance. }]; + let options = [ + Option<"minWritesToCoalesce", "min-writes-to-coalesce", "unsigned", + /*default=*/"2", + "Minimum number of contiguous writes required to coalesce into a blockwrite"> + ]; + let constructor = "xilinx::AIEX::createAIECoalesceWrite32sPass()"; let dependentDialects = [ "mlir::memref::MemRefDialect", diff --git a/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp b/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp index 29404491f12..e9be2aa2369 100644 --- a/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp +++ b/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp @@ -11,8 +11,12 @@ // This pass coalesces consecutive npu.write32 operations into npu.blockwrite // operations when their addresses are contiguous (4-byte increments). // -// Since register writes cannot be reordered, we only coalesce operations that -// are immediately adjacent in the instruction stream with no intervening ops. +// The pass can reorder non-special register writes within slices. Special +// register writes act as barriers and cannot be reordered. Duplicate writes +// to the same address are eliminated (keeping the last value). +// +// A configurable threshold controls the minimum number of contiguous writes +// required for coalescing into a blockwrite. // //===----------------------------------------------------------------------===// @@ -257,7 +261,8 @@ struct AIECoalesceWrite32sPass currentSeq.push_back(write); } else { // Not contiguous, start new sequence - if (currentSeq.size() >= 2) { + // Only save sequences that meet the minimum threshold + if (currentSeq.size() >= minWritesToCoalesce) { sequences.push_back(currentSeq); } currentSeq.clear(); @@ -265,8 +270,8 @@ struct AIECoalesceWrite32sPass } } - // Don't forget the last sequence - if (currentSeq.size() >= 2) { + // Don't forget the last sequence (also check threshold) + if (currentSeq.size() >= minWritesToCoalesce) { sequences.push_back(currentSeq); } diff --git a/python/compiler/aiecc/cl_arguments.py b/python/compiler/aiecc/cl_arguments.py index 6ed9bb9a817..d34f7dfde48 100644 --- a/python/compiler/aiecc/cl_arguments.py +++ b/python/compiler/aiecc/cl_arguments.py @@ -462,6 +462,13 @@ def parse_args(args=None): const=False, help="Do not coalesce write32 operations into blockwrites in the NPU instruction sequence", ) + parser.add_argument( + "--min-writes-to-coalesce", + dest="min_writes_to_coalesce", + default=2, + type=int, + help="Minimum number of consecutive write32 operations required to coalesce into a blockwrite (default: 2)", + ) opts = parser.parse_args(args) return opts diff --git a/python/compiler/aiecc/main.py b/python/compiler/aiecc/main.py index 4cc2a24df43..cf907b56de7 100644 --- a/python/compiler/aiecc/main.py +++ b/python/compiler/aiecc/main.py @@ -157,6 +157,7 @@ def _create_npu_lowering_pipeline( reset_locks_tiles="", reset_locks_mode="never", coalesce_write32s=True, + min_writes_to_coalesce=2, ): device_pipeline_1 = ( ) @@ -187,7 +188,7 @@ def _create_npu_lowering_pipeline( if coalesce_write32s: pipeline = pipeline.Nested( "aie.device", - Pipeline().add_pass("aie-coalesce-write32s"), + Pipeline().add_pass("aie-coalesce-write32s", min_writes_to_coalesce=min_writes_to_coalesce), ) return pipeline @@ -1737,7 +1738,8 @@ async def run_flow(self): reset_switches_mode=opts.reset_switches_mode, reset_locks_tiles=opts.reset_locks_tiles, reset_locks_mode=opts.reset_locks_mode, - coalesce_write32s=opts.coalesce_write32s + coalesce_write32s=opts.coalesce_write32s, + min_writes_to_coalesce=opts.min_writes_to_coalesce ) pass_pipeline = npu_pipeline.materialize(module=True) npu_insts_file = self.prepend_tmp(f"npu_insts.mlir") From 0ab86579778f2eacca190bd47e5d1d5eba51f856 Mon Sep 17 00:00:00 2001 From: andrej Date: Sun, 23 Nov 2025 17:01:00 -0700 Subject: [PATCH 23/40] also consider maskwrites in coalescing; add missing special registers --- include/aie/Dialect/AIE/IR/AIETargetModel.h | 3 + .../AIEX/Transforms/AIECoalesceWrite32s.cpp | 64 +++++++++++++++++-- 2 files changed, 63 insertions(+), 4 deletions(-) diff --git a/include/aie/Dialect/AIE/IR/AIETargetModel.h b/include/aie/Dialect/AIE/IR/AIETargetModel.h index 8b922890e69..72ea0d2cd12 100644 --- a/include/aie/Dialect/AIE/IR/AIETargetModel.h +++ b/include/aie/Dialect/AIE/IR/AIETargetModel.h @@ -759,6 +759,9 @@ class BaseNPU2TargetModel : public AIE2TargetModel { return (offset >= 0x15000 && offset <= 0x15010) || offset == 0x1D204 || offset == 0x1D20C || offset == 0x1D214 || offset == 0x1D21C || + offset == 0x1D200 || offset == 0x1D208 || + offset == 0x1D210 || offset == 0x1D218 || + offset == 0x1F000 || offset == 0x1F004 || offset == 0x40000; } else if (isMemTile(col, row)) { // Memory tile special registers diff --git a/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp b/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp index e9be2aa2369..34805c8941f 100644 --- a/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp +++ b/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp @@ -15,6 +15,14 @@ // register writes act as barriers and cannot be reordered. Duplicate writes // to the same address are eliminated (keeping the last value). // +// Masked writes (npu.maskwrite32) are handled as follows: +// - If a maskwrite is done to an address after a previous write32/blockwrite, +// the maskwrite supersedes the earlier write (earlier write is removed) +// - If a write32/blockwrite is done after a maskwrite to the same address, +// the later write supersedes the maskwrite (maskwrite is removed) +// - Maskwrite operations cannot be coalesced into blockwrites and act as +// barriers for coalescing (similar to special register writes) +// // A configurable threshold controls the minimum number of contiguous writes // required for coalescing into a blockwrite. // @@ -46,11 +54,14 @@ namespace { struct WriteWord { uint32_t address; uint32_t value; + std::optional mask; // If present, this is a masked write Operation *op; // The original operation that created this write bool operator<(const WriteWord &other) const { return address < other.address; } + + bool isMaskWrite() const { return mask.has_value(); } }; // Represents a slice of execution between special register barriers @@ -117,7 +128,30 @@ struct AIECoalesceWrite32sPass if (isSpecialWrite) { currentSlice.specialOps.push_back(&op); } else { - WriteWord word{addr, write32Op.getValue(), &op}; + WriteWord word{addr, write32Op.getValue(), std::nullopt, &op}; + currentSlice.writes.push_back(word); + } + } else { + // Symbolic write creates a barrier + if (!currentSlice.isEmpty()) { + slices.push_back(std::move(currentSlice)); + currentSlice = WriteSlice(); + } + currentSlice.otherOps.push_back(&op); + } + } + // Check if this is a maskwrite operation + else if (auto maskWriteOp = dyn_cast(&op)) { + // Only handle writes with absolute addresses (no buffer/col/row) + if (!maskWriteOp.getBuffer() && !maskWriteOp.getColumn() && + !maskWriteOp.getRow()) { + uint32_t addr = maskWriteOp.getAddress(); + isSpecialWrite = tm.isSpecialRegister(addr); + + if (isSpecialWrite) { + currentSlice.specialOps.push_back(&op); + } else { + WriteWord word{addr, maskWriteOp.getValue(), maskWriteOp.getMask(), &op}; currentSlice.writes.push_back(word); } } else { @@ -158,6 +192,7 @@ struct AIECoalesceWrite32sPass WriteWord word{ static_cast(baseAddr + idx * 4), static_cast(val.getZExtValue()), + std::nullopt, // blockwrites don't have masks &op }; currentSlice.writes.push_back(word); @@ -249,15 +284,36 @@ struct AIECoalesceWrite32sPass // Sort writes by address to enable coalescing llvm::sort(slice.writes); - // Find contiguous sequences and coalesce them + // Separate mask writes from regular writes + // Mask writes act as barriers for coalescing + DenseSet maskWriteAddresses; + for (auto &write : slice.writes) { + if (write.isMaskWrite()) { + maskWriteAddresses.insert(write.address); + } + } + + // Find contiguous sequences of non-masked writes and coalesce them + // Masked writes cannot be coalesced and act as barriers SmallVector> sequences; SmallVector currentSeq; for (auto &write : slice.writes) { + // Mask writes cannot be part of coalesced sequences + if (write.isMaskWrite()) { + // Save current sequence if it meets threshold + if (currentSeq.size() >= minWritesToCoalesce) { + sequences.push_back(currentSeq); + } + currentSeq.clear(); + continue; + } + if (currentSeq.empty()) { currentSeq.push_back(write); - } else if (write.address == currentSeq.back().address + 4) { - // Contiguous with previous write + } else if (write.address == currentSeq.back().address + 4 && + !maskWriteAddresses.count(write.address)) { + // Contiguous with previous write and not a mask write address currentSeq.push_back(write); } else { // Not contiguous, start new sequence From 0ee638f1f8a39d40ee6edde3ae1e0e077407519d Mon Sep 17 00:00:00 2001 From: andrej Date: Wed, 3 Dec 2025 15:54:12 -0700 Subject: [PATCH 24/40] only reset legal tile connections --- lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp b/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp index 8d62997520e..3c7808ae220 100644 --- a/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp +++ b/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp @@ -1441,6 +1441,9 @@ xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, // For each possible destination, check all channels (0-7 is typical) for (auto dstBundle : possibleDests) { for (int dstChan = 0; dstChan < 8; dstChan++) { + if (!targetModel.isLegalTileConnection(col, row, srcBundle, srcChan, dstBundle, dstChan)) { + continue; + } // Check if this specific connection exists in current design bool isUsed = false; for (auto [cSrcBundle, cSrcChan, cDstBundle, cDstChan] : currentConns) { @@ -1467,6 +1470,9 @@ xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, // Find connections that were in previous but are NOT in current for (auto [pSrcBundle, pSrcChan, pDstBundle, pDstChan] : prevConns) { + if (!targetModel.isLegalTileConnection(col, row, pSrcBundle, pSrcChan, pDstBundle, pDstChan)) { + continue; + } bool stillUsed = false; for (auto [cSrcBundle, cSrcChan, cDstBundle, cDstChan] : currentConns) { if (pSrcBundle == cSrcBundle && pSrcChan == cSrcChan && From 1f274a1e0e220e0c8cb145b3e2f6e4762666fe4c Mon Sep 17 00:00:00 2001 From: andrej Date: Wed, 3 Dec 2025 15:56:01 -0700 Subject: [PATCH 25/40] fix selection of what to reset in the aiecc.py args --- python/compiler/aiecc/cl_arguments.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/python/compiler/aiecc/cl_arguments.py b/python/compiler/aiecc/cl_arguments.py index d34f7dfde48..435762cb076 100644 --- a/python/compiler/aiecc/cl_arguments.py +++ b/python/compiler/aiecc/cl_arguments.py @@ -471,6 +471,28 @@ def parse_args(args=None): ) opts = parser.parse_args(args) + + # Set defaults for specific reset options if not specified + if opts.reset_dmas_tiles is None: + opts.reset_dmas_tiles = opts.reset_tiles + if opts.reset_dmas_mode is None: + opts.reset_dmas_mode = opts.reset_mode + + if opts.reset_switches_tiles is None: + opts.reset_switches_tiles = opts.reset_tiles + if opts.reset_switches_mode is None: + opts.reset_switches_mode = opts.reset_mode + + if opts.reset_locks_tiles is None: + opts.reset_locks_tiles = opts.reset_tiles + if opts.reset_locks_mode is None: + opts.reset_locks_mode = opts.reset_mode + + if opts.reset_cores_tiles is None: + opts.reset_cores_tiles = opts.reset_tiles + if opts.reset_cores_mode is None: + opts.reset_cores_mode = opts.reset_mode + return opts From 72b0818a8ccc240cb4598bbd449fddfaf0e7a5e1 Mon Sep 17 00:00:00 2001 From: andrej Date: Wed, 3 Dec 2025 15:56:40 -0700 Subject: [PATCH 26/40] new results with different levels of resetting --- .../0_write32s_reset_core_dma_switch_lock.csv | 1000 ++ .../1_write32s_reset_core_dma_switch.csv | 1000 ++ .../ablation/2_write32s_reset_core_dma.csv | 1000 ++ .../ablation/3_write32s_reset_core.csv | 1000 ++ .../ablation/4_write32s_reset_nothing.csv | 1000 ++ .../ablation/ablation_results.png | Bin 0 -> 238506 bytes .../ablation/visualize_ablation.py | 214 + .../reconfiguration/benchmark_results.csv | 11750 +++++++++++----- .../reconfiguration/benchmark_results.png | Bin 180048 -> 336117 bytes .../reconfiguration/run_benchmarks.sh | 30 +- .../fused_transactions_write32s/Makefile | 52 +- .../fused_transactions_write32s/test.cpp | 6 +- .../reconfiguration/visualize_results.py | 143 +- third_party/bootgen | 2 +- utils/build-mlir-aie-from-wheels.sh | 2 +- 15 files changed, 13264 insertions(+), 3935 deletions(-) create mode 100644 programming_examples/reconfiguration/ablation/0_write32s_reset_core_dma_switch_lock.csv create mode 100644 programming_examples/reconfiguration/ablation/1_write32s_reset_core_dma_switch.csv create mode 100644 programming_examples/reconfiguration/ablation/2_write32s_reset_core_dma.csv create mode 100644 programming_examples/reconfiguration/ablation/3_write32s_reset_core.csv create mode 100644 programming_examples/reconfiguration/ablation/4_write32s_reset_nothing.csv create mode 100644 programming_examples/reconfiguration/ablation/ablation_results.png create mode 100755 programming_examples/reconfiguration/ablation/visualize_ablation.py diff --git a/programming_examples/reconfiguration/ablation/0_write32s_reset_core_dma_switch_lock.csv b/programming_examples/reconfiguration/ablation/0_write32s_reset_core_dma_switch_lock.csv new file mode 100644 index 00000000000..3bc8208d9bb --- /dev/null +++ b/programming_examples/reconfiguration/ablation/0_write32s_reset_core_dma_switch_lock.csv @@ -0,0 +1,1000 @@ +fused_transactions_write32s,0,10900 +fused_transactions_write32s,1,10849 +fused_transactions_write32s,2,10791 +fused_transactions_write32s,3,10782 +fused_transactions_write32s,4,10777 +fused_transactions_write32s,5,10785 +fused_transactions_write32s,6,10780 +fused_transactions_write32s,7,10784 +fused_transactions_write32s,8,10780 +fused_transactions_write32s,9,10779 +fused_transactions_write32s,10,10786 +fused_transactions_write32s,11,10783 +fused_transactions_write32s,12,10786 +fused_transactions_write32s,13,10778 +fused_transactions_write32s,14,10784 +fused_transactions_write32s,15,10781 +fused_transactions_write32s,16,10783 +fused_transactions_write32s,17,10779 +fused_transactions_write32s,18,10781 +fused_transactions_write32s,19,10783 +fused_transactions_write32s,20,10779 +fused_transactions_write32s,21,10777 +fused_transactions_write32s,22,10783 +fused_transactions_write32s,23,10782 +fused_transactions_write32s,24,10777 +fused_transactions_write32s,25,10774 +fused_transactions_write32s,26,10781 +fused_transactions_write32s,27,10779 +fused_transactions_write32s,28,10777 +fused_transactions_write32s,29,10798 +fused_transactions_write32s,30,10785 +fused_transactions_write32s,31,10775 +fused_transactions_write32s,32,10778 +fused_transactions_write32s,33,10781 +fused_transactions_write32s,34,10787 +fused_transactions_write32s,35,10780 +fused_transactions_write32s,36,10783 +fused_transactions_write32s,37,10778 +fused_transactions_write32s,38,10782 +fused_transactions_write32s,39,10771 +fused_transactions_write32s,40,10758 +fused_transactions_write32s,41,10758 +fused_transactions_write32s,42,10783 +fused_transactions_write32s,43,10774 +fused_transactions_write32s,44,10787 +fused_transactions_write32s,45,10777 +fused_transactions_write32s,46,10781 +fused_transactions_write32s,47,10780 +fused_transactions_write32s,48,10777 +fused_transactions_write32s,49,10773 +fused_transactions_write32s,50,10778 +fused_transactions_write32s,51,10777 +fused_transactions_write32s,52,10772 +fused_transactions_write32s,53,10777 +fused_transactions_write32s,54,10780 +fused_transactions_write32s,55,10776 +fused_transactions_write32s,56,10776 +fused_transactions_write32s,57,10778 +fused_transactions_write32s,58,10772 +fused_transactions_write32s,59,10776 +fused_transactions_write32s,60,10776 +fused_transactions_write32s,61,10781 +fused_transactions_write32s,62,10772 +fused_transactions_write32s,63,10773 +fused_transactions_write32s,64,10779 +fused_transactions_write32s,65,10776 +fused_transactions_write32s,66,10774 +fused_transactions_write32s,67,10777 +fused_transactions_write32s,68,10780 +fused_transactions_write32s,69,10784 +fused_transactions_write32s,70,10786 +fused_transactions_write32s,71,10776 +fused_transactions_write32s,72,10779 +fused_transactions_write32s,73,10775 +fused_transactions_write32s,74,10776 +fused_transactions_write32s,75,10775 +fused_transactions_write32s,76,10785 +fused_transactions_write32s,77,10773 +fused_transactions_write32s,78,10775 +fused_transactions_write32s,79,10781 +fused_transactions_write32s,80,10783 +fused_transactions_write32s,81,10771 +fused_transactions_write32s,82,10784 +fused_transactions_write32s,83,10775 +fused_transactions_write32s,84,10781 +fused_transactions_write32s,85,10769 +fused_transactions_write32s,86,10772 +fused_transactions_write32s,87,10776 +fused_transactions_write32s,88,10782 +fused_transactions_write32s,89,10780 +fused_transactions_write32s,90,10777 +fused_transactions_write32s,91,10782 +fused_transactions_write32s,92,10777 +fused_transactions_write32s,93,10776 +fused_transactions_write32s,94,10780 +fused_transactions_write32s,95,10783 +fused_transactions_write32s,96,10777 +fused_transactions_write32s,97,10774 +fused_transactions_write32s,98,10779 +fused_transactions_write32s,99,10777 +fused_transactions_write32s,100,10779 +fused_transactions_write32s,101,10780 +fused_transactions_write32s,102,10781 +fused_transactions_write32s,103,10783 +fused_transactions_write32s,104,10782 +fused_transactions_write32s,105,10778 +fused_transactions_write32s,106,10780 +fused_transactions_write32s,107,10773 +fused_transactions_write32s,108,10781 +fused_transactions_write32s,109,10782 +fused_transactions_write32s,110,10771 +fused_transactions_write32s,111,10783 +fused_transactions_write32s,112,10783 +fused_transactions_write32s,113,10782 +fused_transactions_write32s,114,10787 +fused_transactions_write32s,115,10778 +fused_transactions_write32s,116,10778 +fused_transactions_write32s,117,10773 +fused_transactions_write32s,118,10781 +fused_transactions_write32s,119,10778 +fused_transactions_write32s,120,10774 +fused_transactions_write32s,121,10773 +fused_transactions_write32s,122,10782 +fused_transactions_write32s,123,10781 +fused_transactions_write32s,124,10779 +fused_transactions_write32s,125,10782 +fused_transactions_write32s,126,10783 +fused_transactions_write32s,127,10778 +fused_transactions_write32s,128,10781 +fused_transactions_write32s,129,10778 +fused_transactions_write32s,130,10777 +fused_transactions_write32s,131,10782 +fused_transactions_write32s,132,10786 +fused_transactions_write32s,133,10779 +fused_transactions_write32s,134,10783 +fused_transactions_write32s,135,10778 +fused_transactions_write32s,136,10784 +fused_transactions_write32s,137,10781 +fused_transactions_write32s,138,10777 +fused_transactions_write32s,139,11103 +fused_transactions_write32s,140,10786 +fused_transactions_write32s,141,10786 +fused_transactions_write32s,142,10782 +fused_transactions_write32s,143,10775 +fused_transactions_write32s,144,10779 +fused_transactions_write32s,145,10776 +fused_transactions_write32s,146,10781 +fused_transactions_write32s,147,10779 +fused_transactions_write32s,148,10778 +fused_transactions_write32s,149,10777 +fused_transactions_write32s,150,10782 +fused_transactions_write32s,151,10779 +fused_transactions_write32s,152,10774 +fused_transactions_write32s,153,10780 +fused_transactions_write32s,154,10779 +fused_transactions_write32s,155,10775 +fused_transactions_write32s,156,10778 +fused_transactions_write32s,157,10776 +fused_transactions_write32s,158,10772 +fused_transactions_write32s,159,10784 +fused_transactions_write32s,160,10776 +fused_transactions_write32s,161,10776 +fused_transactions_write32s,162,10775 +fused_transactions_write32s,163,10778 +fused_transactions_write32s,164,10777 +fused_transactions_write32s,165,10777 +fused_transactions_write32s,166,10776 +fused_transactions_write32s,167,10782 +fused_transactions_write32s,168,10776 +fused_transactions_write32s,169,10775 +fused_transactions_write32s,170,10775 +fused_transactions_write32s,171,10780 +fused_transactions_write32s,172,10775 +fused_transactions_write32s,173,10773 +fused_transactions_write32s,174,10773 +fused_transactions_write32s,175,10778 +fused_transactions_write32s,176,10781 +fused_transactions_write32s,177,10781 +fused_transactions_write32s,178,10780 +fused_transactions_write32s,179,10786 +fused_transactions_write32s,180,10774 +fused_transactions_write32s,181,10777 +fused_transactions_write32s,182,10777 +fused_transactions_write32s,183,10776 +fused_transactions_write32s,184,10775 +fused_transactions_write32s,185,10776 +fused_transactions_write32s,186,10774 +fused_transactions_write32s,187,10776 +fused_transactions_write32s,188,10775 +fused_transactions_write32s,189,10783 +fused_transactions_write32s,190,10779 +fused_transactions_write32s,191,10785 +fused_transactions_write32s,192,10781 +fused_transactions_write32s,193,10779 +fused_transactions_write32s,194,10780 +fused_transactions_write32s,195,10781 +fused_transactions_write32s,196,10783 +fused_transactions_write32s,197,10776 +fused_transactions_write32s,198,10777 +fused_transactions_write32s,199,10779 +fused_transactions_write32s,200,10782 +fused_transactions_write32s,201,10779 +fused_transactions_write32s,202,10782 +fused_transactions_write32s,203,10778 +fused_transactions_write32s,204,10780 +fused_transactions_write32s,205,10784 +fused_transactions_write32s,206,10779 +fused_transactions_write32s,207,10775 +fused_transactions_write32s,208,10773 +fused_transactions_write32s,209,10775 +fused_transactions_write32s,210,10782 +fused_transactions_write32s,211,10781 +fused_transactions_write32s,212,10778 +fused_transactions_write32s,213,10779 +fused_transactions_write32s,214,10783 +fused_transactions_write32s,215,10778 +fused_transactions_write32s,216,10779 +fused_transactions_write32s,217,10780 +fused_transactions_write32s,218,10784 +fused_transactions_write32s,219,10780 +fused_transactions_write32s,220,10774 +fused_transactions_write32s,221,10779 +fused_transactions_write32s,222,10780 +fused_transactions_write32s,223,10787 +fused_transactions_write32s,224,10789 +fused_transactions_write32s,225,10779 +fused_transactions_write32s,226,10781 +fused_transactions_write32s,227,10780 +fused_transactions_write32s,228,10779 +fused_transactions_write32s,229,10777 +fused_transactions_write32s,230,10772 +fused_transactions_write32s,231,10775 +fused_transactions_write32s,232,10779 +fused_transactions_write32s,233,10780 +fused_transactions_write32s,234,10784 +fused_transactions_write32s,235,10777 +fused_transactions_write32s,236,10777 +fused_transactions_write32s,237,10770 +fused_transactions_write32s,238,10778 +fused_transactions_write32s,239,10774 +fused_transactions_write32s,240,10773 +fused_transactions_write32s,241,10774 +fused_transactions_write32s,242,10780 +fused_transactions_write32s,243,10779 +fused_transactions_write32s,244,10779 +fused_transactions_write32s,245,10772 +fused_transactions_write32s,246,10778 +fused_transactions_write32s,247,10784 +fused_transactions_write32s,248,10783 +fused_transactions_write32s,249,10782 +fused_transactions_write32s,250,10779 +fused_transactions_write32s,251,10780 +fused_transactions_write32s,252,10784 +fused_transactions_write32s,253,10777 +fused_transactions_write32s,254,10782 +fused_transactions_write32s,255,10783 +fused_transactions_write32s,256,10780 +fused_transactions_write32s,257,10781 +fused_transactions_write32s,258,10782 +fused_transactions_write32s,259,10776 +fused_transactions_write32s,260,10783 +fused_transactions_write32s,261,10778 +fused_transactions_write32s,262,10775 +fused_transactions_write32s,263,10776 +fused_transactions_write32s,264,10780 +fused_transactions_write32s,265,10776 +fused_transactions_write32s,266,10778 +fused_transactions_write32s,267,10781 +fused_transactions_write32s,268,10779 +fused_transactions_write32s,269,10786 +fused_transactions_write32s,270,10779 +fused_transactions_write32s,271,10784 +fused_transactions_write32s,272,10779 +fused_transactions_write32s,273,10780 +fused_transactions_write32s,274,10779 +fused_transactions_write32s,275,10776 +fused_transactions_write32s,276,10782 +fused_transactions_write32s,277,10782 +fused_transactions_write32s,278,10781 +fused_transactions_write32s,279,10780 +fused_transactions_write32s,280,10776 +fused_transactions_write32s,281,10779 +fused_transactions_write32s,282,10778 +fused_transactions_write32s,283,10777 +fused_transactions_write32s,284,10775 +fused_transactions_write32s,285,10779 +fused_transactions_write32s,286,10780 +fused_transactions_write32s,287,10779 +fused_transactions_write32s,288,10783 +fused_transactions_write32s,289,10782 +fused_transactions_write32s,290,10777 +fused_transactions_write32s,291,10776 +fused_transactions_write32s,292,10774 +fused_transactions_write32s,293,10780 +fused_transactions_write32s,294,10778 +fused_transactions_write32s,295,10778 +fused_transactions_write32s,296,10777 +fused_transactions_write32s,297,10783 +fused_transactions_write32s,298,10788 +fused_transactions_write32s,299,10783 +fused_transactions_write32s,300,10780 +fused_transactions_write32s,301,10780 +fused_transactions_write32s,302,10778 +fused_transactions_write32s,303,10778 +fused_transactions_write32s,304,10777 +fused_transactions_write32s,305,10776 +fused_transactions_write32s,306,10779 +fused_transactions_write32s,307,10775 +fused_transactions_write32s,308,10781 +fused_transactions_write32s,309,10780 +fused_transactions_write32s,310,10781 +fused_transactions_write32s,311,10781 +fused_transactions_write32s,312,10776 +fused_transactions_write32s,313,10777 +fused_transactions_write32s,314,10774 +fused_transactions_write32s,315,10782 +fused_transactions_write32s,316,10785 +fused_transactions_write32s,317,10781 +fused_transactions_write32s,318,10762 +fused_transactions_write32s,319,10778 +fused_transactions_write32s,320,10775 +fused_transactions_write32s,321,10774 +fused_transactions_write32s,322,10788 +fused_transactions_write32s,323,10779 +fused_transactions_write32s,324,10783 +fused_transactions_write32s,325,10778 +fused_transactions_write32s,326,10775 +fused_transactions_write32s,327,10781 +fused_transactions_write32s,328,10779 +fused_transactions_write32s,329,10778 +fused_transactions_write32s,330,10775 +fused_transactions_write32s,331,10783 +fused_transactions_write32s,332,10776 +fused_transactions_write32s,333,10778 +fused_transactions_write32s,334,10780 +fused_transactions_write32s,335,10778 +fused_transactions_write32s,336,10778 +fused_transactions_write32s,337,10779 +fused_transactions_write32s,338,10780 +fused_transactions_write32s,339,10782 +fused_transactions_write32s,340,10780 +fused_transactions_write32s,341,10775 +fused_transactions_write32s,342,10779 +fused_transactions_write32s,343,10780 +fused_transactions_write32s,344,10782 +fused_transactions_write32s,345,10774 +fused_transactions_write32s,346,10775 +fused_transactions_write32s,347,10779 +fused_transactions_write32s,348,10780 +fused_transactions_write32s,349,10777 +fused_transactions_write32s,350,10775 +fused_transactions_write32s,351,10776 +fused_transactions_write32s,352,10775 +fused_transactions_write32s,353,10779 +fused_transactions_write32s,354,10781 +fused_transactions_write32s,355,10777 +fused_transactions_write32s,356,10774 +fused_transactions_write32s,357,10778 +fused_transactions_write32s,358,10780 +fused_transactions_write32s,359,10774 +fused_transactions_write32s,360,10779 +fused_transactions_write32s,361,10774 +fused_transactions_write32s,362,10776 +fused_transactions_write32s,363,10774 +fused_transactions_write32s,364,10783 +fused_transactions_write32s,365,10786 +fused_transactions_write32s,366,10783 +fused_transactions_write32s,367,10778 +fused_transactions_write32s,368,10776 +fused_transactions_write32s,369,10775 +fused_transactions_write32s,370,10778 +fused_transactions_write32s,371,10773 +fused_transactions_write32s,372,10777 +fused_transactions_write32s,373,10777 +fused_transactions_write32s,374,10778 +fused_transactions_write32s,375,10782 +fused_transactions_write32s,376,10769 +fused_transactions_write32s,377,10777 +fused_transactions_write32s,378,10780 +fused_transactions_write32s,379,10783 +fused_transactions_write32s,380,10783 +fused_transactions_write32s,381,10783 +fused_transactions_write32s,382,10782 +fused_transactions_write32s,383,10785 +fused_transactions_write32s,384,10784 +fused_transactions_write32s,385,10776 +fused_transactions_write32s,386,10778 +fused_transactions_write32s,387,10783 +fused_transactions_write32s,388,10781 +fused_transactions_write32s,389,10786 +fused_transactions_write32s,390,10779 +fused_transactions_write32s,391,10775 +fused_transactions_write32s,392,10776 +fused_transactions_write32s,393,10774 +fused_transactions_write32s,394,10777 +fused_transactions_write32s,395,10776 +fused_transactions_write32s,396,10777 +fused_transactions_write32s,397,10782 +fused_transactions_write32s,398,10782 +fused_transactions_write32s,399,10782 +fused_transactions_write32s,400,10777 +fused_transactions_write32s,401,10779 +fused_transactions_write32s,402,10766 +fused_transactions_write32s,403,10776 +fused_transactions_write32s,404,10783 +fused_transactions_write32s,405,10783 +fused_transactions_write32s,406,10779 +fused_transactions_write32s,407,10780 +fused_transactions_write32s,408,10782 +fused_transactions_write32s,409,10783 +fused_transactions_write32s,410,10783 +fused_transactions_write32s,411,10785 +fused_transactions_write32s,412,10783 +fused_transactions_write32s,413,10777 +fused_transactions_write32s,414,10778 +fused_transactions_write32s,415,10783 +fused_transactions_write32s,416,10775 +fused_transactions_write32s,417,10781 +fused_transactions_write32s,418,10781 +fused_transactions_write32s,419,10779 +fused_transactions_write32s,420,10779 +fused_transactions_write32s,421,10778 +fused_transactions_write32s,422,10774 +fused_transactions_write32s,423,10782 +fused_transactions_write32s,424,10781 +fused_transactions_write32s,425,10786 +fused_transactions_write32s,426,10781 +fused_transactions_write32s,427,10786 +fused_transactions_write32s,428,10779 +fused_transactions_write32s,429,10781 +fused_transactions_write32s,430,10779 +fused_transactions_write32s,431,10782 +fused_transactions_write32s,432,10784 +fused_transactions_write32s,433,10776 +fused_transactions_write32s,434,10778 +fused_transactions_write32s,435,10783 +fused_transactions_write32s,436,10783 +fused_transactions_write32s,437,10778 +fused_transactions_write32s,438,10784 +fused_transactions_write32s,439,10781 +fused_transactions_write32s,440,10782 +fused_transactions_write32s,441,10782 +fused_transactions_write32s,442,10783 +fused_transactions_write32s,443,10777 +fused_transactions_write32s,444,10785 +fused_transactions_write32s,445,10780 +fused_transactions_write32s,446,10786 +fused_transactions_write32s,447,10778 +fused_transactions_write32s,448,10794 +fused_transactions_write32s,449,10788 +fused_transactions_write32s,450,10784 +fused_transactions_write32s,451,10780 +fused_transactions_write32s,452,10778 +fused_transactions_write32s,453,10778 +fused_transactions_write32s,454,10781 +fused_transactions_write32s,455,10783 +fused_transactions_write32s,456,10782 +fused_transactions_write32s,457,10779 +fused_transactions_write32s,458,10773 +fused_transactions_write32s,459,10779 +fused_transactions_write32s,460,10779 +fused_transactions_write32s,461,10777 +fused_transactions_write32s,462,10780 +fused_transactions_write32s,463,10777 +fused_transactions_write32s,464,10780 +fused_transactions_write32s,465,10773 +fused_transactions_write32s,466,10784 +fused_transactions_write32s,467,10779 +fused_transactions_write32s,468,10773 +fused_transactions_write32s,469,10778 +fused_transactions_write32s,470,10777 +fused_transactions_write32s,471,10784 +fused_transactions_write32s,472,10782 +fused_transactions_write32s,473,10781 +fused_transactions_write32s,474,10783 +fused_transactions_write32s,475,10779 +fused_transactions_write32s,476,10782 +fused_transactions_write32s,477,10783 +fused_transactions_write32s,478,10783 +fused_transactions_write32s,479,10775 +fused_transactions_write32s,480,10779 +fused_transactions_write32s,481,10777 +fused_transactions_write32s,482,10780 +fused_transactions_write32s,483,10778 +fused_transactions_write32s,484,10772 +fused_transactions_write32s,485,10777 +fused_transactions_write32s,486,10781 +fused_transactions_write32s,487,10781 +fused_transactions_write32s,488,10779 +fused_transactions_write32s,489,10784 +fused_transactions_write32s,490,10782 +fused_transactions_write32s,491,10774 +fused_transactions_write32s,492,10778 +fused_transactions_write32s,493,10781 +fused_transactions_write32s,494,10782 +fused_transactions_write32s,495,10781 +fused_transactions_write32s,496,10781 +fused_transactions_write32s,497,10780 +fused_transactions_write32s,498,10782 +fused_transactions_write32s,499,10784 +fused_transactions_write32s,500,10778 +fused_transactions_write32s,501,10784 +fused_transactions_write32s,502,10778 +fused_transactions_write32s,503,10781 +fused_transactions_write32s,504,10783 +fused_transactions_write32s,505,10779 +fused_transactions_write32s,506,10776 +fused_transactions_write32s,507,10777 +fused_transactions_write32s,508,10776 +fused_transactions_write32s,509,10778 +fused_transactions_write32s,510,10776 +fused_transactions_write32s,511,10779 +fused_transactions_write32s,512,10778 +fused_transactions_write32s,513,10779 +fused_transactions_write32s,514,10783 +fused_transactions_write32s,515,10778 +fused_transactions_write32s,516,10771 +fused_transactions_write32s,517,10780 +fused_transactions_write32s,518,10785 +fused_transactions_write32s,519,10783 +fused_transactions_write32s,520,10780 +fused_transactions_write32s,521,10776 +fused_transactions_write32s,522,10785 +fused_transactions_write32s,523,10777 +fused_transactions_write32s,524,10776 +fused_transactions_write32s,525,10778 +fused_transactions_write32s,526,10776 +fused_transactions_write32s,527,10782 +fused_transactions_write32s,528,10783 +fused_transactions_write32s,529,10781 +fused_transactions_write32s,530,10779 +fused_transactions_write32s,531,10779 +fused_transactions_write32s,532,10774 +fused_transactions_write32s,533,10781 +fused_transactions_write32s,534,10771 +fused_transactions_write32s,535,10775 +fused_transactions_write32s,536,10776 +fused_transactions_write32s,537,10781 +fused_transactions_write32s,538,10782 +fused_transactions_write32s,539,10780 +fused_transactions_write32s,540,10782 +fused_transactions_write32s,541,10781 +fused_transactions_write32s,542,10784 +fused_transactions_write32s,543,10779 +fused_transactions_write32s,544,10777 +fused_transactions_write32s,545,10778 +fused_transactions_write32s,546,10773 +fused_transactions_write32s,547,10774 +fused_transactions_write32s,548,10776 +fused_transactions_write32s,549,10776 +fused_transactions_write32s,550,10783 +fused_transactions_write32s,551,10775 +fused_transactions_write32s,552,10779 +fused_transactions_write32s,553,10772 +fused_transactions_write32s,554,10776 +fused_transactions_write32s,555,10775 +fused_transactions_write32s,556,10777 +fused_transactions_write32s,557,10777 +fused_transactions_write32s,558,10775 +fused_transactions_write32s,559,10776 +fused_transactions_write32s,560,10775 +fused_transactions_write32s,561,10779 +fused_transactions_write32s,562,10777 +fused_transactions_write32s,563,10782 +fused_transactions_write32s,564,10789 +fused_transactions_write32s,565,10787 +fused_transactions_write32s,566,10786 +fused_transactions_write32s,567,10772 +fused_transactions_write32s,568,10786 +fused_transactions_write32s,569,10784 +fused_transactions_write32s,570,10785 +fused_transactions_write32s,571,10774 +fused_transactions_write32s,572,10776 +fused_transactions_write32s,573,10781 +fused_transactions_write32s,574,10780 +fused_transactions_write32s,575,10775 +fused_transactions_write32s,576,10782 +fused_transactions_write32s,577,10785 +fused_transactions_write32s,578,10779 +fused_transactions_write32s,579,10779 +fused_transactions_write32s,580,10776 +fused_transactions_write32s,581,10779 +fused_transactions_write32s,582,10781 +fused_transactions_write32s,583,10778 +fused_transactions_write32s,584,10776 +fused_transactions_write32s,585,10781 +fused_transactions_write32s,586,10781 +fused_transactions_write32s,587,10781 +fused_transactions_write32s,588,10782 +fused_transactions_write32s,589,10782 +fused_transactions_write32s,590,10787 +fused_transactions_write32s,591,10779 +fused_transactions_write32s,592,10779 +fused_transactions_write32s,593,10784 +fused_transactions_write32s,594,10780 +fused_transactions_write32s,595,10778 +fused_transactions_write32s,596,10781 +fused_transactions_write32s,597,10784 +fused_transactions_write32s,598,10778 +fused_transactions_write32s,599,10777 +fused_transactions_write32s,600,10774 +fused_transactions_write32s,601,10778 +fused_transactions_write32s,602,10778 +fused_transactions_write32s,603,10787 +fused_transactions_write32s,604,10779 +fused_transactions_write32s,605,10779 +fused_transactions_write32s,606,10775 +fused_transactions_write32s,607,10778 +fused_transactions_write32s,608,10784 +fused_transactions_write32s,609,10781 +fused_transactions_write32s,610,10780 +fused_transactions_write32s,611,10779 +fused_transactions_write32s,612,10778 +fused_transactions_write32s,613,10780 +fused_transactions_write32s,614,11102 +fused_transactions_write32s,615,10782 +fused_transactions_write32s,616,10783 +fused_transactions_write32s,617,10780 +fused_transactions_write32s,618,10775 +fused_transactions_write32s,619,10781 +fused_transactions_write32s,620,10776 +fused_transactions_write32s,621,10783 +fused_transactions_write32s,622,10782 +fused_transactions_write32s,623,10781 +fused_transactions_write32s,624,10779 +fused_transactions_write32s,625,10782 +fused_transactions_write32s,626,10782 +fused_transactions_write32s,627,10772 +fused_transactions_write32s,628,10766 +fused_transactions_write32s,629,10766 +fused_transactions_write32s,630,10767 +fused_transactions_write32s,631,10773 +fused_transactions_write32s,632,10760 +fused_transactions_write32s,633,10766 +fused_transactions_write32s,634,10766 +fused_transactions_write32s,635,10762 +fused_transactions_write32s,636,10762 +fused_transactions_write32s,637,10764 +fused_transactions_write32s,638,10764 +fused_transactions_write32s,639,10764 +fused_transactions_write32s,640,10763 +fused_transactions_write32s,641,10767 +fused_transactions_write32s,642,10764 +fused_transactions_write32s,643,10765 +fused_transactions_write32s,644,10768 +fused_transactions_write32s,645,10761 +fused_transactions_write32s,646,10768 +fused_transactions_write32s,647,10765 +fused_transactions_write32s,648,10773 +fused_transactions_write32s,649,10764 +fused_transactions_write32s,650,10764 +fused_transactions_write32s,651,10762 +fused_transactions_write32s,652,10766 +fused_transactions_write32s,653,10765 +fused_transactions_write32s,654,10764 +fused_transactions_write32s,655,10751 +fused_transactions_write32s,656,10763 +fused_transactions_write32s,657,10766 +fused_transactions_write32s,658,10762 +fused_transactions_write32s,659,10766 +fused_transactions_write32s,660,10766 +fused_transactions_write32s,661,10764 +fused_transactions_write32s,662,10766 +fused_transactions_write32s,663,10759 +fused_transactions_write32s,664,10761 +fused_transactions_write32s,665,10758 +fused_transactions_write32s,666,10763 +fused_transactions_write32s,667,10770 +fused_transactions_write32s,668,10763 +fused_transactions_write32s,669,10765 +fused_transactions_write32s,670,10765 +fused_transactions_write32s,671,10764 +fused_transactions_write32s,672,10764 +fused_transactions_write32s,673,10764 +fused_transactions_write32s,674,10763 +fused_transactions_write32s,675,10763 +fused_transactions_write32s,676,10762 +fused_transactions_write32s,677,10763 +fused_transactions_write32s,678,10765 +fused_transactions_write32s,679,10763 +fused_transactions_write32s,680,10766 +fused_transactions_write32s,681,10762 +fused_transactions_write32s,682,10767 +fused_transactions_write32s,683,10765 +fused_transactions_write32s,684,10761 +fused_transactions_write32s,685,10765 +fused_transactions_write32s,686,10766 +fused_transactions_write32s,687,10767 +fused_transactions_write32s,688,10763 +fused_transactions_write32s,689,10765 +fused_transactions_write32s,690,10765 +fused_transactions_write32s,691,10762 +fused_transactions_write32s,692,10765 +fused_transactions_write32s,693,10768 +fused_transactions_write32s,694,10764 +fused_transactions_write32s,695,10763 +fused_transactions_write32s,696,10763 +fused_transactions_write32s,697,10764 +fused_transactions_write32s,698,10759 +fused_transactions_write32s,699,10766 +fused_transactions_write32s,700,10762 +fused_transactions_write32s,701,10770 +fused_transactions_write32s,702,10762 +fused_transactions_write32s,703,10765 +fused_transactions_write32s,704,10768 +fused_transactions_write32s,705,10761 +fused_transactions_write32s,706,10768 +fused_transactions_write32s,707,10768 +fused_transactions_write32s,708,10768 +fused_transactions_write32s,709,10764 +fused_transactions_write32s,710,10764 +fused_transactions_write32s,711,10764 +fused_transactions_write32s,712,10761 +fused_transactions_write32s,713,10763 +fused_transactions_write32s,714,10766 +fused_transactions_write32s,715,10757 +fused_transactions_write32s,716,10762 +fused_transactions_write32s,717,10763 +fused_transactions_write32s,718,10769 +fused_transactions_write32s,719,10765 +fused_transactions_write32s,720,10759 +fused_transactions_write32s,721,10759 +fused_transactions_write32s,722,10763 +fused_transactions_write32s,723,10768 +fused_transactions_write32s,724,10763 +fused_transactions_write32s,725,10761 +fused_transactions_write32s,726,10768 +fused_transactions_write32s,727,10767 +fused_transactions_write32s,728,10767 +fused_transactions_write32s,729,10763 +fused_transactions_write32s,730,10761 +fused_transactions_write32s,731,10767 +fused_transactions_write32s,732,10763 +fused_transactions_write32s,733,10762 +fused_transactions_write32s,734,10761 +fused_transactions_write32s,735,10769 +fused_transactions_write32s,736,10763 +fused_transactions_write32s,737,10763 +fused_transactions_write32s,738,10761 +fused_transactions_write32s,739,10766 +fused_transactions_write32s,740,10763 +fused_transactions_write32s,741,10766 +fused_transactions_write32s,742,10764 +fused_transactions_write32s,743,10765 +fused_transactions_write32s,744,10767 +fused_transactions_write32s,745,10762 +fused_transactions_write32s,746,10759 +fused_transactions_write32s,747,10769 +fused_transactions_write32s,748,10764 +fused_transactions_write32s,749,10765 +fused_transactions_write32s,750,10761 +fused_transactions_write32s,751,10762 +fused_transactions_write32s,752,10763 +fused_transactions_write32s,753,10764 +fused_transactions_write32s,754,10768 +fused_transactions_write32s,755,10762 +fused_transactions_write32s,756,10763 +fused_transactions_write32s,757,10757 +fused_transactions_write32s,758,10767 +fused_transactions_write32s,759,10764 +fused_transactions_write32s,760,10760 +fused_transactions_write32s,761,10762 +fused_transactions_write32s,762,10761 +fused_transactions_write32s,763,10764 +fused_transactions_write32s,764,10766 +fused_transactions_write32s,765,10764 +fused_transactions_write32s,766,10767 +fused_transactions_write32s,767,10763 +fused_transactions_write32s,768,10764 +fused_transactions_write32s,769,10764 +fused_transactions_write32s,770,10767 +fused_transactions_write32s,771,10761 +fused_transactions_write32s,772,10764 +fused_transactions_write32s,773,10765 +fused_transactions_write32s,774,10763 +fused_transactions_write32s,775,10761 +fused_transactions_write32s,776,10763 +fused_transactions_write32s,777,10760 +fused_transactions_write32s,778,10757 +fused_transactions_write32s,779,10765 +fused_transactions_write32s,780,10787 +fused_transactions_write32s,781,10797 +fused_transactions_write32s,782,10776 +fused_transactions_write32s,783,10771 +fused_transactions_write32s,784,10774 +fused_transactions_write32s,785,10774 +fused_transactions_write32s,786,10776 +fused_transactions_write32s,787,10776 +fused_transactions_write32s,788,10775 +fused_transactions_write32s,789,10775 +fused_transactions_write32s,790,10777 +fused_transactions_write32s,791,10767 +fused_transactions_write32s,792,10783 +fused_transactions_write32s,793,10776 +fused_transactions_write32s,794,10775 +fused_transactions_write32s,795,10774 +fused_transactions_write32s,796,10771 +fused_transactions_write32s,797,10771 +fused_transactions_write32s,798,10783 +fused_transactions_write32s,799,10783 +fused_transactions_write32s,800,10777 +fused_transactions_write32s,801,10777 +fused_transactions_write32s,802,10782 +fused_transactions_write32s,803,10782 +fused_transactions_write32s,804,10780 +fused_transactions_write32s,805,10780 +fused_transactions_write32s,806,10779 +fused_transactions_write32s,807,10782 +fused_transactions_write32s,808,10774 +fused_transactions_write32s,809,10769 +fused_transactions_write32s,810,10781 +fused_transactions_write32s,811,10781 +fused_transactions_write32s,812,10783 +fused_transactions_write32s,813,10783 +fused_transactions_write32s,814,10782 +fused_transactions_write32s,815,10781 +fused_transactions_write32s,816,10780 +fused_transactions_write32s,817,10782 +fused_transactions_write32s,818,10781 +fused_transactions_write32s,819,10787 +fused_transactions_write32s,820,10782 +fused_transactions_write32s,821,10783 +fused_transactions_write32s,822,10779 +fused_transactions_write32s,823,10784 +fused_transactions_write32s,824,10782 +fused_transactions_write32s,825,10780 +fused_transactions_write32s,826,10788 +fused_transactions_write32s,827,10786 +fused_transactions_write32s,828,10781 +fused_transactions_write32s,829,10780 +fused_transactions_write32s,830,10781 +fused_transactions_write32s,831,10772 +fused_transactions_write32s,832,10775 +fused_transactions_write32s,833,10775 +fused_transactions_write32s,834,10778 +fused_transactions_write32s,835,10786 +fused_transactions_write32s,836,10774 +fused_transactions_write32s,837,10783 +fused_transactions_write32s,838,10768 +fused_transactions_write32s,839,10781 +fused_transactions_write32s,840,10781 +fused_transactions_write32s,841,10782 +fused_transactions_write32s,842,10775 +fused_transactions_write32s,843,10772 +fused_transactions_write32s,844,10781 +fused_transactions_write32s,845,10776 +fused_transactions_write32s,846,10775 +fused_transactions_write32s,847,10783 +fused_transactions_write32s,848,10776 +fused_transactions_write32s,849,10780 +fused_transactions_write32s,850,10777 +fused_transactions_write32s,851,10776 +fused_transactions_write32s,852,10789 +fused_transactions_write32s,853,10774 +fused_transactions_write32s,854,10780 +fused_transactions_write32s,855,10780 +fused_transactions_write32s,856,10791 +fused_transactions_write32s,857,10783 +fused_transactions_write32s,858,10778 +fused_transactions_write32s,859,10776 +fused_transactions_write32s,860,10780 +fused_transactions_write32s,861,10781 +fused_transactions_write32s,862,10784 +fused_transactions_write32s,863,10781 +fused_transactions_write32s,864,10780 +fused_transactions_write32s,865,10784 +fused_transactions_write32s,866,10775 +fused_transactions_write32s,867,10783 +fused_transactions_write32s,868,10779 +fused_transactions_write32s,869,10785 +fused_transactions_write32s,870,10784 +fused_transactions_write32s,871,10786 +fused_transactions_write32s,872,10778 +fused_transactions_write32s,873,10785 +fused_transactions_write32s,874,10783 +fused_transactions_write32s,875,10780 +fused_transactions_write32s,876,10779 +fused_transactions_write32s,877,10777 +fused_transactions_write32s,878,10782 +fused_transactions_write32s,879,10785 +fused_transactions_write32s,880,10774 +fused_transactions_write32s,881,10787 +fused_transactions_write32s,882,10783 +fused_transactions_write32s,883,10773 +fused_transactions_write32s,884,10785 +fused_transactions_write32s,885,10776 +fused_transactions_write32s,886,10776 +fused_transactions_write32s,887,10779 +fused_transactions_write32s,888,10779 +fused_transactions_write32s,889,10782 +fused_transactions_write32s,890,10784 +fused_transactions_write32s,891,10781 +fused_transactions_write32s,892,10777 +fused_transactions_write32s,893,10779 +fused_transactions_write32s,894,10778 +fused_transactions_write32s,895,10774 +fused_transactions_write32s,896,10776 +fused_transactions_write32s,897,10774 +fused_transactions_write32s,898,10776 +fused_transactions_write32s,899,10776 +fused_transactions_write32s,900,10777 +fused_transactions_write32s,901,10776 +fused_transactions_write32s,902,10788 +fused_transactions_write32s,903,10782 +fused_transactions_write32s,904,10774 +fused_transactions_write32s,905,10785 +fused_transactions_write32s,906,10780 +fused_transactions_write32s,907,10784 +fused_transactions_write32s,908,10776 +fused_transactions_write32s,909,10773 +fused_transactions_write32s,910,10782 +fused_transactions_write32s,911,10785 +fused_transactions_write32s,912,10787 +fused_transactions_write32s,913,10773 +fused_transactions_write32s,914,10780 +fused_transactions_write32s,915,10787 +fused_transactions_write32s,916,10778 +fused_transactions_write32s,917,10774 +fused_transactions_write32s,918,10777 +fused_transactions_write32s,919,10781 +fused_transactions_write32s,920,10781 +fused_transactions_write32s,921,10777 +fused_transactions_write32s,922,10773 +fused_transactions_write32s,923,10774 +fused_transactions_write32s,924,10770 +fused_transactions_write32s,925,10776 +fused_transactions_write32s,926,10785 +fused_transactions_write32s,927,10773 +fused_transactions_write32s,928,10781 +fused_transactions_write32s,929,10775 +fused_transactions_write32s,930,10803 +fused_transactions_write32s,931,10764 +fused_transactions_write32s,932,10762 +fused_transactions_write32s,933,10762 +fused_transactions_write32s,934,10766 +fused_transactions_write32s,935,10766 +fused_transactions_write32s,936,10764 +fused_transactions_write32s,937,10759 +fused_transactions_write32s,938,10763 +fused_transactions_write32s,939,10768 +fused_transactions_write32s,940,10765 +fused_transactions_write32s,941,10764 +fused_transactions_write32s,942,10762 +fused_transactions_write32s,943,10787 +fused_transactions_write32s,944,10785 +fused_transactions_write32s,945,10772 +fused_transactions_write32s,946,10782 +fused_transactions_write32s,947,10782 +fused_transactions_write32s,948,10779 +fused_transactions_write32s,949,10775 +fused_transactions_write32s,950,10770 +fused_transactions_write32s,951,10774 +fused_transactions_write32s,952,10783 +fused_transactions_write32s,953,10785 +fused_transactions_write32s,954,10782 +fused_transactions_write32s,955,10770 +fused_transactions_write32s,956,10776 +fused_transactions_write32s,957,10774 +fused_transactions_write32s,958,10776 +fused_transactions_write32s,959,10774 +fused_transactions_write32s,960,10775 +fused_transactions_write32s,961,10784 +fused_transactions_write32s,962,10780 +fused_transactions_write32s,963,10782 +fused_transactions_write32s,964,10774 +fused_transactions_write32s,965,10776 +fused_transactions_write32s,966,10778 +fused_transactions_write32s,967,10773 +fused_transactions_write32s,968,10780 +fused_transactions_write32s,969,10775 +fused_transactions_write32s,970,10787 +fused_transactions_write32s,971,10769 +fused_transactions_write32s,972,10777 +fused_transactions_write32s,973,10775 +fused_transactions_write32s,974,10780 +fused_transactions_write32s,975,10783 +fused_transactions_write32s,976,10782 +fused_transactions_write32s,977,10776 +fused_transactions_write32s,978,10782 +fused_transactions_write32s,979,10776 +fused_transactions_write32s,980,10768 +fused_transactions_write32s,981,10778 +fused_transactions_write32s,982,10768 +fused_transactions_write32s,983,10777 +fused_transactions_write32s,984,10781 +fused_transactions_write32s,985,10776 +fused_transactions_write32s,986,10785 +fused_transactions_write32s,987,10783 +fused_transactions_write32s,988,10773 +fused_transactions_write32s,989,10783 +fused_transactions_write32s,990,10784 +fused_transactions_write32s,991,10770 +fused_transactions_write32s,992,10773 +fused_transactions_write32s,993,10779 +fused_transactions_write32s,994,10773 +fused_transactions_write32s,995,10776 +fused_transactions_write32s,996,10778 +fused_transactions_write32s,997,10776 +fused_transactions_write32s,998,10787 +fused_transactions_write32s,999,10773 \ No newline at end of file diff --git a/programming_examples/reconfiguration/ablation/1_write32s_reset_core_dma_switch.csv b/programming_examples/reconfiguration/ablation/1_write32s_reset_core_dma_switch.csv new file mode 100644 index 00000000000..014ee17b95b --- /dev/null +++ b/programming_examples/reconfiguration/ablation/1_write32s_reset_core_dma_switch.csv @@ -0,0 +1,1000 @@ +fused_transactions_write32s,0,10608 +fused_transactions_write32s,1,10572 +fused_transactions_write32s,2,10530 +fused_transactions_write32s,3,10550 +fused_transactions_write32s,4,10537 +fused_transactions_write32s,5,10546 +fused_transactions_write32s,6,10548 +fused_transactions_write32s,7,10543 +fused_transactions_write32s,8,10544 +fused_transactions_write32s,9,10541 +fused_transactions_write32s,10,10544 +fused_transactions_write32s,11,10538 +fused_transactions_write32s,12,10550 +fused_transactions_write32s,13,10538 +fused_transactions_write32s,14,10553 +fused_transactions_write32s,15,10537 +fused_transactions_write32s,16,10537 +fused_transactions_write32s,17,10528 +fused_transactions_write32s,18,10537 +fused_transactions_write32s,19,10539 +fused_transactions_write32s,20,10519 +fused_transactions_write32s,21,10547 +fused_transactions_write32s,22,10541 +fused_transactions_write32s,23,10537 +fused_transactions_write32s,24,10533 +fused_transactions_write32s,25,10541 +fused_transactions_write32s,26,10540 +fused_transactions_write32s,27,10549 +fused_transactions_write32s,28,10540 +fused_transactions_write32s,29,10544 +fused_transactions_write32s,30,10542 +fused_transactions_write32s,31,10545 +fused_transactions_write32s,32,10541 +fused_transactions_write32s,33,10537 +fused_transactions_write32s,34,10540 +fused_transactions_write32s,35,10543 +fused_transactions_write32s,36,10538 +fused_transactions_write32s,37,10541 +fused_transactions_write32s,38,10544 +fused_transactions_write32s,39,10542 +fused_transactions_write32s,40,10541 +fused_transactions_write32s,41,10541 +fused_transactions_write32s,42,10547 +fused_transactions_write32s,43,10546 +fused_transactions_write32s,44,10536 +fused_transactions_write32s,45,10543 +fused_transactions_write32s,46,10538 +fused_transactions_write32s,47,10543 +fused_transactions_write32s,48,10543 +fused_transactions_write32s,49,10540 +fused_transactions_write32s,50,10552 +fused_transactions_write32s,51,10540 +fused_transactions_write32s,52,10540 +fused_transactions_write32s,53,10540 +fused_transactions_write32s,54,10545 +fused_transactions_write32s,55,10536 +fused_transactions_write32s,56,10525 +fused_transactions_write32s,57,10531 +fused_transactions_write32s,58,10546 +fused_transactions_write32s,59,10543 +fused_transactions_write32s,60,10536 +fused_transactions_write32s,61,10536 +fused_transactions_write32s,62,10537 +fused_transactions_write32s,63,10521 +fused_transactions_write32s,64,10546 +fused_transactions_write32s,65,10544 +fused_transactions_write32s,66,10541 +fused_transactions_write32s,67,10547 +fused_transactions_write32s,68,10535 +fused_transactions_write32s,69,10537 +fused_transactions_write32s,70,10537 +fused_transactions_write32s,71,10547 +fused_transactions_write32s,72,10540 +fused_transactions_write32s,73,10540 +fused_transactions_write32s,74,10539 +fused_transactions_write32s,75,10536 +fused_transactions_write32s,76,10534 +fused_transactions_write32s,77,10536 +fused_transactions_write32s,78,10538 +fused_transactions_write32s,79,10543 +fused_transactions_write32s,80,10536 +fused_transactions_write32s,81,10541 +fused_transactions_write32s,82,10535 +fused_transactions_write32s,83,10537 +fused_transactions_write32s,84,10537 +fused_transactions_write32s,85,10540 +fused_transactions_write32s,86,10540 +fused_transactions_write32s,87,10543 +fused_transactions_write32s,88,10549 +fused_transactions_write32s,89,10536 +fused_transactions_write32s,90,10541 +fused_transactions_write32s,91,10538 +fused_transactions_write32s,92,10534 +fused_transactions_write32s,93,10541 +fused_transactions_write32s,94,10548 +fused_transactions_write32s,95,10547 +fused_transactions_write32s,96,10540 +fused_transactions_write32s,97,10526 +fused_transactions_write32s,98,10540 +fused_transactions_write32s,99,10544 +fused_transactions_write32s,100,10546 +fused_transactions_write32s,101,10547 +fused_transactions_write32s,102,10543 +fused_transactions_write32s,103,10532 +fused_transactions_write32s,104,10537 +fused_transactions_write32s,105,10541 +fused_transactions_write32s,106,10538 +fused_transactions_write32s,107,10542 +fused_transactions_write32s,108,10535 +fused_transactions_write32s,109,10543 +fused_transactions_write32s,110,10537 +fused_transactions_write32s,111,10542 +fused_transactions_write32s,112,10536 +fused_transactions_write32s,113,10539 +fused_transactions_write32s,114,10540 +fused_transactions_write32s,115,10538 +fused_transactions_write32s,116,10545 +fused_transactions_write32s,117,10546 +fused_transactions_write32s,118,10539 +fused_transactions_write32s,119,10535 +fused_transactions_write32s,120,10541 +fused_transactions_write32s,121,10543 +fused_transactions_write32s,122,10541 +fused_transactions_write32s,123,10536 +fused_transactions_write32s,124,10548 +fused_transactions_write32s,125,10545 +fused_transactions_write32s,126,10539 +fused_transactions_write32s,127,10536 +fused_transactions_write32s,128,10538 +fused_transactions_write32s,129,10539 +fused_transactions_write32s,130,10537 +fused_transactions_write32s,131,10535 +fused_transactions_write32s,132,10541 +fused_transactions_write32s,133,10539 +fused_transactions_write32s,134,10541 +fused_transactions_write32s,135,10546 +fused_transactions_write32s,136,10542 +fused_transactions_write32s,137,10545 +fused_transactions_write32s,138,10552 +fused_transactions_write32s,139,10535 +fused_transactions_write32s,140,10535 +fused_transactions_write32s,141,10538 +fused_transactions_write32s,142,10541 +fused_transactions_write32s,143,10534 +fused_transactions_write32s,144,10540 +fused_transactions_write32s,145,10539 +fused_transactions_write32s,146,10542 +fused_transactions_write32s,147,10532 +fused_transactions_write32s,148,10535 +fused_transactions_write32s,149,10537 +fused_transactions_write32s,150,10553 +fused_transactions_write32s,151,10540 +fused_transactions_write32s,152,10552 +fused_transactions_write32s,153,10542 +fused_transactions_write32s,154,10537 +fused_transactions_write32s,155,10534 +fused_transactions_write32s,156,10539 +fused_transactions_write32s,157,10542 +fused_transactions_write32s,158,10546 +fused_transactions_write32s,159,10536 +fused_transactions_write32s,160,10533 +fused_transactions_write32s,161,10540 +fused_transactions_write32s,162,10546 +fused_transactions_write32s,163,10545 +fused_transactions_write32s,164,10541 +fused_transactions_write32s,165,10533 +fused_transactions_write32s,166,10540 +fused_transactions_write32s,167,10536 +fused_transactions_write32s,168,10536 +fused_transactions_write32s,169,10537 +fused_transactions_write32s,170,10532 +fused_transactions_write32s,171,10535 +fused_transactions_write32s,172,10535 +fused_transactions_write32s,173,10535 +fused_transactions_write32s,174,10538 +fused_transactions_write32s,175,10537 +fused_transactions_write32s,176,10537 +fused_transactions_write32s,177,10537 +fused_transactions_write32s,178,10535 +fused_transactions_write32s,179,10533 +fused_transactions_write32s,180,10540 +fused_transactions_write32s,181,10536 +fused_transactions_write32s,182,10535 +fused_transactions_write32s,183,10533 +fused_transactions_write32s,184,10537 +fused_transactions_write32s,185,10533 +fused_transactions_write32s,186,10545 +fused_transactions_write32s,187,10541 +fused_transactions_write32s,188,10548 +fused_transactions_write32s,189,10544 +fused_transactions_write32s,190,10544 +fused_transactions_write32s,191,10540 +fused_transactions_write32s,192,10542 +fused_transactions_write32s,193,10546 +fused_transactions_write32s,194,10543 +fused_transactions_write32s,195,10543 +fused_transactions_write32s,196,10542 +fused_transactions_write32s,197,10545 +fused_transactions_write32s,198,10539 +fused_transactions_write32s,199,10545 +fused_transactions_write32s,200,10535 +fused_transactions_write32s,201,10538 +fused_transactions_write32s,202,10535 +fused_transactions_write32s,203,10539 +fused_transactions_write32s,204,10540 +fused_transactions_write32s,205,10533 +fused_transactions_write32s,206,10540 +fused_transactions_write32s,207,10541 +fused_transactions_write32s,208,10537 +fused_transactions_write32s,209,10534 +fused_transactions_write32s,210,10544 +fused_transactions_write32s,211,10546 +fused_transactions_write32s,212,10543 +fused_transactions_write32s,213,10533 +fused_transactions_write32s,214,10535 +fused_transactions_write32s,215,10534 +fused_transactions_write32s,216,10535 +fused_transactions_write32s,217,10546 +fused_transactions_write32s,218,10535 +fused_transactions_write32s,219,10534 +fused_transactions_write32s,220,10538 +fused_transactions_write32s,221,10545 +fused_transactions_write32s,222,10532 +fused_transactions_write32s,223,10545 +fused_transactions_write32s,224,10536 +fused_transactions_write32s,225,10536 +fused_transactions_write32s,226,10537 +fused_transactions_write32s,227,10545 +fused_transactions_write32s,228,10540 +fused_transactions_write32s,229,10539 +fused_transactions_write32s,230,10534 +fused_transactions_write32s,231,10537 +fused_transactions_write32s,232,10532 +fused_transactions_write32s,233,10535 +fused_transactions_write32s,234,10538 +fused_transactions_write32s,235,10541 +fused_transactions_write32s,236,10533 +fused_transactions_write32s,237,10537 +fused_transactions_write32s,238,10534 +fused_transactions_write32s,239,10534 +fused_transactions_write32s,240,10541 +fused_transactions_write32s,241,10537 +fused_transactions_write32s,242,10537 +fused_transactions_write32s,243,10531 +fused_transactions_write32s,244,10539 +fused_transactions_write32s,245,10539 +fused_transactions_write32s,246,10848 +fused_transactions_write32s,247,10544 +fused_transactions_write32s,248,10541 +fused_transactions_write32s,249,10536 +fused_transactions_write32s,250,10545 +fused_transactions_write32s,251,10536 +fused_transactions_write32s,252,10536 +fused_transactions_write32s,253,10540 +fused_transactions_write32s,254,10542 +fused_transactions_write32s,255,10537 +fused_transactions_write32s,256,10537 +fused_transactions_write32s,257,10554 +fused_transactions_write32s,258,10542 +fused_transactions_write32s,259,10548 +fused_transactions_write32s,260,10543 +fused_transactions_write32s,261,10541 +fused_transactions_write32s,262,10541 +fused_transactions_write32s,263,10544 +fused_transactions_write32s,264,10531 +fused_transactions_write32s,265,10541 +fused_transactions_write32s,266,10541 +fused_transactions_write32s,267,10543 +fused_transactions_write32s,268,10533 +fused_transactions_write32s,269,10537 +fused_transactions_write32s,270,10533 +fused_transactions_write32s,271,10534 +fused_transactions_write32s,272,10534 +fused_transactions_write32s,273,10536 +fused_transactions_write32s,274,10540 +fused_transactions_write32s,275,10531 +fused_transactions_write32s,276,10537 +fused_transactions_write32s,277,10530 +fused_transactions_write32s,278,10538 +fused_transactions_write32s,279,10535 +fused_transactions_write32s,280,10536 +fused_transactions_write32s,281,10535 +fused_transactions_write32s,282,10536 +fused_transactions_write32s,283,10533 +fused_transactions_write32s,284,10536 +fused_transactions_write32s,285,10533 +fused_transactions_write32s,286,10539 +fused_transactions_write32s,287,10540 +fused_transactions_write32s,288,10534 +fused_transactions_write32s,289,10536 +fused_transactions_write32s,290,10532 +fused_transactions_write32s,291,10530 +fused_transactions_write32s,292,10536 +fused_transactions_write32s,293,10529 +fused_transactions_write32s,294,10537 +fused_transactions_write32s,295,10546 +fused_transactions_write32s,296,10537 +fused_transactions_write32s,297,10534 +fused_transactions_write32s,298,10546 +fused_transactions_write32s,299,10535 +fused_transactions_write32s,300,10533 +fused_transactions_write32s,301,10532 +fused_transactions_write32s,302,10540 +fused_transactions_write32s,303,10533 +fused_transactions_write32s,304,10532 +fused_transactions_write32s,305,10536 +fused_transactions_write32s,306,10532 +fused_transactions_write32s,307,10535 +fused_transactions_write32s,308,10549 +fused_transactions_write32s,309,10542 +fused_transactions_write32s,310,10545 +fused_transactions_write32s,311,10540 +fused_transactions_write32s,312,10541 +fused_transactions_write32s,313,10531 +fused_transactions_write32s,314,10537 +fused_transactions_write32s,315,10538 +fused_transactions_write32s,316,10534 +fused_transactions_write32s,317,10536 +fused_transactions_write32s,318,10533 +fused_transactions_write32s,319,10536 +fused_transactions_write32s,320,10536 +fused_transactions_write32s,321,10535 +fused_transactions_write32s,322,10540 +fused_transactions_write32s,323,10541 +fused_transactions_write32s,324,10533 +fused_transactions_write32s,325,10530 +fused_transactions_write32s,326,10533 +fused_transactions_write32s,327,10540 +fused_transactions_write32s,328,10537 +fused_transactions_write32s,329,10534 +fused_transactions_write32s,330,10541 +fused_transactions_write32s,331,10543 +fused_transactions_write32s,332,10540 +fused_transactions_write32s,333,10530 +fused_transactions_write32s,334,10537 +fused_transactions_write32s,335,10532 +fused_transactions_write32s,336,10533 +fused_transactions_write32s,337,10537 +fused_transactions_write32s,338,10538 +fused_transactions_write32s,339,10534 +fused_transactions_write32s,340,10537 +fused_transactions_write32s,341,10536 +fused_transactions_write32s,342,10536 +fused_transactions_write32s,343,10538 +fused_transactions_write32s,344,10533 +fused_transactions_write32s,345,10533 +fused_transactions_write32s,346,10534 +fused_transactions_write32s,347,10535 +fused_transactions_write32s,348,10532 +fused_transactions_write32s,349,10531 +fused_transactions_write32s,350,10535 +fused_transactions_write32s,351,10531 +fused_transactions_write32s,352,10540 +fused_transactions_write32s,353,10542 +fused_transactions_write32s,354,10543 +fused_transactions_write32s,355,10543 +fused_transactions_write32s,356,10545 +fused_transactions_write32s,357,10544 +fused_transactions_write32s,358,10544 +fused_transactions_write32s,359,10537 +fused_transactions_write32s,360,10544 +fused_transactions_write32s,361,10547 +fused_transactions_write32s,362,10537 +fused_transactions_write32s,363,10535 +fused_transactions_write32s,364,10547 +fused_transactions_write32s,365,10550 +fused_transactions_write32s,366,10552 +fused_transactions_write32s,367,10562 +fused_transactions_write32s,368,10545 +fused_transactions_write32s,369,10542 +fused_transactions_write32s,370,10534 +fused_transactions_write32s,371,10538 +fused_transactions_write32s,372,10549 +fused_transactions_write32s,373,10544 +fused_transactions_write32s,374,10540 +fused_transactions_write32s,375,10538 +fused_transactions_write32s,376,10539 +fused_transactions_write32s,377,10534 +fused_transactions_write32s,378,10534 +fused_transactions_write32s,379,10534 +fused_transactions_write32s,380,10534 +fused_transactions_write32s,381,10538 +fused_transactions_write32s,382,10539 +fused_transactions_write32s,383,10535 +fused_transactions_write32s,384,10535 +fused_transactions_write32s,385,10545 +fused_transactions_write32s,386,10549 +fused_transactions_write32s,387,10537 +fused_transactions_write32s,388,10530 +fused_transactions_write32s,389,10542 +fused_transactions_write32s,390,10538 +fused_transactions_write32s,391,10536 +fused_transactions_write32s,392,10534 +fused_transactions_write32s,393,10534 +fused_transactions_write32s,394,10536 +fused_transactions_write32s,395,10539 +fused_transactions_write32s,396,10542 +fused_transactions_write32s,397,10538 +fused_transactions_write32s,398,10537 +fused_transactions_write32s,399,10535 +fused_transactions_write32s,400,10541 +fused_transactions_write32s,401,10540 +fused_transactions_write32s,402,10539 +fused_transactions_write32s,403,10540 +fused_transactions_write32s,404,10541 +fused_transactions_write32s,405,10538 +fused_transactions_write32s,406,10536 +fused_transactions_write32s,407,10541 +fused_transactions_write32s,408,10539 +fused_transactions_write32s,409,10546 +fused_transactions_write32s,410,10542 +fused_transactions_write32s,411,10546 +fused_transactions_write32s,412,10537 +fused_transactions_write32s,413,10535 +fused_transactions_write32s,414,10540 +fused_transactions_write32s,415,10539 +fused_transactions_write32s,416,10541 +fused_transactions_write32s,417,10539 +fused_transactions_write32s,418,10539 +fused_transactions_write32s,419,10545 +fused_transactions_write32s,420,10541 +fused_transactions_write32s,421,10545 +fused_transactions_write32s,422,10544 +fused_transactions_write32s,423,10544 +fused_transactions_write32s,424,10541 +fused_transactions_write32s,425,10543 +fused_transactions_write32s,426,10545 +fused_transactions_write32s,427,10542 +fused_transactions_write32s,428,10533 +fused_transactions_write32s,429,10539 +fused_transactions_write32s,430,10542 +fused_transactions_write32s,431,10538 +fused_transactions_write32s,432,10538 +fused_transactions_write32s,433,10543 +fused_transactions_write32s,434,10543 +fused_transactions_write32s,435,10536 +fused_transactions_write32s,436,10540 +fused_transactions_write32s,437,10538 +fused_transactions_write32s,438,10543 +fused_transactions_write32s,439,10542 +fused_transactions_write32s,440,10541 +fused_transactions_write32s,441,10540 +fused_transactions_write32s,442,10543 +fused_transactions_write32s,443,10545 +fused_transactions_write32s,444,10539 +fused_transactions_write32s,445,10539 +fused_transactions_write32s,446,10544 +fused_transactions_write32s,447,10546 +fused_transactions_write32s,448,10536 +fused_transactions_write32s,449,10536 +fused_transactions_write32s,450,10536 +fused_transactions_write32s,451,10536 +fused_transactions_write32s,452,10537 +fused_transactions_write32s,453,10536 +fused_transactions_write32s,454,10529 +fused_transactions_write32s,455,10531 +fused_transactions_write32s,456,10533 +fused_transactions_write32s,457,10533 +fused_transactions_write32s,458,10534 +fused_transactions_write32s,459,10529 +fused_transactions_write32s,460,10537 +fused_transactions_write32s,461,10535 +fused_transactions_write32s,462,10530 +fused_transactions_write32s,463,10531 +fused_transactions_write32s,464,10534 +fused_transactions_write32s,465,10531 +fused_transactions_write32s,466,10530 +fused_transactions_write32s,467,10551 +fused_transactions_write32s,468,10529 +fused_transactions_write32s,469,10532 +fused_transactions_write32s,470,10531 +fused_transactions_write32s,471,10538 +fused_transactions_write32s,472,10534 +fused_transactions_write32s,473,10528 +fused_transactions_write32s,474,10532 +fused_transactions_write32s,475,10537 +fused_transactions_write32s,476,10538 +fused_transactions_write32s,477,10532 +fused_transactions_write32s,478,10536 +fused_transactions_write32s,479,10533 +fused_transactions_write32s,480,10535 +fused_transactions_write32s,481,10536 +fused_transactions_write32s,482,10535 +fused_transactions_write32s,483,10535 +fused_transactions_write32s,484,10531 +fused_transactions_write32s,485,10535 +fused_transactions_write32s,486,10537 +fused_transactions_write32s,487,10540 +fused_transactions_write32s,488,10541 +fused_transactions_write32s,489,10538 +fused_transactions_write32s,490,10537 +fused_transactions_write32s,491,10531 +fused_transactions_write32s,492,10525 +fused_transactions_write32s,493,10524 +fused_transactions_write32s,494,10533 +fused_transactions_write32s,495,10512 +fused_transactions_write32s,496,10508 +fused_transactions_write32s,497,10517 +fused_transactions_write32s,498,10522 +fused_transactions_write32s,499,10525 +fused_transactions_write32s,500,10522 +fused_transactions_write32s,501,10524 +fused_transactions_write32s,502,10526 +fused_transactions_write32s,503,10522 +fused_transactions_write32s,504,10526 +fused_transactions_write32s,505,10531 +fused_transactions_write32s,506,10525 +fused_transactions_write32s,507,10520 +fused_transactions_write32s,508,10555 +fused_transactions_write32s,509,10541 +fused_transactions_write32s,510,10525 +fused_transactions_write32s,511,10527 +fused_transactions_write32s,512,10528 +fused_transactions_write32s,513,10540 +fused_transactions_write32s,514,10527 +fused_transactions_write32s,515,10528 +fused_transactions_write32s,516,10530 +fused_transactions_write32s,517,10532 +fused_transactions_write32s,518,10533 +fused_transactions_write32s,519,10529 +fused_transactions_write32s,520,10533 +fused_transactions_write32s,521,10524 +fused_transactions_write32s,522,10531 +fused_transactions_write32s,523,10530 +fused_transactions_write32s,524,10538 +fused_transactions_write32s,525,10530 +fused_transactions_write32s,526,10532 +fused_transactions_write32s,527,10527 +fused_transactions_write32s,528,10532 +fused_transactions_write32s,529,10529 +fused_transactions_write32s,530,10528 +fused_transactions_write32s,531,10533 +fused_transactions_write32s,532,10529 +fused_transactions_write32s,533,10530 +fused_transactions_write32s,534,10525 +fused_transactions_write32s,535,10524 +fused_transactions_write32s,536,10530 +fused_transactions_write32s,537,10529 +fused_transactions_write32s,538,10536 +fused_transactions_write32s,539,10531 +fused_transactions_write32s,540,10530 +fused_transactions_write32s,541,10532 +fused_transactions_write32s,542,10533 +fused_transactions_write32s,543,10538 +fused_transactions_write32s,544,10527 +fused_transactions_write32s,545,10530 +fused_transactions_write32s,546,10541 +fused_transactions_write32s,547,10549 +fused_transactions_write32s,548,10533 +fused_transactions_write32s,549,10529 +fused_transactions_write32s,550,10539 +fused_transactions_write32s,551,10533 +fused_transactions_write32s,552,10530 +fused_transactions_write32s,553,10535 +fused_transactions_write32s,554,10528 +fused_transactions_write32s,555,10530 +fused_transactions_write32s,556,10540 +fused_transactions_write32s,557,10531 +fused_transactions_write32s,558,10531 +fused_transactions_write32s,559,10532 +fused_transactions_write32s,560,10535 +fused_transactions_write32s,561,10534 +fused_transactions_write32s,562,10527 +fused_transactions_write32s,563,10531 +fused_transactions_write32s,564,10534 +fused_transactions_write32s,565,10532 +fused_transactions_write32s,566,10532 +fused_transactions_write32s,567,10537 +fused_transactions_write32s,568,10528 +fused_transactions_write32s,569,10533 +fused_transactions_write32s,570,10535 +fused_transactions_write32s,571,10530 +fused_transactions_write32s,572,10531 +fused_transactions_write32s,573,10530 +fused_transactions_write32s,574,10530 +fused_transactions_write32s,575,10532 +fused_transactions_write32s,576,10533 +fused_transactions_write32s,577,10531 +fused_transactions_write32s,578,10530 +fused_transactions_write32s,579,10538 +fused_transactions_write32s,580,10531 +fused_transactions_write32s,581,10536 +fused_transactions_write32s,582,10536 +fused_transactions_write32s,583,10533 +fused_transactions_write32s,584,10531 +fused_transactions_write32s,585,10529 +fused_transactions_write32s,586,10533 +fused_transactions_write32s,587,10537 +fused_transactions_write32s,588,10536 +fused_transactions_write32s,589,10538 +fused_transactions_write32s,590,10534 +fused_transactions_write32s,591,10546 +fused_transactions_write32s,592,10544 +fused_transactions_write32s,593,10532 +fused_transactions_write32s,594,10534 +fused_transactions_write32s,595,10530 +fused_transactions_write32s,596,10526 +fused_transactions_write32s,597,10520 +fused_transactions_write32s,598,10530 +fused_transactions_write32s,599,10517 +fused_transactions_write32s,600,10517 +fused_transactions_write32s,601,10517 +fused_transactions_write32s,602,10521 +fused_transactions_write32s,603,10515 +fused_transactions_write32s,604,10513 +fused_transactions_write32s,605,10519 +fused_transactions_write32s,606,10518 +fused_transactions_write32s,607,10514 +fused_transactions_write32s,608,10516 +fused_transactions_write32s,609,10518 +fused_transactions_write32s,610,10507 +fused_transactions_write32s,611,10509 +fused_transactions_write32s,612,10531 +fused_transactions_write32s,613,10543 +fused_transactions_write32s,614,10527 +fused_transactions_write32s,615,10537 +fused_transactions_write32s,616,10532 +fused_transactions_write32s,617,10533 +fused_transactions_write32s,618,10536 +fused_transactions_write32s,619,10534 +fused_transactions_write32s,620,10532 +fused_transactions_write32s,621,10535 +fused_transactions_write32s,622,10533 +fused_transactions_write32s,623,10530 +fused_transactions_write32s,624,10536 +fused_transactions_write32s,625,10528 +fused_transactions_write32s,626,10533 +fused_transactions_write32s,627,10537 +fused_transactions_write32s,628,10529 +fused_transactions_write32s,629,10530 +fused_transactions_write32s,630,10528 +fused_transactions_write32s,631,10532 +fused_transactions_write32s,632,10538 +fused_transactions_write32s,633,10527 +fused_transactions_write32s,634,10528 +fused_transactions_write32s,635,10534 +fused_transactions_write32s,636,10530 +fused_transactions_write32s,637,10538 +fused_transactions_write32s,638,10533 +fused_transactions_write32s,639,10537 +fused_transactions_write32s,640,10528 +fused_transactions_write32s,641,10530 +fused_transactions_write32s,642,10530 +fused_transactions_write32s,643,10531 +fused_transactions_write32s,644,10543 +fused_transactions_write32s,645,10531 +fused_transactions_write32s,646,10542 +fused_transactions_write32s,647,10531 +fused_transactions_write32s,648,10538 +fused_transactions_write32s,649,10541 +fused_transactions_write32s,650,10536 +fused_transactions_write32s,651,10534 +fused_transactions_write32s,652,10535 +fused_transactions_write32s,653,10537 +fused_transactions_write32s,654,10534 +fused_transactions_write32s,655,10538 +fused_transactions_write32s,656,10530 +fused_transactions_write32s,657,10530 +fused_transactions_write32s,658,10529 +fused_transactions_write32s,659,10530 +fused_transactions_write32s,660,10527 +fused_transactions_write32s,661,10533 +fused_transactions_write32s,662,10534 +fused_transactions_write32s,663,10537 +fused_transactions_write32s,664,10531 +fused_transactions_write32s,665,10537 +fused_transactions_write32s,666,10531 +fused_transactions_write32s,667,10530 +fused_transactions_write32s,668,10533 +fused_transactions_write32s,669,10536 +fused_transactions_write32s,670,10532 +fused_transactions_write32s,671,10535 +fused_transactions_write32s,672,10534 +fused_transactions_write32s,673,10529 +fused_transactions_write32s,674,10534 +fused_transactions_write32s,675,10535 +fused_transactions_write32s,676,10529 +fused_transactions_write32s,677,10527 +fused_transactions_write32s,678,10534 +fused_transactions_write32s,679,10537 +fused_transactions_write32s,680,10532 +fused_transactions_write32s,681,10536 +fused_transactions_write32s,682,10536 +fused_transactions_write32s,683,10537 +fused_transactions_write32s,684,10535 +fused_transactions_write32s,685,10529 +fused_transactions_write32s,686,10528 +fused_transactions_write32s,687,10533 +fused_transactions_write32s,688,10528 +fused_transactions_write32s,689,10530 +fused_transactions_write32s,690,10530 +fused_transactions_write32s,691,10534 +fused_transactions_write32s,692,10529 +fused_transactions_write32s,693,10530 +fused_transactions_write32s,694,10526 +fused_transactions_write32s,695,10531 +fused_transactions_write32s,696,10529 +fused_transactions_write32s,697,10533 +fused_transactions_write32s,698,10536 +fused_transactions_write32s,699,10532 +fused_transactions_write32s,700,10533 +fused_transactions_write32s,701,10531 +fused_transactions_write32s,702,10529 +fused_transactions_write32s,703,10536 +fused_transactions_write32s,704,10537 +fused_transactions_write32s,705,10531 +fused_transactions_write32s,706,10527 +fused_transactions_write32s,707,10533 +fused_transactions_write32s,708,10532 +fused_transactions_write32s,709,10533 +fused_transactions_write32s,710,10535 +fused_transactions_write32s,711,10533 +fused_transactions_write32s,712,10534 +fused_transactions_write32s,713,10535 +fused_transactions_write32s,714,10533 +fused_transactions_write32s,715,10529 +fused_transactions_write32s,716,10535 +fused_transactions_write32s,717,10530 +fused_transactions_write32s,718,10530 +fused_transactions_write32s,719,10533 +fused_transactions_write32s,720,10535 +fused_transactions_write32s,721,10532 +fused_transactions_write32s,722,10531 +fused_transactions_write32s,723,10534 +fused_transactions_write32s,724,10534 +fused_transactions_write32s,725,10534 +fused_transactions_write32s,726,10535 +fused_transactions_write32s,727,10529 +fused_transactions_write32s,728,10529 +fused_transactions_write32s,729,10535 +fused_transactions_write32s,730,10535 +fused_transactions_write32s,731,10536 +fused_transactions_write32s,732,10860 +fused_transactions_write32s,733,10540 +fused_transactions_write32s,734,10545 +fused_transactions_write32s,735,10540 +fused_transactions_write32s,736,10532 +fused_transactions_write32s,737,10538 +fused_transactions_write32s,738,10536 +fused_transactions_write32s,739,10528 +fused_transactions_write32s,740,10532 +fused_transactions_write32s,741,10541 +fused_transactions_write32s,742,10534 +fused_transactions_write32s,743,10542 +fused_transactions_write32s,744,10542 +fused_transactions_write32s,745,10537 +fused_transactions_write32s,746,10535 +fused_transactions_write32s,747,10538 +fused_transactions_write32s,748,10538 +fused_transactions_write32s,749,10538 +fused_transactions_write32s,750,10536 +fused_transactions_write32s,751,10538 +fused_transactions_write32s,752,10542 +fused_transactions_write32s,753,10537 +fused_transactions_write32s,754,10544 +fused_transactions_write32s,755,10536 +fused_transactions_write32s,756,10532 +fused_transactions_write32s,757,10532 +fused_transactions_write32s,758,10533 +fused_transactions_write32s,759,10540 +fused_transactions_write32s,760,10537 +fused_transactions_write32s,761,10536 +fused_transactions_write32s,762,10535 +fused_transactions_write32s,763,10543 +fused_transactions_write32s,764,10538 +fused_transactions_write32s,765,10533 +fused_transactions_write32s,766,10534 +fused_transactions_write32s,767,10533 +fused_transactions_write32s,768,10532 +fused_transactions_write32s,769,10533 +fused_transactions_write32s,770,10533 +fused_transactions_write32s,771,10536 +fused_transactions_write32s,772,10536 +fused_transactions_write32s,773,10532 +fused_transactions_write32s,774,10544 +fused_transactions_write32s,775,10538 +fused_transactions_write32s,776,10533 +fused_transactions_write32s,777,10534 +fused_transactions_write32s,778,10533 +fused_transactions_write32s,779,10532 +fused_transactions_write32s,780,10536 +fused_transactions_write32s,781,10543 +fused_transactions_write32s,782,10533 +fused_transactions_write32s,783,10534 +fused_transactions_write32s,784,10537 +fused_transactions_write32s,785,10539 +fused_transactions_write32s,786,10543 +fused_transactions_write32s,787,10541 +fused_transactions_write32s,788,10532 +fused_transactions_write32s,789,10537 +fused_transactions_write32s,790,10534 +fused_transactions_write32s,791,10536 +fused_transactions_write32s,792,10535 +fused_transactions_write32s,793,10531 +fused_transactions_write32s,794,10538 +fused_transactions_write32s,795,10535 +fused_transactions_write32s,796,10536 +fused_transactions_write32s,797,10538 +fused_transactions_write32s,798,10538 +fused_transactions_write32s,799,10531 +fused_transactions_write32s,800,10537 +fused_transactions_write32s,801,10535 +fused_transactions_write32s,802,10540 +fused_transactions_write32s,803,10532 +fused_transactions_write32s,804,10531 +fused_transactions_write32s,805,10537 +fused_transactions_write32s,806,10537 +fused_transactions_write32s,807,10535 +fused_transactions_write32s,808,10538 +fused_transactions_write32s,809,10538 +fused_transactions_write32s,810,10545 +fused_transactions_write32s,811,10531 +fused_transactions_write32s,812,10536 +fused_transactions_write32s,813,10538 +fused_transactions_write32s,814,10534 +fused_transactions_write32s,815,10539 +fused_transactions_write32s,816,10536 +fused_transactions_write32s,817,10532 +fused_transactions_write32s,818,10532 +fused_transactions_write32s,819,10541 +fused_transactions_write32s,820,10532 +fused_transactions_write32s,821,10539 +fused_transactions_write32s,822,10539 +fused_transactions_write32s,823,10532 +fused_transactions_write32s,824,10539 +fused_transactions_write32s,825,10531 +fused_transactions_write32s,826,10534 +fused_transactions_write32s,827,10539 +fused_transactions_write32s,828,10528 +fused_transactions_write32s,829,10542 +fused_transactions_write32s,830,10544 +fused_transactions_write32s,831,10541 +fused_transactions_write32s,832,10534 +fused_transactions_write32s,833,10534 +fused_transactions_write32s,834,10537 +fused_transactions_write32s,835,10539 +fused_transactions_write32s,836,10537 +fused_transactions_write32s,837,10535 +fused_transactions_write32s,838,10540 +fused_transactions_write32s,839,10534 +fused_transactions_write32s,840,10548 +fused_transactions_write32s,841,10540 +fused_transactions_write32s,842,10542 +fused_transactions_write32s,843,10533 +fused_transactions_write32s,844,10532 +fused_transactions_write32s,845,10534 +fused_transactions_write32s,846,10539 +fused_transactions_write32s,847,10531 +fused_transactions_write32s,848,10535 +fused_transactions_write32s,849,10540 +fused_transactions_write32s,850,10536 +fused_transactions_write32s,851,10538 +fused_transactions_write32s,852,10541 +fused_transactions_write32s,853,10541 +fused_transactions_write32s,854,10537 +fused_transactions_write32s,855,10532 +fused_transactions_write32s,856,10539 +fused_transactions_write32s,857,10540 +fused_transactions_write32s,858,10540 +fused_transactions_write32s,859,10542 +fused_transactions_write32s,860,10534 +fused_transactions_write32s,861,10532 +fused_transactions_write32s,862,10543 +fused_transactions_write32s,863,10542 +fused_transactions_write32s,864,10538 +fused_transactions_write32s,865,10538 +fused_transactions_write32s,866,10535 +fused_transactions_write32s,867,10540 +fused_transactions_write32s,868,10534 +fused_transactions_write32s,869,10537 +fused_transactions_write32s,870,10534 +fused_transactions_write32s,871,10538 +fused_transactions_write32s,872,10533 +fused_transactions_write32s,873,10533 +fused_transactions_write32s,874,10536 +fused_transactions_write32s,875,10539 +fused_transactions_write32s,876,10533 +fused_transactions_write32s,877,10534 +fused_transactions_write32s,878,10538 +fused_transactions_write32s,879,10538 +fused_transactions_write32s,880,10537 +fused_transactions_write32s,881,10533 +fused_transactions_write32s,882,10536 +fused_transactions_write32s,883,10534 +fused_transactions_write32s,884,10538 +fused_transactions_write32s,885,10540 +fused_transactions_write32s,886,10535 +fused_transactions_write32s,887,10533 +fused_transactions_write32s,888,10534 +fused_transactions_write32s,889,10532 +fused_transactions_write32s,890,10533 +fused_transactions_write32s,891,10534 +fused_transactions_write32s,892,10539 +fused_transactions_write32s,893,10532 +fused_transactions_write32s,894,10530 +fused_transactions_write32s,895,10541 +fused_transactions_write32s,896,10541 +fused_transactions_write32s,897,10540 +fused_transactions_write32s,898,10547 +fused_transactions_write32s,899,10546 +fused_transactions_write32s,900,10534 +fused_transactions_write32s,901,10539 +fused_transactions_write32s,902,10538 +fused_transactions_write32s,903,10539 +fused_transactions_write32s,904,10537 +fused_transactions_write32s,905,10537 +fused_transactions_write32s,906,10537 +fused_transactions_write32s,907,10535 +fused_transactions_write32s,908,10541 +fused_transactions_write32s,909,10538 +fused_transactions_write32s,910,10539 +fused_transactions_write32s,911,10533 +fused_transactions_write32s,912,10532 +fused_transactions_write32s,913,10535 +fused_transactions_write32s,914,10536 +fused_transactions_write32s,915,10537 +fused_transactions_write32s,916,10537 +fused_transactions_write32s,917,10544 +fused_transactions_write32s,918,10540 +fused_transactions_write32s,919,10532 +fused_transactions_write32s,920,10542 +fused_transactions_write32s,921,10538 +fused_transactions_write32s,922,10539 +fused_transactions_write32s,923,10535 +fused_transactions_write32s,924,10538 +fused_transactions_write32s,925,10536 +fused_transactions_write32s,926,10538 +fused_transactions_write32s,927,10535 +fused_transactions_write32s,928,10533 +fused_transactions_write32s,929,10537 +fused_transactions_write32s,930,10536 +fused_transactions_write32s,931,10533 +fused_transactions_write32s,932,10532 +fused_transactions_write32s,933,10537 +fused_transactions_write32s,934,10542 +fused_transactions_write32s,935,10532 +fused_transactions_write32s,936,10537 +fused_transactions_write32s,937,10538 +fused_transactions_write32s,938,10539 +fused_transactions_write32s,939,10536 +fused_transactions_write32s,940,10536 +fused_transactions_write32s,941,10532 +fused_transactions_write32s,942,10538 +fused_transactions_write32s,943,10536 +fused_transactions_write32s,944,10536 +fused_transactions_write32s,945,10531 +fused_transactions_write32s,946,10533 +fused_transactions_write32s,947,10534 +fused_transactions_write32s,948,10536 +fused_transactions_write32s,949,10536 +fused_transactions_write32s,950,10531 +fused_transactions_write32s,951,10537 +fused_transactions_write32s,952,10540 +fused_transactions_write32s,953,10543 +fused_transactions_write32s,954,10549 +fused_transactions_write32s,955,10546 +fused_transactions_write32s,956,10531 +fused_transactions_write32s,957,10541 +fused_transactions_write32s,958,10536 +fused_transactions_write32s,959,10537 +fused_transactions_write32s,960,10537 +fused_transactions_write32s,961,10538 +fused_transactions_write32s,962,10544 +fused_transactions_write32s,963,10536 +fused_transactions_write32s,964,10533 +fused_transactions_write32s,965,10539 +fused_transactions_write32s,966,10548 +fused_transactions_write32s,967,10542 +fused_transactions_write32s,968,10539 +fused_transactions_write32s,969,10533 +fused_transactions_write32s,970,10543 +fused_transactions_write32s,971,10541 +fused_transactions_write32s,972,10544 +fused_transactions_write32s,973,10534 +fused_transactions_write32s,974,10544 +fused_transactions_write32s,975,10540 +fused_transactions_write32s,976,10542 +fused_transactions_write32s,977,10541 +fused_transactions_write32s,978,10534 +fused_transactions_write32s,979,10538 +fused_transactions_write32s,980,10539 +fused_transactions_write32s,981,10542 +fused_transactions_write32s,982,10535 +fused_transactions_write32s,983,10544 +fused_transactions_write32s,984,10542 +fused_transactions_write32s,985,10541 +fused_transactions_write32s,986,10534 +fused_transactions_write32s,987,10538 +fused_transactions_write32s,988,10535 +fused_transactions_write32s,989,10536 +fused_transactions_write32s,990,10532 +fused_transactions_write32s,991,10541 +fused_transactions_write32s,992,10544 +fused_transactions_write32s,993,10538 +fused_transactions_write32s,994,10538 +fused_transactions_write32s,995,10539 +fused_transactions_write32s,996,10537 +fused_transactions_write32s,997,10531 +fused_transactions_write32s,998,10538 +fused_transactions_write32s,999,10539 \ No newline at end of file diff --git a/programming_examples/reconfiguration/ablation/2_write32s_reset_core_dma.csv b/programming_examples/reconfiguration/ablation/2_write32s_reset_core_dma.csv new file mode 100644 index 00000000000..e18ff1f0a27 --- /dev/null +++ b/programming_examples/reconfiguration/ablation/2_write32s_reset_core_dma.csv @@ -0,0 +1,1000 @@ +fused_transactions_write32s,0,2521 +fused_transactions_write32s,1,2447 +fused_transactions_write32s,2,2443 +fused_transactions_write32s,3,2431 +fused_transactions_write32s,4,2418 +fused_transactions_write32s,5,2421 +fused_transactions_write32s,6,2407 +fused_transactions_write32s,7,2415 +fused_transactions_write32s,8,2408 +fused_transactions_write32s,9,2415 +fused_transactions_write32s,10,2421 +fused_transactions_write32s,11,2399 +fused_transactions_write32s,12,2403 +fused_transactions_write32s,13,2405 +fused_transactions_write32s,14,2390 +fused_transactions_write32s,15,2407 +fused_transactions_write32s,16,2412 +fused_transactions_write32s,17,2406 +fused_transactions_write32s,18,2416 +fused_transactions_write32s,19,2412 +fused_transactions_write32s,20,2412 +fused_transactions_write32s,21,2411 +fused_transactions_write32s,22,2421 +fused_transactions_write32s,23,2416 +fused_transactions_write32s,24,2414 +fused_transactions_write32s,25,2412 +fused_transactions_write32s,26,2413 +fused_transactions_write32s,27,2414 +fused_transactions_write32s,28,2419 +fused_transactions_write32s,29,2411 +fused_transactions_write32s,30,2411 +fused_transactions_write32s,31,2417 +fused_transactions_write32s,32,2411 +fused_transactions_write32s,33,2413 +fused_transactions_write32s,34,2415 +fused_transactions_write32s,35,2411 +fused_transactions_write32s,36,2429 +fused_transactions_write32s,37,2418 +fused_transactions_write32s,38,2415 +fused_transactions_write32s,39,2413 +fused_transactions_write32s,40,2413 +fused_transactions_write32s,41,2414 +fused_transactions_write32s,42,2413 +fused_transactions_write32s,43,2414 +fused_transactions_write32s,44,2412 +fused_transactions_write32s,45,2414 +fused_transactions_write32s,46,2414 +fused_transactions_write32s,47,2413 +fused_transactions_write32s,48,2412 +fused_transactions_write32s,49,2418 +fused_transactions_write32s,50,2411 +fused_transactions_write32s,51,2414 +fused_transactions_write32s,52,2411 +fused_transactions_write32s,53,2417 +fused_transactions_write32s,54,2411 +fused_transactions_write32s,55,2411 +fused_transactions_write32s,56,2414 +fused_transactions_write32s,57,2416 +fused_transactions_write32s,58,2413 +fused_transactions_write32s,59,2412 +fused_transactions_write32s,60,2411 +fused_transactions_write32s,61,2412 +fused_transactions_write32s,62,2415 +fused_transactions_write32s,63,2412 +fused_transactions_write32s,64,2414 +fused_transactions_write32s,65,2428 +fused_transactions_write32s,66,2413 +fused_transactions_write32s,67,2416 +fused_transactions_write32s,68,2414 +fused_transactions_write32s,69,2413 +fused_transactions_write32s,70,2416 +fused_transactions_write32s,71,2411 +fused_transactions_write32s,72,2412 +fused_transactions_write32s,73,2412 +fused_transactions_write32s,74,2410 +fused_transactions_write32s,75,2414 +fused_transactions_write32s,76,2414 +fused_transactions_write32s,77,2414 +fused_transactions_write32s,78,2414 +fused_transactions_write32s,79,2415 +fused_transactions_write32s,80,2410 +fused_transactions_write32s,81,2415 +fused_transactions_write32s,82,2409 +fused_transactions_write32s,83,2415 +fused_transactions_write32s,84,2411 +fused_transactions_write32s,85,2417 +fused_transactions_write32s,86,2414 +fused_transactions_write32s,87,2412 +fused_transactions_write32s,88,2410 +fused_transactions_write32s,89,2411 +fused_transactions_write32s,90,2411 +fused_transactions_write32s,91,2409 +fused_transactions_write32s,92,2415 +fused_transactions_write32s,93,2411 +fused_transactions_write32s,94,2419 +fused_transactions_write32s,95,2413 +fused_transactions_write32s,96,2417 +fused_transactions_write32s,97,2413 +fused_transactions_write32s,98,2423 +fused_transactions_write32s,99,2413 +fused_transactions_write32s,100,2412 +fused_transactions_write32s,101,2415 +fused_transactions_write32s,102,2412 +fused_transactions_write32s,103,2414 +fused_transactions_write32s,104,2414 +fused_transactions_write32s,105,2413 +fused_transactions_write32s,106,2414 +fused_transactions_write32s,107,2413 +fused_transactions_write32s,108,2410 +fused_transactions_write32s,109,2411 +fused_transactions_write32s,110,2412 +fused_transactions_write32s,111,2413 +fused_transactions_write32s,112,2409 +fused_transactions_write32s,113,2416 +fused_transactions_write32s,114,2412 +fused_transactions_write32s,115,2413 +fused_transactions_write32s,116,2411 +fused_transactions_write32s,117,2411 +fused_transactions_write32s,118,2413 +fused_transactions_write32s,119,2411 +fused_transactions_write32s,120,2413 +fused_transactions_write32s,121,2411 +fused_transactions_write32s,122,2412 +fused_transactions_write32s,123,2408 +fused_transactions_write32s,124,2411 +fused_transactions_write32s,125,2414 +fused_transactions_write32s,126,2413 +fused_transactions_write32s,127,2415 +fused_transactions_write32s,128,2411 +fused_transactions_write32s,129,2401 +fused_transactions_write32s,130,2398 +fused_transactions_write32s,131,2415 +fused_transactions_write32s,132,2412 +fused_transactions_write32s,133,2410 +fused_transactions_write32s,134,2412 +fused_transactions_write32s,135,2397 +fused_transactions_write32s,136,2412 +fused_transactions_write32s,137,2413 +fused_transactions_write32s,138,2411 +fused_transactions_write32s,139,2412 +fused_transactions_write32s,140,2416 +fused_transactions_write32s,141,2414 +fused_transactions_write32s,142,2413 +fused_transactions_write32s,143,2418 +fused_transactions_write32s,144,2417 +fused_transactions_write32s,145,2415 +fused_transactions_write32s,146,2417 +fused_transactions_write32s,147,2414 +fused_transactions_write32s,148,2414 +fused_transactions_write32s,149,2411 +fused_transactions_write32s,150,2412 +fused_transactions_write32s,151,2412 +fused_transactions_write32s,152,2410 +fused_transactions_write32s,153,2415 +fused_transactions_write32s,154,2414 +fused_transactions_write32s,155,2410 +fused_transactions_write32s,156,2414 +fused_transactions_write32s,157,2412 +fused_transactions_write32s,158,2412 +fused_transactions_write32s,159,2410 +fused_transactions_write32s,160,2411 +fused_transactions_write32s,161,2410 +fused_transactions_write32s,162,2410 +fused_transactions_write32s,163,2411 +fused_transactions_write32s,164,2414 +fused_transactions_write32s,165,2412 +fused_transactions_write32s,166,2412 +fused_transactions_write32s,167,2412 +fused_transactions_write32s,168,2416 +fused_transactions_write32s,169,2412 +fused_transactions_write32s,170,2412 +fused_transactions_write32s,171,2416 +fused_transactions_write32s,172,2412 +fused_transactions_write32s,173,2413 +fused_transactions_write32s,174,2410 +fused_transactions_write32s,175,2411 +fused_transactions_write32s,176,2412 +fused_transactions_write32s,177,2399 +fused_transactions_write32s,178,2409 +fused_transactions_write32s,179,2408 +fused_transactions_write32s,180,2414 +fused_transactions_write32s,181,2415 +fused_transactions_write32s,182,2413 +fused_transactions_write32s,183,2415 +fused_transactions_write32s,184,2411 +fused_transactions_write32s,185,2412 +fused_transactions_write32s,186,2416 +fused_transactions_write32s,187,2411 +fused_transactions_write32s,188,2413 +fused_transactions_write32s,189,2411 +fused_transactions_write32s,190,2411 +fused_transactions_write32s,191,2412 +fused_transactions_write32s,192,2411 +fused_transactions_write32s,193,2413 +fused_transactions_write32s,194,2411 +fused_transactions_write32s,195,2413 +fused_transactions_write32s,196,2411 +fused_transactions_write32s,197,2413 +fused_transactions_write32s,198,2415 +fused_transactions_write32s,199,2433 +fused_transactions_write32s,200,2417 +fused_transactions_write32s,201,2412 +fused_transactions_write32s,202,2411 +fused_transactions_write32s,203,2412 +fused_transactions_write32s,204,2410 +fused_transactions_write32s,205,2413 +fused_transactions_write32s,206,2414 +fused_transactions_write32s,207,2411 +fused_transactions_write32s,208,2413 +fused_transactions_write32s,209,2412 +fused_transactions_write32s,210,2414 +fused_transactions_write32s,211,2409 +fused_transactions_write32s,212,2412 +fused_transactions_write32s,213,2412 +fused_transactions_write32s,214,2415 +fused_transactions_write32s,215,2419 +fused_transactions_write32s,216,2416 +fused_transactions_write32s,217,2411 +fused_transactions_write32s,218,2413 +fused_transactions_write32s,219,2411 +fused_transactions_write32s,220,2410 +fused_transactions_write32s,221,2411 +fused_transactions_write32s,222,2412 +fused_transactions_write32s,223,2417 +fused_transactions_write32s,224,2411 +fused_transactions_write32s,225,2412 +fused_transactions_write32s,226,2416 +fused_transactions_write32s,227,2410 +fused_transactions_write32s,228,2411 +fused_transactions_write32s,229,2414 +fused_transactions_write32s,230,2412 +fused_transactions_write32s,231,2413 +fused_transactions_write32s,232,2408 +fused_transactions_write32s,233,2412 +fused_transactions_write32s,234,2411 +fused_transactions_write32s,235,2413 +fused_transactions_write32s,236,2410 +fused_transactions_write32s,237,2414 +fused_transactions_write32s,238,2413 +fused_transactions_write32s,239,2410 +fused_transactions_write32s,240,2411 +fused_transactions_write32s,241,2413 +fused_transactions_write32s,242,2413 +fused_transactions_write32s,243,2404 +fused_transactions_write32s,244,2412 +fused_transactions_write32s,245,2411 +fused_transactions_write32s,246,2412 +fused_transactions_write32s,247,2413 +fused_transactions_write32s,248,2413 +fused_transactions_write32s,249,2415 +fused_transactions_write32s,250,2413 +fused_transactions_write32s,251,2412 +fused_transactions_write32s,252,2411 +fused_transactions_write32s,253,2413 +fused_transactions_write32s,254,2414 +fused_transactions_write32s,255,2413 +fused_transactions_write32s,256,2412 +fused_transactions_write32s,257,2411 +fused_transactions_write32s,258,2411 +fused_transactions_write32s,259,2412 +fused_transactions_write32s,260,2412 +fused_transactions_write32s,261,2411 +fused_transactions_write32s,262,2413 +fused_transactions_write32s,263,2412 +fused_transactions_write32s,264,2418 +fused_transactions_write32s,265,2412 +fused_transactions_write32s,266,2410 +fused_transactions_write32s,267,2410 +fused_transactions_write32s,268,2413 +fused_transactions_write32s,269,2414 +fused_transactions_write32s,270,2411 +fused_transactions_write32s,271,2412 +fused_transactions_write32s,272,2430 +fused_transactions_write32s,273,2439 +fused_transactions_write32s,274,2413 +fused_transactions_write32s,275,2408 +fused_transactions_write32s,276,2409 +fused_transactions_write32s,277,2413 +fused_transactions_write32s,278,2408 +fused_transactions_write32s,279,2411 +fused_transactions_write32s,280,2420 +fused_transactions_write32s,281,2411 +fused_transactions_write32s,282,2408 +fused_transactions_write32s,283,2411 +fused_transactions_write32s,284,2413 +fused_transactions_write32s,285,2413 +fused_transactions_write32s,286,2420 +fused_transactions_write32s,287,2419 +fused_transactions_write32s,288,2416 +fused_transactions_write32s,289,2410 +fused_transactions_write32s,290,2413 +fused_transactions_write32s,291,2411 +fused_transactions_write32s,292,2410 +fused_transactions_write32s,293,2408 +fused_transactions_write32s,294,2409 +fused_transactions_write32s,295,2407 +fused_transactions_write32s,296,2413 +fused_transactions_write32s,297,2409 +fused_transactions_write32s,298,2410 +fused_transactions_write32s,299,2410 +fused_transactions_write32s,300,2410 +fused_transactions_write32s,301,2411 +fused_transactions_write32s,302,2409 +fused_transactions_write32s,303,2409 +fused_transactions_write32s,304,2407 +fused_transactions_write32s,305,2414 +fused_transactions_write32s,306,2408 +fused_transactions_write32s,307,2406 +fused_transactions_write32s,308,2408 +fused_transactions_write32s,309,2410 +fused_transactions_write32s,310,2408 +fused_transactions_write32s,311,2412 +fused_transactions_write32s,312,2416 +fused_transactions_write32s,313,2409 +fused_transactions_write32s,314,2409 +fused_transactions_write32s,315,2407 +fused_transactions_write32s,316,2412 +fused_transactions_write32s,317,2410 +fused_transactions_write32s,318,2408 +fused_transactions_write32s,319,2407 +fused_transactions_write32s,320,2410 +fused_transactions_write32s,321,2411 +fused_transactions_write32s,322,2408 +fused_transactions_write32s,323,2411 +fused_transactions_write32s,324,2410 +fused_transactions_write32s,325,2408 +fused_transactions_write32s,326,2411 +fused_transactions_write32s,327,2410 +fused_transactions_write32s,328,2416 +fused_transactions_write32s,329,2409 +fused_transactions_write32s,330,2417 +fused_transactions_write32s,331,2413 +fused_transactions_write32s,332,2412 +fused_transactions_write32s,333,2414 +fused_transactions_write32s,334,2409 +fused_transactions_write32s,335,2408 +fused_transactions_write32s,336,2414 +fused_transactions_write32s,337,2418 +fused_transactions_write32s,338,2409 +fused_transactions_write32s,339,2408 +fused_transactions_write32s,340,2411 +fused_transactions_write32s,341,2421 +fused_transactions_write32s,342,2412 +fused_transactions_write32s,343,2410 +fused_transactions_write32s,344,2411 +fused_transactions_write32s,345,2411 +fused_transactions_write32s,346,2412 +fused_transactions_write32s,347,2413 +fused_transactions_write32s,348,2413 +fused_transactions_write32s,349,2409 +fused_transactions_write32s,350,2420 +fused_transactions_write32s,351,2412 +fused_transactions_write32s,352,2428 +fused_transactions_write32s,353,2431 +fused_transactions_write32s,354,2418 +fused_transactions_write32s,355,2413 +fused_transactions_write32s,356,2415 +fused_transactions_write32s,357,2412 +fused_transactions_write32s,358,2413 +fused_transactions_write32s,359,2406 +fused_transactions_write32s,360,2415 +fused_transactions_write32s,361,2415 +fused_transactions_write32s,362,2410 +fused_transactions_write32s,363,2415 +fused_transactions_write32s,364,2410 +fused_transactions_write32s,365,2413 +fused_transactions_write32s,366,2417 +fused_transactions_write32s,367,2409 +fused_transactions_write32s,368,2416 +fused_transactions_write32s,369,2411 +fused_transactions_write32s,370,2412 +fused_transactions_write32s,371,2407 +fused_transactions_write32s,372,2414 +fused_transactions_write32s,373,2415 +fused_transactions_write32s,374,2412 +fused_transactions_write32s,375,2411 +fused_transactions_write32s,376,2409 +fused_transactions_write32s,377,2412 +fused_transactions_write32s,378,2412 +fused_transactions_write32s,379,2409 +fused_transactions_write32s,380,2417 +fused_transactions_write32s,381,2418 +fused_transactions_write32s,382,2439 +fused_transactions_write32s,383,2418 +fused_transactions_write32s,384,2417 +fused_transactions_write32s,385,2411 +fused_transactions_write32s,386,2411 +fused_transactions_write32s,387,2415 +fused_transactions_write32s,388,2416 +fused_transactions_write32s,389,2410 +fused_transactions_write32s,390,2418 +fused_transactions_write32s,391,2412 +fused_transactions_write32s,392,2413 +fused_transactions_write32s,393,2411 +fused_transactions_write32s,394,2415 +fused_transactions_write32s,395,2414 +fused_transactions_write32s,396,2410 +fused_transactions_write32s,397,2413 +fused_transactions_write32s,398,2409 +fused_transactions_write32s,399,2409 +fused_transactions_write32s,400,2414 +fused_transactions_write32s,401,2414 +fused_transactions_write32s,402,2411 +fused_transactions_write32s,403,2412 +fused_transactions_write32s,404,2415 +fused_transactions_write32s,405,2418 +fused_transactions_write32s,406,2419 +fused_transactions_write32s,407,2418 +fused_transactions_write32s,408,2417 +fused_transactions_write32s,409,2410 +fused_transactions_write32s,410,2406 +fused_transactions_write32s,411,2406 +fused_transactions_write32s,412,2404 +fused_transactions_write32s,413,2410 +fused_transactions_write32s,414,2409 +fused_transactions_write32s,415,2405 +fused_transactions_write32s,416,2406 +fused_transactions_write32s,417,2399 +fused_transactions_write32s,418,2410 +fused_transactions_write32s,419,2409 +fused_transactions_write32s,420,2410 +fused_transactions_write32s,421,2406 +fused_transactions_write32s,422,2414 +fused_transactions_write32s,423,2408 +fused_transactions_write32s,424,2408 +fused_transactions_write32s,425,2399 +fused_transactions_write32s,426,2407 +fused_transactions_write32s,427,2403 +fused_transactions_write32s,428,2398 +fused_transactions_write32s,429,2409 +fused_transactions_write32s,430,2415 +fused_transactions_write32s,431,2412 +fused_transactions_write32s,432,2421 +fused_transactions_write32s,433,2418 +fused_transactions_write32s,434,2419 +fused_transactions_write32s,435,2421 +fused_transactions_write32s,436,2411 +fused_transactions_write32s,437,2416 +fused_transactions_write32s,438,2417 +fused_transactions_write32s,439,2414 +fused_transactions_write32s,440,2412 +fused_transactions_write32s,441,2412 +fused_transactions_write32s,442,2409 +fused_transactions_write32s,443,2412 +fused_transactions_write32s,444,2413 +fused_transactions_write32s,445,2413 +fused_transactions_write32s,446,2411 +fused_transactions_write32s,447,2415 +fused_transactions_write32s,448,2409 +fused_transactions_write32s,449,2414 +fused_transactions_write32s,450,2413 +fused_transactions_write32s,451,2414 +fused_transactions_write32s,452,2412 +fused_transactions_write32s,453,2412 +fused_transactions_write32s,454,2412 +fused_transactions_write32s,455,2416 +fused_transactions_write32s,456,2410 +fused_transactions_write32s,457,2421 +fused_transactions_write32s,458,2414 +fused_transactions_write32s,459,2413 +fused_transactions_write32s,460,2414 +fused_transactions_write32s,461,2413 +fused_transactions_write32s,462,2410 +fused_transactions_write32s,463,2411 +fused_transactions_write32s,464,2410 +fused_transactions_write32s,465,2413 +fused_transactions_write32s,466,2421 +fused_transactions_write32s,467,2416 +fused_transactions_write32s,468,2411 +fused_transactions_write32s,469,2411 +fused_transactions_write32s,470,2410 +fused_transactions_write32s,471,2415 +fused_transactions_write32s,472,2413 +fused_transactions_write32s,473,2417 +fused_transactions_write32s,474,2420 +fused_transactions_write32s,475,2413 +fused_transactions_write32s,476,2414 +fused_transactions_write32s,477,2410 +fused_transactions_write32s,478,2416 +fused_transactions_write32s,479,2409 +fused_transactions_write32s,480,2413 +fused_transactions_write32s,481,2414 +fused_transactions_write32s,482,2413 +fused_transactions_write32s,483,2412 +fused_transactions_write32s,484,2417 +fused_transactions_write32s,485,2412 +fused_transactions_write32s,486,2411 +fused_transactions_write32s,487,2412 +fused_transactions_write32s,488,2414 +fused_transactions_write32s,489,2411 +fused_transactions_write32s,490,2412 +fused_transactions_write32s,491,2414 +fused_transactions_write32s,492,2414 +fused_transactions_write32s,493,2414 +fused_transactions_write32s,494,2414 +fused_transactions_write32s,495,2416 +fused_transactions_write32s,496,2412 +fused_transactions_write32s,497,2412 +fused_transactions_write32s,498,2410 +fused_transactions_write32s,499,2414 +fused_transactions_write32s,500,2410 +fused_transactions_write32s,501,2415 +fused_transactions_write32s,502,2413 +fused_transactions_write32s,503,2419 +fused_transactions_write32s,504,2414 +fused_transactions_write32s,505,2415 +fused_transactions_write32s,506,2414 +fused_transactions_write32s,507,2417 +fused_transactions_write32s,508,2411 +fused_transactions_write32s,509,2414 +fused_transactions_write32s,510,2411 +fused_transactions_write32s,511,2410 +fused_transactions_write32s,512,2412 +fused_transactions_write32s,513,2415 +fused_transactions_write32s,514,2413 +fused_transactions_write32s,515,2413 +fused_transactions_write32s,516,2411 +fused_transactions_write32s,517,2409 +fused_transactions_write32s,518,2419 +fused_transactions_write32s,519,2417 +fused_transactions_write32s,520,2410 +fused_transactions_write32s,521,2410 +fused_transactions_write32s,522,2406 +fused_transactions_write32s,523,2409 +fused_transactions_write32s,524,2413 +fused_transactions_write32s,525,2406 +fused_transactions_write32s,526,2396 +fused_transactions_write32s,527,2385 +fused_transactions_write32s,528,2385 +fused_transactions_write32s,529,2390 +fused_transactions_write32s,530,2392 +fused_transactions_write32s,531,2414 +fused_transactions_write32s,532,2416 +fused_transactions_write32s,533,2411 +fused_transactions_write32s,534,2411 +fused_transactions_write32s,535,2412 +fused_transactions_write32s,536,2411 +fused_transactions_write32s,537,2408 +fused_transactions_write32s,538,2413 +fused_transactions_write32s,539,2414 +fused_transactions_write32s,540,2412 +fused_transactions_write32s,541,2414 +fused_transactions_write32s,542,2412 +fused_transactions_write32s,543,2410 +fused_transactions_write32s,544,2412 +fused_transactions_write32s,545,2415 +fused_transactions_write32s,546,2418 +fused_transactions_write32s,547,2420 +fused_transactions_write32s,548,2412 +fused_transactions_write32s,549,2410 +fused_transactions_write32s,550,2407 +fused_transactions_write32s,551,2410 +fused_transactions_write32s,552,2411 +fused_transactions_write32s,553,2410 +fused_transactions_write32s,554,2411 +fused_transactions_write32s,555,2408 +fused_transactions_write32s,556,2408 +fused_transactions_write32s,557,2410 +fused_transactions_write32s,558,2408 +fused_transactions_write32s,559,2410 +fused_transactions_write32s,560,2410 +fused_transactions_write32s,561,2417 +fused_transactions_write32s,562,2419 +fused_transactions_write32s,563,2412 +fused_transactions_write32s,564,2412 +fused_transactions_write32s,565,2410 +fused_transactions_write32s,566,2410 +fused_transactions_write32s,567,2410 +fused_transactions_write32s,568,2408 +fused_transactions_write32s,569,2410 +fused_transactions_write32s,570,2412 +fused_transactions_write32s,571,2413 +fused_transactions_write32s,572,2412 +fused_transactions_write32s,573,2414 +fused_transactions_write32s,574,2414 +fused_transactions_write32s,575,2414 +fused_transactions_write32s,576,2410 +fused_transactions_write32s,577,2407 +fused_transactions_write32s,578,2412 +fused_transactions_write32s,579,2411 +fused_transactions_write32s,580,2413 +fused_transactions_write32s,581,2410 +fused_transactions_write32s,582,2409 +fused_transactions_write32s,583,2408 +fused_transactions_write32s,584,2412 +fused_transactions_write32s,585,2411 +fused_transactions_write32s,586,2413 +fused_transactions_write32s,587,2412 +fused_transactions_write32s,588,2408 +fused_transactions_write32s,589,2413 +fused_transactions_write32s,590,2409 +fused_transactions_write32s,591,2410 +fused_transactions_write32s,592,2410 +fused_transactions_write32s,593,2408 +fused_transactions_write32s,594,2413 +fused_transactions_write32s,595,2413 +fused_transactions_write32s,596,2409 +fused_transactions_write32s,597,2418 +fused_transactions_write32s,598,2413 +fused_transactions_write32s,599,2412 +fused_transactions_write32s,600,2415 +fused_transactions_write32s,601,2416 +fused_transactions_write32s,602,2410 +fused_transactions_write32s,603,2410 +fused_transactions_write32s,604,2416 +fused_transactions_write32s,605,2411 +fused_transactions_write32s,606,2411 +fused_transactions_write32s,607,2410 +fused_transactions_write32s,608,2412 +fused_transactions_write32s,609,2410 +fused_transactions_write32s,610,2412 +fused_transactions_write32s,611,2412 +fused_transactions_write32s,612,2411 +fused_transactions_write32s,613,2410 +fused_transactions_write32s,614,2409 +fused_transactions_write32s,615,2410 +fused_transactions_write32s,616,2411 +fused_transactions_write32s,617,2411 +fused_transactions_write32s,618,2413 +fused_transactions_write32s,619,2415 +fused_transactions_write32s,620,2409 +fused_transactions_write32s,621,2412 +fused_transactions_write32s,622,2409 +fused_transactions_write32s,623,2410 +fused_transactions_write32s,624,2411 +fused_transactions_write32s,625,2408 +fused_transactions_write32s,626,2415 +fused_transactions_write32s,627,2415 +fused_transactions_write32s,628,2412 +fused_transactions_write32s,629,2410 +fused_transactions_write32s,630,2416 +fused_transactions_write32s,631,2412 +fused_transactions_write32s,632,2414 +fused_transactions_write32s,633,2410 +fused_transactions_write32s,634,2410 +fused_transactions_write32s,635,2412 +fused_transactions_write32s,636,2410 +fused_transactions_write32s,637,2421 +fused_transactions_write32s,638,2418 +fused_transactions_write32s,639,2412 +fused_transactions_write32s,640,2409 +fused_transactions_write32s,641,2416 +fused_transactions_write32s,642,2417 +fused_transactions_write32s,643,2412 +fused_transactions_write32s,644,2409 +fused_transactions_write32s,645,2410 +fused_transactions_write32s,646,2415 +fused_transactions_write32s,647,2410 +fused_transactions_write32s,648,2411 +fused_transactions_write32s,649,2412 +fused_transactions_write32s,650,2415 +fused_transactions_write32s,651,2412 +fused_transactions_write32s,652,2409 +fused_transactions_write32s,653,2409 +fused_transactions_write32s,654,2408 +fused_transactions_write32s,655,2412 +fused_transactions_write32s,656,2411 +fused_transactions_write32s,657,2411 +fused_transactions_write32s,658,2409 +fused_transactions_write32s,659,2414 +fused_transactions_write32s,660,2421 +fused_transactions_write32s,661,2412 +fused_transactions_write32s,662,2409 +fused_transactions_write32s,663,2409 +fused_transactions_write32s,664,2407 +fused_transactions_write32s,665,2405 +fused_transactions_write32s,666,2406 +fused_transactions_write32s,667,2416 +fused_transactions_write32s,668,2415 +fused_transactions_write32s,669,2409 +fused_transactions_write32s,670,2412 +fused_transactions_write32s,671,2414 +fused_transactions_write32s,672,2414 +fused_transactions_write32s,673,2414 +fused_transactions_write32s,674,2409 +fused_transactions_write32s,675,2415 +fused_transactions_write32s,676,2410 +fused_transactions_write32s,677,2409 +fused_transactions_write32s,678,2422 +fused_transactions_write32s,679,2419 +fused_transactions_write32s,680,2411 +fused_transactions_write32s,681,2412 +fused_transactions_write32s,682,2411 +fused_transactions_write32s,683,2422 +fused_transactions_write32s,684,2409 +fused_transactions_write32s,685,2416 +fused_transactions_write32s,686,2411 +fused_transactions_write32s,687,2415 +fused_transactions_write32s,688,2410 +fused_transactions_write32s,689,2418 +fused_transactions_write32s,690,2414 +fused_transactions_write32s,691,2426 +fused_transactions_write32s,692,2413 +fused_transactions_write32s,693,2412 +fused_transactions_write32s,694,2413 +fused_transactions_write32s,695,2417 +fused_transactions_write32s,696,2412 +fused_transactions_write32s,697,2422 +fused_transactions_write32s,698,2415 +fused_transactions_write32s,699,2417 +fused_transactions_write32s,700,2414 +fused_transactions_write32s,701,2414 +fused_transactions_write32s,702,2412 +fused_transactions_write32s,703,2414 +fused_transactions_write32s,704,2405 +fused_transactions_write32s,705,2417 +fused_transactions_write32s,706,2414 +fused_transactions_write32s,707,2409 +fused_transactions_write32s,708,2408 +fused_transactions_write32s,709,2413 +fused_transactions_write32s,710,2409 +fused_transactions_write32s,711,2414 +fused_transactions_write32s,712,2410 +fused_transactions_write32s,713,2414 +fused_transactions_write32s,714,2412 +fused_transactions_write32s,715,2407 +fused_transactions_write32s,716,2412 +fused_transactions_write32s,717,2414 +fused_transactions_write32s,718,2414 +fused_transactions_write32s,719,2408 +fused_transactions_write32s,720,2410 +fused_transactions_write32s,721,2408 +fused_transactions_write32s,722,2416 +fused_transactions_write32s,723,2410 +fused_transactions_write32s,724,2409 +fused_transactions_write32s,725,2411 +fused_transactions_write32s,726,2413 +fused_transactions_write32s,727,2410 +fused_transactions_write32s,728,2416 +fused_transactions_write32s,729,2416 +fused_transactions_write32s,730,2414 +fused_transactions_write32s,731,2407 +fused_transactions_write32s,732,2407 +fused_transactions_write32s,733,2409 +fused_transactions_write32s,734,2414 +fused_transactions_write32s,735,2406 +fused_transactions_write32s,736,2415 +fused_transactions_write32s,737,2410 +fused_transactions_write32s,738,2411 +fused_transactions_write32s,739,2405 +fused_transactions_write32s,740,2408 +fused_transactions_write32s,741,2413 +fused_transactions_write32s,742,2409 +fused_transactions_write32s,743,2407 +fused_transactions_write32s,744,2410 +fused_transactions_write32s,745,2415 +fused_transactions_write32s,746,2413 +fused_transactions_write32s,747,2410 +fused_transactions_write32s,748,2412 +fused_transactions_write32s,749,2406 +fused_transactions_write32s,750,2412 +fused_transactions_write32s,751,2407 +fused_transactions_write32s,752,2406 +fused_transactions_write32s,753,2409 +fused_transactions_write32s,754,2415 +fused_transactions_write32s,755,2409 +fused_transactions_write32s,756,2412 +fused_transactions_write32s,757,2410 +fused_transactions_write32s,758,2407 +fused_transactions_write32s,759,2410 +fused_transactions_write32s,760,2411 +fused_transactions_write32s,761,2410 +fused_transactions_write32s,762,2407 +fused_transactions_write32s,763,2410 +fused_transactions_write32s,764,2406 +fused_transactions_write32s,765,2415 +fused_transactions_write32s,766,2410 +fused_transactions_write32s,767,2406 +fused_transactions_write32s,768,2409 +fused_transactions_write32s,769,2413 +fused_transactions_write32s,770,2407 +fused_transactions_write32s,771,2408 +fused_transactions_write32s,772,2408 +fused_transactions_write32s,773,2415 +fused_transactions_write32s,774,2409 +fused_transactions_write32s,775,2408 +fused_transactions_write32s,776,2407 +fused_transactions_write32s,777,2406 +fused_transactions_write32s,778,2417 +fused_transactions_write32s,779,2406 +fused_transactions_write32s,780,2410 +fused_transactions_write32s,781,2410 +fused_transactions_write32s,782,2409 +fused_transactions_write32s,783,2409 +fused_transactions_write32s,784,2407 +fused_transactions_write32s,785,2408 +fused_transactions_write32s,786,2413 +fused_transactions_write32s,787,2408 +fused_transactions_write32s,788,2412 +fused_transactions_write32s,789,2405 +fused_transactions_write32s,790,2413 +fused_transactions_write32s,791,2410 +fused_transactions_write32s,792,2410 +fused_transactions_write32s,793,2408 +fused_transactions_write32s,794,2411 +fused_transactions_write32s,795,2410 +fused_transactions_write32s,796,2410 +fused_transactions_write32s,797,2407 +fused_transactions_write32s,798,2412 +fused_transactions_write32s,799,2410 +fused_transactions_write32s,800,2410 +fused_transactions_write32s,801,2411 +fused_transactions_write32s,802,2409 +fused_transactions_write32s,803,2414 +fused_transactions_write32s,804,2417 +fused_transactions_write32s,805,2413 +fused_transactions_write32s,806,2406 +fused_transactions_write32s,807,2412 +fused_transactions_write32s,808,2410 +fused_transactions_write32s,809,2410 +fused_transactions_write32s,810,2409 +fused_transactions_write32s,811,2409 +fused_transactions_write32s,812,2408 +fused_transactions_write32s,813,2412 +fused_transactions_write32s,814,2406 +fused_transactions_write32s,815,2418 +fused_transactions_write32s,816,2416 +fused_transactions_write32s,817,2411 +fused_transactions_write32s,818,2410 +fused_transactions_write32s,819,2411 +fused_transactions_write32s,820,2408 +fused_transactions_write32s,821,2407 +fused_transactions_write32s,822,2410 +fused_transactions_write32s,823,2412 +fused_transactions_write32s,824,2413 +fused_transactions_write32s,825,2405 +fused_transactions_write32s,826,2410 +fused_transactions_write32s,827,2407 +fused_transactions_write32s,828,2412 +fused_transactions_write32s,829,2410 +fused_transactions_write32s,830,2410 +fused_transactions_write32s,831,2411 +fused_transactions_write32s,832,2410 +fused_transactions_write32s,833,2409 +fused_transactions_write32s,834,2416 +fused_transactions_write32s,835,2414 +fused_transactions_write32s,836,2414 +fused_transactions_write32s,837,2414 +fused_transactions_write32s,838,2413 +fused_transactions_write32s,839,2409 +fused_transactions_write32s,840,2407 +fused_transactions_write32s,841,2411 +fused_transactions_write32s,842,2407 +fused_transactions_write32s,843,2410 +fused_transactions_write32s,844,2415 +fused_transactions_write32s,845,2410 +fused_transactions_write32s,846,2413 +fused_transactions_write32s,847,2409 +fused_transactions_write32s,848,2410 +fused_transactions_write32s,849,2425 +fused_transactions_write32s,850,2412 +fused_transactions_write32s,851,2421 +fused_transactions_write32s,852,2417 +fused_transactions_write32s,853,2419 +fused_transactions_write32s,854,2413 +fused_transactions_write32s,855,2417 +fused_transactions_write32s,856,2412 +fused_transactions_write32s,857,2416 +fused_transactions_write32s,858,2410 +fused_transactions_write32s,859,2410 +fused_transactions_write32s,860,2411 +fused_transactions_write32s,861,2410 +fused_transactions_write32s,862,2747 +fused_transactions_write32s,863,2976 +fused_transactions_write32s,864,3019 +fused_transactions_write32s,865,2977 +fused_transactions_write32s,866,3019 +fused_transactions_write32s,867,2979 +fused_transactions_write32s,868,3016 +fused_transactions_write32s,869,2976 +fused_transactions_write32s,870,3015 +fused_transactions_write32s,871,2980 +fused_transactions_write32s,872,3018 +fused_transactions_write32s,873,2976 +fused_transactions_write32s,874,3068 +fused_transactions_write32s,875,2951 +fused_transactions_write32s,876,2966 +fused_transactions_write32s,877,2815 +fused_transactions_write32s,878,2785 +fused_transactions_write32s,879,2779 +fused_transactions_write32s,880,2818 +fused_transactions_write32s,881,2828 +fused_transactions_write32s,882,3086 +fused_transactions_write32s,883,2797 +fused_transactions_write32s,884,2797 +fused_transactions_write32s,885,2809 +fused_transactions_write32s,886,2785 +fused_transactions_write32s,887,2795 +fused_transactions_write32s,888,2937 +fused_transactions_write32s,889,2955 +fused_transactions_write32s,890,3038 +fused_transactions_write32s,891,2952 +fused_transactions_write32s,892,3000 +fused_transactions_write32s,893,2999 +fused_transactions_write32s,894,2999 +fused_transactions_write32s,895,2999 +fused_transactions_write32s,896,2994 +fused_transactions_write32s,897,3039 +fused_transactions_write32s,898,2954 +fused_transactions_write32s,899,3000 +fused_transactions_write32s,900,3002 +fused_transactions_write32s,901,2994 +fused_transactions_write32s,902,3042 +fused_transactions_write32s,903,2973 +fused_transactions_write32s,904,2957 +fused_transactions_write32s,905,3017 +fused_transactions_write32s,906,2996 +fused_transactions_write32s,907,3000 +fused_transactions_write32s,908,2601 +fused_transactions_write32s,909,2785 +fused_transactions_write32s,910,2792 +fused_transactions_write32s,911,2811 +fused_transactions_write32s,912,3004 +fused_transactions_write32s,913,2997 +fused_transactions_write32s,914,2999 +fused_transactions_write32s,915,3004 +fused_transactions_write32s,916,3034 +fused_transactions_write32s,917,2931 +fused_transactions_write32s,918,3025 +fused_transactions_write32s,919,2992 +fused_transactions_write32s,920,3004 +fused_transactions_write32s,921,2979 +fused_transactions_write32s,922,3108 +fused_transactions_write32s,923,2905 +fused_transactions_write32s,924,2991 +fused_transactions_write32s,925,3058 +fused_transactions_write32s,926,2932 +fused_transactions_write32s,927,2859 +fused_transactions_write32s,928,2495 +fused_transactions_write32s,929,2471 +fused_transactions_write32s,930,2413 +fused_transactions_write32s,931,2425 +fused_transactions_write32s,932,2410 +fused_transactions_write32s,933,2419 +fused_transactions_write32s,934,2416 +fused_transactions_write32s,935,2420 +fused_transactions_write32s,936,2411 +fused_transactions_write32s,937,2408 +fused_transactions_write32s,938,2411 +fused_transactions_write32s,939,2407 +fused_transactions_write32s,940,2413 +fused_transactions_write32s,941,2409 +fused_transactions_write32s,942,2413 +fused_transactions_write32s,943,2410 +fused_transactions_write32s,944,2410 +fused_transactions_write32s,945,2411 +fused_transactions_write32s,946,2406 +fused_transactions_write32s,947,2402 +fused_transactions_write32s,948,2402 +fused_transactions_write32s,949,2405 +fused_transactions_write32s,950,2408 +fused_transactions_write32s,951,2406 +fused_transactions_write32s,952,2723 +fused_transactions_write32s,953,2523 +fused_transactions_write32s,954,2486 +fused_transactions_write32s,955,2431 +fused_transactions_write32s,956,2418 +fused_transactions_write32s,957,2421 +fused_transactions_write32s,958,2472 +fused_transactions_write32s,959,2755 +fused_transactions_write32s,960,2875 +fused_transactions_write32s,961,2996 +fused_transactions_write32s,962,2986 +fused_transactions_write32s,963,3100 +fused_transactions_write32s,964,2893 +fused_transactions_write32s,965,3108 +fused_transactions_write32s,966,2893 +fused_transactions_write32s,967,3098 +fused_transactions_write32s,968,2892 +fused_transactions_write32s,969,3011 +fused_transactions_write32s,970,2990 +fused_transactions_write32s,971,2995 +fused_transactions_write32s,972,2998 +fused_transactions_write32s,973,2528 +fused_transactions_write32s,974,2779 +fused_transactions_write32s,975,2784 +fused_transactions_write32s,976,2892 +fused_transactions_write32s,977,3002 +fused_transactions_write32s,978,3002 +fused_transactions_write32s,979,2996 +fused_transactions_write32s,980,2996 +fused_transactions_write32s,981,2997 +fused_transactions_write32s,982,3006 +fused_transactions_write32s,983,2992 +fused_transactions_write32s,984,2996 +fused_transactions_write32s,985,2995 +fused_transactions_write32s,986,2997 +fused_transactions_write32s,987,2999 +fused_transactions_write32s,988,2999 +fused_transactions_write32s,989,2995 +fused_transactions_write32s,990,2994 +fused_transactions_write32s,991,3003 +fused_transactions_write32s,992,2787 +fused_transactions_write32s,993,2790 +fused_transactions_write32s,994,2785 +fused_transactions_write32s,995,2779 +fused_transactions_write32s,996,2839 +fused_transactions_write32s,997,2998 +fused_transactions_write32s,998,2982 +fused_transactions_write32s,999,2784 \ No newline at end of file diff --git a/programming_examples/reconfiguration/ablation/3_write32s_reset_core.csv b/programming_examples/reconfiguration/ablation/3_write32s_reset_core.csv new file mode 100644 index 00000000000..76f248fc1d5 --- /dev/null +++ b/programming_examples/reconfiguration/ablation/3_write32s_reset_core.csv @@ -0,0 +1,1000 @@ +fused_transactions_write32s,0,2376 +fused_transactions_write32s,1,2352 +fused_transactions_write32s,2,2317 +fused_transactions_write32s,3,2319 +fused_transactions_write32s,4,2318 +fused_transactions_write32s,5,2316 +fused_transactions_write32s,6,2313 +fused_transactions_write32s,7,2317 +fused_transactions_write32s,8,2318 +fused_transactions_write32s,9,2316 +fused_transactions_write32s,10,2315 +fused_transactions_write32s,11,2315 +fused_transactions_write32s,12,2316 +fused_transactions_write32s,13,2316 +fused_transactions_write32s,14,2315 +fused_transactions_write32s,15,2310 +fused_transactions_write32s,16,2314 +fused_transactions_write32s,17,2315 +fused_transactions_write32s,18,2317 +fused_transactions_write32s,19,2310 +fused_transactions_write32s,20,2318 +fused_transactions_write32s,21,2321 +fused_transactions_write32s,22,2310 +fused_transactions_write32s,23,2316 +fused_transactions_write32s,24,2309 +fused_transactions_write32s,25,2317 +fused_transactions_write32s,26,2316 +fused_transactions_write32s,27,2319 +fused_transactions_write32s,28,2313 +fused_transactions_write32s,29,2321 +fused_transactions_write32s,30,2319 +fused_transactions_write32s,31,2311 +fused_transactions_write32s,32,2312 +fused_transactions_write32s,33,2323 +fused_transactions_write32s,34,2317 +fused_transactions_write32s,35,2314 +fused_transactions_write32s,36,2318 +fused_transactions_write32s,37,2322 +fused_transactions_write32s,38,2318 +fused_transactions_write32s,39,2316 +fused_transactions_write32s,40,2313 +fused_transactions_write32s,41,2337 +fused_transactions_write32s,42,2314 +fused_transactions_write32s,43,2317 +fused_transactions_write32s,44,2312 +fused_transactions_write32s,45,2312 +fused_transactions_write32s,46,2315 +fused_transactions_write32s,47,2315 +fused_transactions_write32s,48,2318 +fused_transactions_write32s,49,2314 +fused_transactions_write32s,50,2320 +fused_transactions_write32s,51,2314 +fused_transactions_write32s,52,2311 +fused_transactions_write32s,53,2314 +fused_transactions_write32s,54,2312 +fused_transactions_write32s,55,2317 +fused_transactions_write32s,56,2315 +fused_transactions_write32s,57,2315 +fused_transactions_write32s,58,2311 +fused_transactions_write32s,59,2313 +fused_transactions_write32s,60,2313 +fused_transactions_write32s,61,2313 +fused_transactions_write32s,62,2312 +fused_transactions_write32s,63,2322 +fused_transactions_write32s,64,2316 +fused_transactions_write32s,65,2321 +fused_transactions_write32s,66,2317 +fused_transactions_write32s,67,2317 +fused_transactions_write32s,68,2312 +fused_transactions_write32s,69,2312 +fused_transactions_write32s,70,2322 +fused_transactions_write32s,71,2315 +fused_transactions_write32s,72,2313 +fused_transactions_write32s,73,2315 +fused_transactions_write32s,74,2317 +fused_transactions_write32s,75,2315 +fused_transactions_write32s,76,2317 +fused_transactions_write32s,77,2313 +fused_transactions_write32s,78,2311 +fused_transactions_write32s,79,2314 +fused_transactions_write32s,80,2313 +fused_transactions_write32s,81,2312 +fused_transactions_write32s,82,2317 +fused_transactions_write32s,83,2315 +fused_transactions_write32s,84,2319 +fused_transactions_write32s,85,2318 +fused_transactions_write32s,86,2319 +fused_transactions_write32s,87,2313 +fused_transactions_write32s,88,2321 +fused_transactions_write32s,89,2319 +fused_transactions_write32s,90,2317 +fused_transactions_write32s,91,2314 +fused_transactions_write32s,92,2315 +fused_transactions_write32s,93,2313 +fused_transactions_write32s,94,2313 +fused_transactions_write32s,95,2317 +fused_transactions_write32s,96,2311 +fused_transactions_write32s,97,2315 +fused_transactions_write32s,98,2314 +fused_transactions_write32s,99,2313 +fused_transactions_write32s,100,2316 +fused_transactions_write32s,101,2316 +fused_transactions_write32s,102,2313 +fused_transactions_write32s,103,2318 +fused_transactions_write32s,104,2318 +fused_transactions_write32s,105,2314 +fused_transactions_write32s,106,2320 +fused_transactions_write32s,107,2317 +fused_transactions_write32s,108,2319 +fused_transactions_write32s,109,2319 +fused_transactions_write32s,110,2315 +fused_transactions_write32s,111,2316 +fused_transactions_write32s,112,2311 +fused_transactions_write32s,113,2313 +fused_transactions_write32s,114,2312 +fused_transactions_write32s,115,2313 +fused_transactions_write32s,116,2318 +fused_transactions_write32s,117,2317 +fused_transactions_write32s,118,2320 +fused_transactions_write32s,119,2330 +fused_transactions_write32s,120,2313 +fused_transactions_write32s,121,2322 +fused_transactions_write32s,122,2314 +fused_transactions_write32s,123,2313 +fused_transactions_write32s,124,2322 +fused_transactions_write32s,125,2317 +fused_transactions_write32s,126,2313 +fused_transactions_write32s,127,2313 +fused_transactions_write32s,128,2314 +fused_transactions_write32s,129,2312 +fused_transactions_write32s,130,2312 +fused_transactions_write32s,131,2313 +fused_transactions_write32s,132,2312 +fused_transactions_write32s,133,2310 +fused_transactions_write32s,134,2310 +fused_transactions_write32s,135,2314 +fused_transactions_write32s,136,2316 +fused_transactions_write32s,137,2321 +fused_transactions_write32s,138,2320 +fused_transactions_write32s,139,2353 +fused_transactions_write32s,140,2317 +fused_transactions_write32s,141,2316 +fused_transactions_write32s,142,2320 +fused_transactions_write32s,143,2322 +fused_transactions_write32s,144,2312 +fused_transactions_write32s,145,2323 +fused_transactions_write32s,146,2317 +fused_transactions_write32s,147,2313 +fused_transactions_write32s,148,2310 +fused_transactions_write32s,149,2315 +fused_transactions_write32s,150,2310 +fused_transactions_write32s,151,2312 +fused_transactions_write32s,152,2303 +fused_transactions_write32s,153,2293 +fused_transactions_write32s,154,2305 +fused_transactions_write32s,155,2312 +fused_transactions_write32s,156,2316 +fused_transactions_write32s,157,2317 +fused_transactions_write32s,158,2317 +fused_transactions_write32s,159,2319 +fused_transactions_write32s,160,2317 +fused_transactions_write32s,161,2311 +fused_transactions_write32s,162,2312 +fused_transactions_write32s,163,2314 +fused_transactions_write32s,164,2310 +fused_transactions_write32s,165,2311 +fused_transactions_write32s,166,2309 +fused_transactions_write32s,167,2309 +fused_transactions_write32s,168,2309 +fused_transactions_write32s,169,2311 +fused_transactions_write32s,170,2309 +fused_transactions_write32s,171,2311 +fused_transactions_write32s,172,2316 +fused_transactions_write32s,173,2307 +fused_transactions_write32s,174,2312 +fused_transactions_write32s,175,2309 +fused_transactions_write32s,176,2311 +fused_transactions_write32s,177,2310 +fused_transactions_write32s,178,2313 +fused_transactions_write32s,179,2312 +fused_transactions_write32s,180,2311 +fused_transactions_write32s,181,2311 +fused_transactions_write32s,182,2319 +fused_transactions_write32s,183,2309 +fused_transactions_write32s,184,2310 +fused_transactions_write32s,185,2312 +fused_transactions_write32s,186,2318 +fused_transactions_write32s,187,2310 +fused_transactions_write32s,188,2310 +fused_transactions_write32s,189,2313 +fused_transactions_write32s,190,2310 +fused_transactions_write32s,191,2307 +fused_transactions_write32s,192,2315 +fused_transactions_write32s,193,2311 +fused_transactions_write32s,194,2309 +fused_transactions_write32s,195,2313 +fused_transactions_write32s,196,2317 +fused_transactions_write32s,197,2307 +fused_transactions_write32s,198,2293 +fused_transactions_write32s,199,2285 +fused_transactions_write32s,200,2289 +fused_transactions_write32s,201,2295 +fused_transactions_write32s,202,2290 +fused_transactions_write32s,203,2307 +fused_transactions_write32s,204,2308 +fused_transactions_write32s,205,2313 +fused_transactions_write32s,206,2319 +fused_transactions_write32s,207,2318 +fused_transactions_write32s,208,2323 +fused_transactions_write32s,209,2313 +fused_transactions_write32s,210,2310 +fused_transactions_write32s,211,2310 +fused_transactions_write32s,212,2315 +fused_transactions_write32s,213,2307 +fused_transactions_write32s,214,2325 +fused_transactions_write32s,215,2318 +fused_transactions_write32s,216,2310 +fused_transactions_write32s,217,2319 +fused_transactions_write32s,218,2319 +fused_transactions_write32s,219,2310 +fused_transactions_write32s,220,2317 +fused_transactions_write32s,221,2317 +fused_transactions_write32s,222,2317 +fused_transactions_write32s,223,2312 +fused_transactions_write32s,224,2310 +fused_transactions_write32s,225,2309 +fused_transactions_write32s,226,2313 +fused_transactions_write32s,227,2313 +fused_transactions_write32s,228,2317 +fused_transactions_write32s,229,2314 +fused_transactions_write32s,230,2316 +fused_transactions_write32s,231,2321 +fused_transactions_write32s,232,2311 +fused_transactions_write32s,233,2310 +fused_transactions_write32s,234,2311 +fused_transactions_write32s,235,2313 +fused_transactions_write32s,236,2318 +fused_transactions_write32s,237,2315 +fused_transactions_write32s,238,2331 +fused_transactions_write32s,239,2312 +fused_transactions_write32s,240,2315 +fused_transactions_write32s,241,2312 +fused_transactions_write32s,242,2313 +fused_transactions_write32s,243,2315 +fused_transactions_write32s,244,2315 +fused_transactions_write32s,245,2315 +fused_transactions_write32s,246,2316 +fused_transactions_write32s,247,2314 +fused_transactions_write32s,248,2313 +fused_transactions_write32s,249,2315 +fused_transactions_write32s,250,2316 +fused_transactions_write32s,251,2316 +fused_transactions_write32s,252,2309 +fused_transactions_write32s,253,2314 +fused_transactions_write32s,254,2316 +fused_transactions_write32s,255,2313 +fused_transactions_write32s,256,2315 +fused_transactions_write32s,257,2317 +fused_transactions_write32s,258,2316 +fused_transactions_write32s,259,2315 +fused_transactions_write32s,260,2313 +fused_transactions_write32s,261,2313 +fused_transactions_write32s,262,2311 +fused_transactions_write32s,263,2312 +fused_transactions_write32s,264,2314 +fused_transactions_write32s,265,2313 +fused_transactions_write32s,266,2312 +fused_transactions_write32s,267,2316 +fused_transactions_write32s,268,2318 +fused_transactions_write32s,269,2311 +fused_transactions_write32s,270,2313 +fused_transactions_write32s,271,2313 +fused_transactions_write32s,272,2319 +fused_transactions_write32s,273,2321 +fused_transactions_write32s,274,2317 +fused_transactions_write32s,275,2325 +fused_transactions_write32s,276,2315 +fused_transactions_write32s,277,2319 +fused_transactions_write32s,278,2320 +fused_transactions_write32s,279,2318 +fused_transactions_write32s,280,2316 +fused_transactions_write32s,281,2316 +fused_transactions_write32s,282,2312 +fused_transactions_write32s,283,2315 +fused_transactions_write32s,284,2315 +fused_transactions_write32s,285,2315 +fused_transactions_write32s,286,2314 +fused_transactions_write32s,287,2312 +fused_transactions_write32s,288,2316 +fused_transactions_write32s,289,2313 +fused_transactions_write32s,290,2311 +fused_transactions_write32s,291,2313 +fused_transactions_write32s,292,2317 +fused_transactions_write32s,293,2315 +fused_transactions_write32s,294,2313 +fused_transactions_write32s,295,2319 +fused_transactions_write32s,296,2311 +fused_transactions_write32s,297,2313 +fused_transactions_write32s,298,2311 +fused_transactions_write32s,299,2312 +fused_transactions_write32s,300,2315 +fused_transactions_write32s,301,2316 +fused_transactions_write32s,302,2314 +fused_transactions_write32s,303,2315 +fused_transactions_write32s,304,2310 +fused_transactions_write32s,305,2314 +fused_transactions_write32s,306,2313 +fused_transactions_write32s,307,2319 +fused_transactions_write32s,308,2315 +fused_transactions_write32s,309,2314 +fused_transactions_write32s,310,2316 +fused_transactions_write32s,311,2317 +fused_transactions_write32s,312,2316 +fused_transactions_write32s,313,2316 +fused_transactions_write32s,314,2315 +fused_transactions_write32s,315,2314 +fused_transactions_write32s,316,2314 +fused_transactions_write32s,317,2316 +fused_transactions_write32s,318,2316 +fused_transactions_write32s,319,2317 +fused_transactions_write32s,320,2313 +fused_transactions_write32s,321,2315 +fused_transactions_write32s,322,2317 +fused_transactions_write32s,323,2316 +fused_transactions_write32s,324,2313 +fused_transactions_write32s,325,2315 +fused_transactions_write32s,326,2315 +fused_transactions_write32s,327,2313 +fused_transactions_write32s,328,2313 +fused_transactions_write32s,329,2314 +fused_transactions_write32s,330,2313 +fused_transactions_write32s,331,2317 +fused_transactions_write32s,332,2314 +fused_transactions_write32s,333,2312 +fused_transactions_write32s,334,2314 +fused_transactions_write32s,335,2314 +fused_transactions_write32s,336,2312 +fused_transactions_write32s,337,2318 +fused_transactions_write32s,338,2316 +fused_transactions_write32s,339,2321 +fused_transactions_write32s,340,2314 +fused_transactions_write32s,341,2317 +fused_transactions_write32s,342,2313 +fused_transactions_write32s,343,2313 +fused_transactions_write32s,344,2312 +fused_transactions_write32s,345,2314 +fused_transactions_write32s,346,2315 +fused_transactions_write32s,347,2316 +fused_transactions_write32s,348,2316 +fused_transactions_write32s,349,2313 +fused_transactions_write32s,350,2312 +fused_transactions_write32s,351,2313 +fused_transactions_write32s,352,2316 +fused_transactions_write32s,353,2316 +fused_transactions_write32s,354,2313 +fused_transactions_write32s,355,2316 +fused_transactions_write32s,356,2313 +fused_transactions_write32s,357,2315 +fused_transactions_write32s,358,2320 +fused_transactions_write32s,359,2318 +fused_transactions_write32s,360,2314 +fused_transactions_write32s,361,2315 +fused_transactions_write32s,362,2311 +fused_transactions_write32s,363,2318 +fused_transactions_write32s,364,2314 +fused_transactions_write32s,365,2323 +fused_transactions_write32s,366,2314 +fused_transactions_write32s,367,2338 +fused_transactions_write32s,368,2316 +fused_transactions_write32s,369,2322 +fused_transactions_write32s,370,2319 +fused_transactions_write32s,371,2318 +fused_transactions_write32s,372,2318 +fused_transactions_write32s,373,2319 +fused_transactions_write32s,374,2314 +fused_transactions_write32s,375,2312 +fused_transactions_write32s,376,2310 +fused_transactions_write32s,377,2311 +fused_transactions_write32s,378,2316 +fused_transactions_write32s,379,2307 +fused_transactions_write32s,380,2311 +fused_transactions_write32s,381,2312 +fused_transactions_write32s,382,2313 +fused_transactions_write32s,383,2312 +fused_transactions_write32s,384,2314 +fused_transactions_write32s,385,2314 +fused_transactions_write32s,386,2309 +fused_transactions_write32s,387,2313 +fused_transactions_write32s,388,2313 +fused_transactions_write32s,389,2316 +fused_transactions_write32s,390,2314 +fused_transactions_write32s,391,2314 +fused_transactions_write32s,392,2310 +fused_transactions_write32s,393,2315 +fused_transactions_write32s,394,2316 +fused_transactions_write32s,395,2312 +fused_transactions_write32s,396,2313 +fused_transactions_write32s,397,2314 +fused_transactions_write32s,398,2317 +fused_transactions_write32s,399,2317 +fused_transactions_write32s,400,2316 +fused_transactions_write32s,401,2315 +fused_transactions_write32s,402,2313 +fused_transactions_write32s,403,2314 +fused_transactions_write32s,404,2317 +fused_transactions_write32s,405,2315 +fused_transactions_write32s,406,2320 +fused_transactions_write32s,407,2318 +fused_transactions_write32s,408,2322 +fused_transactions_write32s,409,2303 +fused_transactions_write32s,410,2295 +fused_transactions_write32s,411,2290 +fused_transactions_write32s,412,2289 +fused_transactions_write32s,413,2292 +fused_transactions_write32s,414,2290 +fused_transactions_write32s,415,2294 +fused_transactions_write32s,416,2312 +fused_transactions_write32s,417,2307 +fused_transactions_write32s,418,2306 +fused_transactions_write32s,419,2317 +fused_transactions_write32s,420,2311 +fused_transactions_write32s,421,2317 +fused_transactions_write32s,422,2314 +fused_transactions_write32s,423,2311 +fused_transactions_write32s,424,2312 +fused_transactions_write32s,425,2317 +fused_transactions_write32s,426,2313 +fused_transactions_write32s,427,2309 +fused_transactions_write32s,428,2310 +fused_transactions_write32s,429,2327 +fused_transactions_write32s,430,2324 +fused_transactions_write32s,431,2316 +fused_transactions_write32s,432,2321 +fused_transactions_write32s,433,2316 +fused_transactions_write32s,434,2321 +fused_transactions_write32s,435,2316 +fused_transactions_write32s,436,2310 +fused_transactions_write32s,437,2311 +fused_transactions_write32s,438,2311 +fused_transactions_write32s,439,2309 +fused_transactions_write32s,440,2312 +fused_transactions_write32s,441,2316 +fused_transactions_write32s,442,2311 +fused_transactions_write32s,443,2313 +fused_transactions_write32s,444,2309 +fused_transactions_write32s,445,2310 +fused_transactions_write32s,446,2333 +fused_transactions_write32s,447,2319 +fused_transactions_write32s,448,2312 +fused_transactions_write32s,449,2310 +fused_transactions_write32s,450,2315 +fused_transactions_write32s,451,2323 +fused_transactions_write32s,452,2318 +fused_transactions_write32s,453,2313 +fused_transactions_write32s,454,2316 +fused_transactions_write32s,455,2312 +fused_transactions_write32s,456,2323 +fused_transactions_write32s,457,2322 +fused_transactions_write32s,458,2321 +fused_transactions_write32s,459,2318 +fused_transactions_write32s,460,2311 +fused_transactions_write32s,461,2313 +fused_transactions_write32s,462,2313 +fused_transactions_write32s,463,2299 +fused_transactions_write32s,464,2293 +fused_transactions_write32s,465,2289 +fused_transactions_write32s,466,2290 +fused_transactions_write32s,467,2300 +fused_transactions_write32s,468,2300 +fused_transactions_write32s,469,2298 +fused_transactions_write32s,470,2303 +fused_transactions_write32s,471,2295 +fused_transactions_write32s,472,2290 +fused_transactions_write32s,473,2288 +fused_transactions_write32s,474,2290 +fused_transactions_write32s,475,2288 +fused_transactions_write32s,476,2294 +fused_transactions_write32s,477,2293 +fused_transactions_write32s,478,2289 +fused_transactions_write32s,479,2293 +fused_transactions_write32s,480,2289 +fused_transactions_write32s,481,2301 +fused_transactions_write32s,482,2297 +fused_transactions_write32s,483,2296 +fused_transactions_write32s,484,2299 +fused_transactions_write32s,485,2297 +fused_transactions_write32s,486,2301 +fused_transactions_write32s,487,2301 +fused_transactions_write32s,488,2300 +fused_transactions_write32s,489,2299 +fused_transactions_write32s,490,2299 +fused_transactions_write32s,491,2301 +fused_transactions_write32s,492,2303 +fused_transactions_write32s,493,2301 +fused_transactions_write32s,494,2298 +fused_transactions_write32s,495,2296 +fused_transactions_write32s,496,2302 +fused_transactions_write32s,497,2301 +fused_transactions_write32s,498,2305 +fused_transactions_write32s,499,2300 +fused_transactions_write32s,500,2297 +fused_transactions_write32s,501,2300 +fused_transactions_write32s,502,2308 +fused_transactions_write32s,503,2302 +fused_transactions_write32s,504,2298 +fused_transactions_write32s,505,2298 +fused_transactions_write32s,506,2301 +fused_transactions_write32s,507,2298 +fused_transactions_write32s,508,2298 +fused_transactions_write32s,509,2300 +fused_transactions_write32s,510,2301 +fused_transactions_write32s,511,2301 +fused_transactions_write32s,512,2301 +fused_transactions_write32s,513,2298 +fused_transactions_write32s,514,2300 +fused_transactions_write32s,515,2297 +fused_transactions_write32s,516,2299 +fused_transactions_write32s,517,2290 +fused_transactions_write32s,518,2299 +fused_transactions_write32s,519,2305 +fused_transactions_write32s,520,2301 +fused_transactions_write32s,521,2298 +fused_transactions_write32s,522,2300 +fused_transactions_write32s,523,2297 +fused_transactions_write32s,524,2297 +fused_transactions_write32s,525,2297 +fused_transactions_write32s,526,2303 +fused_transactions_write32s,527,2295 +fused_transactions_write32s,528,2299 +fused_transactions_write32s,529,2299 +fused_transactions_write32s,530,2297 +fused_transactions_write32s,531,2297 +fused_transactions_write32s,532,2298 +fused_transactions_write32s,533,2300 +fused_transactions_write32s,534,2301 +fused_transactions_write32s,535,2300 +fused_transactions_write32s,536,2298 +fused_transactions_write32s,537,2298 +fused_transactions_write32s,538,2299 +fused_transactions_write32s,539,2303 +fused_transactions_write32s,540,2298 +fused_transactions_write32s,541,2301 +fused_transactions_write32s,542,2310 +fused_transactions_write32s,543,2303 +fused_transactions_write32s,544,2297 +fused_transactions_write32s,545,2299 +fused_transactions_write32s,546,2301 +fused_transactions_write32s,547,2292 +fused_transactions_write32s,548,2298 +fused_transactions_write32s,549,2299 +fused_transactions_write32s,550,2298 +fused_transactions_write32s,551,2299 +fused_transactions_write32s,552,2307 +fused_transactions_write32s,553,2301 +fused_transactions_write32s,554,2300 +fused_transactions_write32s,555,2298 +fused_transactions_write32s,556,2304 +fused_transactions_write32s,557,2301 +fused_transactions_write32s,558,2299 +fused_transactions_write32s,559,2300 +fused_transactions_write32s,560,2302 +fused_transactions_write32s,561,2296 +fused_transactions_write32s,562,2298 +fused_transactions_write32s,563,2304 +fused_transactions_write32s,564,2297 +fused_transactions_write32s,565,2297 +fused_transactions_write32s,566,2299 +fused_transactions_write32s,567,2300 +fused_transactions_write32s,568,2297 +fused_transactions_write32s,569,2296 +fused_transactions_write32s,570,2302 +fused_transactions_write32s,571,2301 +fused_transactions_write32s,572,2298 +fused_transactions_write32s,573,2297 +fused_transactions_write32s,574,2302 +fused_transactions_write32s,575,2299 +fused_transactions_write32s,576,2297 +fused_transactions_write32s,577,2291 +fused_transactions_write32s,578,2299 +fused_transactions_write32s,579,2301 +fused_transactions_write32s,580,2296 +fused_transactions_write32s,581,2301 +fused_transactions_write32s,582,2307 +fused_transactions_write32s,583,2300 +fused_transactions_write32s,584,2302 +fused_transactions_write32s,585,2299 +fused_transactions_write32s,586,2300 +fused_transactions_write32s,587,2301 +fused_transactions_write32s,588,2297 +fused_transactions_write32s,589,2300 +fused_transactions_write32s,590,2298 +fused_transactions_write32s,591,2300 +fused_transactions_write32s,592,2301 +fused_transactions_write32s,593,2301 +fused_transactions_write32s,594,2302 +fused_transactions_write32s,595,2299 +fused_transactions_write32s,596,2298 +fused_transactions_write32s,597,2302 +fused_transactions_write32s,598,2300 +fused_transactions_write32s,599,2300 +fused_transactions_write32s,600,2301 +fused_transactions_write32s,601,2297 +fused_transactions_write32s,602,2301 +fused_transactions_write32s,603,2302 +fused_transactions_write32s,604,2300 +fused_transactions_write32s,605,2297 +fused_transactions_write32s,606,2297 +fused_transactions_write32s,607,2297 +fused_transactions_write32s,608,2298 +fused_transactions_write32s,609,2299 +fused_transactions_write32s,610,2304 +fused_transactions_write32s,611,2300 +fused_transactions_write32s,612,2296 +fused_transactions_write32s,613,2301 +fused_transactions_write32s,614,2302 +fused_transactions_write32s,615,2301 +fused_transactions_write32s,616,2300 +fused_transactions_write32s,617,2302 +fused_transactions_write32s,618,2304 +fused_transactions_write32s,619,2297 +fused_transactions_write32s,620,2297 +fused_transactions_write32s,621,2304 +fused_transactions_write32s,622,2302 +fused_transactions_write32s,623,2297 +fused_transactions_write32s,624,2297 +fused_transactions_write32s,625,2298 +fused_transactions_write32s,626,2301 +fused_transactions_write32s,627,2300 +fused_transactions_write32s,628,2296 +fused_transactions_write32s,629,2287 +fused_transactions_write32s,630,2289 +fused_transactions_write32s,631,2290 +fused_transactions_write32s,632,2288 +fused_transactions_write32s,633,2289 +fused_transactions_write32s,634,2286 +fused_transactions_write32s,635,2297 +fused_transactions_write32s,636,2301 +fused_transactions_write32s,637,2301 +fused_transactions_write32s,638,2302 +fused_transactions_write32s,639,2287 +fused_transactions_write32s,640,2298 +fused_transactions_write32s,641,2287 +fused_transactions_write32s,642,2302 +fused_transactions_write32s,643,2287 +fused_transactions_write32s,644,2285 +fused_transactions_write32s,645,2294 +fused_transactions_write32s,646,2291 +fused_transactions_write32s,647,2290 +fused_transactions_write32s,648,2298 +fused_transactions_write32s,649,2297 +fused_transactions_write32s,650,2300 +fused_transactions_write32s,651,2294 +fused_transactions_write32s,652,2297 +fused_transactions_write32s,653,2299 +fused_transactions_write32s,654,2298 +fused_transactions_write32s,655,2296 +fused_transactions_write32s,656,2297 +fused_transactions_write32s,657,2299 +fused_transactions_write32s,658,2300 +fused_transactions_write32s,659,2299 +fused_transactions_write32s,660,2298 +fused_transactions_write32s,661,2299 +fused_transactions_write32s,662,2295 +fused_transactions_write32s,663,2297 +fused_transactions_write32s,664,2297 +fused_transactions_write32s,665,2291 +fused_transactions_write32s,666,2295 +fused_transactions_write32s,667,2298 +fused_transactions_write32s,668,2301 +fused_transactions_write32s,669,2297 +fused_transactions_write32s,670,2296 +fused_transactions_write32s,671,2297 +fused_transactions_write32s,672,2299 +fused_transactions_write32s,673,2300 +fused_transactions_write32s,674,2303 +fused_transactions_write32s,675,2300 +fused_transactions_write32s,676,2295 +fused_transactions_write32s,677,2296 +fused_transactions_write32s,678,2296 +fused_transactions_write32s,679,2295 +fused_transactions_write32s,680,2297 +fused_transactions_write32s,681,2285 +fused_transactions_write32s,682,2299 +fused_transactions_write32s,683,2299 +fused_transactions_write32s,684,2301 +fused_transactions_write32s,685,2294 +fused_transactions_write32s,686,2296 +fused_transactions_write32s,687,2298 +fused_transactions_write32s,688,2296 +fused_transactions_write32s,689,2301 +fused_transactions_write32s,690,2303 +fused_transactions_write32s,691,2303 +fused_transactions_write32s,692,2298 +fused_transactions_write32s,693,2293 +fused_transactions_write32s,694,2296 +fused_transactions_write32s,695,2298 +fused_transactions_write32s,696,2293 +fused_transactions_write32s,697,2297 +fused_transactions_write32s,698,2291 +fused_transactions_write32s,699,2296 +fused_transactions_write32s,700,2294 +fused_transactions_write32s,701,2297 +fused_transactions_write32s,702,2296 +fused_transactions_write32s,703,2295 +fused_transactions_write32s,704,2294 +fused_transactions_write32s,705,2292 +fused_transactions_write32s,706,2301 +fused_transactions_write32s,707,2295 +fused_transactions_write32s,708,2294 +fused_transactions_write32s,709,2298 +fused_transactions_write32s,710,2297 +fused_transactions_write32s,711,2292 +fused_transactions_write32s,712,2298 +fused_transactions_write32s,713,2299 +fused_transactions_write32s,714,2294 +fused_transactions_write32s,715,2293 +fused_transactions_write32s,716,2296 +fused_transactions_write32s,717,2298 +fused_transactions_write32s,718,2299 +fused_transactions_write32s,719,2290 +fused_transactions_write32s,720,2293 +fused_transactions_write32s,721,2297 +fused_transactions_write32s,722,2298 +fused_transactions_write32s,723,2293 +fused_transactions_write32s,724,2294 +fused_transactions_write32s,725,2293 +fused_transactions_write32s,726,2293 +fused_transactions_write32s,727,2296 +fused_transactions_write32s,728,2300 +fused_transactions_write32s,729,2295 +fused_transactions_write32s,730,2298 +fused_transactions_write32s,731,2293 +fused_transactions_write32s,732,2293 +fused_transactions_write32s,733,2291 +fused_transactions_write32s,734,2294 +fused_transactions_write32s,735,2298 +fused_transactions_write32s,736,2295 +fused_transactions_write32s,737,2297 +fused_transactions_write32s,738,2298 +fused_transactions_write32s,739,2294 +fused_transactions_write32s,740,2305 +fused_transactions_write32s,741,2301 +fused_transactions_write32s,742,2296 +fused_transactions_write32s,743,2294 +fused_transactions_write32s,744,2294 +fused_transactions_write32s,745,2300 +fused_transactions_write32s,746,2299 +fused_transactions_write32s,747,2293 +fused_transactions_write32s,748,2296 +fused_transactions_write32s,749,2294 +fused_transactions_write32s,750,2299 +fused_transactions_write32s,751,2295 +fused_transactions_write32s,752,2292 +fused_transactions_write32s,753,2297 +fused_transactions_write32s,754,2295 +fused_transactions_write32s,755,2292 +fused_transactions_write32s,756,2301 +fused_transactions_write32s,757,2298 +fused_transactions_write32s,758,2297 +fused_transactions_write32s,759,2298 +fused_transactions_write32s,760,2294 +fused_transactions_write32s,761,2292 +fused_transactions_write32s,762,2294 +fused_transactions_write32s,763,2297 +fused_transactions_write32s,764,2294 +fused_transactions_write32s,765,2296 +fused_transactions_write32s,766,2294 +fused_transactions_write32s,767,2297 +fused_transactions_write32s,768,2297 +fused_transactions_write32s,769,2297 +fused_transactions_write32s,770,2297 +fused_transactions_write32s,771,2295 +fused_transactions_write32s,772,2291 +fused_transactions_write32s,773,2293 +fused_transactions_write32s,774,2293 +fused_transactions_write32s,775,2297 +fused_transactions_write32s,776,2301 +fused_transactions_write32s,777,2296 +fused_transactions_write32s,778,2294 +fused_transactions_write32s,779,2297 +fused_transactions_write32s,780,2293 +fused_transactions_write32s,781,2297 +fused_transactions_write32s,782,2294 +fused_transactions_write32s,783,2296 +fused_transactions_write32s,784,2294 +fused_transactions_write32s,785,2295 +fused_transactions_write32s,786,2299 +fused_transactions_write32s,787,2296 +fused_transactions_write32s,788,2298 +fused_transactions_write32s,789,2293 +fused_transactions_write32s,790,2296 +fused_transactions_write32s,791,2291 +fused_transactions_write32s,792,2297 +fused_transactions_write32s,793,2293 +fused_transactions_write32s,794,2301 +fused_transactions_write32s,795,2294 +fused_transactions_write32s,796,2293 +fused_transactions_write32s,797,2293 +fused_transactions_write32s,798,2293 +fused_transactions_write32s,799,2292 +fused_transactions_write32s,800,2299 +fused_transactions_write32s,801,2293 +fused_transactions_write32s,802,2293 +fused_transactions_write32s,803,2298 +fused_transactions_write32s,804,2296 +fused_transactions_write32s,805,2294 +fused_transactions_write32s,806,2294 +fused_transactions_write32s,807,2292 +fused_transactions_write32s,808,2296 +fused_transactions_write32s,809,2295 +fused_transactions_write32s,810,2296 +fused_transactions_write32s,811,2295 +fused_transactions_write32s,812,2299 +fused_transactions_write32s,813,2297 +fused_transactions_write32s,814,2296 +fused_transactions_write32s,815,2295 +fused_transactions_write32s,816,2294 +fused_transactions_write32s,817,2294 +fused_transactions_write32s,818,2293 +fused_transactions_write32s,819,2293 +fused_transactions_write32s,820,2292 +fused_transactions_write32s,821,2295 +fused_transactions_write32s,822,2293 +fused_transactions_write32s,823,2293 +fused_transactions_write32s,824,2295 +fused_transactions_write32s,825,2296 +fused_transactions_write32s,826,2295 +fused_transactions_write32s,827,2295 +fused_transactions_write32s,828,2297 +fused_transactions_write32s,829,2297 +fused_transactions_write32s,830,2297 +fused_transactions_write32s,831,2299 +fused_transactions_write32s,832,2299 +fused_transactions_write32s,833,2297 +fused_transactions_write32s,834,2299 +fused_transactions_write32s,835,2296 +fused_transactions_write32s,836,2289 +fused_transactions_write32s,837,2304 +fused_transactions_write32s,838,2298 +fused_transactions_write32s,839,2300 +fused_transactions_write32s,840,2295 +fused_transactions_write32s,841,2298 +fused_transactions_write32s,842,2294 +fused_transactions_write32s,843,2303 +fused_transactions_write32s,844,2297 +fused_transactions_write32s,845,2302 +fused_transactions_write32s,846,2293 +fused_transactions_write32s,847,2297 +fused_transactions_write32s,848,2295 +fused_transactions_write32s,849,2295 +fused_transactions_write32s,850,2301 +fused_transactions_write32s,851,2297 +fused_transactions_write32s,852,2297 +fused_transactions_write32s,853,2301 +fused_transactions_write32s,854,2293 +fused_transactions_write32s,855,2294 +fused_transactions_write32s,856,2296 +fused_transactions_write32s,857,2293 +fused_transactions_write32s,858,2301 +fused_transactions_write32s,859,2297 +fused_transactions_write32s,860,2297 +fused_transactions_write32s,861,2296 +fused_transactions_write32s,862,2300 +fused_transactions_write32s,863,2300 +fused_transactions_write32s,864,2299 +fused_transactions_write32s,865,2299 +fused_transactions_write32s,866,2298 +fused_transactions_write32s,867,2298 +fused_transactions_write32s,868,2295 +fused_transactions_write32s,869,2299 +fused_transactions_write32s,870,2295 +fused_transactions_write32s,871,2297 +fused_transactions_write32s,872,2299 +fused_transactions_write32s,873,2295 +fused_transactions_write32s,874,2296 +fused_transactions_write32s,875,2298 +fused_transactions_write32s,876,2301 +fused_transactions_write32s,877,2297 +fused_transactions_write32s,878,2299 +fused_transactions_write32s,879,2294 +fused_transactions_write32s,880,2295 +fused_transactions_write32s,881,2299 +fused_transactions_write32s,882,2298 +fused_transactions_write32s,883,2296 +fused_transactions_write32s,884,2293 +fused_transactions_write32s,885,2294 +fused_transactions_write32s,886,2298 +fused_transactions_write32s,887,2296 +fused_transactions_write32s,888,2301 +fused_transactions_write32s,889,2299 +fused_transactions_write32s,890,2293 +fused_transactions_write32s,891,2296 +fused_transactions_write32s,892,2296 +fused_transactions_write32s,893,2297 +fused_transactions_write32s,894,2297 +fused_transactions_write32s,895,2297 +fused_transactions_write32s,896,2296 +fused_transactions_write32s,897,2296 +fused_transactions_write32s,898,2299 +fused_transactions_write32s,899,2300 +fused_transactions_write32s,900,2301 +fused_transactions_write32s,901,2295 +fused_transactions_write32s,902,2297 +fused_transactions_write32s,903,2299 +fused_transactions_write32s,904,2295 +fused_transactions_write32s,905,2298 +fused_transactions_write32s,906,2300 +fused_transactions_write32s,907,2297 +fused_transactions_write32s,908,2296 +fused_transactions_write32s,909,2296 +fused_transactions_write32s,910,2296 +fused_transactions_write32s,911,2297 +fused_transactions_write32s,912,2301 +fused_transactions_write32s,913,2297 +fused_transactions_write32s,914,2296 +fused_transactions_write32s,915,2295 +fused_transactions_write32s,916,2295 +fused_transactions_write32s,917,2297 +fused_transactions_write32s,918,2296 +fused_transactions_write32s,919,2296 +fused_transactions_write32s,920,2303 +fused_transactions_write32s,921,2293 +fused_transactions_write32s,922,2299 +fused_transactions_write32s,923,2296 +fused_transactions_write32s,924,2297 +fused_transactions_write32s,925,2297 +fused_transactions_write32s,926,2298 +fused_transactions_write32s,927,2296 +fused_transactions_write32s,928,2297 +fused_transactions_write32s,929,2300 +fused_transactions_write32s,930,2299 +fused_transactions_write32s,931,2297 +fused_transactions_write32s,932,2299 +fused_transactions_write32s,933,2302 +fused_transactions_write32s,934,2299 +fused_transactions_write32s,935,2298 +fused_transactions_write32s,936,2295 +fused_transactions_write32s,937,2291 +fused_transactions_write32s,938,2296 +fused_transactions_write32s,939,2295 +fused_transactions_write32s,940,2299 +fused_transactions_write32s,941,2301 +fused_transactions_write32s,942,2295 +fused_transactions_write32s,943,2297 +fused_transactions_write32s,944,2294 +fused_transactions_write32s,945,2298 +fused_transactions_write32s,946,2294 +fused_transactions_write32s,947,2296 +fused_transactions_write32s,948,2298 +fused_transactions_write32s,949,2297 +fused_transactions_write32s,950,2296 +fused_transactions_write32s,951,2301 +fused_transactions_write32s,952,2301 +fused_transactions_write32s,953,2295 +fused_transactions_write32s,954,2305 +fused_transactions_write32s,955,2298 +fused_transactions_write32s,956,2299 +fused_transactions_write32s,957,2296 +fused_transactions_write32s,958,2299 +fused_transactions_write32s,959,2297 +fused_transactions_write32s,960,2300 +fused_transactions_write32s,961,2300 +fused_transactions_write32s,962,2302 +fused_transactions_write32s,963,2293 +fused_transactions_write32s,964,2299 +fused_transactions_write32s,965,2294 +fused_transactions_write32s,966,2297 +fused_transactions_write32s,967,2297 +fused_transactions_write32s,968,2297 +fused_transactions_write32s,969,2299 +fused_transactions_write32s,970,2299 +fused_transactions_write32s,971,2301 +fused_transactions_write32s,972,2296 +fused_transactions_write32s,973,2296 +fused_transactions_write32s,974,2301 +fused_transactions_write32s,975,2297 +fused_transactions_write32s,976,2298 +fused_transactions_write32s,977,2298 +fused_transactions_write32s,978,2299 +fused_transactions_write32s,979,2293 +fused_transactions_write32s,980,2295 +fused_transactions_write32s,981,2295 +fused_transactions_write32s,982,2298 +fused_transactions_write32s,983,2298 +fused_transactions_write32s,984,2296 +fused_transactions_write32s,985,2299 +fused_transactions_write32s,986,2299 +fused_transactions_write32s,987,2297 +fused_transactions_write32s,988,2297 +fused_transactions_write32s,989,2305 +fused_transactions_write32s,990,2294 +fused_transactions_write32s,991,2295 +fused_transactions_write32s,992,2297 +fused_transactions_write32s,993,2299 +fused_transactions_write32s,994,2296 +fused_transactions_write32s,995,2296 +fused_transactions_write32s,996,2298 +fused_transactions_write32s,997,2297 +fused_transactions_write32s,998,2298 +fused_transactions_write32s,999,2298 \ No newline at end of file diff --git a/programming_examples/reconfiguration/ablation/4_write32s_reset_nothing.csv b/programming_examples/reconfiguration/ablation/4_write32s_reset_nothing.csv new file mode 100644 index 00000000000..2132182fd4c --- /dev/null +++ b/programming_examples/reconfiguration/ablation/4_write32s_reset_nothing.csv @@ -0,0 +1,1000 @@ +fused_transactions_write32s,0,2378 +fused_transactions_write32s,1,2311 +fused_transactions_write32s,2,2303 +fused_transactions_write32s,3,2297 +fused_transactions_write32s,4,2299 +fused_transactions_write32s,5,2293 +fused_transactions_write32s,6,2297 +fused_transactions_write32s,7,2297 +fused_transactions_write32s,8,2295 +fused_transactions_write32s,9,2296 +fused_transactions_write32s,10,2302 +fused_transactions_write32s,11,2299 +fused_transactions_write32s,12,2295 +fused_transactions_write32s,13,2299 +fused_transactions_write32s,14,2306 +fused_transactions_write32s,15,2307 +fused_transactions_write32s,16,2308 +fused_transactions_write32s,17,2304 +fused_transactions_write32s,18,2297 +fused_transactions_write32s,19,2302 +fused_transactions_write32s,20,2303 +fused_transactions_write32s,21,2297 +fused_transactions_write32s,22,2304 +fused_transactions_write32s,23,2305 +fused_transactions_write32s,24,2296 +fused_transactions_write32s,25,2305 +fused_transactions_write32s,26,2302 +fused_transactions_write32s,27,2301 +fused_transactions_write32s,28,2305 +fused_transactions_write32s,29,2303 +fused_transactions_write32s,30,2300 +fused_transactions_write32s,31,2298 +fused_transactions_write32s,32,2297 +fused_transactions_write32s,33,2298 +fused_transactions_write32s,34,2303 +fused_transactions_write32s,35,2305 +fused_transactions_write32s,36,2293 +fused_transactions_write32s,37,2297 +fused_transactions_write32s,38,2302 +fused_transactions_write32s,39,2297 +fused_transactions_write32s,40,2300 +fused_transactions_write32s,41,2297 +fused_transactions_write32s,42,2300 +fused_transactions_write32s,43,2302 +fused_transactions_write32s,44,2297 +fused_transactions_write32s,45,2300 +fused_transactions_write32s,46,2305 +fused_transactions_write32s,47,2301 +fused_transactions_write32s,48,2301 +fused_transactions_write32s,49,2305 +fused_transactions_write32s,50,2304 +fused_transactions_write32s,51,2300 +fused_transactions_write32s,52,2306 +fused_transactions_write32s,53,2304 +fused_transactions_write32s,54,2299 +fused_transactions_write32s,55,2297 +fused_transactions_write32s,56,2305 +fused_transactions_write32s,57,2296 +fused_transactions_write32s,58,2294 +fused_transactions_write32s,59,2307 +fused_transactions_write32s,60,2304 +fused_transactions_write32s,61,2298 +fused_transactions_write32s,62,2297 +fused_transactions_write32s,63,2302 +fused_transactions_write32s,64,2297 +fused_transactions_write32s,65,2302 +fused_transactions_write32s,66,2304 +fused_transactions_write32s,67,2278 +fused_transactions_write32s,68,2281 +fused_transactions_write32s,69,2276 +fused_transactions_write32s,70,2283 +fused_transactions_write32s,71,2284 +fused_transactions_write32s,72,2306 +fused_transactions_write32s,73,2301 +fused_transactions_write32s,74,2297 +fused_transactions_write32s,75,2301 +fused_transactions_write32s,76,2300 +fused_transactions_write32s,77,2301 +fused_transactions_write32s,78,2298 +fused_transactions_write32s,79,2299 +fused_transactions_write32s,80,2300 +fused_transactions_write32s,81,2295 +fused_transactions_write32s,82,2304 +fused_transactions_write32s,83,2303 +fused_transactions_write32s,84,2299 +fused_transactions_write32s,85,2307 +fused_transactions_write32s,86,2300 +fused_transactions_write32s,87,2300 +fused_transactions_write32s,88,2300 +fused_transactions_write32s,89,2287 +fused_transactions_write32s,90,2285 +fused_transactions_write32s,91,2304 +fused_transactions_write32s,92,2288 +fused_transactions_write32s,93,2290 +fused_transactions_write32s,94,2293 +fused_transactions_write32s,95,2293 +fused_transactions_write32s,96,2301 +fused_transactions_write32s,97,2306 +fused_transactions_write32s,98,2291 +fused_transactions_write32s,99,2279 +fused_transactions_write32s,100,2303 +fused_transactions_write32s,101,2305 +fused_transactions_write32s,102,2300 +fused_transactions_write32s,103,2300 +fused_transactions_write32s,104,2300 +fused_transactions_write32s,105,2301 +fused_transactions_write32s,106,2303 +fused_transactions_write32s,107,2304 +fused_transactions_write32s,108,2304 +fused_transactions_write32s,109,2299 +fused_transactions_write32s,110,2299 +fused_transactions_write32s,111,2300 +fused_transactions_write32s,112,2301 +fused_transactions_write32s,113,2298 +fused_transactions_write32s,114,2299 +fused_transactions_write32s,115,2301 +fused_transactions_write32s,116,2303 +fused_transactions_write32s,117,2299 +fused_transactions_write32s,118,2302 +fused_transactions_write32s,119,2300 +fused_transactions_write32s,120,2301 +fused_transactions_write32s,121,2299 +fused_transactions_write32s,122,2299 +fused_transactions_write32s,123,2300 +fused_transactions_write32s,124,2297 +fused_transactions_write32s,125,2301 +fused_transactions_write32s,126,2302 +fused_transactions_write32s,127,2297 +fused_transactions_write32s,128,2304 +fused_transactions_write32s,129,2299 +fused_transactions_write32s,130,2298 +fused_transactions_write32s,131,2300 +fused_transactions_write32s,132,2301 +fused_transactions_write32s,133,2300 +fused_transactions_write32s,134,2303 +fused_transactions_write32s,135,2301 +fused_transactions_write32s,136,2304 +fused_transactions_write32s,137,2303 +fused_transactions_write32s,138,2304 +fused_transactions_write32s,139,2305 +fused_transactions_write32s,140,2307 +fused_transactions_write32s,141,2304 +fused_transactions_write32s,142,2292 +fused_transactions_write32s,143,2282 +fused_transactions_write32s,144,2281 +fused_transactions_write32s,145,2277 +fused_transactions_write32s,146,2277 +fused_transactions_write32s,147,2277 +fused_transactions_write32s,148,2279 +fused_transactions_write32s,149,2280 +fused_transactions_write32s,150,2288 +fused_transactions_write32s,151,2297 +fused_transactions_write32s,152,2299 +fused_transactions_write32s,153,2297 +fused_transactions_write32s,154,2301 +fused_transactions_write32s,155,2291 +fused_transactions_write32s,156,2282 +fused_transactions_write32s,157,2285 +fused_transactions_write32s,158,2287 +fused_transactions_write32s,159,2291 +fused_transactions_write32s,160,2287 +fused_transactions_write32s,161,2302 +fused_transactions_write32s,162,2307 +fused_transactions_write32s,163,2297 +fused_transactions_write32s,164,2302 +fused_transactions_write32s,165,2301 +fused_transactions_write32s,166,2294 +fused_transactions_write32s,167,2303 +fused_transactions_write32s,168,2300 +fused_transactions_write32s,169,2296 +fused_transactions_write32s,170,2298 +fused_transactions_write32s,171,2295 +fused_transactions_write32s,172,2298 +fused_transactions_write32s,173,2299 +fused_transactions_write32s,174,2305 +fused_transactions_write32s,175,2303 +fused_transactions_write32s,176,2305 +fused_transactions_write32s,177,2301 +fused_transactions_write32s,178,2302 +fused_transactions_write32s,179,2305 +fused_transactions_write32s,180,2305 +fused_transactions_write32s,181,2292 +fused_transactions_write32s,182,2281 +fused_transactions_write32s,183,2285 +fused_transactions_write32s,184,2288 +fused_transactions_write32s,185,2293 +fused_transactions_write32s,186,2287 +fused_transactions_write32s,187,2309 +fused_transactions_write32s,188,2347 +fused_transactions_write32s,189,2331 +fused_transactions_write32s,190,2306 +fused_transactions_write32s,191,2303 +fused_transactions_write32s,192,2303 +fused_transactions_write32s,193,2303 +fused_transactions_write32s,194,2308 +fused_transactions_write32s,195,2301 +fused_transactions_write32s,196,2297 +fused_transactions_write32s,197,2306 +fused_transactions_write32s,198,2298 +fused_transactions_write32s,199,2308 +fused_transactions_write32s,200,2305 +fused_transactions_write32s,201,2299 +fused_transactions_write32s,202,2279 +fused_transactions_write32s,203,2282 +fused_transactions_write32s,204,2278 +fused_transactions_write32s,205,2276 +fused_transactions_write32s,206,2281 +fused_transactions_write32s,207,2281 +fused_transactions_write32s,208,2297 +fused_transactions_write32s,209,2309 +fused_transactions_write32s,210,2307 +fused_transactions_write32s,211,2302 +fused_transactions_write32s,212,2297 +fused_transactions_write32s,213,2303 +fused_transactions_write32s,214,2302 +fused_transactions_write32s,215,2295 +fused_transactions_write32s,216,2297 +fused_transactions_write32s,217,2299 +fused_transactions_write32s,218,2295 +fused_transactions_write32s,219,2300 +fused_transactions_write32s,220,2297 +fused_transactions_write32s,221,2299 +fused_transactions_write32s,222,2301 +fused_transactions_write32s,223,2295 +fused_transactions_write32s,224,2303 +fused_transactions_write32s,225,2301 +fused_transactions_write32s,226,2298 +fused_transactions_write32s,227,2305 +fused_transactions_write32s,228,2304 +fused_transactions_write32s,229,2306 +fused_transactions_write32s,230,2304 +fused_transactions_write32s,231,2312 +fused_transactions_write32s,232,2299 +fused_transactions_write32s,233,2297 +fused_transactions_write32s,234,2299 +fused_transactions_write32s,235,2298 +fused_transactions_write32s,236,2297 +fused_transactions_write32s,237,2300 +fused_transactions_write32s,238,2300 +fused_transactions_write32s,239,2304 +fused_transactions_write32s,240,2301 +fused_transactions_write32s,241,2297 +fused_transactions_write32s,242,2302 +fused_transactions_write32s,243,2302 +fused_transactions_write32s,244,2299 +fused_transactions_write32s,245,2299 +fused_transactions_write32s,246,2302 +fused_transactions_write32s,247,2298 +fused_transactions_write32s,248,2301 +fused_transactions_write32s,249,2297 +fused_transactions_write32s,250,2303 +fused_transactions_write32s,251,2301 +fused_transactions_write32s,252,2300 +fused_transactions_write32s,253,2301 +fused_transactions_write32s,254,2301 +fused_transactions_write32s,255,2306 +fused_transactions_write32s,256,2300 +fused_transactions_write32s,257,2299 +fused_transactions_write32s,258,2299 +fused_transactions_write32s,259,2307 +fused_transactions_write32s,260,2301 +fused_transactions_write32s,261,2300 +fused_transactions_write32s,262,2303 +fused_transactions_write32s,263,2305 +fused_transactions_write32s,264,2306 +fused_transactions_write32s,265,2300 +fused_transactions_write32s,266,2309 +fused_transactions_write32s,267,2307 +fused_transactions_write32s,268,2303 +fused_transactions_write32s,269,2308 +fused_transactions_write32s,270,2306 +fused_transactions_write32s,271,2300 +fused_transactions_write32s,272,2310 +fused_transactions_write32s,273,2301 +fused_transactions_write32s,274,2303 +fused_transactions_write32s,275,2306 +fused_transactions_write32s,276,2305 +fused_transactions_write32s,277,2301 +fused_transactions_write32s,278,2304 +fused_transactions_write32s,279,2303 +fused_transactions_write32s,280,2303 +fused_transactions_write32s,281,2302 +fused_transactions_write32s,282,2300 +fused_transactions_write32s,283,2300 +fused_transactions_write32s,284,2306 +fused_transactions_write32s,285,2304 +fused_transactions_write32s,286,2305 +fused_transactions_write32s,287,2307 +fused_transactions_write32s,288,2300 +fused_transactions_write32s,289,2299 +fused_transactions_write32s,290,2298 +fused_transactions_write32s,291,2295 +fused_transactions_write32s,292,2303 +fused_transactions_write32s,293,2299 +fused_transactions_write32s,294,2304 +fused_transactions_write32s,295,2297 +fused_transactions_write32s,296,2300 +fused_transactions_write32s,297,2304 +fused_transactions_write32s,298,2301 +fused_transactions_write32s,299,2300 +fused_transactions_write32s,300,2301 +fused_transactions_write32s,301,2300 +fused_transactions_write32s,302,2305 +fused_transactions_write32s,303,2305 +fused_transactions_write32s,304,2298 +fused_transactions_write32s,305,2302 +fused_transactions_write32s,306,2305 +fused_transactions_write32s,307,2300 +fused_transactions_write32s,308,2306 +fused_transactions_write32s,309,2308 +fused_transactions_write32s,310,2299 +fused_transactions_write32s,311,2311 +fused_transactions_write32s,312,2299 +fused_transactions_write32s,313,2297 +fused_transactions_write32s,314,2306 +fused_transactions_write32s,315,2298 +fused_transactions_write32s,316,2302 +fused_transactions_write32s,317,2300 +fused_transactions_write32s,318,2300 +fused_transactions_write32s,319,2297 +fused_transactions_write32s,320,2304 +fused_transactions_write32s,321,2300 +fused_transactions_write32s,322,2305 +fused_transactions_write32s,323,2304 +fused_transactions_write32s,324,2296 +fused_transactions_write32s,325,2306 +fused_transactions_write32s,326,2301 +fused_transactions_write32s,327,2315 +fused_transactions_write32s,328,2309 +fused_transactions_write32s,329,2305 +fused_transactions_write32s,330,2303 +fused_transactions_write32s,331,2295 +fused_transactions_write32s,332,2297 +fused_transactions_write32s,333,2296 +fused_transactions_write32s,334,2299 +fused_transactions_write32s,335,2302 +fused_transactions_write32s,336,2302 +fused_transactions_write32s,337,2303 +fused_transactions_write32s,338,2301 +fused_transactions_write32s,339,2301 +fused_transactions_write32s,340,2297 +fused_transactions_write32s,341,2306 +fused_transactions_write32s,342,2303 +fused_transactions_write32s,343,2303 +fused_transactions_write32s,344,2304 +fused_transactions_write32s,345,2303 +fused_transactions_write32s,346,2302 +fused_transactions_write32s,347,2296 +fused_transactions_write32s,348,2298 +fused_transactions_write32s,349,2297 +fused_transactions_write32s,350,2306 +fused_transactions_write32s,351,2294 +fused_transactions_write32s,352,2301 +fused_transactions_write32s,353,2297 +fused_transactions_write32s,354,2302 +fused_transactions_write32s,355,2307 +fused_transactions_write32s,356,2304 +fused_transactions_write32s,357,2299 +fused_transactions_write32s,358,2301 +fused_transactions_write32s,359,2298 +fused_transactions_write32s,360,2306 +fused_transactions_write32s,361,2304 +fused_transactions_write32s,362,2304 +fused_transactions_write32s,363,2303 +fused_transactions_write32s,364,2296 +fused_transactions_write32s,365,2302 +fused_transactions_write32s,366,2304 +fused_transactions_write32s,367,2305 +fused_transactions_write32s,368,2304 +fused_transactions_write32s,369,2304 +fused_transactions_write32s,370,2299 +fused_transactions_write32s,371,2299 +fused_transactions_write32s,372,2303 +fused_transactions_write32s,373,2303 +fused_transactions_write32s,374,2297 +fused_transactions_write32s,375,2303 +fused_transactions_write32s,376,2303 +fused_transactions_write32s,377,2297 +fused_transactions_write32s,378,2302 +fused_transactions_write32s,379,2306 +fused_transactions_write32s,380,2306 +fused_transactions_write32s,381,2293 +fused_transactions_write32s,382,2297 +fused_transactions_write32s,383,2301 +fused_transactions_write32s,384,2296 +fused_transactions_write32s,385,2296 +fused_transactions_write32s,386,2299 +fused_transactions_write32s,387,2300 +fused_transactions_write32s,388,2299 +fused_transactions_write32s,389,2306 +fused_transactions_write32s,390,2299 +fused_transactions_write32s,391,2300 +fused_transactions_write32s,392,2304 +fused_transactions_write32s,393,2305 +fused_transactions_write32s,394,2299 +fused_transactions_write32s,395,2304 +fused_transactions_write32s,396,2304 +fused_transactions_write32s,397,2294 +fused_transactions_write32s,398,2304 +fused_transactions_write32s,399,2301 +fused_transactions_write32s,400,2300 +fused_transactions_write32s,401,2303 +fused_transactions_write32s,402,2296 +fused_transactions_write32s,403,2301 +fused_transactions_write32s,404,2300 +fused_transactions_write32s,405,2303 +fused_transactions_write32s,406,2298 +fused_transactions_write32s,407,2307 +fused_transactions_write32s,408,2306 +fused_transactions_write32s,409,2301 +fused_transactions_write32s,410,2297 +fused_transactions_write32s,411,2305 +fused_transactions_write32s,412,2304 +fused_transactions_write32s,413,2312 +fused_transactions_write32s,414,2313 +fused_transactions_write32s,415,2305 +fused_transactions_write32s,416,2302 +fused_transactions_write32s,417,2300 +fused_transactions_write32s,418,2300 +fused_transactions_write32s,419,2295 +fused_transactions_write32s,420,2299 +fused_transactions_write32s,421,2300 +fused_transactions_write32s,422,2298 +fused_transactions_write32s,423,2298 +fused_transactions_write32s,424,2302 +fused_transactions_write32s,425,2295 +fused_transactions_write32s,426,2298 +fused_transactions_write32s,427,2294 +fused_transactions_write32s,428,2305 +fused_transactions_write32s,429,2301 +fused_transactions_write32s,430,2299 +fused_transactions_write32s,431,2300 +fused_transactions_write32s,432,2301 +fused_transactions_write32s,433,2298 +fused_transactions_write32s,434,2299 +fused_transactions_write32s,435,2301 +fused_transactions_write32s,436,2302 +fused_transactions_write32s,437,2297 +fused_transactions_write32s,438,2297 +fused_transactions_write32s,439,2295 +fused_transactions_write32s,440,2300 +fused_transactions_write32s,441,2299 +fused_transactions_write32s,442,2299 +fused_transactions_write32s,443,2297 +fused_transactions_write32s,444,2306 +fused_transactions_write32s,445,2295 +fused_transactions_write32s,446,2298 +fused_transactions_write32s,447,2297 +fused_transactions_write32s,448,2305 +fused_transactions_write32s,449,2301 +fused_transactions_write32s,450,2300 +fused_transactions_write32s,451,2295 +fused_transactions_write32s,452,2303 +fused_transactions_write32s,453,2299 +fused_transactions_write32s,454,2302 +fused_transactions_write32s,455,2298 +fused_transactions_write32s,456,2299 +fused_transactions_write32s,457,2302 +fused_transactions_write32s,458,2305 +fused_transactions_write32s,459,2296 +fused_transactions_write32s,460,2297 +fused_transactions_write32s,461,2298 +fused_transactions_write32s,462,2299 +fused_transactions_write32s,463,2299 +fused_transactions_write32s,464,2299 +fused_transactions_write32s,465,2301 +fused_transactions_write32s,466,2302 +fused_transactions_write32s,467,2298 +fused_transactions_write32s,468,2295 +fused_transactions_write32s,469,2293 +fused_transactions_write32s,470,2300 +fused_transactions_write32s,471,2301 +fused_transactions_write32s,472,2303 +fused_transactions_write32s,473,2299 +fused_transactions_write32s,474,2295 +fused_transactions_write32s,475,2299 +fused_transactions_write32s,476,2301 +fused_transactions_write32s,477,2297 +fused_transactions_write32s,478,2300 +fused_transactions_write32s,479,2300 +fused_transactions_write32s,480,2302 +fused_transactions_write32s,481,2296 +fused_transactions_write32s,482,2299 +fused_transactions_write32s,483,2299 +fused_transactions_write32s,484,2299 +fused_transactions_write32s,485,2300 +fused_transactions_write32s,486,2305 +fused_transactions_write32s,487,2311 +fused_transactions_write32s,488,2308 +fused_transactions_write32s,489,2309 +fused_transactions_write32s,490,2303 +fused_transactions_write32s,491,2303 +fused_transactions_write32s,492,2310 +fused_transactions_write32s,493,2297 +fused_transactions_write32s,494,2301 +fused_transactions_write32s,495,2302 +fused_transactions_write32s,496,2300 +fused_transactions_write32s,497,2297 +fused_transactions_write32s,498,2292 +fused_transactions_write32s,499,2279 +fused_transactions_write32s,500,2295 +fused_transactions_write32s,501,2302 +fused_transactions_write32s,502,2308 +fused_transactions_write32s,503,2289 +fused_transactions_write32s,504,2288 +fused_transactions_write32s,505,2293 +fused_transactions_write32s,506,2284 +fused_transactions_write32s,507,2281 +fused_transactions_write32s,508,2275 +fused_transactions_write32s,509,2274 +fused_transactions_write32s,510,2271 +fused_transactions_write32s,511,2274 +fused_transactions_write32s,512,2272 +fused_transactions_write32s,513,2289 +fused_transactions_write32s,514,2290 +fused_transactions_write32s,515,2290 +fused_transactions_write32s,516,2296 +fused_transactions_write32s,517,2292 +fused_transactions_write32s,518,2292 +fused_transactions_write32s,519,2296 +fused_transactions_write32s,520,2297 +fused_transactions_write32s,521,2290 +fused_transactions_write32s,522,2288 +fused_transactions_write32s,523,2298 +fused_transactions_write32s,524,2290 +fused_transactions_write32s,525,2294 +fused_transactions_write32s,526,2294 +fused_transactions_write32s,527,2298 +fused_transactions_write32s,528,2293 +fused_transactions_write32s,529,2290 +fused_transactions_write32s,530,2295 +fused_transactions_write32s,531,2290 +fused_transactions_write32s,532,2290 +fused_transactions_write32s,533,2299 +fused_transactions_write32s,534,2292 +fused_transactions_write32s,535,2292 +fused_transactions_write32s,536,2302 +fused_transactions_write32s,537,2290 +fused_transactions_write32s,538,2296 +fused_transactions_write32s,539,2290 +fused_transactions_write32s,540,2292 +fused_transactions_write32s,541,2291 +fused_transactions_write32s,542,2295 +fused_transactions_write32s,543,2295 +fused_transactions_write32s,544,2297 +fused_transactions_write32s,545,2291 +fused_transactions_write32s,546,2300 +fused_transactions_write32s,547,2293 +fused_transactions_write32s,548,2289 +fused_transactions_write32s,549,2295 +fused_transactions_write32s,550,2294 +fused_transactions_write32s,551,2292 +fused_transactions_write32s,552,2296 +fused_transactions_write32s,553,2300 +fused_transactions_write32s,554,2293 +fused_transactions_write32s,555,2294 +fused_transactions_write32s,556,2292 +fused_transactions_write32s,557,2294 +fused_transactions_write32s,558,2292 +fused_transactions_write32s,559,2293 +fused_transactions_write32s,560,2297 +fused_transactions_write32s,561,2294 +fused_transactions_write32s,562,2290 +fused_transactions_write32s,563,2292 +fused_transactions_write32s,564,2291 +fused_transactions_write32s,565,2293 +fused_transactions_write32s,566,2293 +fused_transactions_write32s,567,2294 +fused_transactions_write32s,568,2294 +fused_transactions_write32s,569,2292 +fused_transactions_write32s,570,2294 +fused_transactions_write32s,571,2291 +fused_transactions_write32s,572,2293 +fused_transactions_write32s,573,2293 +fused_transactions_write32s,574,2296 +fused_transactions_write32s,575,2300 +fused_transactions_write32s,576,2291 +fused_transactions_write32s,577,2295 +fused_transactions_write32s,578,2293 +fused_transactions_write32s,579,2297 +fused_transactions_write32s,580,2293 +fused_transactions_write32s,581,2298 +fused_transactions_write32s,582,2296 +fused_transactions_write32s,583,2290 +fused_transactions_write32s,584,2294 +fused_transactions_write32s,585,2292 +fused_transactions_write32s,586,2296 +fused_transactions_write32s,587,2294 +fused_transactions_write32s,588,2294 +fused_transactions_write32s,589,2292 +fused_transactions_write32s,590,2294 +fused_transactions_write32s,591,2295 +fused_transactions_write32s,592,2298 +fused_transactions_write32s,593,2294 +fused_transactions_write32s,594,2297 +fused_transactions_write32s,595,2311 +fused_transactions_write32s,596,2295 +fused_transactions_write32s,597,2292 +fused_transactions_write32s,598,2293 +fused_transactions_write32s,599,2292 +fused_transactions_write32s,600,2294 +fused_transactions_write32s,601,2292 +fused_transactions_write32s,602,2293 +fused_transactions_write32s,603,2294 +fused_transactions_write32s,604,2292 +fused_transactions_write32s,605,2296 +fused_transactions_write32s,606,2297 +fused_transactions_write32s,607,2293 +fused_transactions_write32s,608,2293 +fused_transactions_write32s,609,2299 +fused_transactions_write32s,610,2297 +fused_transactions_write32s,611,2292 +fused_transactions_write32s,612,2294 +fused_transactions_write32s,613,2294 +fused_transactions_write32s,614,2293 +fused_transactions_write32s,615,2294 +fused_transactions_write32s,616,2291 +fused_transactions_write32s,617,2300 +fused_transactions_write32s,618,2291 +fused_transactions_write32s,619,2293 +fused_transactions_write32s,620,2292 +fused_transactions_write32s,621,2294 +fused_transactions_write32s,622,2292 +fused_transactions_write32s,623,2300 +fused_transactions_write32s,624,2294 +fused_transactions_write32s,625,2298 +fused_transactions_write32s,626,2297 +fused_transactions_write32s,627,2300 +fused_transactions_write32s,628,2293 +fused_transactions_write32s,629,2292 +fused_transactions_write32s,630,2292 +fused_transactions_write32s,631,2294 +fused_transactions_write32s,632,2296 +fused_transactions_write32s,633,2293 +fused_transactions_write32s,634,2292 +fused_transactions_write32s,635,2290 +fused_transactions_write32s,636,2292 +fused_transactions_write32s,637,2291 +fused_transactions_write32s,638,2298 +fused_transactions_write32s,639,2304 +fused_transactions_write32s,640,2320 +fused_transactions_write32s,641,2299 +fused_transactions_write32s,642,2295 +fused_transactions_write32s,643,2293 +fused_transactions_write32s,644,2294 +fused_transactions_write32s,645,2297 +fused_transactions_write32s,646,2296 +fused_transactions_write32s,647,2290 +fused_transactions_write32s,648,2294 +fused_transactions_write32s,649,2298 +fused_transactions_write32s,650,2299 +fused_transactions_write32s,651,2295 +fused_transactions_write32s,652,2292 +fused_transactions_write32s,653,2290 +fused_transactions_write32s,654,2296 +fused_transactions_write32s,655,2295 +fused_transactions_write32s,656,2292 +fused_transactions_write32s,657,2294 +fused_transactions_write32s,658,2292 +fused_transactions_write32s,659,2293 +fused_transactions_write32s,660,2302 +fused_transactions_write32s,661,2317 +fused_transactions_write32s,662,2299 +fused_transactions_write32s,663,2294 +fused_transactions_write32s,664,2294 +fused_transactions_write32s,665,2295 +fused_transactions_write32s,666,2293 +fused_transactions_write32s,667,2295 +fused_transactions_write32s,668,2293 +fused_transactions_write32s,669,2293 +fused_transactions_write32s,670,2293 +fused_transactions_write32s,671,2294 +fused_transactions_write32s,672,2291 +fused_transactions_write32s,673,2293 +fused_transactions_write32s,674,2292 +fused_transactions_write32s,675,2295 +fused_transactions_write32s,676,2295 +fused_transactions_write32s,677,2296 +fused_transactions_write32s,678,2294 +fused_transactions_write32s,679,2296 +fused_transactions_write32s,680,2294 +fused_transactions_write32s,681,2301 +fused_transactions_write32s,682,2303 +fused_transactions_write32s,683,2295 +fused_transactions_write32s,684,2295 +fused_transactions_write32s,685,2292 +fused_transactions_write32s,686,2291 +fused_transactions_write32s,687,2293 +fused_transactions_write32s,688,2290 +fused_transactions_write32s,689,2291 +fused_transactions_write32s,690,2294 +fused_transactions_write32s,691,2292 +fused_transactions_write32s,692,2292 +fused_transactions_write32s,693,2309 +fused_transactions_write32s,694,2295 +fused_transactions_write32s,695,2292 +fused_transactions_write32s,696,2293 +fused_transactions_write32s,697,2297 +fused_transactions_write32s,698,2296 +fused_transactions_write32s,699,2298 +fused_transactions_write32s,700,2292 +fused_transactions_write32s,701,2289 +fused_transactions_write32s,702,2293 +fused_transactions_write32s,703,2293 +fused_transactions_write32s,704,2294 +fused_transactions_write32s,705,2300 +fused_transactions_write32s,706,2296 +fused_transactions_write32s,707,2293 +fused_transactions_write32s,708,2293 +fused_transactions_write32s,709,2293 +fused_transactions_write32s,710,2297 +fused_transactions_write32s,711,2294 +fused_transactions_write32s,712,2292 +fused_transactions_write32s,713,2293 +fused_transactions_write32s,714,2293 +fused_transactions_write32s,715,2290 +fused_transactions_write32s,716,2296 +fused_transactions_write32s,717,2296 +fused_transactions_write32s,718,2306 +fused_transactions_write32s,719,2300 +fused_transactions_write32s,720,2296 +fused_transactions_write32s,721,2294 +fused_transactions_write32s,722,2297 +fused_transactions_write32s,723,2293 +fused_transactions_write32s,724,2293 +fused_transactions_write32s,725,2293 +fused_transactions_write32s,726,2293 +fused_transactions_write32s,727,2297 +fused_transactions_write32s,728,2295 +fused_transactions_write32s,729,2294 +fused_transactions_write32s,730,2294 +fused_transactions_write32s,731,2297 +fused_transactions_write32s,732,2292 +fused_transactions_write32s,733,2294 +fused_transactions_write32s,734,2296 +fused_transactions_write32s,735,2293 +fused_transactions_write32s,736,2293 +fused_transactions_write32s,737,2291 +fused_transactions_write32s,738,2296 +fused_transactions_write32s,739,2291 +fused_transactions_write32s,740,2294 +fused_transactions_write32s,741,2292 +fused_transactions_write32s,742,2294 +fused_transactions_write32s,743,2293 +fused_transactions_write32s,744,2293 +fused_transactions_write32s,745,2294 +fused_transactions_write32s,746,2299 +fused_transactions_write32s,747,2292 +fused_transactions_write32s,748,2297 +fused_transactions_write32s,749,2298 +fused_transactions_write32s,750,2299 +fused_transactions_write32s,751,2293 +fused_transactions_write32s,752,2294 +fused_transactions_write32s,753,2303 +fused_transactions_write32s,754,2301 +fused_transactions_write32s,755,2294 +fused_transactions_write32s,756,2293 +fused_transactions_write32s,757,2293 +fused_transactions_write32s,758,2293 +fused_transactions_write32s,759,2295 +fused_transactions_write32s,760,2296 +fused_transactions_write32s,761,2294 +fused_transactions_write32s,762,2289 +fused_transactions_write32s,763,2295 +fused_transactions_write32s,764,2295 +fused_transactions_write32s,765,2295 +fused_transactions_write32s,766,2295 +fused_transactions_write32s,767,2293 +fused_transactions_write32s,768,2292 +fused_transactions_write32s,769,2291 +fused_transactions_write32s,770,2292 +fused_transactions_write32s,771,2293 +fused_transactions_write32s,772,2292 +fused_transactions_write32s,773,2292 +fused_transactions_write32s,774,2292 +fused_transactions_write32s,775,2291 +fused_transactions_write32s,776,2292 +fused_transactions_write32s,777,2303 +fused_transactions_write32s,778,2299 +fused_transactions_write32s,779,2296 +fused_transactions_write32s,780,2293 +fused_transactions_write32s,781,2292 +fused_transactions_write32s,782,2299 +fused_transactions_write32s,783,2298 +fused_transactions_write32s,784,2297 +fused_transactions_write32s,785,2299 +fused_transactions_write32s,786,2293 +fused_transactions_write32s,787,2291 +fused_transactions_write32s,788,2295 +fused_transactions_write32s,789,2292 +fused_transactions_write32s,790,2296 +fused_transactions_write32s,791,2293 +fused_transactions_write32s,792,2294 +fused_transactions_write32s,793,2292 +fused_transactions_write32s,794,2291 +fused_transactions_write32s,795,2294 +fused_transactions_write32s,796,2292 +fused_transactions_write32s,797,2292 +fused_transactions_write32s,798,2292 +fused_transactions_write32s,799,2292 +fused_transactions_write32s,800,2296 +fused_transactions_write32s,801,2292 +fused_transactions_write32s,802,2294 +fused_transactions_write32s,803,2297 +fused_transactions_write32s,804,2292 +fused_transactions_write32s,805,2293 +fused_transactions_write32s,806,2294 +fused_transactions_write32s,807,2293 +fused_transactions_write32s,808,2293 +fused_transactions_write32s,809,2292 +fused_transactions_write32s,810,2294 +fused_transactions_write32s,811,2292 +fused_transactions_write32s,812,2294 +fused_transactions_write32s,813,2300 +fused_transactions_write32s,814,2295 +fused_transactions_write32s,815,2302 +fused_transactions_write32s,816,2296 +fused_transactions_write32s,817,2294 +fused_transactions_write32s,818,2293 +fused_transactions_write32s,819,2294 +fused_transactions_write32s,820,2298 +fused_transactions_write32s,821,2295 +fused_transactions_write32s,822,2298 +fused_transactions_write32s,823,2295 +fused_transactions_write32s,824,2293 +fused_transactions_write32s,825,2293 +fused_transactions_write32s,826,2294 +fused_transactions_write32s,827,2296 +fused_transactions_write32s,828,2294 +fused_transactions_write32s,829,2297 +fused_transactions_write32s,830,2293 +fused_transactions_write32s,831,2292 +fused_transactions_write32s,832,2292 +fused_transactions_write32s,833,2292 +fused_transactions_write32s,834,2296 +fused_transactions_write32s,835,2290 +fused_transactions_write32s,836,2292 +fused_transactions_write32s,837,2298 +fused_transactions_write32s,838,2294 +fused_transactions_write32s,839,2295 +fused_transactions_write32s,840,2297 +fused_transactions_write32s,841,2308 +fused_transactions_write32s,842,2295 +fused_transactions_write32s,843,2630 +fused_transactions_write32s,844,2599 +fused_transactions_write32s,845,2857 +fused_transactions_write32s,846,2656 +fused_transactions_write32s,847,2570 +fused_transactions_write32s,848,2308 +fused_transactions_write32s,849,2295 +fused_transactions_write32s,850,2298 +fused_transactions_write32s,851,2297 +fused_transactions_write32s,852,2300 +fused_transactions_write32s,853,2301 +fused_transactions_write32s,854,2297 +fused_transactions_write32s,855,2300 +fused_transactions_write32s,856,2290 +fused_transactions_write32s,857,2298 +fused_transactions_write32s,858,2297 +fused_transactions_write32s,859,2299 +fused_transactions_write32s,860,2292 +fused_transactions_write32s,861,2291 +fused_transactions_write32s,862,2300 +fused_transactions_write32s,863,2292 +fused_transactions_write32s,864,2301 +fused_transactions_write32s,865,2298 +fused_transactions_write32s,866,2317 +fused_transactions_write32s,867,2317 +fused_transactions_write32s,868,2300 +fused_transactions_write32s,869,2291 +fused_transactions_write32s,870,2294 +fused_transactions_write32s,871,2295 +fused_transactions_write32s,872,2294 +fused_transactions_write32s,873,2292 +fused_transactions_write32s,874,2295 +fused_transactions_write32s,875,2296 +fused_transactions_write32s,876,2294 +fused_transactions_write32s,877,2292 +fused_transactions_write32s,878,2295 +fused_transactions_write32s,879,2292 +fused_transactions_write32s,880,2293 +fused_transactions_write32s,881,2292 +fused_transactions_write32s,882,2294 +fused_transactions_write32s,883,2293 +fused_transactions_write32s,884,2291 +fused_transactions_write32s,885,2291 +fused_transactions_write32s,886,2294 +fused_transactions_write32s,887,2294 +fused_transactions_write32s,888,2294 +fused_transactions_write32s,889,2289 +fused_transactions_write32s,890,2297 +fused_transactions_write32s,891,2277 +fused_transactions_write32s,892,2286 +fused_transactions_write32s,893,2289 +fused_transactions_write32s,894,2293 +fused_transactions_write32s,895,2289 +fused_transactions_write32s,896,2296 +fused_transactions_write32s,897,2294 +fused_transactions_write32s,898,2299 +fused_transactions_write32s,899,2297 +fused_transactions_write32s,900,2293 +fused_transactions_write32s,901,2294 +fused_transactions_write32s,902,2291 +fused_transactions_write32s,903,2295 +fused_transactions_write32s,904,2297 +fused_transactions_write32s,905,2294 +fused_transactions_write32s,906,2292 +fused_transactions_write32s,907,2293 +fused_transactions_write32s,908,2295 +fused_transactions_write32s,909,2295 +fused_transactions_write32s,910,2291 +fused_transactions_write32s,911,2291 +fused_transactions_write32s,912,2295 +fused_transactions_write32s,913,2291 +fused_transactions_write32s,914,2296 +fused_transactions_write32s,915,2293 +fused_transactions_write32s,916,2297 +fused_transactions_write32s,917,2291 +fused_transactions_write32s,918,2294 +fused_transactions_write32s,919,2294 +fused_transactions_write32s,920,2293 +fused_transactions_write32s,921,2294 +fused_transactions_write32s,922,2299 +fused_transactions_write32s,923,2294 +fused_transactions_write32s,924,2298 +fused_transactions_write32s,925,2294 +fused_transactions_write32s,926,2291 +fused_transactions_write32s,927,2298 +fused_transactions_write32s,928,2294 +fused_transactions_write32s,929,2292 +fused_transactions_write32s,930,2284 +fused_transactions_write32s,931,2272 +fused_transactions_write32s,932,2282 +fused_transactions_write32s,933,2283 +fused_transactions_write32s,934,2287 +fused_transactions_write32s,935,2278 +fused_transactions_write32s,936,2301 +fused_transactions_write32s,937,2298 +fused_transactions_write32s,938,2293 +fused_transactions_write32s,939,2292 +fused_transactions_write32s,940,2291 +fused_transactions_write32s,941,2280 +fused_transactions_write32s,942,2281 +fused_transactions_write32s,943,2282 +fused_transactions_write32s,944,2301 +fused_transactions_write32s,945,2303 +fused_transactions_write32s,946,2281 +fused_transactions_write32s,947,2276 +fused_transactions_write32s,948,2293 +fused_transactions_write32s,949,2291 +fused_transactions_write32s,950,2293 +fused_transactions_write32s,951,2296 +fused_transactions_write32s,952,2296 +fused_transactions_write32s,953,2295 +fused_transactions_write32s,954,2292 +fused_transactions_write32s,955,2291 +fused_transactions_write32s,956,2294 +fused_transactions_write32s,957,2291 +fused_transactions_write32s,958,2289 +fused_transactions_write32s,959,2292 +fused_transactions_write32s,960,2294 +fused_transactions_write32s,961,2294 +fused_transactions_write32s,962,2294 +fused_transactions_write32s,963,2288 +fused_transactions_write32s,964,2299 +fused_transactions_write32s,965,2291 +fused_transactions_write32s,966,2297 +fused_transactions_write32s,967,2301 +fused_transactions_write32s,968,2299 +fused_transactions_write32s,969,2292 +fused_transactions_write32s,970,2301 +fused_transactions_write32s,971,2292 +fused_transactions_write32s,972,2296 +fused_transactions_write32s,973,2298 +fused_transactions_write32s,974,2294 +fused_transactions_write32s,975,2292 +fused_transactions_write32s,976,2291 +fused_transactions_write32s,977,2295 +fused_transactions_write32s,978,2293 +fused_transactions_write32s,979,2293 +fused_transactions_write32s,980,2294 +fused_transactions_write32s,981,2292 +fused_transactions_write32s,982,2293 +fused_transactions_write32s,983,2291 +fused_transactions_write32s,984,2290 +fused_transactions_write32s,985,2293 +fused_transactions_write32s,986,2298 +fused_transactions_write32s,987,2294 +fused_transactions_write32s,988,2292 +fused_transactions_write32s,989,2291 +fused_transactions_write32s,990,2292 +fused_transactions_write32s,991,2300 +fused_transactions_write32s,992,2295 +fused_transactions_write32s,993,2299 +fused_transactions_write32s,994,2292 +fused_transactions_write32s,995,2293 +fused_transactions_write32s,996,2296 +fused_transactions_write32s,997,2297 +fused_transactions_write32s,998,2290 +fused_transactions_write32s,999,2294 \ No newline at end of file diff --git a/programming_examples/reconfiguration/ablation/ablation_results.png b/programming_examples/reconfiguration/ablation/ablation_results.png new file mode 100644 index 0000000000000000000000000000000000000000..7e9228442bfed5c368d933d66c67d29cd40a636f GIT binary patch literal 238506 zcmeEuXIRu%_bqQUwpe1+s8lP6G!c;wv7*w{p-7J+U3%}vC|D>KigXp}O{vmV6qFHA zDFX~egaKg$6c~EB>sV6$<=cIp`{nYyd1C-)esj(~d#}CL+ULq~RmBy{*q5=fv8_0I zlkD6pVgKv<-dNh{lMbB5{VGrx967p@WakC`|7U^EL-MW@;>+R zy4At$3x7Nmu|sIIeV@*~yJ2hh?>`dR!87;C^0w4V^P{ToW_2txjmKVPo5tP}WBlH; zQRJvE-u!?3lD+I=An`x`1mCn3~8;zkNiJ= zxpMyhxBG7k^Zys~zby&A@&7bbtVRF$;}7;dX4iSuV$$@Bocl)m>W(QZ2cO=Muw?1d zmwTLF-4;!7YE09n?op;z-?R+t+vYxwWjJ^^J8+{rp0=v$Hdl7J~nGYh(Yq9_Kx) zBr-YvUYmE^1_lQ11G%)(VXBCLprBwT{XcB3clcsl_uG`s<{b+Yj;5vK*UwTbD;1sk z>rXttx^5jid&=wA$JYs-I)3HKl|pw`${8c0b?er}-{Mo-xq0*EO!|-C-k_W9@1wcN zFMwVA*ih+o1|zGp+>hxqKOIZYmoj_3NhNY`buf>t>w^TfSZl3-PoHcL9XeEyFUm3Y zu{q9n1xHU+p7n-Zzn?ExOHfi#(ZJ_^-_^Bl{rbdmzf}UecklL-UdY+SWTtLc3Qe-4 zWw^C1V{01ym|eSb&z}0bqO?pyElUykbd~^VM~ESVo!Bs;^as#v%euVLt?RH z=Pfn))4LbCri~5IBLfRgoH*gE_V!QRN+pq!`&ZWq6zcU(eD1n>`SR=Tm$!1=MoefN zMJtLY-d|JpW!q%N?YN}3dN{VKB%H{*UW<%{I z?4oBbHf9>e(yZLlo?iNinV#RCrT6Q`jmcQ;zE|O5p=!tFJ;u)AmDu)vj-G0K&f08^ z-&Y9WQ7|}k?N=vV6(1j;Hm~uvV@HnIn(eU=AG!Mu-t}xz z&ATUmvfe6*F!oElFn{vo3A?yO@LN5=uQ?)W15yyrlV=b0dFJ8Q0hRW95+4rY<((%m{?`M}+N9;O% zVR`wBKk@q>o{5XBS8YA)|GGEUCk7$+?Mrs;nl0b|eEq-=3l^~6{kh7dsQvtZ7L4|% zX6}@elUrYC-(jb~_eah(PC?%h*QKDj-TIy*C?j)!eX)247qJHB3{CVO|can-2| znR89MxD>qgx+(&w$<8D3Ce;z)_R0|p9@n*{bR^#xc_jZz;aKpF(+;~YB8>)cN}as+ zt5B9+OlWArvu6iqCwpTNwP6XW(L0Z(oO*bV+w;>txtUMp7H{t#4P>qSwhAxg+TGf| zZzWs)&QyicjxwLJnix4tTHz&B%s27W8ATjoqcUC9U6xZ z`!c3*s84);|J(KV5`HlN+T zbLTOv1EnrOrQzP8pQ4BqBrV3iHUhI|{p8qz5!qZ@uZrs0z^=T*zjxcI za@f*P>Yso9$(mwj_S$R3TpL+CAKUe!(zz*1k{|80@d@n4g+%fzZU*iTrD=RBQ;kfTS(2{&2?l3toSJ#VVU)2(#Ni{P2V0K#RD3si!tcP{xQf(g(e&UnyR@TOsKky~IS);T-kJuI-J?-khdlA} zEL4Yx#xh_S`}>A!b!pmSZ8!`TZ|+@6(aOxYcj#Km?@umVy>_kc?g76&w(ovBq^M}B zn`qCdBA*LIKQThwG6ny+Y{d$V&Zn0`Vq!9G-`+qzn$OH(+8|3W|t` zY~QwRhqSbg-%75N2M=ESRm9-q7+ z%ZNtmPR4Qz?AUSS=+UFncJD794&qKH2ms+r-6ISPmer1k23|9D@F1TP$(M0FD5kh} z;lhPU9^-@k^~tx$;*b}$?R}3v`bBwwP`rkQhS3T>25;WH(Rq00 z5;=Ksib2v1*+N*ZlfXI+#cmFyS|HkwBaLc2vOPUHJuR?zuO>hu386eIdIBQf68Y(B zP>_oyPxH%UOCiN|JJpZi2xvs^wW`0fZ^0!$ztkf)wk%t+!-Nd_38DH)2aEewQxw%}oz!0a0oss&a+!Qw{@r6gm$?)I>?ekwY;#%+Pu8 z`ybev2urW#Ys>?cZo>t_W%@j!J2k3y^K9H0PK`cND?go9ZJEHaXeDRTUaOWSjiHk9 zc83F6Zkd!s)&91k{0Iq~44k&q<9GK1h&9G5g*kS=SdFZziv6w!1ki791o}-FW>8J5 zqNSaVb$E^hP;+g}nzQ1`5#=}C;7fqz{rlVUt-e+I-)eR(xv=Tq|FboG6(LT2)Epw9 z<$wPC`7#U>zr&Ie=Nj5vuv*Ah_Z4{nhh18IUtZrrf{|-6{$q@^wWi1_*g4h zMjL$XKEFTIg{-`*zcHOzpXcS}6@boyg9O{-WZQTsd5^P)*^b4AJIP zTwc93%d0Kp;}A-&owv5*R2b&;u25{ zK0VdPZ zpIyA_azH>XQ+%j7yV9(^*ex`Z4~62kn5k-B*$~H2=ltBbLL82zaETvEy4c}BPV;ju zIWO;abgn=K5SO3qUK8io_g0wIxs;|eb{K)=zfsI&11&?}VPY0_Aow$aog-wYhQ0fA z%-HPXw$7y;$=USzpMDiI^ZfK=@nK+0{UI-OXrdPNJIc|*^u@F~Mc1(II&{A5mFD*` z;1Sl%dzGc&<1?=}^t@lr`H;2uUMu~1oH-f&5$v!iipg1;rHY!G#IM47X2Bwc?eQ@N zUM!8eDYR*aktf^6JPh)!qs=*V^R27vX3zgSf{V7+a{T){7dBniphLN$cy~uh4^#Pjmd#qY=lqFV4 zamdTdlNHw+>|LaoZ-}im0tyhea+sf+J&Y>fnrApW!dt>E=f1(t&Q6sjZrv(b|-%Y+9+ zGG3%}v;#%>=eN64k%#RHX=qovqFvfW@!hEY&8ZyiDCGe>J~MBUOI4$#jqB62>*8xm zWVZ0}9-QdDr6y=Nk{Ih9G0;>jPcv~5bes8H8PMH*7Eg3->1tW8*krV8b`zgY7fsnZ z?!O3_xsjf4<1)eG<>TW(Zp`)+D)AW4^RU0SGTuoRH4*^$_s z+zrPrTBd*8vT4&}a!A_N>^{pt;aO>;kQt<1usUWqS~_*M43){bV~1yUw2X_i*R3p> zjJg7O#~H8jQ3rkRQu&#_#8|=U6ukobjPa)zm-t)?3JMbSo^eeya6k;biC0>m=&{qF z_z}ZtsBC`LCVwW-vOei_a~+UijOjGnzMmKV<9}m*`QH)KdHU!8T?-6N!VKC?l>!9u zZF}r4C5T(j{=P)FY-&fzw)lhuX+4rrNi}JA>*WFm@;bg0NBllv1yJky*iWB6tyAKj zTM@{`v{$J4&{~j<^nBl))nA|vyeHlA$Sw|j!25)nx!u1%W)srMIRb>P8o(oEe_wuX z!YF?%m=@zXe3Ue{?d>)5A}=xD zhI!|-(+$fEz!F(AUsAU5@#*#~_~C~v&R+B0mdFzD4H3JIuc8fX)2xdok)W9#K|T=@ zWMO*GitWdOUxQ|dlIES7p0=DC?JHzv6zyg#UcTWDI!|fVMpBAN39L7bKX~OA;po(P z{$0C{6KsXk(Ry+yR<=_|Kvq@{@kGn6l@~x)7-n(QCwhddv#(On<@4xJJrYkH-ovqy z%SBSW6ri%@!RbF!)RW)$)O;*w-8GV()eGy$TqUAkcsAT+eB7z2l1|s{@EVWyUBxq4 zKLI|$5?P=hTS4g(F(^*r@t$}Rj4DwXo#K)WtQKLfm7(_rRiW)9&)0bPt!B8INeKKe zUynkTZ`}PX_*!6KBR;kAB$9!EynMSOr4}V#Xr66DOl@QJb|8k84NI3Tdn-~lbMIFn zohH3r1b0iZTeh&?qdNjx8A*T$c)B9&j^^09k;5!;fx%GDsET(cS0EWsnd$YyqW77%X75l(i z^~Hj%QVD0+|YHevRuKw=k>*~(bI00-8RZxdS+Et5Dg;flPGg2P6RGyC3iNiu_v z4wRPm%!laRJGfLx@6mBQ(s4b#sBDopMrdP2s2n@u?%m6=>pBd?uH$<;3ANq=Xr|h$ z5HORR8`52dc_3Xku2Pu!y|8l^fF6)#16bCzYu3a)c(AJ>>BIp%V1BW7p6loLI8rx( z%=+!sV(w$}LMPK|$^d{%w8Mn;_aI?Y=9(TFwPYDzBRhQY;=**BZ;26; zb&DnO0C)^u@w4(IV!#Y-1jt(g$J8JEzE2}VPaEIKF3QWy%=Di5tXRjqeDx~9?PLki zW~QRH7LL@&XcX8RQ%D6e0|k(BBF^`hHESC3taR&g54yV-=ACQ4hxW1`k-qcPgF6Va zdq_3f-gBUv@6Zf=+N^G^epXp&*-`2x?LG5|(5E~+A_@u$mwbIwfX6LbA3a>QUih4p z^T(!#Eg&uErFE`Pb2S0QNIZt1r1nUo+-u;$@WSyxkS}n=km|5M7qCkAe%XFZvbc>y zcJ?+yHD)Hdg+|jtN2=MJWh};6^UE(e?ktO0U=v_yt?=E(>P600k!6`^h0O6Ag#E!I zwY4XTJ(ADqdD&a2+d1_K+-K;dmVw(LP);ZJ@82)%;^;9wGg3?10lJ>|=!X+lZG{?% zYO$eMI?@;56eVG`d@?C_e)|ui%>_+G7)6fM&3=%;33@mYj`%hcZL~v5Pe3WR*XRj~ zH&FMnW5?_Zg}&P(h4g>>^IM-3ML z_~XXPAfEizF?1*a4~;6>aqe?DIez`sgy6a(s;YUMKEvHdw@OMj4URvxC?oun9Y}R$ zIj_&p*B{14oNMfBdKhPi#iYi7nHu=in}I?dnj1CCNno(LB|e06&^Yi-o=u1K2&*Ag zON7o&dXF2oZ{P0oa$<<-Um(=-c{7mnAhvc$-!YMJK25f z@Nd7JHx591%wCtMmOt4%2}X{q|0NfVqQ}!>SYB7_l>d}<8Vu;Uv1||$ezjW%mkS^% zj$f|rsqPH4EGZf+r1lJ*0q?Xo)2XG2_#LcUao46(}FJ{4fE z&NZt+NE!JkcKBb%>SFng-WC7)4i4Hgq16)ByoJqNF0H2>l(8~`mHwPkZ{rPa|GatH zcKqTJ9I(US6OF6EXVUdeLDz(e2l6NkzUHwALvP#!jU`zXzwib$}mHY~5=@{6Ehua=>g@x;`WiEepi zWhDW|#sOfR;{X|*$BmrI>D8Il?M6cmwQ{D~Mo5>|ZbQ*aUDPhW>+LnwD{*facEXXa zv-jtVwzT3>vOc1sB0e=fH1yVEaB%7BVY+-aYJYi0M~77`&8MoLcfjW`4s`&Cr@9Hm z=myX|bJM-(3+Y}$qy?kK7AOBc<~zqqmWaDhGJV@gArkIz;i zp=$N5a&m2EbqN7&as^%PSD6Qw0y&(D`S2L__80zfGm0oU#I2@4!O%i5@dd?%$HEccn2Sr%bo-BBt> zQ_%V++F!Wu(OS3m|Iz|1+}Az*iM(&LG^3t}rZf9_91NjeKZxe6RaoU+rZt>Y_rTWf zjYzA{Dk>r@4jwur#kyE`{rb<;S{gv(0K4Jc{XcdAGKFSZA|$2eWKs-D3U9>3ShtKJ zVRDt;NXJp%Yh(7Z{|bHHKh65B5(>^l4-3?WZfWWK?2ymOhR-=mR|j%RoniN3RIT%i zJtg#V13H50@zxu(+a0_IA3|?4!0{&|L_*`DtJ>_ZC?``W_OA2#GRz&-YjO&Xwl*K##jjxSu$m`MJZ;z8s20 z1oHbYE)gmIbb&D;<J&j(orI^*I zyVo#w>zc*I(}P6`pCOIj~1esowj4=WRaTWm{1Wz>l6^}@_rVsZ!azZiRr`~dIj>Tr!Jby zEnw1W|HUu;bbBioBwjJr1`ZD9>+0WQ+{<-A4f&&4ubV(urQNO^tG{sZVh+=qDA5L` zqen&2F&JsB(3L0#0mcrhapm|~rb+wsP?>_7yxL&Y&v((5g-X=2`<_16`sj_le`2&{ zcErz}l{`L*q)U<}mYh-TB~c96vT|I)_0#WE z9iqlkO)GEg01yQYX57yJMVnpZ%V%Jje(K@VtXNR$9R% z->X;Su;@182;J51au{~6dh>4T_1wFuT}*O5H8b?go7FUh4NK3Z;bn*r=nqao>a`^SMk2>qe~a)=3AMH<^@+4_9kjPY7uH`;+BRu*jGM#q7TN-E2 z-skUlaQZ;l)JsdaE$T`0nq^GY5zd#^a&0NtD+AuPP^rsdzjuo%n$-IrKA44BG!28v z?1Q|!GN1rp$9tBgMKwmlZP)KP4oX712kPfLTOqCOe0-LuWC@-?9(ozkS~ML{%9`Lz zlqW&8_r(Rt+o$j-cIO*~rVdkG`r$?}19n#pn5C7?8He-W!w3j5mS(IPsAQdPge{~# zQH^JywV>{<-Jz>%PoQHP?TNIpK<*$44VZ0Kt3z$F*_(S(^#kdN&<7!Og!0di(QRZ{ zZs;*O(3Nfro6eFRqLH4kCD$P-5S<32;CHa3ssl1#+Xc4am4EB^@9v?4WFgH38$wGF zHYmP5Fkw^~Xbzy1;92H9+uhsS8_IpU3=BrIzo=2g2Ymbn0Eu;6T(#wRswEOU@9w|k*cMkl8yO72J}s z0tu~%yN_>8O`cr%QFXp%Bn}mX7!We)yR?g()A?zr?yWY@s?%yZ2w{?@ogI}Sh5CqU z-JC1rff&^0rViwKO*>OE@Hnb8suE(u!hQ6s>5)y47l-N#0C^Al%uOcp$7)TF6ZS<4g=V;4Clv>1 zcx>;y`4@?ErCYQ+`rv=|4g00&nNOt)0G7#KVGQ*YSVCr|t$%(^2gD#}e zrNgV&KIlP5(NHPVJ^;zm{KfUnXp8ebl);&+6u=kIho(<>oIr1ia8V*lhjj}YfYjaJ zR39|NW~&*MoW?0}huotqkq=(yX%8hd+hJslGZ$&&;^X6A(j-Ra^8~;Z)rpTBJAVB7 z;G?dU6mK+N!VLid0bmX2^$98*Vg23fmBNIpnZF7~%Xu^gQ!^#%I|!znT+6~^@uOGi zD@3)Y5yuFMfh?sI&=wNcYj8!J83jPN*l?+~TMY%zZUu^g#0*taEq&6_VMvY}yk5j7 z^5c&`HtUT;VuB)H#@MYULo<24Cg{gW^H}t2j?|%sDj<2M*(s;Q3NYdIyUV~fBu;~d zxJ|@K{xB`Iikf7HLk9Ym+FW91&Ya2l{mBoB({=~FrA-QUmU$+sBHQ5r>8FSy49S6| zWSo6@laLaOg?usoU$?vjJc{Lq*LSC|lPow;nxj15a>FG+ym;L1A2yfFj?t$+#09lB z^`*xH>nF5AVER%bEV*HXK}(~BimPv~LfQtH_oDd6A1_#C27k|0NGGWkuyL7J4YZfg z?d`w0?AT%g{n z(N{qyPoB&<^L&}tShH!UT4l8=>^;f_;0X)j#9@l#M?nIcJ0YWW|Hx`I5JzED2sKKZ z+c8H7HHdZ~>H-^9Xrq_iJDscL=$J#SF+ktv@=Zlj`7B!m4Cvu7#Da$eo`)Y z@Zdp|wU{E>gcpwOA!#siR29}?CfD~)Rj_XJkJdUHYU)tO7Y;q9ox4*@AKyTniE7ilELDqpvNgv zFK--rfIW7T-~0p3Z<49!l4`(%UO^wJNfSX!WP28b04%OuistXX-;tmBbU^%E({WP# z%}-v_y^)`v&+sk=$rxs71H8mox*E2aH~@U(DZNDt7n;3${KwS$Ya&@(Jlx#YQV%OY zzYUx;{9Y{<{i9l3fIN1peMdH8+AjvpIY%m3!G16hwZTKs#0k@j2JKO6YSBk}z8Vg^ zfkA$!9m+})+*pK2Tp7d~9zF@lO?h&wV&J2@*=5h3Jxjs?2)74ConPGf5;Pn@l>{T- zir$mwon^%GhLNaJD0lp0vr)v)Pb@sfNMk`!8<|N2IeFXqEgTZpmBdH(_q~l58X>^G zAWz1kdojS|39u=F^&ZY z#CEDU;iN}L9qSIB0sfL>%b&pL zMDp6f%3F`c)gN5(b+3OL%#O+8`d$;7p7$ROy-5s8ewNw+pFe+o13c4jE7V;I{L~LJ zupWF2XX%wY0OQE9yBL)L9DL=wT7Qw~__(dv+uamoowCG-BLyB5_ZwRdDNE_9%{T`) z1e~prf4N6kxaPU_eSiPul$!q8aYs$HH6;LAx-m~Tu36J%A29QnE0#|HsFN1!GnY(a z?1mz@9ktr}rm5_{#&w#N8(+#*vg=BuwX~Qx>&>2P-C4O&06CKeRDKVO(j2vX-*B;m zm9u@n>$|IT^VpZkEt=D3RO=m0<}*M=L*0o-2WN=}k9ahww>G!FtD4-BnUPx+CSns_ zo6hWtmB>nB}(Z+xxIo37&869n#Mj!0x2CsrDAmIC@Q>(3s&o5zGKA zy7kA!i&Js5*yTMR5%WexOwr;~Rs zoFQprWAnwxGy`hK;oL9#ziosR<=q(A95e=u11=5c>teEt>}uL_$bkO@$95ch&1 z!ul=gx$$LVku$IQ#Uj625W_4J6B2gv^S=ys89Q7@pFMT!=FNK`*!#hf6aArds$W13 zN)Z_42nZ;du≫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
Wr}L9~XQX~8g`gj$ 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⋙F~YF~_MQj$_blXy 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

l;%SyS^^m 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 b?Aqpcn{SPOckXK_@2Wf5U{dI}-);Io7kD!h literal 0 HcmV?d00001 diff --git a/programming_examples/reconfiguration/ablation/visualize_ablation.py b/programming_examples/reconfiguration/ablation/visualize_ablation.py new file mode 100755 index 00000000000..13af8e7f90f --- /dev/null +++ b/programming_examples/reconfiguration/ablation/visualize_ablation.py @@ -0,0 +1,214 @@ +#!/usr/bin/env python3 +import sys +import csv +import matplotlib.pyplot as plt +import numpy as np +from pathlib import Path +import seaborn as sns + +# Set style and font - match visualize_results.py +plt.style.use('dark_background') + +# Configuration labels +CONFIG_LABELS = { + '0_write32s_reset_core_dma_switch_lock': 'Additional Reset of Everything\n(Core+DMA+Switch+Lock)', + '1_write32s_reset_core_dma_switch': 'Additional Core+DMA+Switch Reset', + '2_write32s_reset_core_dma': 'Additional Core+DMA Reset', + '3_write32s_reset_core': 'Additional Core Reset', + '4_write32s_reset_nothing': 'No Additional Reset', +} + +def read_csv_file(csv_file): + """Read benchmark results from CSV with format: variant,iteration,time_us""" + times = [] + + with open(csv_file, 'r') as f: + reader = csv.reader(f) + for row in reader: + if len(row) >= 3: + time_us = float(row[2]) + times.append(time_us) + + return np.array(times) + +def compute_statistics(times): + """Compute mean, median, std, min, max for timing data""" + return { + 'mean': np.mean(times), + 'median': np.median(times), + 'std': np.std(times), + 'min': np.min(times), + 'max': np.max(times), + 'q1': np.percentile(times, 25), + 'q3': np.percentile(times, 75), + 'times': times + } + +def plot_results(stats_dict, output_file): + """Create bar chart with box-and-whisker overlay for ablation study""" + fig, ax = plt.subplots(figsize=(14, 8)) + + # Sort by config number (0-4) + configs = sorted(stats_dict.keys(), key=lambda x: int(x.split('_')[0])) + labels = [CONFIG_LABELS[c] for c in configs] + means = [stats_dict[c]['mean'] for c in configs] + + # Color scheme - use seaborn palette (match visualize_results.py) + colors = sns.color_palette('flare', n_colors=len(configs)) + + # Create bar chart for means + x_pos = np.arange(len(configs)) + bars = ax.bar(x_pos, means, color=colors, alpha=1.0, label='Mean', width=0.6) + + # Overlay box-and-whisker plots + bp_data = [stats_dict[c]['times'] for c in configs] + bp = ax.boxplot(bp_data, positions=x_pos, widths=0.4, + flierprops=dict(marker='.', markersize=2)) + + ax.set_ylabel('Reconfiguration Time per Iteration (μs)', fontsize=12) + ax.set_xlabel('Reset Configuration', fontsize=12) + ax.set_title('AIE Reconfiguration Performance Ablation Study\n(Write32s Method)', + fontsize=14) + ax.set_xticks(x_pos) + ax.set_xticklabels(labels, fontsize=10) + ax.grid(axis='y', alpha=0.3) + + # Add mean value labels on bars + for i, (bar, mean) in enumerate(zip(bars, means)): + height = bar.get_height() + ax.text(bar.get_x() + bar.get_width()/2., height + 10, + f'{mean:.1f} μs', + ha='center', va='bottom', fontsize=10) + + # Add legend + from matplotlib.patches import Patch + legend_elements = [ + Patch(facecolor=colors[0], alpha=1.0, label='Mean (bar)'), + Patch(facecolor='white', edgecolor='black', label='Box: 25th-75th percentile'), + plt.Line2D([0], [0], color='black', linewidth=2, label='Median'), + plt.Line2D([0], [0], color='black', linewidth=1.5, label='Min/Max (whiskers)') + ] + ax.legend(handles=legend_elements, loc='upper right', fontsize=9) + + plt.tight_layout() + plt.savefig(output_file, dpi=300, bbox_inches='tight') + print(f"Plot saved to: {output_file}", file=sys.stderr) + +def print_statistics(stats_dict): + """Print detailed statistics to stderr""" + print("\n" + "="*90, file=sys.stderr) + print("ABLATION STUDY STATISTICS", file=sys.stderr) + print("="*90, file=sys.stderr) + print(file=sys.stderr) + + # Sort by config number + configs = sorted(stats_dict.keys(), key=lambda x: int(x.split('_')[0])) + + print(f"{'Configuration':<40} {'Mean':<10} {'Median':<10} {'Std Dev':<10} {'Min':<10} {'Max':<10}", file=sys.stderr) + print("-"*90, file=sys.stderr) + + for config in configs: + s = stats_dict[config] + label = CONFIG_LABELS[config] + print(f"{label:<40} {s['mean']:>8.2f} {s['median']:>8.2f} " + f"{s['std']:>8.2f} {s['min']:>8.2f} {s['max']:>8.2f}", file=sys.stderr) + + print(file=sys.stderr) + print("="*90, file=sys.stderr) + print("RELATIVE PERFORMANCE", file=sys.stderr) + print("="*90, file=sys.stderr) + print(file=sys.stderr) + + baseline = configs[0] + baseline_mean = stats_dict[baseline]['mean'] + print(f"{'Configuration':<40} {'Mean (μs)':<12} {'Relative to ' + CONFIG_LABELS[baseline][:20]:<30}", file=sys.stderr) + print("-"*90, file=sys.stderr) + + for config in configs: + mean = stats_dict[config]['mean'] + relative = mean / baseline_mean + label = CONFIG_LABELS[config] + print(f"{label:<40} {mean:>10.2f} {relative:>8.2f}x", file=sys.stderr) + + print(file=sys.stderr) + print("="*90, file=sys.stderr) + print("COMPARISON ANALYSIS", file=sys.stderr) + print("="*90, file=sys.stderr) + print(file=sys.stderr) + + fastest_config = min(configs, key=lambda c: stats_dict[c]['mean']) + fastest_mean = stats_dict[fastest_config]['mean'] + slowest_config = max(configs, key=lambda c: stats_dict[c]['mean']) + slowest_mean = stats_dict[slowest_config]['mean'] + + print(f"Fastest configuration: {CONFIG_LABELS[fastest_config]} ({fastest_mean:.2f} μs mean)", file=sys.stderr) + print(f"Slowest configuration: {CONFIG_LABELS[slowest_config]} ({slowest_mean:.2f} μs mean)", file=sys.stderr) + print(file=sys.stderr) + + speedup = slowest_mean / fastest_mean + improvement_pct = ((slowest_mean - fastest_mean) / slowest_mean) * 100 + print(f"Maximum speedup: {speedup:.2f}x", file=sys.stderr) + print(f" → {improvement_pct:.1f}% performance improvement from slowest to fastest", file=sys.stderr) + print(file=sys.stderr) + + # Analyze incremental improvements + print("Incremental Analysis (from most to least reset):", file=sys.stderr) + for i in range(len(configs) - 1): + curr = configs[i] + next_cfg = configs[i + 1] + curr_mean = stats_dict[curr]['mean'] + next_mean = stats_dict[next_cfg]['mean'] + + if next_mean < curr_mean: + speedup = curr_mean / next_mean + improvement = ((curr_mean - next_mean) / curr_mean) * 100 + print(f" {CONFIG_LABELS[curr][:30]} → {CONFIG_LABELS[next_cfg][:30]}", file=sys.stderr) + print(f" {speedup:.3f}x faster ({improvement:.1f}% improvement)", file=sys.stderr) + else: + slowdown = next_mean / curr_mean + degradation = ((next_mean - curr_mean) / curr_mean) * 100 + print(f" {CONFIG_LABELS[curr][:30]} → {CONFIG_LABELS[next_cfg][:30]}", file=sys.stderr) + print(f" {slowdown:.3f}x slower ({degradation:.1f}% degradation)", file=sys.stderr) + + print(file=sys.stderr) + print("="*90, file=sys.stderr) + +def main(): + ablation_dir = Path(".") + + # Find all CSV files + csv_files = sorted(ablation_dir.glob("*.csv")) + + if not csv_files: + print("Error: No CSV files found in current directory", file=sys.stderr) + sys.exit(1) + + stats_dict = {} + + for csv_file in csv_files: + config_name = csv_file.stem # e.g., "0_write32s_reset_core_dma_switch_lock" + + if config_name not in CONFIG_LABELS: + print(f"Warning: Unknown config {config_name}, skipping", file=sys.stderr) + continue + + times = read_csv_file(csv_file) + + if len(times) == 0: + print(f"Warning: No data in {csv_file}, skipping", file=sys.stderr) + continue + + stats_dict[config_name] = compute_statistics(times) + print(f"Loaded {len(times)} samples from {csv_file.name}", file=sys.stderr) + + if len(stats_dict) == 0: + print("Error: No valid data found", file=sys.stderr) + sys.exit(1) + + output_plot = "ablation_results.png" + plot_results(stats_dict, output_plot) + + print_statistics(stats_dict) + +if __name__ == "__main__": + main() diff --git a/programming_examples/reconfiguration/benchmark_results.csv b/programming_examples/reconfiguration/benchmark_results.csv index 60cfff5cf7f..4b9adc5ee27 100644 --- a/programming_examples/reconfiguration/benchmark_results.csv +++ b/programming_examples/reconfiguration/benchmark_results.csv @@ -1,4001 +1,8001 @@ variant,iteration,time_us -separate_xclbins,0,5024 -separate_xclbins,1,4980 -separate_xclbins,2,4990 -separate_xclbins,3,5006 -separate_xclbins,4,4967 -separate_xclbins,5,4969 -separate_xclbins,6,4965 -separate_xclbins,7,4963 -separate_xclbins,8,4966 -separate_xclbins,9,4962 -separate_xclbins,10,4963 -separate_xclbins,11,4961 -separate_xclbins,12,4973 -separate_xclbins,13,4967 -separate_xclbins,14,4980 -separate_xclbins,15,4968 -separate_xclbins,16,4966 -separate_xclbins,17,4971 -separate_xclbins,18,4958 -separate_xclbins,19,4963 -separate_xclbins,20,4962 -separate_xclbins,21,4975 -separate_xclbins,22,4969 -separate_xclbins,23,4962 -separate_xclbins,24,4973 -separate_xclbins,25,4957 -separate_xclbins,26,4964 -separate_xclbins,27,4964 -separate_xclbins,28,4968 +fused_write32s_reset_always,0,7952 +fused_write32s_reset_always,1,7900 +fused_write32s_reset_always,2,7908 +fused_write32s_reset_always,3,7906 +fused_write32s_reset_always,4,7908 +fused_write32s_reset_always,5,7905 +fused_write32s_reset_always,6,7916 +fused_write32s_reset_always,7,7998 +fused_write32s_reset_always,8,7998 +fused_write32s_reset_always,9,7994 +fused_write32s_reset_always,10,7989 +fused_write32s_reset_always,11,8115 +fused_write32s_reset_always,12,7911 +fused_write32s_reset_always,13,7987 +fused_write32s_reset_always,14,7998 +fused_write32s_reset_always,15,7998 +fused_write32s_reset_always,16,8007 +fused_write32s_reset_always,17,7997 +fused_write32s_reset_always,18,7999 +fused_write32s_reset_always,19,7996 +fused_write32s_reset_always,20,8003 +fused_write32s_reset_always,21,7998 +fused_write32s_reset_always,22,7983 +fused_write32s_reset_always,23,8016 +fused_write32s_reset_always,24,8000 +fused_write32s_reset_always,25,7997 +fused_write32s_reset_always,26,8007 +fused_write32s_reset_always,27,7991 +fused_write32s_reset_always,28,8006 +fused_write32s_reset_always,29,7996 +fused_write32s_reset_always,30,8000 +fused_write32s_reset_always,31,8001 +fused_write32s_reset_always,32,8094 +fused_write32s_reset_always,33,7906 +fused_write32s_reset_always,34,7998 +fused_write32s_reset_always,35,7998 +fused_write32s_reset_always,36,7999 +fused_write32s_reset_always,37,7996 +fused_write32s_reset_always,38,8004 +fused_write32s_reset_always,39,7998 +fused_write32s_reset_always,40,7999 +fused_write32s_reset_always,41,8004 +fused_write32s_reset_always,42,7994 +fused_write32s_reset_always,43,8003 +fused_write32s_reset_always,44,8000 +fused_write32s_reset_always,45,7996 +fused_write32s_reset_always,46,8003 +fused_write32s_reset_always,47,8094 +fused_write32s_reset_always,48,7908 +fused_write32s_reset_always,49,7999 +fused_write32s_reset_always,50,7998 +fused_write32s_reset_always,51,8014 +fused_write32s_reset_always,52,7605 +fused_write32s_reset_always,53,7639 +fused_write32s_reset_always,54,7643 +fused_write32s_reset_always,55,7608 +fused_write32s_reset_always,56,7608 +fused_write32s_reset_always,57,7590 +fused_write32s_reset_always,58,7924 +fused_write32s_reset_always,59,7639 +fused_write32s_reset_always,60,7702 +fused_write32s_reset_always,61,8032 +fused_write32s_reset_always,62,7993 +fused_write32s_reset_always,63,8015 +fused_write32s_reset_always,64,7991 +fused_write32s_reset_always,65,7623 +fused_write32s_reset_always,66,7906 +fused_write32s_reset_always,67,7603 +fused_write32s_reset_always,68,7588 +fused_write32s_reset_always,69,7603 +fused_write32s_reset_always,70,7602 +fused_write32s_reset_always,71,7609 +fused_write32s_reset_always,72,7593 +fused_write32s_reset_always,73,7587 +fused_write32s_reset_always,74,7587 +fused_write32s_reset_always,75,7588 +fused_write32s_reset_always,76,7648 +fused_write32s_reset_always,77,7646 +fused_write32s_reset_always,78,7648 +fused_write32s_reset_always,79,7906 +fused_write32s_reset_always,80,7927 +fused_write32s_reset_always,81,7904 +fused_write32s_reset_always,82,7935 +fused_write32s_reset_always,83,7588 +fused_write32s_reset_always,84,7593 +fused_write32s_reset_always,85,7639 +fused_write32s_reset_always,86,7924 +fused_write32s_reset_always,87,7598 +fused_write32s_reset_always,88,7909 +fused_write32s_reset_always,89,7892 +fused_write32s_reset_always,90,7907 +fused_write32s_reset_always,91,7909 +fused_write32s_reset_always,92,7880 +fused_write32s_reset_always,93,7902 +fused_write32s_reset_always,94,7903 +fused_write32s_reset_always,95,7902 +fused_write32s_reset_always,96,7917 +fused_write32s_reset_always,97,8012 +fused_write32s_reset_always,98,7991 +fused_write32s_reset_always,99,8001 +fused_write32s_reset_always,100,8000 +fused_write32s_reset_always,101,8009 +fused_write32s_reset_always,102,7999 +fused_write32s_reset_always,103,7997 +fused_write32s_reset_always,104,7999 +fused_write32s_reset_always,105,8139 +fused_write32s_reset_always,106,8051 +fused_write32s_reset_always,107,8010 +fused_write32s_reset_always,108,7929 +fused_write32s_reset_always,109,7635 +fused_write32s_reset_always,110,7923 +fused_write32s_reset_always,111,7904 +fused_write32s_reset_always,112,7946 +fused_write32s_reset_always,113,7663 +fused_write32s_reset_always,114,7785 +fused_write32s_reset_always,115,8003 +fused_write32s_reset_always,116,7995 +fused_write32s_reset_always,117,8005 +fused_write32s_reset_always,118,8003 +fused_write32s_reset_always,119,7996 +fused_write32s_reset_always,120,7999 +fused_write32s_reset_always,121,7998 +fused_write32s_reset_always,122,8000 +fused_write32s_reset_always,123,8002 +fused_write32s_reset_always,124,7998 +fused_write32s_reset_always,125,7999 +fused_write32s_reset_always,126,8000 +fused_write32s_reset_always,127,7999 +fused_write32s_reset_always,128,7998 +fused_write32s_reset_always,129,7995 +fused_write32s_reset_always,130,8002 +fused_write32s_reset_always,131,7906 +fused_write32s_reset_always,132,8072 +fused_write32s_reset_always,133,8011 +fused_write32s_reset_always,134,8011 +fused_write32s_reset_always,135,7999 +fused_write32s_reset_always,136,7997 +fused_write32s_reset_always,137,8098 +fused_write32s_reset_always,138,7907 +fused_write32s_reset_always,139,7898 +fused_write32s_reset_always,140,7904 +fused_write32s_reset_always,141,7899 +fused_write32s_reset_always,142,7672 +fused_write32s_reset_always,143,7609 +fused_write32s_reset_always,144,8009 +fused_write32s_reset_always,145,7998 +fused_write32s_reset_always,146,7992 +fused_write32s_reset_always,147,8007 +fused_write32s_reset_always,148,8001 +fused_write32s_reset_always,149,8001 +fused_write32s_reset_always,150,8001 +fused_write32s_reset_always,151,7995 +fused_write32s_reset_always,152,7994 +fused_write32s_reset_always,153,8008 +fused_write32s_reset_always,154,7993 +fused_write32s_reset_always,155,8008 +fused_write32s_reset_always,156,8099 +fused_write32s_reset_always,157,7908 +fused_write32s_reset_always,158,7910 +fused_write32s_reset_always,159,8072 +fused_write32s_reset_always,160,8004 +fused_write32s_reset_always,161,7903 +fused_write32s_reset_always,162,8077 +fused_write32s_reset_always,163,8109 +fused_write32s_reset_always,164,7917 +fused_write32s_reset_always,165,7903 +fused_write32s_reset_always,166,7904 +fused_write32s_reset_always,167,7902 +fused_write32s_reset_always,168,7940 +fused_write32s_reset_always,169,7899 +fused_write32s_reset_always,170,7610 +fused_write32s_reset_always,171,7844 +fused_write32s_reset_always,172,7984 +fused_write32s_reset_always,173,8010 +fused_write32s_reset_always,174,7993 +fused_write32s_reset_always,175,7995 +fused_write32s_reset_always,176,8001 +fused_write32s_reset_always,177,8007 +fused_write32s_reset_always,178,7996 +fused_write32s_reset_always,179,7994 +fused_write32s_reset_always,180,8109 +fused_write32s_reset_always,181,7967 +fused_write32s_reset_always,182,7912 +fused_write32s_reset_always,183,7621 +fused_write32s_reset_always,184,7593 +fused_write32s_reset_always,185,7583 +fused_write32s_reset_always,186,7582 +fused_write32s_reset_always,187,7585 +fused_write32s_reset_always,188,7906 +fused_write32s_reset_always,189,7899 +fused_write32s_reset_always,190,7905 +fused_write32s_reset_always,191,7902 +fused_write32s_reset_always,192,7862 +fused_write32s_reset_always,193,7594 +fused_write32s_reset_always,194,7968 +fused_write32s_reset_always,195,8013 +fused_write32s_reset_always,196,7989 +fused_write32s_reset_always,197,7995 +fused_write32s_reset_always,198,7997 +fused_write32s_reset_always,199,8005 +fused_write32s_reset_always,200,8001 +fused_write32s_reset_always,201,7997 +fused_write32s_reset_always,202,8000 +fused_write32s_reset_always,203,8003 +fused_write32s_reset_always,204,7996 +fused_write32s_reset_always,205,8003 +fused_write32s_reset_always,206,7993 +fused_write32s_reset_always,207,8002 +fused_write32s_reset_always,208,8098 +fused_write32s_reset_always,209,7993 +fused_write32s_reset_always,210,7909 +fused_write32s_reset_always,211,7995 +fused_write32s_reset_always,212,8001 +fused_write32s_reset_always,213,7997 +fused_write32s_reset_always,214,8004 +fused_write32s_reset_always,215,7996 +fused_write32s_reset_always,216,7998 +fused_write32s_reset_always,217,8006 +fused_write32s_reset_always,218,8092 +fused_write32s_reset_always,219,7897 +fused_write32s_reset_always,220,8006 +fused_write32s_reset_always,221,7999 +fused_write32s_reset_always,222,8001 +fused_write32s_reset_always,223,8002 +fused_write32s_reset_always,224,7998 +fused_write32s_reset_always,225,8095 +fused_write32s_reset_always,226,7895 +fused_write32s_reset_always,227,8005 +fused_write32s_reset_always,228,8000 +fused_write32s_reset_always,229,7999 +fused_write32s_reset_always,230,8003 +fused_write32s_reset_always,231,7998 +fused_write32s_reset_always,232,8004 +fused_write32s_reset_always,233,7996 +fused_write32s_reset_always,234,8091 +fused_write32s_reset_always,235,7907 +fused_write32s_reset_always,236,7906 +fused_write32s_reset_always,237,7906 +fused_write32s_reset_always,238,7904 +fused_write32s_reset_always,239,7918 +fused_write32s_reset_always,240,7588 +fused_write32s_reset_always,241,7587 +fused_write32s_reset_always,242,7588 +fused_write32s_reset_always,243,7588 +fused_write32s_reset_always,244,7583 +fused_write32s_reset_always,245,7579 +fused_write32s_reset_always,246,7584 +fused_write32s_reset_always,247,7580 +fused_write32s_reset_always,248,7586 +fused_write32s_reset_always,249,7586 +fused_write32s_reset_always,250,7590 +fused_write32s_reset_always,251,7592 +fused_write32s_reset_always,252,7592 +fused_write32s_reset_always,253,7586 +fused_write32s_reset_always,254,7580 +fused_write32s_reset_always,255,7596 +fused_write32s_reset_always,256,7575 +fused_write32s_reset_always,257,7566 +fused_write32s_reset_always,258,7566 +fused_write32s_reset_always,259,7566 +fused_write32s_reset_always,260,7569 +fused_write32s_reset_always,261,7573 +fused_write32s_reset_always,262,7565 +fused_write32s_reset_always,263,7569 +fused_write32s_reset_always,264,7568 +fused_write32s_reset_always,265,7568 +fused_write32s_reset_always,266,7565 +fused_write32s_reset_always,267,7571 +fused_write32s_reset_always,268,7573 +fused_write32s_reset_always,269,7579 +fused_write32s_reset_always,270,7565 +fused_write32s_reset_always,271,7570 +fused_write32s_reset_always,272,7569 +fused_write32s_reset_always,273,7570 +fused_write32s_reset_always,274,7568 +fused_write32s_reset_always,275,7568 +fused_write32s_reset_always,276,7568 +fused_write32s_reset_always,277,7567 +fused_write32s_reset_always,278,7569 +fused_write32s_reset_always,279,7568 +fused_write32s_reset_always,280,7568 +fused_write32s_reset_always,281,7569 +fused_write32s_reset_always,282,7569 +fused_write32s_reset_always,283,7569 +fused_write32s_reset_always,284,7571 +fused_write32s_reset_always,285,7570 +fused_write32s_reset_always,286,7573 +fused_write32s_reset_always,287,7569 +fused_write32s_reset_always,288,7570 +fused_write32s_reset_always,289,7568 +fused_write32s_reset_always,290,7567 +fused_write32s_reset_always,291,7569 +fused_write32s_reset_always,292,7566 +fused_write32s_reset_always,293,7570 +fused_write32s_reset_always,294,7567 +fused_write32s_reset_always,295,7569 +fused_write32s_reset_always,296,7575 +fused_write32s_reset_always,297,7565 +fused_write32s_reset_always,298,7569 +fused_write32s_reset_always,299,7567 +fused_write32s_reset_always,300,7568 +fused_write32s_reset_always,301,7570 +fused_write32s_reset_always,302,7570 +fused_write32s_reset_always,303,7570 +fused_write32s_reset_always,304,7569 +fused_write32s_reset_always,305,7568 +fused_write32s_reset_always,306,7571 +fused_write32s_reset_always,307,7569 +fused_write32s_reset_always,308,7569 +fused_write32s_reset_always,309,7572 +fused_write32s_reset_always,310,7570 +fused_write32s_reset_always,311,7570 +fused_write32s_reset_always,312,7570 +fused_write32s_reset_always,313,7573 +fused_write32s_reset_always,314,7569 +fused_write32s_reset_always,315,7566 +fused_write32s_reset_always,316,7569 +fused_write32s_reset_always,317,7566 +fused_write32s_reset_always,318,7568 +fused_write32s_reset_always,319,7569 +fused_write32s_reset_always,320,7570 +fused_write32s_reset_always,321,7568 +fused_write32s_reset_always,322,7568 +fused_write32s_reset_always,323,7569 +fused_write32s_reset_always,324,7569 +fused_write32s_reset_always,325,7568 +fused_write32s_reset_always,326,7567 +fused_write32s_reset_always,327,7573 +fused_write32s_reset_always,328,7562 +fused_write32s_reset_always,329,7555 +fused_write32s_reset_always,330,7557 +fused_write32s_reset_always,331,7558 +fused_write32s_reset_always,332,7557 +fused_write32s_reset_always,333,7558 +fused_write32s_reset_always,334,7561 +fused_write32s_reset_always,335,7563 +fused_write32s_reset_always,336,7560 +fused_write32s_reset_always,337,7555 +fused_write32s_reset_always,338,7557 +fused_write32s_reset_always,339,7561 +fused_write32s_reset_always,340,7570 +fused_write32s_reset_always,341,7571 +fused_write32s_reset_always,342,7558 +fused_write32s_reset_always,343,7558 +fused_write32s_reset_always,344,7559 +fused_write32s_reset_always,345,7567 +fused_write32s_reset_always,346,7559 +fused_write32s_reset_always,347,7568 +fused_write32s_reset_always,348,7569 +fused_write32s_reset_always,349,7567 +fused_write32s_reset_always,350,7566 +fused_write32s_reset_always,351,7568 +fused_write32s_reset_always,352,7569 +fused_write32s_reset_always,353,7570 +fused_write32s_reset_always,354,7566 +fused_write32s_reset_always,355,7567 +fused_write32s_reset_always,356,7568 +fused_write32s_reset_always,357,7569 +fused_write32s_reset_always,358,7570 +fused_write32s_reset_always,359,7595 +fused_write32s_reset_always,360,7621 +fused_write32s_reset_always,361,7592 +fused_write32s_reset_always,362,7574 +fused_write32s_reset_always,363,7581 +fused_write32s_reset_always,364,7584 +fused_write32s_reset_always,365,7585 +fused_write32s_reset_always,366,7583 +fused_write32s_reset_always,367,7583 +fused_write32s_reset_always,368,7577 +fused_write32s_reset_always,369,7601 +fused_write32s_reset_always,370,7562 +fused_write32s_reset_always,371,7567 +fused_write32s_reset_always,372,7567 +fused_write32s_reset_always,373,7567 +fused_write32s_reset_always,374,7571 +fused_write32s_reset_always,375,7567 +fused_write32s_reset_always,376,7570 +fused_write32s_reset_always,377,7565 +fused_write32s_reset_always,378,7572 +fused_write32s_reset_always,379,7570 +fused_write32s_reset_always,380,7572 +fused_write32s_reset_always,381,7566 +fused_write32s_reset_always,382,7568 +fused_write32s_reset_always,383,7567 +fused_write32s_reset_always,384,7568 +fused_write32s_reset_always,385,7571 +fused_write32s_reset_always,386,7569 +fused_write32s_reset_always,387,7570 +fused_write32s_reset_always,388,7566 +fused_write32s_reset_always,389,7565 +fused_write32s_reset_always,390,7570 +fused_write32s_reset_always,391,7560 +fused_write32s_reset_always,392,7559 +fused_write32s_reset_always,393,7572 +fused_write32s_reset_always,394,7569 +fused_write32s_reset_always,395,7566 +fused_write32s_reset_always,396,7568 +fused_write32s_reset_always,397,7569 +fused_write32s_reset_always,398,7570 +fused_write32s_reset_always,399,7571 +fused_write32s_reset_always,400,7569 +fused_write32s_reset_always,401,7566 +fused_write32s_reset_always,402,7571 +fused_write32s_reset_always,403,7570 +fused_write32s_reset_always,404,7569 +fused_write32s_reset_always,405,7570 +fused_write32s_reset_always,406,7567 +fused_write32s_reset_always,407,7572 +fused_write32s_reset_always,408,7576 +fused_write32s_reset_always,409,7564 +fused_write32s_reset_always,410,7573 +fused_write32s_reset_always,411,7566 +fused_write32s_reset_always,412,7569 +fused_write32s_reset_always,413,7568 +fused_write32s_reset_always,414,7570 +fused_write32s_reset_always,415,7567 +fused_write32s_reset_always,416,7570 +fused_write32s_reset_always,417,7567 +fused_write32s_reset_always,418,7568 +fused_write32s_reset_always,419,7568 +fused_write32s_reset_always,420,7569 +fused_write32s_reset_always,421,7568 +fused_write32s_reset_always,422,7566 +fused_write32s_reset_always,423,7569 +fused_write32s_reset_always,424,7568 +fused_write32s_reset_always,425,7571 +fused_write32s_reset_always,426,7556 +fused_write32s_reset_always,427,7575 +fused_write32s_reset_always,428,7567 +fused_write32s_reset_always,429,7566 +fused_write32s_reset_always,430,7574 +fused_write32s_reset_always,431,7569 +fused_write32s_reset_always,432,7568 +fused_write32s_reset_always,433,7566 +fused_write32s_reset_always,434,7562 +fused_write32s_reset_always,435,7568 +fused_write32s_reset_always,436,7567 +fused_write32s_reset_always,437,7572 +fused_write32s_reset_always,438,7569 +fused_write32s_reset_always,439,7565 +fused_write32s_reset_always,440,7566 +fused_write32s_reset_always,441,7575 +fused_write32s_reset_always,442,7565 +fused_write32s_reset_always,443,7568 +fused_write32s_reset_always,444,7567 +fused_write32s_reset_always,445,7570 +fused_write32s_reset_always,446,7565 +fused_write32s_reset_always,447,7569 +fused_write32s_reset_always,448,7569 +fused_write32s_reset_always,449,7568 +fused_write32s_reset_always,450,7569 +fused_write32s_reset_always,451,7569 +fused_write32s_reset_always,452,7569 +fused_write32s_reset_always,453,7567 +fused_write32s_reset_always,454,7568 +fused_write32s_reset_always,455,7567 +fused_write32s_reset_always,456,7572 +fused_write32s_reset_always,457,7566 +fused_write32s_reset_always,458,7561 +fused_write32s_reset_always,459,7559 +fused_write32s_reset_always,460,7561 +fused_write32s_reset_always,461,7559 +fused_write32s_reset_always,462,7560 +fused_write32s_reset_always,463,7571 +fused_write32s_reset_always,464,7569 +fused_write32s_reset_always,465,7572 +fused_write32s_reset_always,466,7561 +fused_write32s_reset_always,467,7561 +fused_write32s_reset_always,468,7556 +fused_write32s_reset_always,469,7554 +fused_write32s_reset_always,470,7569 +fused_write32s_reset_always,471,7567 +fused_write32s_reset_always,472,7567 +fused_write32s_reset_always,473,7571 +fused_write32s_reset_always,474,7568 +fused_write32s_reset_always,475,7562 +fused_write32s_reset_always,476,7568 +fused_write32s_reset_always,477,7567 +fused_write32s_reset_always,478,7568 +fused_write32s_reset_always,479,7570 +fused_write32s_reset_always,480,7570 +fused_write32s_reset_always,481,7573 +fused_write32s_reset_always,482,7569 +fused_write32s_reset_always,483,7566 +fused_write32s_reset_always,484,7565 +fused_write32s_reset_always,485,7567 +fused_write32s_reset_always,486,7568 +fused_write32s_reset_always,487,7567 +fused_write32s_reset_always,488,7568 +fused_write32s_reset_always,489,7572 +fused_write32s_reset_always,490,7571 +fused_write32s_reset_always,491,7580 +fused_write32s_reset_always,492,7567 +fused_write32s_reset_always,493,7566 +fused_write32s_reset_always,494,7569 +fused_write32s_reset_always,495,7569 +fused_write32s_reset_always,496,7569 +fused_write32s_reset_always,497,7567 +fused_write32s_reset_always,498,7569 +fused_write32s_reset_always,499,7569 +fused_write32s_reset_always,500,7566 +fused_write32s_reset_always,501,7566 +fused_write32s_reset_always,502,7573 +fused_write32s_reset_always,503,7568 +fused_write32s_reset_always,504,7567 +fused_write32s_reset_always,505,7566 +fused_write32s_reset_always,506,7568 +fused_write32s_reset_always,507,7577 +fused_write32s_reset_always,508,7570 +fused_write32s_reset_always,509,7567 +fused_write32s_reset_always,510,7569 +fused_write32s_reset_always,511,7572 +fused_write32s_reset_always,512,7568 +fused_write32s_reset_always,513,7564 +fused_write32s_reset_always,514,7571 +fused_write32s_reset_always,515,7568 +fused_write32s_reset_always,516,7566 +fused_write32s_reset_always,517,7569 +fused_write32s_reset_always,518,7570 +fused_write32s_reset_always,519,7570 +fused_write32s_reset_always,520,7568 +fused_write32s_reset_always,521,7570 +fused_write32s_reset_always,522,7570 +fused_write32s_reset_always,523,7566 +fused_write32s_reset_always,524,7569 +fused_write32s_reset_always,525,7569 +fused_write32s_reset_always,526,7568 +fused_write32s_reset_always,527,7571 +fused_write32s_reset_always,528,7566 +fused_write32s_reset_always,529,7567 +fused_write32s_reset_always,530,7565 +fused_write32s_reset_always,531,7569 +fused_write32s_reset_always,532,7568 +fused_write32s_reset_always,533,7569 +fused_write32s_reset_always,534,7568 +fused_write32s_reset_always,535,7568 +fused_write32s_reset_always,536,7568 +fused_write32s_reset_always,537,7568 +fused_write32s_reset_always,538,7569 +fused_write32s_reset_always,539,7568 +fused_write32s_reset_always,540,7568 +fused_write32s_reset_always,541,7570 +fused_write32s_reset_always,542,7570 +fused_write32s_reset_always,543,7568 +fused_write32s_reset_always,544,7567 +fused_write32s_reset_always,545,7568 +fused_write32s_reset_always,546,7570 +fused_write32s_reset_always,547,7572 +fused_write32s_reset_always,548,7566 +fused_write32s_reset_always,549,7567 +fused_write32s_reset_always,550,7568 +fused_write32s_reset_always,551,7570 +fused_write32s_reset_always,552,7567 +fused_write32s_reset_always,553,7572 +fused_write32s_reset_always,554,7567 +fused_write32s_reset_always,555,7566 +fused_write32s_reset_always,556,7569 +fused_write32s_reset_always,557,7566 +fused_write32s_reset_always,558,7568 +fused_write32s_reset_always,559,7569 +fused_write32s_reset_always,560,7570 +fused_write32s_reset_always,561,7570 +fused_write32s_reset_always,562,7568 +fused_write32s_reset_always,563,7567 +fused_write32s_reset_always,564,7567 +fused_write32s_reset_always,565,7565 +fused_write32s_reset_always,566,7570 +fused_write32s_reset_always,567,7567 +fused_write32s_reset_always,568,7569 +fused_write32s_reset_always,569,7566 +fused_write32s_reset_always,570,7569 +fused_write32s_reset_always,571,7567 +fused_write32s_reset_always,572,7569 +fused_write32s_reset_always,573,7570 +fused_write32s_reset_always,574,7573 +fused_write32s_reset_always,575,7568 +fused_write32s_reset_always,576,7569 +fused_write32s_reset_always,577,7568 +fused_write32s_reset_always,578,7570 +fused_write32s_reset_always,579,7572 +fused_write32s_reset_always,580,7585 +fused_write32s_reset_always,581,7568 +fused_write32s_reset_always,582,7568 +fused_write32s_reset_always,583,7572 +fused_write32s_reset_always,584,7567 +fused_write32s_reset_always,585,7569 +fused_write32s_reset_always,586,7573 +fused_write32s_reset_always,587,7567 +fused_write32s_reset_always,588,7566 +fused_write32s_reset_always,589,7572 +fused_write32s_reset_always,590,7572 +fused_write32s_reset_always,591,7572 +fused_write32s_reset_always,592,7566 +fused_write32s_reset_always,593,7568 +fused_write32s_reset_always,594,7572 +fused_write32s_reset_always,595,7567 +fused_write32s_reset_always,596,7570 +fused_write32s_reset_always,597,7568 +fused_write32s_reset_always,598,7569 +fused_write32s_reset_always,599,7570 +fused_write32s_reset_always,600,7572 +fused_write32s_reset_always,601,7566 +fused_write32s_reset_always,602,7569 +fused_write32s_reset_always,603,7566 +fused_write32s_reset_always,604,7565 +fused_write32s_reset_always,605,7568 +fused_write32s_reset_always,606,7567 +fused_write32s_reset_always,607,7569 +fused_write32s_reset_always,608,7570 +fused_write32s_reset_always,609,7573 +fused_write32s_reset_always,610,7568 +fused_write32s_reset_always,611,7568 +fused_write32s_reset_always,612,7567 +fused_write32s_reset_always,613,7575 +fused_write32s_reset_always,614,7567 +fused_write32s_reset_always,615,7569 +fused_write32s_reset_always,616,7573 +fused_write32s_reset_always,617,7567 +fused_write32s_reset_always,618,7567 +fused_write32s_reset_always,619,7567 +fused_write32s_reset_always,620,7568 +fused_write32s_reset_always,621,7567 +fused_write32s_reset_always,622,7568 +fused_write32s_reset_always,623,7565 +fused_write32s_reset_always,624,7569 +fused_write32s_reset_always,625,7567 +fused_write32s_reset_always,626,7570 +fused_write32s_reset_always,627,7567 +fused_write32s_reset_always,628,7566 +fused_write32s_reset_always,629,7568 +fused_write32s_reset_always,630,7568 +fused_write32s_reset_always,631,7565 +fused_write32s_reset_always,632,7570 +fused_write32s_reset_always,633,7567 +fused_write32s_reset_always,634,7568 +fused_write32s_reset_always,635,7569 +fused_write32s_reset_always,636,7568 +fused_write32s_reset_always,637,7568 +fused_write32s_reset_always,638,7569 +fused_write32s_reset_always,639,7567 +fused_write32s_reset_always,640,7570 +fused_write32s_reset_always,641,7568 +fused_write32s_reset_always,642,7566 +fused_write32s_reset_always,643,7567 +fused_write32s_reset_always,644,7568 +fused_write32s_reset_always,645,7569 +fused_write32s_reset_always,646,7569 +fused_write32s_reset_always,647,7567 +fused_write32s_reset_always,648,7569 +fused_write32s_reset_always,649,7569 +fused_write32s_reset_always,650,7569 +fused_write32s_reset_always,651,7567 +fused_write32s_reset_always,652,7567 +fused_write32s_reset_always,653,7568 +fused_write32s_reset_always,654,7569 +fused_write32s_reset_always,655,7569 +fused_write32s_reset_always,656,7568 +fused_write32s_reset_always,657,7571 +fused_write32s_reset_always,658,7571 +fused_write32s_reset_always,659,7569 +fused_write32s_reset_always,660,7567 +fused_write32s_reset_always,661,7571 +fused_write32s_reset_always,662,7567 +fused_write32s_reset_always,663,7571 +fused_write32s_reset_always,664,7569 +fused_write32s_reset_always,665,7569 +fused_write32s_reset_always,666,7567 +fused_write32s_reset_always,667,7568 +fused_write32s_reset_always,668,7569 +fused_write32s_reset_always,669,7565 +fused_write32s_reset_always,670,7566 +fused_write32s_reset_always,671,7569 +fused_write32s_reset_always,672,7572 +fused_write32s_reset_always,673,7569 +fused_write32s_reset_always,674,7569 +fused_write32s_reset_always,675,7571 +fused_write32s_reset_always,676,7572 +fused_write32s_reset_always,677,7566 +fused_write32s_reset_always,678,7567 +fused_write32s_reset_always,679,7568 +fused_write32s_reset_always,680,7571 +fused_write32s_reset_always,681,7569 +fused_write32s_reset_always,682,7571 +fused_write32s_reset_always,683,7569 +fused_write32s_reset_always,684,7567 +fused_write32s_reset_always,685,7565 +fused_write32s_reset_always,686,7568 +fused_write32s_reset_always,687,7567 +fused_write32s_reset_always,688,7568 +fused_write32s_reset_always,689,7570 +fused_write32s_reset_always,690,7564 +fused_write32s_reset_always,691,7567 +fused_write32s_reset_always,692,7569 +fused_write32s_reset_always,693,7568 +fused_write32s_reset_always,694,7571 +fused_write32s_reset_always,695,7567 +fused_write32s_reset_always,696,7567 +fused_write32s_reset_always,697,7569 +fused_write32s_reset_always,698,7572 +fused_write32s_reset_always,699,7566 +fused_write32s_reset_always,700,7569 +fused_write32s_reset_always,701,7568 +fused_write32s_reset_always,702,7569 +fused_write32s_reset_always,703,7569 +fused_write32s_reset_always,704,7569 +fused_write32s_reset_always,705,7568 +fused_write32s_reset_always,706,7567 +fused_write32s_reset_always,707,7568 +fused_write32s_reset_always,708,7569 +fused_write32s_reset_always,709,7568 +fused_write32s_reset_always,710,7572 +fused_write32s_reset_always,711,7570 +fused_write32s_reset_always,712,7566 +fused_write32s_reset_always,713,7569 +fused_write32s_reset_always,714,7569 +fused_write32s_reset_always,715,7568 +fused_write32s_reset_always,716,7569 +fused_write32s_reset_always,717,7566 +fused_write32s_reset_always,718,7570 +fused_write32s_reset_always,719,7569 +fused_write32s_reset_always,720,7569 +fused_write32s_reset_always,721,7566 +fused_write32s_reset_always,722,7567 +fused_write32s_reset_always,723,7569 +fused_write32s_reset_always,724,7569 +fused_write32s_reset_always,725,7569 +fused_write32s_reset_always,726,7571 +fused_write32s_reset_always,727,7564 +fused_write32s_reset_always,728,7567 +fused_write32s_reset_always,729,7567 +fused_write32s_reset_always,730,7574 +fused_write32s_reset_always,731,7568 +fused_write32s_reset_always,732,7576 +fused_write32s_reset_always,733,7569 +fused_write32s_reset_always,734,7565 +fused_write32s_reset_always,735,7565 +fused_write32s_reset_always,736,7569 +fused_write32s_reset_always,737,7568 +fused_write32s_reset_always,738,7566 +fused_write32s_reset_always,739,7570 +fused_write32s_reset_always,740,7570 +fused_write32s_reset_always,741,7570 +fused_write32s_reset_always,742,7569 +fused_write32s_reset_always,743,7566 +fused_write32s_reset_always,744,7567 +fused_write32s_reset_always,745,7568 +fused_write32s_reset_always,746,7566 +fused_write32s_reset_always,747,7565 +fused_write32s_reset_always,748,7568 +fused_write32s_reset_always,749,7571 +fused_write32s_reset_always,750,7566 +fused_write32s_reset_always,751,7574 +fused_write32s_reset_always,752,7570 +fused_write32s_reset_always,753,7571 +fused_write32s_reset_always,754,7572 +fused_write32s_reset_always,755,7560 +fused_write32s_reset_always,756,7566 +fused_write32s_reset_always,757,7567 +fused_write32s_reset_always,758,7565 +fused_write32s_reset_always,759,7566 +fused_write32s_reset_always,760,7565 +fused_write32s_reset_always,761,7567 +fused_write32s_reset_always,762,7569 +fused_write32s_reset_always,763,7566 +fused_write32s_reset_always,764,7566 +fused_write32s_reset_always,765,7569 +fused_write32s_reset_always,766,7566 +fused_write32s_reset_always,767,7567 +fused_write32s_reset_always,768,7565 +fused_write32s_reset_always,769,7564 +fused_write32s_reset_always,770,7567 +fused_write32s_reset_always,771,7577 +fused_write32s_reset_always,772,7564 +fused_write32s_reset_always,773,7564 +fused_write32s_reset_always,774,7573 +fused_write32s_reset_always,775,7565 +fused_write32s_reset_always,776,7565 +fused_write32s_reset_always,777,7571 +fused_write32s_reset_always,778,7572 +fused_write32s_reset_always,779,7567 +fused_write32s_reset_always,780,7565 +fused_write32s_reset_always,781,7565 +fused_write32s_reset_always,782,7564 +fused_write32s_reset_always,783,7565 +fused_write32s_reset_always,784,7567 +fused_write32s_reset_always,785,7564 +fused_write32s_reset_always,786,7564 +fused_write32s_reset_always,787,7565 +fused_write32s_reset_always,788,7565 +fused_write32s_reset_always,789,7569 +fused_write32s_reset_always,790,7568 +fused_write32s_reset_always,791,7565 +fused_write32s_reset_always,792,7572 +fused_write32s_reset_always,793,7568 +fused_write32s_reset_always,794,7565 +fused_write32s_reset_always,795,7567 +fused_write32s_reset_always,796,7569 +fused_write32s_reset_always,797,7565 +fused_write32s_reset_always,798,7570 +fused_write32s_reset_always,799,7566 +fused_write32s_reset_always,800,7565 +fused_write32s_reset_always,801,7567 +fused_write32s_reset_always,802,7565 +fused_write32s_reset_always,803,7569 +fused_write32s_reset_always,804,7564 +fused_write32s_reset_always,805,7565 +fused_write32s_reset_always,806,7567 +fused_write32s_reset_always,807,7569 +fused_write32s_reset_always,808,7566 +fused_write32s_reset_always,809,7568 +fused_write32s_reset_always,810,7571 +fused_write32s_reset_always,811,7577 +fused_write32s_reset_always,812,7568 +fused_write32s_reset_always,813,7566 +fused_write32s_reset_always,814,7564 +fused_write32s_reset_always,815,7568 +fused_write32s_reset_always,816,7571 +fused_write32s_reset_always,817,7565 +fused_write32s_reset_always,818,7567 +fused_write32s_reset_always,819,7566 +fused_write32s_reset_always,820,7571 +fused_write32s_reset_always,821,7568 +fused_write32s_reset_always,822,7566 +fused_write32s_reset_always,823,7565 +fused_write32s_reset_always,824,7568 +fused_write32s_reset_always,825,7568 +fused_write32s_reset_always,826,7570 +fused_write32s_reset_always,827,7568 +fused_write32s_reset_always,828,7567 +fused_write32s_reset_always,829,7568 +fused_write32s_reset_always,830,7569 +fused_write32s_reset_always,831,7570 +fused_write32s_reset_always,832,7567 +fused_write32s_reset_always,833,7569 +fused_write32s_reset_always,834,7570 +fused_write32s_reset_always,835,7567 +fused_write32s_reset_always,836,7569 +fused_write32s_reset_always,837,7568 +fused_write32s_reset_always,838,7570 +fused_write32s_reset_always,839,7565 +fused_write32s_reset_always,840,7567 +fused_write32s_reset_always,841,7569 +fused_write32s_reset_always,842,7570 +fused_write32s_reset_always,843,7567 +fused_write32s_reset_always,844,7568 +fused_write32s_reset_always,845,7570 +fused_write32s_reset_always,846,7566 +fused_write32s_reset_always,847,7569 +fused_write32s_reset_always,848,7567 +fused_write32s_reset_always,849,7572 +fused_write32s_reset_always,850,7566 +fused_write32s_reset_always,851,7569 +fused_write32s_reset_always,852,7572 +fused_write32s_reset_always,853,7569 +fused_write32s_reset_always,854,7566 +fused_write32s_reset_always,855,7570 +fused_write32s_reset_always,856,7569 +fused_write32s_reset_always,857,7567 +fused_write32s_reset_always,858,7569 +fused_write32s_reset_always,859,7569 +fused_write32s_reset_always,860,7569 +fused_write32s_reset_always,861,7570 +fused_write32s_reset_always,862,7568 +fused_write32s_reset_always,863,7567 +fused_write32s_reset_always,864,7566 +fused_write32s_reset_always,865,7566 +fused_write32s_reset_always,866,7570 +fused_write32s_reset_always,867,7566 +fused_write32s_reset_always,868,7569 +fused_write32s_reset_always,869,7568 +fused_write32s_reset_always,870,7566 +fused_write32s_reset_always,871,7569 +fused_write32s_reset_always,872,7567 +fused_write32s_reset_always,873,7567 +fused_write32s_reset_always,874,7569 +fused_write32s_reset_always,875,7566 +fused_write32s_reset_always,876,7568 +fused_write32s_reset_always,877,7571 +fused_write32s_reset_always,878,7570 +fused_write32s_reset_always,879,7571 +fused_write32s_reset_always,880,7568 +fused_write32s_reset_always,881,7569 +fused_write32s_reset_always,882,7569 +fused_write32s_reset_always,883,7568 +fused_write32s_reset_always,884,7566 +fused_write32s_reset_always,885,7568 +fused_write32s_reset_always,886,7565 +fused_write32s_reset_always,887,7569 +fused_write32s_reset_always,888,7569 +fused_write32s_reset_always,889,7568 +fused_write32s_reset_always,890,7569 +fused_write32s_reset_always,891,7566 +fused_write32s_reset_always,892,7566 +fused_write32s_reset_always,893,7567 +fused_write32s_reset_always,894,7568 +fused_write32s_reset_always,895,7567 +fused_write32s_reset_always,896,7569 +fused_write32s_reset_always,897,7570 +fused_write32s_reset_always,898,7571 +fused_write32s_reset_always,899,7566 +fused_write32s_reset_always,900,7569 +fused_write32s_reset_always,901,7567 +fused_write32s_reset_always,902,7569 +fused_write32s_reset_always,903,7568 +fused_write32s_reset_always,904,7568 +fused_write32s_reset_always,905,7568 +fused_write32s_reset_always,906,7567 +fused_write32s_reset_always,907,7568 +fused_write32s_reset_always,908,7568 +fused_write32s_reset_always,909,7567 +fused_write32s_reset_always,910,7568 +fused_write32s_reset_always,911,7570 +fused_write32s_reset_always,912,7567 +fused_write32s_reset_always,913,7577 +fused_write32s_reset_always,914,7567 +fused_write32s_reset_always,915,7576 +fused_write32s_reset_always,916,7581 +fused_write32s_reset_always,917,7578 +fused_write32s_reset_always,918,7572 +fused_write32s_reset_always,919,7563 +fused_write32s_reset_always,920,7564 +fused_write32s_reset_always,921,7569 +fused_write32s_reset_always,922,7562 +fused_write32s_reset_always,923,7566 +fused_write32s_reset_always,924,7567 +fused_write32s_reset_always,925,7567 +fused_write32s_reset_always,926,7565 +fused_write32s_reset_always,927,7566 +fused_write32s_reset_always,928,7567 +fused_write32s_reset_always,929,7564 +fused_write32s_reset_always,930,7565 +fused_write32s_reset_always,931,7566 +fused_write32s_reset_always,932,7565 +fused_write32s_reset_always,933,7565 +fused_write32s_reset_always,934,7568 +fused_write32s_reset_always,935,7568 +fused_write32s_reset_always,936,7569 +fused_write32s_reset_always,937,7565 +fused_write32s_reset_always,938,7568 +fused_write32s_reset_always,939,7563 +fused_write32s_reset_always,940,7566 +fused_write32s_reset_always,941,7565 +fused_write32s_reset_always,942,7570 +fused_write32s_reset_always,943,7564 +fused_write32s_reset_always,944,7566 +fused_write32s_reset_always,945,7566 +fused_write32s_reset_always,946,7565 +fused_write32s_reset_always,947,7566 +fused_write32s_reset_always,948,7564 +fused_write32s_reset_always,949,7564 +fused_write32s_reset_always,950,7565 +fused_write32s_reset_always,951,7565 +fused_write32s_reset_always,952,7564 +fused_write32s_reset_always,953,7568 +fused_write32s_reset_always,954,7564 +fused_write32s_reset_always,955,7567 +fused_write32s_reset_always,956,7565 +fused_write32s_reset_always,957,7565 +fused_write32s_reset_always,958,7566 +fused_write32s_reset_always,959,7568 +fused_write32s_reset_always,960,7574 +fused_write32s_reset_always,961,7567 +fused_write32s_reset_always,962,7571 +fused_write32s_reset_always,963,7569 +fused_write32s_reset_always,964,7569 +fused_write32s_reset_always,965,7570 +fused_write32s_reset_always,966,7565 +fused_write32s_reset_always,967,7568 +fused_write32s_reset_always,968,7570 +fused_write32s_reset_always,969,7565 +fused_write32s_reset_always,970,7570 +fused_write32s_reset_always,971,7569 +fused_write32s_reset_always,972,7568 +fused_write32s_reset_always,973,7568 +fused_write32s_reset_always,974,7568 +fused_write32s_reset_always,975,7565 +fused_write32s_reset_always,976,7569 +fused_write32s_reset_always,977,7567 +fused_write32s_reset_always,978,7568 +fused_write32s_reset_always,979,7570 +fused_write32s_reset_always,980,7568 +fused_write32s_reset_always,981,7566 +fused_write32s_reset_always,982,7568 +fused_write32s_reset_always,983,7576 +fused_write32s_reset_always,984,7567 +fused_write32s_reset_always,985,7565 +fused_write32s_reset_always,986,7569 +fused_write32s_reset_always,987,7566 +fused_write32s_reset_always,988,7568 +fused_write32s_reset_always,989,7568 +fused_write32s_reset_always,990,7569 +fused_write32s_reset_always,991,7566 +fused_write32s_reset_always,992,7567 +fused_write32s_reset_always,993,7568 +fused_write32s_reset_always,994,7569 +fused_write32s_reset_always,995,7568 +fused_write32s_reset_always,996,7567 +fused_write32s_reset_always,997,7568 +fused_write32s_reset_always,998,7571 +fused_write32s_reset_always,999,7569 +separate_xclbins,0,5111 +separate_xclbins,1,5066 +separate_xclbins,2,5184 +separate_xclbins,3,5112 +separate_xclbins,4,4993 +separate_xclbins,5,4987 +separate_xclbins,6,4979 +separate_xclbins,7,4988 +separate_xclbins,8,4987 +separate_xclbins,9,4977 +separate_xclbins,10,4980 +separate_xclbins,11,4984 +separate_xclbins,12,4979 +separate_xclbins,13,4983 +separate_xclbins,14,4986 +separate_xclbins,15,4989 +separate_xclbins,16,4978 +separate_xclbins,17,4974 +separate_xclbins,18,4981 +separate_xclbins,19,4975 +separate_xclbins,20,4978 +separate_xclbins,21,4970 +separate_xclbins,22,4971 +separate_xclbins,23,4973 +separate_xclbins,24,4975 +separate_xclbins,25,4983 +separate_xclbins,26,4987 +separate_xclbins,27,4982 +separate_xclbins,28,4974 separate_xclbins,29,4971 -separate_xclbins,30,4963 -separate_xclbins,31,4967 -separate_xclbins,32,4971 -separate_xclbins,33,4968 -separate_xclbins,34,4979 -separate_xclbins,35,4969 -separate_xclbins,36,4965 -separate_xclbins,37,4966 -separate_xclbins,38,4963 -separate_xclbins,39,4963 -separate_xclbins,40,4964 -separate_xclbins,41,4960 -separate_xclbins,42,4978 -separate_xclbins,43,4985 +separate_xclbins,30,4974 +separate_xclbins,31,4976 +separate_xclbins,32,4973 +separate_xclbins,33,4980 +separate_xclbins,34,4972 +separate_xclbins,35,4978 +separate_xclbins,36,4970 +separate_xclbins,37,4971 +separate_xclbins,38,4975 +separate_xclbins,39,4977 +separate_xclbins,40,4973 +separate_xclbins,41,4973 +separate_xclbins,42,4970 +separate_xclbins,43,4972 separate_xclbins,44,4966 -separate_xclbins,45,4961 -separate_xclbins,46,4963 -separate_xclbins,47,4964 -separate_xclbins,48,4961 -separate_xclbins,49,4976 -separate_xclbins,50,4962 -separate_xclbins,51,4961 -separate_xclbins,52,4973 -separate_xclbins,53,4966 +separate_xclbins,45,4968 +separate_xclbins,46,4973 +separate_xclbins,47,4976 +separate_xclbins,48,4976 +separate_xclbins,49,4971 +separate_xclbins,50,4970 +separate_xclbins,51,4971 +separate_xclbins,52,4972 +separate_xclbins,53,4964 separate_xclbins,54,4973 separate_xclbins,55,4976 -separate_xclbins,56,4987 -separate_xclbins,57,4977 -separate_xclbins,58,4968 -separate_xclbins,59,4968 -separate_xclbins,60,4962 -separate_xclbins,61,4970 -separate_xclbins,62,4961 -separate_xclbins,63,4969 -separate_xclbins,64,4966 -separate_xclbins,65,4961 -separate_xclbins,66,4964 -separate_xclbins,67,4961 -separate_xclbins,68,4963 -separate_xclbins,69,4965 -separate_xclbins,70,4965 -separate_xclbins,71,4969 -separate_xclbins,72,4977 -separate_xclbins,73,4996 -separate_xclbins,74,5171 -separate_xclbins,75,5117 -separate_xclbins,76,5019 -separate_xclbins,77,4965 -separate_xclbins,78,4963 -separate_xclbins,79,4968 -separate_xclbins,80,4962 -separate_xclbins,81,4970 -separate_xclbins,82,4974 -separate_xclbins,83,4959 -separate_xclbins,84,4996 -separate_xclbins,85,5142 -separate_xclbins,86,5101 -separate_xclbins,87,5011 -separate_xclbins,88,4968 -separate_xclbins,89,4959 -separate_xclbins,90,4958 -separate_xclbins,91,4967 -separate_xclbins,92,4962 -separate_xclbins,93,5035 -separate_xclbins,94,5025 -separate_xclbins,95,5017 -separate_xclbins,96,5015 -separate_xclbins,97,5020 -separate_xclbins,98,5008 -separate_xclbins,99,5018 -separate_xclbins,100,5018 -separate_xclbins,101,4996 -separate_xclbins,102,4960 -separate_xclbins,103,4960 -separate_xclbins,104,4965 -separate_xclbins,105,4961 -separate_xclbins,106,4995 -separate_xclbins,107,4969 -separate_xclbins,108,4968 -separate_xclbins,109,4969 -separate_xclbins,110,4968 -separate_xclbins,111,4972 -separate_xclbins,112,4987 -separate_xclbins,113,4970 -separate_xclbins,114,4980 -separate_xclbins,115,4968 -separate_xclbins,116,4972 -separate_xclbins,117,4967 -separate_xclbins,118,4983 -separate_xclbins,119,4964 -separate_xclbins,120,4975 -separate_xclbins,121,4964 -separate_xclbins,122,4967 -separate_xclbins,123,4975 -separate_xclbins,124,4973 -separate_xclbins,125,4963 -separate_xclbins,126,4969 +separate_xclbins,56,4971 +separate_xclbins,57,5010 +separate_xclbins,58,5177 +separate_xclbins,59,5130 +separate_xclbins,60,5070 +separate_xclbins,61,4975 +separate_xclbins,62,4979 +separate_xclbins,63,4976 +separate_xclbins,64,4980 +separate_xclbins,65,4974 +separate_xclbins,66,4968 +separate_xclbins,67,4968 +separate_xclbins,68,4972 +separate_xclbins,69,4979 +separate_xclbins,70,4974 +separate_xclbins,71,4970 +separate_xclbins,72,4960 +separate_xclbins,73,4967 +separate_xclbins,74,4968 +separate_xclbins,75,4971 +separate_xclbins,76,4975 +separate_xclbins,77,4972 +separate_xclbins,78,4967 +separate_xclbins,79,4970 +separate_xclbins,80,4974 +separate_xclbins,81,4973 +separate_xclbins,82,4972 +separate_xclbins,83,4977 +separate_xclbins,84,4973 +separate_xclbins,85,4969 +separate_xclbins,86,4972 +separate_xclbins,87,4978 +separate_xclbins,88,4981 +separate_xclbins,89,4966 +separate_xclbins,90,4972 +separate_xclbins,91,4972 +separate_xclbins,92,4972 +separate_xclbins,93,4975 +separate_xclbins,94,4970 +separate_xclbins,95,4972 +separate_xclbins,96,4971 +separate_xclbins,97,4966 +separate_xclbins,98,4974 +separate_xclbins,99,4965 +separate_xclbins,100,4972 +separate_xclbins,101,4973 +separate_xclbins,102,4970 +separate_xclbins,103,4970 +separate_xclbins,104,4970 +separate_xclbins,105,4981 +separate_xclbins,106,4962 +separate_xclbins,107,4972 +separate_xclbins,108,4975 +separate_xclbins,109,4972 +separate_xclbins,110,4973 +separate_xclbins,111,4974 +separate_xclbins,112,4975 +separate_xclbins,113,4974 +separate_xclbins,114,4975 +separate_xclbins,115,4973 +separate_xclbins,116,4970 +separate_xclbins,117,4968 +separate_xclbins,118,4975 +separate_xclbins,119,4970 +separate_xclbins,120,5142 +separate_xclbins,121,5084 +separate_xclbins,122,4997 +separate_xclbins,123,5031 +separate_xclbins,124,5085 +separate_xclbins,125,5036 +separate_xclbins,126,4970 separate_xclbins,127,4974 -separate_xclbins,128,4967 -separate_xclbins,129,4964 -separate_xclbins,130,4965 -separate_xclbins,131,4965 -separate_xclbins,132,4974 -separate_xclbins,133,4963 -separate_xclbins,134,4976 -separate_xclbins,135,4966 -separate_xclbins,136,4964 -separate_xclbins,137,4970 -separate_xclbins,138,4968 -separate_xclbins,139,4965 -separate_xclbins,140,4967 -separate_xclbins,141,4962 -separate_xclbins,142,4966 -separate_xclbins,143,4964 -separate_xclbins,144,5019 -separate_xclbins,145,5094 -separate_xclbins,146,5107 -separate_xclbins,147,5004 -separate_xclbins,148,4969 -separate_xclbins,149,4968 -separate_xclbins,150,4959 -separate_xclbins,151,4969 -separate_xclbins,152,4955 -separate_xclbins,153,4971 -separate_xclbins,154,4972 -separate_xclbins,155,4990 -separate_xclbins,156,5149 -separate_xclbins,157,5205 -separate_xclbins,158,5011 -separate_xclbins,159,4982 -separate_xclbins,160,4994 -separate_xclbins,161,5022 -separate_xclbins,162,5006 -separate_xclbins,163,4969 -separate_xclbins,164,4967 -separate_xclbins,165,4968 -separate_xclbins,166,4971 -separate_xclbins,167,4961 -separate_xclbins,168,4973 -separate_xclbins,169,4965 -separate_xclbins,170,4969 -separate_xclbins,171,4963 -separate_xclbins,172,4968 -separate_xclbins,173,4967 -separate_xclbins,174,4969 -separate_xclbins,175,4968 -separate_xclbins,176,4963 -separate_xclbins,177,4969 -separate_xclbins,178,4968 -separate_xclbins,179,4965 -separate_xclbins,180,4959 -separate_xclbins,181,4970 -separate_xclbins,182,4967 -separate_xclbins,183,4970 -separate_xclbins,184,4961 -separate_xclbins,185,4966 -separate_xclbins,186,4969 -separate_xclbins,187,4965 -separate_xclbins,188,4969 -separate_xclbins,189,4960 -separate_xclbins,190,4960 -separate_xclbins,191,4963 -separate_xclbins,192,4964 -separate_xclbins,193,4958 -separate_xclbins,194,4974 -separate_xclbins,195,4964 -separate_xclbins,196,4964 -separate_xclbins,197,4959 -separate_xclbins,198,4968 -separate_xclbins,199,4971 -separate_xclbins,200,4965 -separate_xclbins,201,4964 -separate_xclbins,202,4961 -separate_xclbins,203,4962 -separate_xclbins,204,4982 -separate_xclbins,205,4973 -separate_xclbins,206,4970 -separate_xclbins,207,4969 -separate_xclbins,208,4959 -separate_xclbins,209,4968 -separate_xclbins,210,4975 -separate_xclbins,211,4970 -separate_xclbins,212,4962 -separate_xclbins,213,4972 -separate_xclbins,214,4975 -separate_xclbins,215,4970 -separate_xclbins,216,4967 -separate_xclbins,217,4963 -separate_xclbins,218,4970 -separate_xclbins,219,4971 -separate_xclbins,220,4970 -separate_xclbins,221,4970 -separate_xclbins,222,4966 -separate_xclbins,223,4980 -separate_xclbins,224,4970 -separate_xclbins,225,4974 -separate_xclbins,226,4975 -separate_xclbins,227,4965 +separate_xclbins,128,4994 +separate_xclbins,129,4987 +separate_xclbins,130,4973 +separate_xclbins,131,4968 +separate_xclbins,132,4967 +separate_xclbins,133,4974 +separate_xclbins,134,5015 +separate_xclbins,135,5009 +separate_xclbins,136,4998 +separate_xclbins,137,4965 +separate_xclbins,138,4972 +separate_xclbins,139,4963 +separate_xclbins,140,4964 +separate_xclbins,141,4978 +separate_xclbins,142,4974 +separate_xclbins,143,4981 +separate_xclbins,144,4992 +separate_xclbins,145,5004 +separate_xclbins,146,5018 +separate_xclbins,147,5049 +separate_xclbins,148,5071 +separate_xclbins,149,5007 +separate_xclbins,150,5003 +separate_xclbins,151,5038 +separate_xclbins,152,5026 +separate_xclbins,153,4994 +separate_xclbins,154,4994 +separate_xclbins,155,5051 +separate_xclbins,156,5004 +separate_xclbins,157,4979 +separate_xclbins,158,4969 +separate_xclbins,159,4983 +separate_xclbins,160,5011 +separate_xclbins,161,4979 +separate_xclbins,162,4995 +separate_xclbins,163,5051 +separate_xclbins,164,5017 +separate_xclbins,165,5012 +separate_xclbins,166,4973 +separate_xclbins,167,4967 +separate_xclbins,168,4972 +separate_xclbins,169,4970 +separate_xclbins,170,5020 +separate_xclbins,171,5121 +separate_xclbins,172,5117 +separate_xclbins,173,5046 +separate_xclbins,174,4971 +separate_xclbins,175,4970 +separate_xclbins,176,4965 +separate_xclbins,177,5226 +separate_xclbins,178,5130 +separate_xclbins,179,5114 +separate_xclbins,180,5061 +separate_xclbins,181,4971 +separate_xclbins,182,4973 +separate_xclbins,183,4966 +separate_xclbins,184,4976 +separate_xclbins,185,4962 +separate_xclbins,186,4968 +separate_xclbins,187,4972 +separate_xclbins,188,4971 +separate_xclbins,189,4973 +separate_xclbins,190,4977 +separate_xclbins,191,4962 +separate_xclbins,192,4969 +separate_xclbins,193,4961 +separate_xclbins,194,4960 +separate_xclbins,195,4969 +separate_xclbins,196,4975 +separate_xclbins,197,4972 +separate_xclbins,198,4967 +separate_xclbins,199,4965 +separate_xclbins,200,4970 +separate_xclbins,201,4965 +separate_xclbins,202,4966 +separate_xclbins,203,4970 +separate_xclbins,204,4966 +separate_xclbins,205,4965 +separate_xclbins,206,4968 +separate_xclbins,207,4967 +separate_xclbins,208,4966 +separate_xclbins,209,4977 +separate_xclbins,210,4969 +separate_xclbins,211,4965 +separate_xclbins,212,4965 +separate_xclbins,213,4976 +separate_xclbins,214,4966 +separate_xclbins,215,4964 +separate_xclbins,216,4968 +separate_xclbins,217,4968 +separate_xclbins,218,4968 +separate_xclbins,219,4967 +separate_xclbins,220,4965 +separate_xclbins,221,4960 +separate_xclbins,222,4971 +separate_xclbins,223,4971 +separate_xclbins,224,4978 +separate_xclbins,225,4973 +separate_xclbins,226,4968 +separate_xclbins,227,4967 separate_xclbins,228,4968 -separate_xclbins,229,4967 -separate_xclbins,230,4967 -separate_xclbins,231,4966 -separate_xclbins,232,4969 -separate_xclbins,233,4969 -separate_xclbins,234,4967 +separate_xclbins,229,4972 +separate_xclbins,230,4964 +separate_xclbins,231,4969 +separate_xclbins,232,4960 +separate_xclbins,233,4964 +separate_xclbins,234,4970 separate_xclbins,235,4970 -separate_xclbins,236,4965 -separate_xclbins,237,4964 -separate_xclbins,238,4964 -separate_xclbins,239,4969 -separate_xclbins,240,4971 -separate_xclbins,241,4975 -separate_xclbins,242,4962 -separate_xclbins,243,4962 -separate_xclbins,244,4973 -separate_xclbins,245,4966 -separate_xclbins,246,4981 -separate_xclbins,247,4965 +separate_xclbins,236,4962 +separate_xclbins,237,4970 +separate_xclbins,238,4971 +separate_xclbins,239,4962 +separate_xclbins,240,4966 +separate_xclbins,241,4966 +separate_xclbins,242,4972 +separate_xclbins,243,4967 +separate_xclbins,244,4962 +separate_xclbins,245,4967 +separate_xclbins,246,4962 +separate_xclbins,247,4970 separate_xclbins,248,4965 -separate_xclbins,249,4966 -separate_xclbins,250,4970 +separate_xclbins,249,4987 +separate_xclbins,250,4965 separate_xclbins,251,4970 -separate_xclbins,252,4969 -separate_xclbins,253,4962 -separate_xclbins,254,4969 -separate_xclbins,255,4977 -separate_xclbins,256,4967 -separate_xclbins,257,4969 -separate_xclbins,258,4966 -separate_xclbins,259,4967 -separate_xclbins,260,4966 -separate_xclbins,261,4967 -separate_xclbins,262,4964 -separate_xclbins,263,4965 -separate_xclbins,264,4967 +separate_xclbins,252,4962 +separate_xclbins,253,4968 +separate_xclbins,254,4970 +separate_xclbins,255,4972 +separate_xclbins,256,4974 +separate_xclbins,257,4966 +separate_xclbins,258,4968 +separate_xclbins,259,4972 +separate_xclbins,260,4970 +separate_xclbins,261,4965 +separate_xclbins,262,4967 +separate_xclbins,263,5001 +separate_xclbins,264,5005 separate_xclbins,265,4963 -separate_xclbins,266,4965 -separate_xclbins,267,4962 -separate_xclbins,268,4968 -separate_xclbins,269,4964 -separate_xclbins,270,4965 -separate_xclbins,271,4964 +separate_xclbins,266,4963 +separate_xclbins,267,4969 +separate_xclbins,268,4965 +separate_xclbins,269,4976 +separate_xclbins,270,4962 +separate_xclbins,271,4967 separate_xclbins,272,4963 -separate_xclbins,273,4969 -separate_xclbins,274,4968 -separate_xclbins,275,4962 -separate_xclbins,276,4967 -separate_xclbins,277,4964 -separate_xclbins,278,4967 -separate_xclbins,279,4965 -separate_xclbins,280,4965 -separate_xclbins,281,4967 -separate_xclbins,282,4973 -separate_xclbins,283,4960 +separate_xclbins,273,4967 +separate_xclbins,274,4969 +separate_xclbins,275,4967 +separate_xclbins,276,4971 +separate_xclbins,277,4962 +separate_xclbins,278,4965 +separate_xclbins,279,4962 +separate_xclbins,280,4962 +separate_xclbins,281,4977 +separate_xclbins,282,4966 +separate_xclbins,283,4962 separate_xclbins,284,4964 -separate_xclbins,285,4972 -separate_xclbins,286,5148 -separate_xclbins,287,5092 -separate_xclbins,288,5053 -separate_xclbins,289,4989 -separate_xclbins,290,4965 -separate_xclbins,291,4972 -separate_xclbins,292,4973 -separate_xclbins,293,4957 +separate_xclbins,285,4977 +separate_xclbins,286,4962 +separate_xclbins,287,4967 +separate_xclbins,288,4966 +separate_xclbins,289,4974 +separate_xclbins,290,4963 +separate_xclbins,291,4966 +separate_xclbins,292,4966 +separate_xclbins,293,4969 separate_xclbins,294,4965 separate_xclbins,295,4963 -separate_xclbins,296,4967 -separate_xclbins,297,4974 -separate_xclbins,298,4964 -separate_xclbins,299,4959 -separate_xclbins,300,4957 -separate_xclbins,301,4963 +separate_xclbins,296,4966 +separate_xclbins,297,4968 +separate_xclbins,298,4962 +separate_xclbins,299,4966 +separate_xclbins,300,4968 +separate_xclbins,301,4967 separate_xclbins,302,4967 -separate_xclbins,303,4963 -separate_xclbins,304,4967 -separate_xclbins,305,4963 -separate_xclbins,306,4968 -separate_xclbins,307,4987 -separate_xclbins,308,4984 -separate_xclbins,309,4962 -separate_xclbins,310,4962 -separate_xclbins,311,4963 -separate_xclbins,312,4965 -separate_xclbins,313,4962 -separate_xclbins,314,4974 -separate_xclbins,315,4971 -separate_xclbins,316,4963 -separate_xclbins,317,4964 -separate_xclbins,318,4967 -separate_xclbins,319,4969 -separate_xclbins,320,4966 -separate_xclbins,321,4968 -separate_xclbins,322,4983 -separate_xclbins,323,4963 +separate_xclbins,303,4967 +separate_xclbins,304,4969 +separate_xclbins,305,4972 +separate_xclbins,306,4969 +separate_xclbins,307,4963 +separate_xclbins,308,4970 +separate_xclbins,309,4974 +separate_xclbins,310,4967 +separate_xclbins,311,4965 +separate_xclbins,312,4962 +separate_xclbins,313,4973 +separate_xclbins,314,4963 +separate_xclbins,315,4964 +separate_xclbins,316,4966 +separate_xclbins,317,4962 +separate_xclbins,318,4963 +separate_xclbins,319,4970 +separate_xclbins,320,4975 +separate_xclbins,321,4973 +separate_xclbins,322,4968 +separate_xclbins,323,4970 separate_xclbins,324,4963 -separate_xclbins,325,4970 -separate_xclbins,326,4972 -separate_xclbins,327,4970 -separate_xclbins,328,4973 -separate_xclbins,329,4963 -separate_xclbins,330,4964 -separate_xclbins,331,4967 -separate_xclbins,332,4968 -separate_xclbins,333,4963 -separate_xclbins,334,4971 -separate_xclbins,335,4978 -separate_xclbins,336,4964 -separate_xclbins,337,5173 -separate_xclbins,338,5204 -separate_xclbins,339,5112 -separate_xclbins,340,5054 -separate_xclbins,341,4972 -separate_xclbins,342,4963 -separate_xclbins,343,4971 -separate_xclbins,344,4962 -separate_xclbins,345,4967 -separate_xclbins,346,4982 -separate_xclbins,347,4963 -separate_xclbins,348,4963 -separate_xclbins,349,4972 -separate_xclbins,350,4961 -separate_xclbins,351,4966 -separate_xclbins,352,4967 -separate_xclbins,353,4965 +separate_xclbins,325,4966 +separate_xclbins,326,4989 +separate_xclbins,327,5019 +separate_xclbins,328,4981 +separate_xclbins,329,4973 +separate_xclbins,330,4968 +separate_xclbins,331,4973 +separate_xclbins,332,4972 +separate_xclbins,333,4971 +separate_xclbins,334,4970 +separate_xclbins,335,4970 +separate_xclbins,336,4985 +separate_xclbins,337,4977 +separate_xclbins,338,4974 +separate_xclbins,339,4974 +separate_xclbins,340,4974 +separate_xclbins,341,4967 +separate_xclbins,342,4972 +separate_xclbins,343,4969 +separate_xclbins,344,4977 +separate_xclbins,345,4969 +separate_xclbins,346,4974 +separate_xclbins,347,4971 +separate_xclbins,348,4966 +separate_xclbins,349,4983 +separate_xclbins,350,4966 +separate_xclbins,351,4973 +separate_xclbins,352,4968 +separate_xclbins,353,4977 separate_xclbins,354,4969 -separate_xclbins,355,4963 -separate_xclbins,356,4965 -separate_xclbins,357,4964 -separate_xclbins,358,4973 -separate_xclbins,359,4969 -separate_xclbins,360,4963 -separate_xclbins,361,4958 -separate_xclbins,362,4966 -separate_xclbins,363,4965 -separate_xclbins,364,5014 -separate_xclbins,365,5017 -separate_xclbins,366,4967 -separate_xclbins,367,4991 -separate_xclbins,368,5070 -separate_xclbins,369,4996 -separate_xclbins,370,4995 -separate_xclbins,371,5009 -separate_xclbins,372,5031 -separate_xclbins,373,4972 -separate_xclbins,374,4969 -separate_xclbins,375,4972 -separate_xclbins,376,5013 -separate_xclbins,377,5134 -separate_xclbins,378,5019 -separate_xclbins,379,4961 -separate_xclbins,380,4971 -separate_xclbins,381,4963 -separate_xclbins,382,4970 -separate_xclbins,383,4971 -separate_xclbins,384,4969 -separate_xclbins,385,4966 -separate_xclbins,386,4968 -separate_xclbins,387,4989 -separate_xclbins,388,4976 -separate_xclbins,389,4966 -separate_xclbins,390,4981 -separate_xclbins,391,4981 -separate_xclbins,392,4963 -separate_xclbins,393,4969 -separate_xclbins,394,4983 -separate_xclbins,395,4981 -separate_xclbins,396,4967 -separate_xclbins,397,4974 -separate_xclbins,398,4968 -separate_xclbins,399,4966 -separate_xclbins,400,4968 +separate_xclbins,355,4972 +separate_xclbins,356,4960 +separate_xclbins,357,4981 +separate_xclbins,358,4966 +separate_xclbins,359,4968 +separate_xclbins,360,4970 +separate_xclbins,361,4965 +separate_xclbins,362,4967 +separate_xclbins,363,4974 +separate_xclbins,364,4969 +separate_xclbins,365,4993 +separate_xclbins,366,4991 +separate_xclbins,367,4972 +separate_xclbins,368,4967 +separate_xclbins,369,4974 +separate_xclbins,370,4973 +separate_xclbins,371,4971 +separate_xclbins,372,4974 +separate_xclbins,373,4974 +separate_xclbins,374,4970 +separate_xclbins,375,4975 +separate_xclbins,376,4966 +separate_xclbins,377,4975 +separate_xclbins,378,4975 +separate_xclbins,379,4970 +separate_xclbins,380,4965 +separate_xclbins,381,4967 +separate_xclbins,382,4969 +separate_xclbins,383,4969 +separate_xclbins,384,4961 +separate_xclbins,385,4965 +separate_xclbins,386,4976 +separate_xclbins,387,4964 +separate_xclbins,388,4968 +separate_xclbins,389,4967 +separate_xclbins,390,4970 +separate_xclbins,391,4968 +separate_xclbins,392,4970 +separate_xclbins,393,4976 +separate_xclbins,394,4975 +separate_xclbins,395,4972 +separate_xclbins,396,4971 +separate_xclbins,397,4971 +separate_xclbins,398,4973 +separate_xclbins,399,4961 +separate_xclbins,400,4978 separate_xclbins,401,4967 -separate_xclbins,402,4965 -separate_xclbins,403,4967 -separate_xclbins,404,4978 -separate_xclbins,405,4964 -separate_xclbins,406,4966 -separate_xclbins,407,4968 -separate_xclbins,408,4980 -separate_xclbins,409,4983 -separate_xclbins,410,4973 -separate_xclbins,411,4967 -separate_xclbins,412,4967 +separate_xclbins,402,4969 +separate_xclbins,403,4963 +separate_xclbins,404,4969 +separate_xclbins,405,4962 +separate_xclbins,406,4972 +separate_xclbins,407,4975 +separate_xclbins,408,4972 +separate_xclbins,409,4969 +separate_xclbins,410,4975 +separate_xclbins,411,4971 +separate_xclbins,412,4971 separate_xclbins,413,4969 -separate_xclbins,414,4961 -separate_xclbins,415,4974 -separate_xclbins,416,4964 -separate_xclbins,417,4968 -separate_xclbins,418,4966 +separate_xclbins,414,4975 +separate_xclbins,415,4966 +separate_xclbins,416,4976 +separate_xclbins,417,4972 +separate_xclbins,418,4965 separate_xclbins,419,4967 -separate_xclbins,420,4963 -separate_xclbins,421,4961 -separate_xclbins,422,4965 -separate_xclbins,423,4963 -separate_xclbins,424,4967 -separate_xclbins,425,4970 -separate_xclbins,426,4966 -separate_xclbins,427,4970 -separate_xclbins,428,4974 -separate_xclbins,429,4963 -separate_xclbins,430,4974 -separate_xclbins,431,4973 -separate_xclbins,432,4967 -separate_xclbins,433,4965 -separate_xclbins,434,4972 -separate_xclbins,435,4966 -separate_xclbins,436,4967 -separate_xclbins,437,4971 -separate_xclbins,438,4962 -separate_xclbins,439,4968 +separate_xclbins,420,4982 +separate_xclbins,421,4972 +separate_xclbins,422,4972 +separate_xclbins,423,4971 +separate_xclbins,424,4971 +separate_xclbins,425,4967 +separate_xclbins,426,4967 +separate_xclbins,427,4969 +separate_xclbins,428,4977 +separate_xclbins,429,4981 +separate_xclbins,430,4977 +separate_xclbins,431,4976 +separate_xclbins,432,4968 +separate_xclbins,433,4967 +separate_xclbins,434,4963 +separate_xclbins,435,4969 +separate_xclbins,436,4969 +separate_xclbins,437,4968 +separate_xclbins,438,4973 +separate_xclbins,439,4969 separate_xclbins,440,4964 -separate_xclbins,441,4972 -separate_xclbins,442,4962 -separate_xclbins,443,4962 -separate_xclbins,444,4967 -separate_xclbins,445,4972 -separate_xclbins,446,4967 -separate_xclbins,447,4963 -separate_xclbins,448,4963 -separate_xclbins,449,4958 -separate_xclbins,450,4964 -separate_xclbins,451,4963 -separate_xclbins,452,4960 -separate_xclbins,453,4975 -separate_xclbins,454,4963 -separate_xclbins,455,4966 -separate_xclbins,456,4971 -separate_xclbins,457,4962 -separate_xclbins,458,4984 +separate_xclbins,441,4974 +separate_xclbins,442,4970 +separate_xclbins,443,4980 +separate_xclbins,444,4977 +separate_xclbins,445,4969 +separate_xclbins,446,4970 +separate_xclbins,447,4970 +separate_xclbins,448,4972 +separate_xclbins,449,4970 +separate_xclbins,450,4972 +separate_xclbins,451,4977 +separate_xclbins,452,4963 +separate_xclbins,453,4973 +separate_xclbins,454,4971 +separate_xclbins,455,4964 +separate_xclbins,456,4972 +separate_xclbins,457,4969 +separate_xclbins,458,4972 separate_xclbins,459,4970 -separate_xclbins,460,4968 -separate_xclbins,461,4978 -separate_xclbins,462,4965 +separate_xclbins,460,4964 +separate_xclbins,461,4966 +separate_xclbins,462,4961 separate_xclbins,463,4971 -separate_xclbins,464,4993 -separate_xclbins,465,5004 -separate_xclbins,466,4997 -separate_xclbins,467,4987 -separate_xclbins,468,5002 -separate_xclbins,469,4991 -separate_xclbins,470,5007 -separate_xclbins,471,4992 -separate_xclbins,472,4994 -separate_xclbins,473,5058 -separate_xclbins,474,5016 -separate_xclbins,475,5078 -separate_xclbins,476,5034 -separate_xclbins,477,5034 -separate_xclbins,478,5023 -separate_xclbins,479,5009 -separate_xclbins,480,4988 -separate_xclbins,481,5006 -separate_xclbins,482,4980 -separate_xclbins,483,4971 -separate_xclbins,484,4974 -separate_xclbins,485,4997 -separate_xclbins,486,4984 -separate_xclbins,487,4978 -separate_xclbins,488,4968 -separate_xclbins,489,4967 -separate_xclbins,490,4965 -separate_xclbins,491,4974 -separate_xclbins,492,4963 -separate_xclbins,493,4967 -separate_xclbins,494,4963 -separate_xclbins,495,4962 -separate_xclbins,496,5011 -separate_xclbins,497,5019 -separate_xclbins,498,5016 -separate_xclbins,499,5014 -separate_xclbins,500,4963 -separate_xclbins,501,5035 -separate_xclbins,502,5035 -separate_xclbins,503,5015 -separate_xclbins,504,5015 -separate_xclbins,505,5019 -separate_xclbins,506,5020 -separate_xclbins,507,5017 -separate_xclbins,508,5013 -separate_xclbins,509,5030 -separate_xclbins,510,5021 -separate_xclbins,511,5019 -separate_xclbins,512,5002 -separate_xclbins,513,4971 -separate_xclbins,514,4971 -separate_xclbins,515,4965 -separate_xclbins,516,4966 -separate_xclbins,517,4964 -separate_xclbins,518,4958 -separate_xclbins,519,4964 -separate_xclbins,520,4965 -separate_xclbins,521,5132 -separate_xclbins,522,5113 -separate_xclbins,523,5088 -separate_xclbins,524,5061 -separate_xclbins,525,4958 -separate_xclbins,526,4964 -separate_xclbins,527,4975 -separate_xclbins,528,4961 -separate_xclbins,529,4972 -separate_xclbins,530,4965 -separate_xclbins,531,4965 -separate_xclbins,532,4969 -separate_xclbins,533,4961 -separate_xclbins,534,4969 -separate_xclbins,535,4953 -separate_xclbins,536,4964 -separate_xclbins,537,4963 -separate_xclbins,538,4973 -separate_xclbins,539,4972 -separate_xclbins,540,4962 -separate_xclbins,541,4963 -separate_xclbins,542,4961 -separate_xclbins,543,5025 -separate_xclbins,544,4965 -separate_xclbins,545,4968 -separate_xclbins,546,4962 -separate_xclbins,547,4958 -separate_xclbins,548,4967 -separate_xclbins,549,4968 -separate_xclbins,550,4962 -separate_xclbins,551,4962 -separate_xclbins,552,4956 -separate_xclbins,553,4958 -separate_xclbins,554,4967 -separate_xclbins,555,4962 -separate_xclbins,556,4973 -separate_xclbins,557,4961 +separate_xclbins,464,4969 +separate_xclbins,465,4979 +separate_xclbins,466,4989 +separate_xclbins,467,4995 +separate_xclbins,468,4968 +separate_xclbins,469,4973 +separate_xclbins,470,4976 +separate_xclbins,471,4971 +separate_xclbins,472,4968 +separate_xclbins,473,4967 +separate_xclbins,474,4971 +separate_xclbins,475,4965 +separate_xclbins,476,4972 +separate_xclbins,477,4965 +separate_xclbins,478,4967 +separate_xclbins,479,4966 +separate_xclbins,480,4967 +separate_xclbins,481,4969 +separate_xclbins,482,4967 +separate_xclbins,483,4975 +separate_xclbins,484,4976 +separate_xclbins,485,4963 +separate_xclbins,486,4972 +separate_xclbins,487,4968 +separate_xclbins,488,4965 +separate_xclbins,489,4970 +separate_xclbins,490,4982 +separate_xclbins,491,4970 +separate_xclbins,492,4974 +separate_xclbins,493,4975 +separate_xclbins,494,4973 +separate_xclbins,495,4971 +separate_xclbins,496,4971 +separate_xclbins,497,4966 +separate_xclbins,498,4978 +separate_xclbins,499,4972 +separate_xclbins,500,4968 +separate_xclbins,501,4971 +separate_xclbins,502,4966 +separate_xclbins,503,4973 +separate_xclbins,504,4975 +separate_xclbins,505,4978 +separate_xclbins,506,4966 +separate_xclbins,507,4971 +separate_xclbins,508,4969 +separate_xclbins,509,4970 +separate_xclbins,510,4973 +separate_xclbins,511,4973 +separate_xclbins,512,4968 +separate_xclbins,513,4968 +separate_xclbins,514,4968 +separate_xclbins,515,4975 +separate_xclbins,516,4961 +separate_xclbins,517,4971 +separate_xclbins,518,4964 +separate_xclbins,519,4969 +separate_xclbins,520,4978 +separate_xclbins,521,4966 +separate_xclbins,522,4973 +separate_xclbins,523,4963 +separate_xclbins,524,4965 +separate_xclbins,525,4962 +separate_xclbins,526,4967 +separate_xclbins,527,4968 +separate_xclbins,528,4976 +separate_xclbins,529,4973 +separate_xclbins,530,4985 +separate_xclbins,531,4974 +separate_xclbins,532,4971 +separate_xclbins,533,4979 +separate_xclbins,534,4970 +separate_xclbins,535,4976 +separate_xclbins,536,4972 +separate_xclbins,537,4979 +separate_xclbins,538,4964 +separate_xclbins,539,4966 +separate_xclbins,540,4967 +separate_xclbins,541,4967 +separate_xclbins,542,4967 +separate_xclbins,543,4966 +separate_xclbins,544,4971 +separate_xclbins,545,4966 +separate_xclbins,546,4974 +separate_xclbins,547,4976 +separate_xclbins,548,5030 +separate_xclbins,549,5022 +separate_xclbins,550,5197 +separate_xclbins,551,5025 +separate_xclbins,552,4966 +separate_xclbins,553,4965 +separate_xclbins,554,4968 +separate_xclbins,555,4970 +separate_xclbins,556,4967 +separate_xclbins,557,4969 separate_xclbins,558,4965 -separate_xclbins,559,4978 -separate_xclbins,560,4965 -separate_xclbins,561,4961 -separate_xclbins,562,4959 -separate_xclbins,563,4962 -separate_xclbins,564,4965 -separate_xclbins,565,4963 -separate_xclbins,566,4963 -separate_xclbins,567,4963 -separate_xclbins,568,4967 -separate_xclbins,569,4966 -separate_xclbins,570,4963 -separate_xclbins,571,4962 -separate_xclbins,572,4965 -separate_xclbins,573,4994 -separate_xclbins,574,5039 -separate_xclbins,575,5006 -separate_xclbins,576,4972 -separate_xclbins,577,4965 -separate_xclbins,578,4988 -separate_xclbins,579,4993 -separate_xclbins,580,4978 -separate_xclbins,581,4970 -separate_xclbins,582,4962 -separate_xclbins,583,4954 -separate_xclbins,584,4967 -separate_xclbins,585,4959 -separate_xclbins,586,4963 -separate_xclbins,587,4966 -separate_xclbins,588,4964 -separate_xclbins,589,4963 -separate_xclbins,590,4971 -separate_xclbins,591,4962 -separate_xclbins,592,4965 -separate_xclbins,593,4964 -separate_xclbins,594,4971 -separate_xclbins,595,4967 -separate_xclbins,596,4978 -separate_xclbins,597,4975 -separate_xclbins,598,4965 -separate_xclbins,599,4969 -separate_xclbins,600,4965 -separate_xclbins,601,4964 -separate_xclbins,602,4968 -separate_xclbins,603,4958 -separate_xclbins,604,4963 -separate_xclbins,605,4960 -separate_xclbins,606,4969 -separate_xclbins,607,4958 -separate_xclbins,608,4959 -separate_xclbins,609,4967 -separate_xclbins,610,4967 -separate_xclbins,611,4969 -separate_xclbins,612,4984 -separate_xclbins,613,4982 -separate_xclbins,614,4965 -separate_xclbins,615,4955 -separate_xclbins,616,4973 -separate_xclbins,617,4968 -separate_xclbins,618,4967 -separate_xclbins,619,4968 -separate_xclbins,620,4966 -separate_xclbins,621,4965 -separate_xclbins,622,4965 -separate_xclbins,623,4963 -separate_xclbins,624,4980 -separate_xclbins,625,4965 -separate_xclbins,626,4964 -separate_xclbins,627,4964 -separate_xclbins,628,4972 -separate_xclbins,629,4965 -separate_xclbins,630,4968 -separate_xclbins,631,4962 -separate_xclbins,632,4967 -separate_xclbins,633,4965 +separate_xclbins,559,4971 +separate_xclbins,560,4975 +separate_xclbins,561,4958 +separate_xclbins,562,4967 +separate_xclbins,563,6127 +separate_xclbins,564,5562 +separate_xclbins,565,4974 +separate_xclbins,566,4976 +separate_xclbins,567,4991 +separate_xclbins,568,4978 +separate_xclbins,569,4963 +separate_xclbins,570,4973 +separate_xclbins,571,4968 +separate_xclbins,572,4966 +separate_xclbins,573,4978 +separate_xclbins,574,4963 +separate_xclbins,575,5025 +separate_xclbins,576,5565 +separate_xclbins,577,6688 +separate_xclbins,578,5195 +separate_xclbins,579,5486 +separate_xclbins,580,5568 +separate_xclbins,581,5188 +separate_xclbins,582,5493 +separate_xclbins,583,5505 +separate_xclbins,584,5850 +separate_xclbins,585,6141 +separate_xclbins,586,6412 +separate_xclbins,587,6854 +separate_xclbins,588,6927 +separate_xclbins,589,7201 +separate_xclbins,590,6713 +separate_xclbins,591,7044 +separate_xclbins,592,6991 +separate_xclbins,593,6430 +separate_xclbins,594,6557 +separate_xclbins,595,5815 +separate_xclbins,596,5650 +separate_xclbins,597,5705 +separate_xclbins,598,5797 +separate_xclbins,599,5612 +separate_xclbins,600,5604 +separate_xclbins,601,5796 +separate_xclbins,602,6510 +separate_xclbins,603,6908 +separate_xclbins,604,6704 +separate_xclbins,605,6729 +separate_xclbins,606,5799 +separate_xclbins,607,5833 +separate_xclbins,608,6569 +separate_xclbins,609,5586 +separate_xclbins,610,5204 +separate_xclbins,611,5087 +separate_xclbins,612,5037 +separate_xclbins,613,4995 +separate_xclbins,614,4995 +separate_xclbins,615,4988 +separate_xclbins,616,4988 +separate_xclbins,617,4989 +separate_xclbins,618,4989 +separate_xclbins,619,4987 +separate_xclbins,620,4986 +separate_xclbins,621,4989 +separate_xclbins,622,4991 +separate_xclbins,623,4992 +separate_xclbins,624,4988 +separate_xclbins,625,4995 +separate_xclbins,626,4985 +separate_xclbins,627,4983 +separate_xclbins,628,4999 +separate_xclbins,629,4989 +separate_xclbins,630,4964 +separate_xclbins,631,4976 +separate_xclbins,632,4968 +separate_xclbins,633,4967 separate_xclbins,634,4967 -separate_xclbins,635,4974 -separate_xclbins,636,4967 -separate_xclbins,637,4960 -separate_xclbins,638,4960 -separate_xclbins,639,4971 -separate_xclbins,640,4956 -separate_xclbins,641,4972 -separate_xclbins,642,4962 -separate_xclbins,643,4965 -separate_xclbins,644,4960 -separate_xclbins,645,4965 -separate_xclbins,646,4974 -separate_xclbins,647,4965 -separate_xclbins,648,4968 -separate_xclbins,649,4968 -separate_xclbins,650,4967 -separate_xclbins,651,4964 -separate_xclbins,652,4964 -separate_xclbins,653,4961 -separate_xclbins,654,4975 -separate_xclbins,655,4967 -separate_xclbins,656,4969 -separate_xclbins,657,4961 -separate_xclbins,658,4964 -separate_xclbins,659,4965 -separate_xclbins,660,4962 -separate_xclbins,661,4962 -separate_xclbins,662,4964 -separate_xclbins,663,4965 -separate_xclbins,664,4968 -separate_xclbins,665,4967 -separate_xclbins,666,4963 -separate_xclbins,667,4967 -separate_xclbins,668,4968 -separate_xclbins,669,4970 -separate_xclbins,670,4963 -separate_xclbins,671,4966 +separate_xclbins,635,4968 +separate_xclbins,636,4960 +separate_xclbins,637,4971 +separate_xclbins,638,4974 +separate_xclbins,639,4963 +separate_xclbins,640,4974 +separate_xclbins,641,4978 +separate_xclbins,642,4963 +separate_xclbins,643,4973 +separate_xclbins,644,4967 +separate_xclbins,645,4977 +separate_xclbins,646,4971 +separate_xclbins,647,4968 +separate_xclbins,648,4964 +separate_xclbins,649,4963 +separate_xclbins,650,4973 +separate_xclbins,651,4974 +separate_xclbins,652,4961 +separate_xclbins,653,4963 +separate_xclbins,654,4967 +separate_xclbins,655,4963 +separate_xclbins,656,4967 +separate_xclbins,657,4966 +separate_xclbins,658,4962 +separate_xclbins,659,4994 +separate_xclbins,660,5009 +separate_xclbins,661,5006 +separate_xclbins,662,5013 +separate_xclbins,663,5142 +separate_xclbins,664,5127 +separate_xclbins,665,5118 +separate_xclbins,666,5169 +separate_xclbins,667,5115 +separate_xclbins,668,5086 +separate_xclbins,669,5116 +separate_xclbins,670,5106 +separate_xclbins,671,5047 separate_xclbins,672,4963 -separate_xclbins,673,4971 -separate_xclbins,674,4970 -separate_xclbins,675,4968 +separate_xclbins,673,4975 +separate_xclbins,674,4972 +separate_xclbins,675,4972 separate_xclbins,676,4969 -separate_xclbins,677,4972 -separate_xclbins,678,4972 -separate_xclbins,679,4969 -separate_xclbins,680,4960 -separate_xclbins,681,4983 -separate_xclbins,682,4979 -separate_xclbins,683,4966 -separate_xclbins,684,4968 -separate_xclbins,685,4967 -separate_xclbins,686,4961 -separate_xclbins,687,4969 -separate_xclbins,688,4970 -separate_xclbins,689,4967 -separate_xclbins,690,4964 -separate_xclbins,691,4965 -separate_xclbins,692,4965 -separate_xclbins,693,4966 -separate_xclbins,694,4970 -separate_xclbins,695,4964 -separate_xclbins,696,4958 -separate_xclbins,697,4968 -separate_xclbins,698,4971 -separate_xclbins,699,4965 -separate_xclbins,700,4967 -separate_xclbins,701,4955 -separate_xclbins,702,4968 -separate_xclbins,703,4958 +separate_xclbins,677,4964 +separate_xclbins,678,4967 +separate_xclbins,679,4963 +separate_xclbins,680,4968 +separate_xclbins,681,4980 +separate_xclbins,682,4967 +separate_xclbins,683,4982 +separate_xclbins,684,4996 +separate_xclbins,685,5028 +separate_xclbins,686,5028 +separate_xclbins,687,5009 +separate_xclbins,688,5030 +separate_xclbins,689,5025 +separate_xclbins,690,5038 +separate_xclbins,691,5035 +separate_xclbins,692,5039 +separate_xclbins,693,5125 +separate_xclbins,694,5104 +separate_xclbins,695,5011 +separate_xclbins,696,4969 +separate_xclbins,697,4963 +separate_xclbins,698,4970 +separate_xclbins,699,4971 +separate_xclbins,700,4960 +separate_xclbins,701,4965 +separate_xclbins,702,4963 +separate_xclbins,703,4969 separate_xclbins,704,4961 -separate_xclbins,705,4973 -separate_xclbins,706,4962 -separate_xclbins,707,4958 -separate_xclbins,708,4973 -separate_xclbins,709,4974 -separate_xclbins,710,4968 -separate_xclbins,711,4970 -separate_xclbins,712,4966 -separate_xclbins,713,4977 -separate_xclbins,714,4991 -separate_xclbins,715,4978 -separate_xclbins,716,4963 -separate_xclbins,717,4967 -separate_xclbins,718,4976 -separate_xclbins,719,4960 -separate_xclbins,720,4959 -separate_xclbins,721,4963 -separate_xclbins,722,4963 -separate_xclbins,723,4966 -separate_xclbins,724,4970 -separate_xclbins,725,4971 -separate_xclbins,726,4967 -separate_xclbins,727,4963 -separate_xclbins,728,4964 -separate_xclbins,729,4968 -separate_xclbins,730,4968 -separate_xclbins,731,4965 -separate_xclbins,732,4967 -separate_xclbins,733,4962 -separate_xclbins,734,4966 -separate_xclbins,735,4962 -separate_xclbins,736,4964 -separate_xclbins,737,4992 -separate_xclbins,738,5014 -separate_xclbins,739,5143 -separate_xclbins,740,5107 -separate_xclbins,741,5002 -separate_xclbins,742,4965 -separate_xclbins,743,4960 -separate_xclbins,744,4963 -separate_xclbins,745,4967 -separate_xclbins,746,4963 -separate_xclbins,747,4970 -separate_xclbins,748,4963 -separate_xclbins,749,5055 -separate_xclbins,750,6629 -separate_xclbins,751,5361 -separate_xclbins,752,4962 -separate_xclbins,753,4964 -separate_xclbins,754,4971 -separate_xclbins,755,4967 -separate_xclbins,756,4961 -separate_xclbins,757,4975 -separate_xclbins,758,4961 -separate_xclbins,759,4964 -separate_xclbins,760,4965 -separate_xclbins,761,4959 -separate_xclbins,762,4955 -separate_xclbins,763,4959 -separate_xclbins,764,4963 -separate_xclbins,765,4971 -separate_xclbins,766,4963 -separate_xclbins,767,4965 -separate_xclbins,768,4971 -separate_xclbins,769,4972 +separate_xclbins,705,4970 +separate_xclbins,706,4965 +separate_xclbins,707,4965 +separate_xclbins,708,4970 +separate_xclbins,709,4966 +separate_xclbins,710,4960 +separate_xclbins,711,4966 +separate_xclbins,712,4963 +separate_xclbins,713,4972 +separate_xclbins,714,4967 +separate_xclbins,715,4967 +separate_xclbins,716,4972 +separate_xclbins,717,4978 +separate_xclbins,718,4972 +separate_xclbins,719,4978 +separate_xclbins,720,4970 +separate_xclbins,721,4971 +separate_xclbins,722,4966 +separate_xclbins,723,4984 +separate_xclbins,724,4967 +separate_xclbins,725,4966 +separate_xclbins,726,4962 +separate_xclbins,727,4969 +separate_xclbins,728,4973 +separate_xclbins,729,4967 +separate_xclbins,730,4966 +separate_xclbins,731,4971 +separate_xclbins,732,4965 +separate_xclbins,733,4971 +separate_xclbins,734,4996 +separate_xclbins,735,4966 +separate_xclbins,736,4972 +separate_xclbins,737,4961 +separate_xclbins,738,4972 +separate_xclbins,739,4966 +separate_xclbins,740,4963 +separate_xclbins,741,4968 +separate_xclbins,742,4969 +separate_xclbins,743,4983 +separate_xclbins,744,4973 +separate_xclbins,745,4965 +separate_xclbins,746,4981 +separate_xclbins,747,5038 +separate_xclbins,748,5108 +separate_xclbins,749,5121 +separate_xclbins,750,5046 +separate_xclbins,751,4971 +separate_xclbins,752,4970 +separate_xclbins,753,4978 +separate_xclbins,754,4968 +separate_xclbins,755,4975 +separate_xclbins,756,4963 +separate_xclbins,757,4966 +separate_xclbins,758,4972 +separate_xclbins,759,4966 +separate_xclbins,760,4970 +separate_xclbins,761,5040 +separate_xclbins,762,5109 +separate_xclbins,763,5117 +separate_xclbins,764,5017 +separate_xclbins,765,4968 +separate_xclbins,766,4964 +separate_xclbins,767,4962 +separate_xclbins,768,4967 +separate_xclbins,769,4968 separate_xclbins,770,4967 -separate_xclbins,771,4982 -separate_xclbins,772,4966 -separate_xclbins,773,4964 -separate_xclbins,774,4968 -separate_xclbins,775,4963 -separate_xclbins,776,4965 -separate_xclbins,777,4971 -separate_xclbins,778,4975 -separate_xclbins,779,4959 -separate_xclbins,780,4964 -separate_xclbins,781,4962 -separate_xclbins,782,4968 -separate_xclbins,783,4967 -separate_xclbins,784,4967 -separate_xclbins,785,4958 -separate_xclbins,786,4964 -separate_xclbins,787,4975 -separate_xclbins,788,4961 -separate_xclbins,789,4959 +separate_xclbins,771,4970 +separate_xclbins,772,4974 +separate_xclbins,773,4971 +separate_xclbins,774,4966 +separate_xclbins,775,4971 +separate_xclbins,776,4962 +separate_xclbins,777,4964 +separate_xclbins,778,4966 +separate_xclbins,779,4966 +separate_xclbins,780,4963 +separate_xclbins,781,4961 +separate_xclbins,782,4969 +separate_xclbins,783,4977 +separate_xclbins,784,4959 +separate_xclbins,785,5001 +separate_xclbins,786,5028 +separate_xclbins,787,4962 +separate_xclbins,788,4962 +separate_xclbins,789,4975 separate_xclbins,790,4964 -separate_xclbins,791,4965 -separate_xclbins,792,4972 -separate_xclbins,793,4972 -separate_xclbins,794,4959 -separate_xclbins,795,4963 +separate_xclbins,791,4966 +separate_xclbins,792,4975 +separate_xclbins,793,4962 +separate_xclbins,794,4967 +separate_xclbins,795,4971 separate_xclbins,796,4970 separate_xclbins,797,4969 -separate_xclbins,798,4968 -separate_xclbins,799,4966 -separate_xclbins,800,4961 -separate_xclbins,801,5587 -separate_xclbins,802,6134 -separate_xclbins,803,5550 -separate_xclbins,804,5945 -separate_xclbins,805,5551 -separate_xclbins,806,5993 -separate_xclbins,807,5574 -separate_xclbins,808,5523 -separate_xclbins,809,5572 -separate_xclbins,810,6464 -separate_xclbins,811,6762 -separate_xclbins,812,6932 -separate_xclbins,813,6992 -separate_xclbins,814,5648 -separate_xclbins,815,4986 -separate_xclbins,816,4970 -separate_xclbins,817,4973 -separate_xclbins,818,4961 -separate_xclbins,819,4963 -separate_xclbins,820,4957 -separate_xclbins,821,4965 -separate_xclbins,822,4966 -separate_xclbins,823,4966 -separate_xclbins,824,4963 -separate_xclbins,825,4966 -separate_xclbins,826,4977 -separate_xclbins,827,4957 -separate_xclbins,828,4963 -separate_xclbins,829,4966 -separate_xclbins,830,4959 +separate_xclbins,798,4975 +separate_xclbins,799,4970 +separate_xclbins,800,4963 +separate_xclbins,801,4967 +separate_xclbins,802,4969 +separate_xclbins,803,4971 +separate_xclbins,804,4964 +separate_xclbins,805,4970 +separate_xclbins,806,4967 +separate_xclbins,807,4964 +separate_xclbins,808,4973 +separate_xclbins,809,4979 +separate_xclbins,810,4966 +separate_xclbins,811,4973 +separate_xclbins,812,4976 +separate_xclbins,813,4970 +separate_xclbins,814,4970 +separate_xclbins,815,4975 +separate_xclbins,816,4976 +separate_xclbins,817,4971 +separate_xclbins,818,4965 +separate_xclbins,819,4967 +separate_xclbins,820,4963 +separate_xclbins,821,4967 +separate_xclbins,822,4972 +separate_xclbins,823,4972 +separate_xclbins,824,4966 +separate_xclbins,825,4972 +separate_xclbins,826,4962 +separate_xclbins,827,4966 +separate_xclbins,828,4966 +separate_xclbins,829,4974 +separate_xclbins,830,4969 separate_xclbins,831,4966 -separate_xclbins,832,4963 -separate_xclbins,833,4967 -separate_xclbins,834,4976 -separate_xclbins,835,4962 -separate_xclbins,836,5749 -separate_xclbins,837,7102 -separate_xclbins,838,6843 -separate_xclbins,839,6968 -separate_xclbins,840,6974 -separate_xclbins,841,7009 -separate_xclbins,842,7014 -separate_xclbins,843,6739 -separate_xclbins,844,6868 -separate_xclbins,845,5600 -separate_xclbins,846,6013 -separate_xclbins,847,5190 -separate_xclbins,848,5199 -separate_xclbins,849,5038 -separate_xclbins,850,4988 -separate_xclbins,851,4992 -separate_xclbins,852,4994 -separate_xclbins,853,4981 -separate_xclbins,854,4982 -separate_xclbins,855,4988 -separate_xclbins,856,4985 -separate_xclbins,857,4979 -separate_xclbins,858,4985 -separate_xclbins,859,4992 -separate_xclbins,860,4989 -separate_xclbins,861,4988 -separate_xclbins,862,4990 -separate_xclbins,863,4986 -separate_xclbins,864,4985 -separate_xclbins,865,4985 -separate_xclbins,866,4990 -separate_xclbins,867,4986 -separate_xclbins,868,4986 -separate_xclbins,869,4987 -separate_xclbins,870,4983 -separate_xclbins,871,4989 -separate_xclbins,872,4982 -separate_xclbins,873,4984 -separate_xclbins,874,4996 -separate_xclbins,875,4987 -separate_xclbins,876,4994 -separate_xclbins,877,4994 -separate_xclbins,878,4982 -separate_xclbins,879,4990 -separate_xclbins,880,4986 -separate_xclbins,881,4994 -separate_xclbins,882,4987 -separate_xclbins,883,4984 -separate_xclbins,884,4987 -separate_xclbins,885,4989 -separate_xclbins,886,5010 -separate_xclbins,887,5150 -separate_xclbins,888,5138 -separate_xclbins,889,5026 -separate_xclbins,890,4967 -separate_xclbins,891,4964 -separate_xclbins,892,4965 -separate_xclbins,893,4963 -separate_xclbins,894,4963 -separate_xclbins,895,4962 -separate_xclbins,896,4979 -separate_xclbins,897,4967 -separate_xclbins,898,4974 -separate_xclbins,899,4963 -separate_xclbins,900,4963 -separate_xclbins,901,4961 -separate_xclbins,902,4968 -separate_xclbins,903,4981 -separate_xclbins,904,4959 -separate_xclbins,905,4963 -separate_xclbins,906,4971 -separate_xclbins,907,4965 -separate_xclbins,908,4965 -separate_xclbins,909,4965 +separate_xclbins,832,4969 +separate_xclbins,833,4969 +separate_xclbins,834,4971 +separate_xclbins,835,4964 +separate_xclbins,836,4965 +separate_xclbins,837,5087 +separate_xclbins,838,5121 +separate_xclbins,839,5119 +separate_xclbins,840,5026 +separate_xclbins,841,4970 +separate_xclbins,842,4965 +separate_xclbins,843,4974 +separate_xclbins,844,4993 +separate_xclbins,845,4990 +separate_xclbins,846,4974 +separate_xclbins,847,4972 +separate_xclbins,848,4970 +separate_xclbins,849,4971 +separate_xclbins,850,4964 +separate_xclbins,851,4966 +separate_xclbins,852,4975 +separate_xclbins,853,4974 +separate_xclbins,854,4967 +separate_xclbins,855,4966 +separate_xclbins,856,4963 +separate_xclbins,857,4981 +separate_xclbins,858,4964 +separate_xclbins,859,4961 +separate_xclbins,860,4978 +separate_xclbins,861,4975 +separate_xclbins,862,4963 +separate_xclbins,863,4968 +separate_xclbins,864,4977 +separate_xclbins,865,4968 +separate_xclbins,866,4976 +separate_xclbins,867,4964 +separate_xclbins,868,4974 +separate_xclbins,869,4966 +separate_xclbins,870,4964 +separate_xclbins,871,4970 +separate_xclbins,872,4968 +separate_xclbins,873,4966 +separate_xclbins,874,4965 +separate_xclbins,875,4999 +separate_xclbins,876,5129 +separate_xclbins,877,5120 +separate_xclbins,878,5011 +separate_xclbins,879,4968 +separate_xclbins,880,4966 +separate_xclbins,881,4968 +separate_xclbins,882,4967 +separate_xclbins,883,4970 +separate_xclbins,884,4975 +separate_xclbins,885,4966 +separate_xclbins,886,4968 +separate_xclbins,887,4965 +separate_xclbins,888,4962 +separate_xclbins,889,4966 +separate_xclbins,890,4965 +separate_xclbins,891,4974 +separate_xclbins,892,4969 +separate_xclbins,893,4961 +separate_xclbins,894,4966 +separate_xclbins,895,4968 +separate_xclbins,896,4960 +separate_xclbins,897,4973 +separate_xclbins,898,4963 +separate_xclbins,899,4964 +separate_xclbins,900,4965 +separate_xclbins,901,4973 +separate_xclbins,902,4972 +separate_xclbins,903,4963 +separate_xclbins,904,5030 +separate_xclbins,905,4989 +separate_xclbins,906,4979 +separate_xclbins,907,4983 +separate_xclbins,908,4968 +separate_xclbins,909,4969 separate_xclbins,910,4966 -separate_xclbins,911,4973 -separate_xclbins,912,4975 -separate_xclbins,913,5127 -separate_xclbins,914,5118 -separate_xclbins,915,5091 -separate_xclbins,916,5061 -separate_xclbins,917,4965 -separate_xclbins,918,4966 -separate_xclbins,919,4965 -separate_xclbins,920,4962 -separate_xclbins,921,4963 -separate_xclbins,922,4960 -separate_xclbins,923,4967 -separate_xclbins,924,4964 -separate_xclbins,925,4966 -separate_xclbins,926,4973 -separate_xclbins,927,4958 -separate_xclbins,928,4963 -separate_xclbins,929,4963 -separate_xclbins,930,4962 -separate_xclbins,931,4969 -separate_xclbins,932,4970 -separate_xclbins,933,4965 -separate_xclbins,934,4972 -separate_xclbins,935,4965 -separate_xclbins,936,4967 -separate_xclbins,937,4962 +separate_xclbins,911,4974 +separate_xclbins,912,4970 +separate_xclbins,913,4960 +separate_xclbins,914,5095 +separate_xclbins,915,5115 +separate_xclbins,916,5186 +separate_xclbins,917,5120 +separate_xclbins,918,4957 +separate_xclbins,919,4968 +separate_xclbins,920,4970 +separate_xclbins,921,4966 +separate_xclbins,922,4967 +separate_xclbins,923,4977 +separate_xclbins,924,4978 +separate_xclbins,925,5002 +separate_xclbins,926,4968 +separate_xclbins,927,4960 +separate_xclbins,928,4981 +separate_xclbins,929,4966 +separate_xclbins,930,4970 +separate_xclbins,931,4961 +separate_xclbins,932,4977 +separate_xclbins,933,4971 +separate_xclbins,934,4966 +separate_xclbins,935,4963 +separate_xclbins,936,4962 +separate_xclbins,937,4965 separate_xclbins,938,4963 -separate_xclbins,939,4962 -separate_xclbins,940,4967 -separate_xclbins,941,4963 -separate_xclbins,942,4966 -separate_xclbins,943,4965 -separate_xclbins,944,4965 -separate_xclbins,945,4967 -separate_xclbins,946,4966 -separate_xclbins,947,5066 -separate_xclbins,948,5105 -separate_xclbins,949,5099 -separate_xclbins,950,5016 -separate_xclbins,951,4965 -separate_xclbins,952,4961 -separate_xclbins,953,4964 -separate_xclbins,954,4963 -separate_xclbins,955,4972 -separate_xclbins,956,4962 -separate_xclbins,957,4966 -separate_xclbins,958,4963 -separate_xclbins,959,4958 -separate_xclbins,960,4967 +separate_xclbins,939,4960 +separate_xclbins,940,4980 +separate_xclbins,941,4970 +separate_xclbins,942,4967 +separate_xclbins,943,4964 +separate_xclbins,944,4970 +separate_xclbins,945,4965 +separate_xclbins,946,4971 +separate_xclbins,947,4965 +separate_xclbins,948,4972 +separate_xclbins,949,4969 +separate_xclbins,950,4974 +separate_xclbins,951,4978 +separate_xclbins,952,4967 +separate_xclbins,953,5127 +separate_xclbins,954,5123 +separate_xclbins,955,5013 +separate_xclbins,956,4963 +separate_xclbins,957,4964 +separate_xclbins,958,4971 +separate_xclbins,959,4964 +separate_xclbins,960,4969 separate_xclbins,961,4968 -separate_xclbins,962,4962 -separate_xclbins,963,4963 -separate_xclbins,964,4964 -separate_xclbins,965,4967 -separate_xclbins,966,4967 -separate_xclbins,967,4968 -separate_xclbins,968,4972 -separate_xclbins,969,4964 -separate_xclbins,970,4977 -separate_xclbins,971,4966 -separate_xclbins,972,4970 +separate_xclbins,962,4970 +separate_xclbins,963,4960 +separate_xclbins,964,4974 +separate_xclbins,965,5818 +separate_xclbins,966,4978 +separate_xclbins,967,4975 +separate_xclbins,968,4971 +separate_xclbins,969,4978 +separate_xclbins,970,4968 +separate_xclbins,971,4965 +separate_xclbins,972,4982 separate_xclbins,973,4964 -separate_xclbins,974,4967 -separate_xclbins,975,4964 -separate_xclbins,976,4967 -separate_xclbins,977,4957 -separate_xclbins,978,4959 -separate_xclbins,979,4965 -separate_xclbins,980,4967 -separate_xclbins,981,4960 -separate_xclbins,982,4966 -separate_xclbins,983,4964 -separate_xclbins,984,4967 -separate_xclbins,985,4959 -separate_xclbins,986,4957 -separate_xclbins,987,4961 -separate_xclbins,988,4965 -separate_xclbins,989,4957 -separate_xclbins,990,4964 -separate_xclbins,991,4975 -separate_xclbins,992,4963 -separate_xclbins,993,4963 -separate_xclbins,994,4973 -separate_xclbins,995,4964 -separate_xclbins,996,4960 -separate_xclbins,997,4960 -separate_xclbins,998,4970 -separate_xclbins,999,4961 -runlist,0,8347 -runlist,1,4833 -runlist,2,4851 -runlist,3,4854 -runlist,4,4841 -runlist,5,4847 -runlist,6,4850 -runlist,7,4848 -runlist,8,4840 -runlist,9,4845 -runlist,10,4845 -runlist,11,4847 -runlist,12,4844 -runlist,13,4858 -runlist,14,4847 -runlist,15,4841 -runlist,16,4850 -runlist,17,4849 -runlist,18,4852 -runlist,19,4848 -runlist,20,4847 -runlist,21,4852 -runlist,22,4854 -runlist,23,4853 -runlist,24,4849 -runlist,25,4848 -runlist,26,4844 -runlist,27,4846 -runlist,28,4845 -runlist,29,4847 -runlist,30,4850 -runlist,31,4853 -runlist,32,4848 -runlist,33,4854 -runlist,34,4858 -runlist,35,4843 -runlist,36,4846 -runlist,37,4849 -runlist,38,4849 -runlist,39,4845 -runlist,40,4850 -runlist,41,4845 -runlist,42,4847 -runlist,43,4843 -runlist,44,4848 -runlist,45,4842 -runlist,46,4856 -runlist,47,4841 -runlist,48,4836 -runlist,49,4850 -runlist,50,4850 -runlist,51,4845 -runlist,52,4841 -runlist,53,4840 -runlist,54,4858 -runlist,55,4861 -runlist,56,4842 -runlist,57,4844 -runlist,58,4851 -runlist,59,4853 -runlist,60,4847 -runlist,61,4844 -runlist,62,4850 -runlist,63,4850 -runlist,64,4847 -runlist,65,4858 -runlist,66,4843 -runlist,67,4838 -runlist,68,4841 -runlist,69,4846 -runlist,70,4847 -runlist,71,4840 -runlist,72,4848 -runlist,73,4848 +separate_xclbins,974,4968 +separate_xclbins,975,4967 +separate_xclbins,976,4984 +separate_xclbins,977,4962 +separate_xclbins,978,5128 +separate_xclbins,979,5118 +separate_xclbins,980,5086 +separate_xclbins,981,4970 +separate_xclbins,982,4976 +separate_xclbins,983,4981 +separate_xclbins,984,4974 +separate_xclbins,985,4969 +separate_xclbins,986,4967 +separate_xclbins,987,4969 +separate_xclbins,988,4968 +separate_xclbins,989,4970 +separate_xclbins,990,4966 +separate_xclbins,991,4961 +separate_xclbins,992,4969 +separate_xclbins,993,4967 +separate_xclbins,994,4975 +separate_xclbins,995,4966 +separate_xclbins,996,4963 +separate_xclbins,997,4963 +separate_xclbins,998,4963 +separate_xclbins,999,4965 +fused_write32s_reset_ifchangedfinegrained,0,2409 +fused_write32s_reset_ifchangedfinegrained,1,2370 +fused_write32s_reset_ifchangedfinegrained,2,2348 +fused_write32s_reset_ifchangedfinegrained,3,2330 +fused_write32s_reset_ifchangedfinegrained,4,2328 +fused_write32s_reset_ifchangedfinegrained,5,2327 +fused_write32s_reset_ifchangedfinegrained,6,2329 +fused_write32s_reset_ifchangedfinegrained,7,2331 +fused_write32s_reset_ifchangedfinegrained,8,2327 +fused_write32s_reset_ifchangedfinegrained,9,2328 +fused_write32s_reset_ifchangedfinegrained,10,2327 +fused_write32s_reset_ifchangedfinegrained,11,2335 +fused_write32s_reset_ifchangedfinegrained,12,2338 +fused_write32s_reset_ifchangedfinegrained,13,2351 +fused_write32s_reset_ifchangedfinegrained,14,2328 +fused_write32s_reset_ifchangedfinegrained,15,2345 +fused_write32s_reset_ifchangedfinegrained,16,2317 +fused_write32s_reset_ifchangedfinegrained,17,2326 +fused_write32s_reset_ifchangedfinegrained,18,2330 +fused_write32s_reset_ifchangedfinegrained,19,2335 +fused_write32s_reset_ifchangedfinegrained,20,2331 +fused_write32s_reset_ifchangedfinegrained,21,2334 +fused_write32s_reset_ifchangedfinegrained,22,2332 +fused_write32s_reset_ifchangedfinegrained,23,2330 +fused_write32s_reset_ifchangedfinegrained,24,2329 +fused_write32s_reset_ifchangedfinegrained,25,2328 +fused_write32s_reset_ifchangedfinegrained,26,2336 +fused_write32s_reset_ifchangedfinegrained,27,2323 +fused_write32s_reset_ifchangedfinegrained,28,2336 +fused_write32s_reset_ifchangedfinegrained,29,2326 +fused_write32s_reset_ifchangedfinegrained,30,2325 +fused_write32s_reset_ifchangedfinegrained,31,2329 +fused_write32s_reset_ifchangedfinegrained,32,2328 +fused_write32s_reset_ifchangedfinegrained,33,2328 +fused_write32s_reset_ifchangedfinegrained,34,2328 +fused_write32s_reset_ifchangedfinegrained,35,2328 +fused_write32s_reset_ifchangedfinegrained,36,2329 +fused_write32s_reset_ifchangedfinegrained,37,2332 +fused_write32s_reset_ifchangedfinegrained,38,2334 +fused_write32s_reset_ifchangedfinegrained,39,2331 +fused_write32s_reset_ifchangedfinegrained,40,2335 +fused_write32s_reset_ifchangedfinegrained,41,2335 +fused_write32s_reset_ifchangedfinegrained,42,2335 +fused_write32s_reset_ifchangedfinegrained,43,2329 +fused_write32s_reset_ifchangedfinegrained,44,2339 +fused_write32s_reset_ifchangedfinegrained,45,2329 +fused_write32s_reset_ifchangedfinegrained,46,2329 +fused_write32s_reset_ifchangedfinegrained,47,2344 +fused_write32s_reset_ifchangedfinegrained,48,2340 +fused_write32s_reset_ifchangedfinegrained,49,2336 +fused_write32s_reset_ifchangedfinegrained,50,2338 +fused_write32s_reset_ifchangedfinegrained,51,2336 +fused_write32s_reset_ifchangedfinegrained,52,2337 +fused_write32s_reset_ifchangedfinegrained,53,2335 +fused_write32s_reset_ifchangedfinegrained,54,2335 +fused_write32s_reset_ifchangedfinegrained,55,2336 +fused_write32s_reset_ifchangedfinegrained,56,2333 +fused_write32s_reset_ifchangedfinegrained,57,2333 +fused_write32s_reset_ifchangedfinegrained,58,2329 +fused_write32s_reset_ifchangedfinegrained,59,2326 +fused_write32s_reset_ifchangedfinegrained,60,2321 +fused_write32s_reset_ifchangedfinegrained,61,2325 +fused_write32s_reset_ifchangedfinegrained,62,2329 +fused_write32s_reset_ifchangedfinegrained,63,2322 +fused_write32s_reset_ifchangedfinegrained,64,2321 +fused_write32s_reset_ifchangedfinegrained,65,2335 +fused_write32s_reset_ifchangedfinegrained,66,2323 +fused_write32s_reset_ifchangedfinegrained,67,2311 +fused_write32s_reset_ifchangedfinegrained,68,2570 +fused_write32s_reset_ifchangedfinegrained,69,2329 +fused_write32s_reset_ifchangedfinegrained,70,2309 +fused_write32s_reset_ifchangedfinegrained,71,2303 +fused_write32s_reset_ifchangedfinegrained,72,2304 +fused_write32s_reset_ifchangedfinegrained,73,2301 +fused_write32s_reset_ifchangedfinegrained,74,2297 +fused_write32s_reset_ifchangedfinegrained,75,2301 +fused_write32s_reset_ifchangedfinegrained,76,2340 +fused_write32s_reset_ifchangedfinegrained,77,2332 +fused_write32s_reset_ifchangedfinegrained,78,2328 +fused_write32s_reset_ifchangedfinegrained,79,2324 +fused_write32s_reset_ifchangedfinegrained,80,2334 +fused_write32s_reset_ifchangedfinegrained,81,2324 +fused_write32s_reset_ifchangedfinegrained,82,2326 +fused_write32s_reset_ifchangedfinegrained,83,2326 +fused_write32s_reset_ifchangedfinegrained,84,2322 +fused_write32s_reset_ifchangedfinegrained,85,2327 +fused_write32s_reset_ifchangedfinegrained,86,2320 +fused_write32s_reset_ifchangedfinegrained,87,2325 +fused_write32s_reset_ifchangedfinegrained,88,2324 +fused_write32s_reset_ifchangedfinegrained,89,2328 +fused_write32s_reset_ifchangedfinegrained,90,2321 +fused_write32s_reset_ifchangedfinegrained,91,2321 +fused_write32s_reset_ifchangedfinegrained,92,2322 +fused_write32s_reset_ifchangedfinegrained,93,2333 +fused_write32s_reset_ifchangedfinegrained,94,2331 +fused_write32s_reset_ifchangedfinegrained,95,2332 +fused_write32s_reset_ifchangedfinegrained,96,2321 +fused_write32s_reset_ifchangedfinegrained,97,2319 +fused_write32s_reset_ifchangedfinegrained,98,2321 +fused_write32s_reset_ifchangedfinegrained,99,2320 +fused_write32s_reset_ifchangedfinegrained,100,2321 +fused_write32s_reset_ifchangedfinegrained,101,2321 +fused_write32s_reset_ifchangedfinegrained,102,2325 +fused_write32s_reset_ifchangedfinegrained,103,2323 +fused_write32s_reset_ifchangedfinegrained,104,2325 +fused_write32s_reset_ifchangedfinegrained,105,2332 +fused_write32s_reset_ifchangedfinegrained,106,2327 +fused_write32s_reset_ifchangedfinegrained,107,2328 +fused_write32s_reset_ifchangedfinegrained,108,2331 +fused_write32s_reset_ifchangedfinegrained,109,2323 +fused_write32s_reset_ifchangedfinegrained,110,2324 +fused_write32s_reset_ifchangedfinegrained,111,2322 +fused_write32s_reset_ifchangedfinegrained,112,2323 +fused_write32s_reset_ifchangedfinegrained,113,2323 +fused_write32s_reset_ifchangedfinegrained,114,2321 +fused_write32s_reset_ifchangedfinegrained,115,2321 +fused_write32s_reset_ifchangedfinegrained,116,2320 +fused_write32s_reset_ifchangedfinegrained,117,2335 +fused_write32s_reset_ifchangedfinegrained,118,2341 +fused_write32s_reset_ifchangedfinegrained,119,2320 +fused_write32s_reset_ifchangedfinegrained,120,2318 +fused_write32s_reset_ifchangedfinegrained,121,2322 +fused_write32s_reset_ifchangedfinegrained,122,2323 +fused_write32s_reset_ifchangedfinegrained,123,2306 +fused_write32s_reset_ifchangedfinegrained,124,2313 +fused_write32s_reset_ifchangedfinegrained,125,2311 +fused_write32s_reset_ifchangedfinegrained,126,2302 +fused_write32s_reset_ifchangedfinegrained,127,2305 +fused_write32s_reset_ifchangedfinegrained,128,2317 +fused_write32s_reset_ifchangedfinegrained,129,2312 +fused_write32s_reset_ifchangedfinegrained,130,2311 +fused_write32s_reset_ifchangedfinegrained,131,2313 +fused_write32s_reset_ifchangedfinegrained,132,2313 +fused_write32s_reset_ifchangedfinegrained,133,2316 +fused_write32s_reset_ifchangedfinegrained,134,2313 +fused_write32s_reset_ifchangedfinegrained,135,2314 +fused_write32s_reset_ifchangedfinegrained,136,2310 +fused_write32s_reset_ifchangedfinegrained,137,2314 +fused_write32s_reset_ifchangedfinegrained,138,2312 +fused_write32s_reset_ifchangedfinegrained,139,2319 +fused_write32s_reset_ifchangedfinegrained,140,2325 +fused_write32s_reset_ifchangedfinegrained,141,2330 +fused_write32s_reset_ifchangedfinegrained,142,2327 +fused_write32s_reset_ifchangedfinegrained,143,2323 +fused_write32s_reset_ifchangedfinegrained,144,2322 +fused_write32s_reset_ifchangedfinegrained,145,2328 +fused_write32s_reset_ifchangedfinegrained,146,2320 +fused_write32s_reset_ifchangedfinegrained,147,2319 +fused_write32s_reset_ifchangedfinegrained,148,2318 +fused_write32s_reset_ifchangedfinegrained,149,2323 +fused_write32s_reset_ifchangedfinegrained,150,2320 +fused_write32s_reset_ifchangedfinegrained,151,2320 +fused_write32s_reset_ifchangedfinegrained,152,2320 +fused_write32s_reset_ifchangedfinegrained,153,2319 +fused_write32s_reset_ifchangedfinegrained,154,2321 +fused_write32s_reset_ifchangedfinegrained,155,2325 +fused_write32s_reset_ifchangedfinegrained,156,2321 +fused_write32s_reset_ifchangedfinegrained,157,2322 +fused_write32s_reset_ifchangedfinegrained,158,2318 +fused_write32s_reset_ifchangedfinegrained,159,2318 +fused_write32s_reset_ifchangedfinegrained,160,2321 +fused_write32s_reset_ifchangedfinegrained,161,2322 +fused_write32s_reset_ifchangedfinegrained,162,2320 +fused_write32s_reset_ifchangedfinegrained,163,2319 +fused_write32s_reset_ifchangedfinegrained,164,2324 +fused_write32s_reset_ifchangedfinegrained,165,2317 +fused_write32s_reset_ifchangedfinegrained,166,2321 +fused_write32s_reset_ifchangedfinegrained,167,2320 +fused_write32s_reset_ifchangedfinegrained,168,2318 +fused_write32s_reset_ifchangedfinegrained,169,2322 +fused_write32s_reset_ifchangedfinegrained,170,2339 +fused_write32s_reset_ifchangedfinegrained,171,2333 +fused_write32s_reset_ifchangedfinegrained,172,2321 +fused_write32s_reset_ifchangedfinegrained,173,2321 +fused_write32s_reset_ifchangedfinegrained,174,2321 +fused_write32s_reset_ifchangedfinegrained,175,2323 +fused_write32s_reset_ifchangedfinegrained,176,2322 +fused_write32s_reset_ifchangedfinegrained,177,2326 +fused_write32s_reset_ifchangedfinegrained,178,2320 +fused_write32s_reset_ifchangedfinegrained,179,2316 +fused_write32s_reset_ifchangedfinegrained,180,2322 +fused_write32s_reset_ifchangedfinegrained,181,2321 +fused_write32s_reset_ifchangedfinegrained,182,2322 +fused_write32s_reset_ifchangedfinegrained,183,2326 +fused_write32s_reset_ifchangedfinegrained,184,2319 +fused_write32s_reset_ifchangedfinegrained,185,2320 +fused_write32s_reset_ifchangedfinegrained,186,2321 +fused_write32s_reset_ifchangedfinegrained,187,2332 +fused_write32s_reset_ifchangedfinegrained,188,2325 +fused_write32s_reset_ifchangedfinegrained,189,2326 +fused_write32s_reset_ifchangedfinegrained,190,2331 +fused_write32s_reset_ifchangedfinegrained,191,2325 +fused_write32s_reset_ifchangedfinegrained,192,2323 +fused_write32s_reset_ifchangedfinegrained,193,2326 +fused_write32s_reset_ifchangedfinegrained,194,2312 +fused_write32s_reset_ifchangedfinegrained,195,2308 +fused_write32s_reset_ifchangedfinegrained,196,2317 +fused_write32s_reset_ifchangedfinegrained,197,2314 +fused_write32s_reset_ifchangedfinegrained,198,2310 +fused_write32s_reset_ifchangedfinegrained,199,2310 +fused_write32s_reset_ifchangedfinegrained,200,2309 +fused_write32s_reset_ifchangedfinegrained,201,2309 +fused_write32s_reset_ifchangedfinegrained,202,2314 +fused_write32s_reset_ifchangedfinegrained,203,2313 +fused_write32s_reset_ifchangedfinegrained,204,2320 +fused_write32s_reset_ifchangedfinegrained,205,2316 +fused_write32s_reset_ifchangedfinegrained,206,2331 +fused_write32s_reset_ifchangedfinegrained,207,2325 +fused_write32s_reset_ifchangedfinegrained,208,2324 +fused_write32s_reset_ifchangedfinegrained,209,2326 +fused_write32s_reset_ifchangedfinegrained,210,2319 +fused_write32s_reset_ifchangedfinegrained,211,2323 +fused_write32s_reset_ifchangedfinegrained,212,2324 +fused_write32s_reset_ifchangedfinegrained,213,2322 +fused_write32s_reset_ifchangedfinegrained,214,2329 +fused_write32s_reset_ifchangedfinegrained,215,2331 +fused_write32s_reset_ifchangedfinegrained,216,2328 +fused_write32s_reset_ifchangedfinegrained,217,2321 +fused_write32s_reset_ifchangedfinegrained,218,2327 +fused_write32s_reset_ifchangedfinegrained,219,2324 +fused_write32s_reset_ifchangedfinegrained,220,2325 +fused_write32s_reset_ifchangedfinegrained,221,2324 +fused_write32s_reset_ifchangedfinegrained,222,2325 +fused_write32s_reset_ifchangedfinegrained,223,2325 +fused_write32s_reset_ifchangedfinegrained,224,2322 +fused_write32s_reset_ifchangedfinegrained,225,2320 +fused_write32s_reset_ifchangedfinegrained,226,2322 +fused_write32s_reset_ifchangedfinegrained,227,2323 +fused_write32s_reset_ifchangedfinegrained,228,2325 +fused_write32s_reset_ifchangedfinegrained,229,2325 +fused_write32s_reset_ifchangedfinegrained,230,2324 +fused_write32s_reset_ifchangedfinegrained,231,2336 +fused_write32s_reset_ifchangedfinegrained,232,2327 +fused_write32s_reset_ifchangedfinegrained,233,2323 +fused_write32s_reset_ifchangedfinegrained,234,2322 +fused_write32s_reset_ifchangedfinegrained,235,2335 +fused_write32s_reset_ifchangedfinegrained,236,2319 +fused_write32s_reset_ifchangedfinegrained,237,2320 +fused_write32s_reset_ifchangedfinegrained,238,2321 +fused_write32s_reset_ifchangedfinegrained,239,2319 +fused_write32s_reset_ifchangedfinegrained,240,2321 +fused_write32s_reset_ifchangedfinegrained,241,2320 +fused_write32s_reset_ifchangedfinegrained,242,2319 +fused_write32s_reset_ifchangedfinegrained,243,2320 +fused_write32s_reset_ifchangedfinegrained,244,2321 +fused_write32s_reset_ifchangedfinegrained,245,2322 +fused_write32s_reset_ifchangedfinegrained,246,2322 +fused_write32s_reset_ifchangedfinegrained,247,2318 +fused_write32s_reset_ifchangedfinegrained,248,2327 +fused_write32s_reset_ifchangedfinegrained,249,2328 +fused_write32s_reset_ifchangedfinegrained,250,2321 +fused_write32s_reset_ifchangedfinegrained,251,2328 +fused_write32s_reset_ifchangedfinegrained,252,2321 +fused_write32s_reset_ifchangedfinegrained,253,2321 +fused_write32s_reset_ifchangedfinegrained,254,2324 +fused_write32s_reset_ifchangedfinegrained,255,2324 +fused_write32s_reset_ifchangedfinegrained,256,2319 +fused_write32s_reset_ifchangedfinegrained,257,2326 +fused_write32s_reset_ifchangedfinegrained,258,2330 +fused_write32s_reset_ifchangedfinegrained,259,2325 +fused_write32s_reset_ifchangedfinegrained,260,2325 +fused_write32s_reset_ifchangedfinegrained,261,2326 +fused_write32s_reset_ifchangedfinegrained,262,2320 +fused_write32s_reset_ifchangedfinegrained,263,2319 +fused_write32s_reset_ifchangedfinegrained,264,2320 +fused_write32s_reset_ifchangedfinegrained,265,2323 +fused_write32s_reset_ifchangedfinegrained,266,2313 +fused_write32s_reset_ifchangedfinegrained,267,2323 +fused_write32s_reset_ifchangedfinegrained,268,2321 +fused_write32s_reset_ifchangedfinegrained,269,2321 +fused_write32s_reset_ifchangedfinegrained,270,2321 +fused_write32s_reset_ifchangedfinegrained,271,2321 +fused_write32s_reset_ifchangedfinegrained,272,2322 +fused_write32s_reset_ifchangedfinegrained,273,2322 +fused_write32s_reset_ifchangedfinegrained,274,2324 +fused_write32s_reset_ifchangedfinegrained,275,2322 +fused_write32s_reset_ifchangedfinegrained,276,2325 +fused_write32s_reset_ifchangedfinegrained,277,2329 +fused_write32s_reset_ifchangedfinegrained,278,2323 +fused_write32s_reset_ifchangedfinegrained,279,2322 +fused_write32s_reset_ifchangedfinegrained,280,2320 +fused_write32s_reset_ifchangedfinegrained,281,2319 +fused_write32s_reset_ifchangedfinegrained,282,2318 +fused_write32s_reset_ifchangedfinegrained,283,2321 +fused_write32s_reset_ifchangedfinegrained,284,2319 +fused_write32s_reset_ifchangedfinegrained,285,2326 +fused_write32s_reset_ifchangedfinegrained,286,2322 +fused_write32s_reset_ifchangedfinegrained,287,2330 +fused_write32s_reset_ifchangedfinegrained,288,2322 +fused_write32s_reset_ifchangedfinegrained,289,2324 +fused_write32s_reset_ifchangedfinegrained,290,2321 +fused_write32s_reset_ifchangedfinegrained,291,2320 +fused_write32s_reset_ifchangedfinegrained,292,2323 +fused_write32s_reset_ifchangedfinegrained,293,2321 +fused_write32s_reset_ifchangedfinegrained,294,2321 +fused_write32s_reset_ifchangedfinegrained,295,2322 +fused_write32s_reset_ifchangedfinegrained,296,2322 +fused_write32s_reset_ifchangedfinegrained,297,2322 +fused_write32s_reset_ifchangedfinegrained,298,2323 +fused_write32s_reset_ifchangedfinegrained,299,2324 +fused_write32s_reset_ifchangedfinegrained,300,2326 +fused_write32s_reset_ifchangedfinegrained,301,2326 +fused_write32s_reset_ifchangedfinegrained,302,2328 +fused_write32s_reset_ifchangedfinegrained,303,2330 +fused_write32s_reset_ifchangedfinegrained,304,2326 +fused_write32s_reset_ifchangedfinegrained,305,2324 +fused_write32s_reset_ifchangedfinegrained,306,2324 +fused_write32s_reset_ifchangedfinegrained,307,2317 +fused_write32s_reset_ifchangedfinegrained,308,2324 +fused_write32s_reset_ifchangedfinegrained,309,2349 +fused_write32s_reset_ifchangedfinegrained,310,2328 +fused_write32s_reset_ifchangedfinegrained,311,2325 +fused_write32s_reset_ifchangedfinegrained,312,2321 +fused_write32s_reset_ifchangedfinegrained,313,2324 +fused_write32s_reset_ifchangedfinegrained,314,2326 +fused_write32s_reset_ifchangedfinegrained,315,2321 +fused_write32s_reset_ifchangedfinegrained,316,2319 +fused_write32s_reset_ifchangedfinegrained,317,2301 +fused_write32s_reset_ifchangedfinegrained,318,2303 +fused_write32s_reset_ifchangedfinegrained,319,2296 +fused_write32s_reset_ifchangedfinegrained,320,2298 +fused_write32s_reset_ifchangedfinegrained,321,2299 +fused_write32s_reset_ifchangedfinegrained,322,2312 +fused_write32s_reset_ifchangedfinegrained,323,2300 +fused_write32s_reset_ifchangedfinegrained,324,2301 +fused_write32s_reset_ifchangedfinegrained,325,2298 +fused_write32s_reset_ifchangedfinegrained,326,2295 +fused_write32s_reset_ifchangedfinegrained,327,2296 +fused_write32s_reset_ifchangedfinegrained,328,2296 +fused_write32s_reset_ifchangedfinegrained,329,2296 +fused_write32s_reset_ifchangedfinegrained,330,2297 +fused_write32s_reset_ifchangedfinegrained,331,2308 +fused_write32s_reset_ifchangedfinegrained,332,2314 +fused_write32s_reset_ifchangedfinegrained,333,2302 +fused_write32s_reset_ifchangedfinegrained,334,2310 +fused_write32s_reset_ifchangedfinegrained,335,2343 +fused_write32s_reset_ifchangedfinegrained,336,2344 +fused_write32s_reset_ifchangedfinegrained,337,2322 +fused_write32s_reset_ifchangedfinegrained,338,2313 +fused_write32s_reset_ifchangedfinegrained,339,2334 +fused_write32s_reset_ifchangedfinegrained,340,2328 +fused_write32s_reset_ifchangedfinegrained,341,2323 +fused_write32s_reset_ifchangedfinegrained,342,2325 +fused_write32s_reset_ifchangedfinegrained,343,2324 +fused_write32s_reset_ifchangedfinegrained,344,2329 +fused_write32s_reset_ifchangedfinegrained,345,2321 +fused_write32s_reset_ifchangedfinegrained,346,2318 +fused_write32s_reset_ifchangedfinegrained,347,2317 +fused_write32s_reset_ifchangedfinegrained,348,2321 +fused_write32s_reset_ifchangedfinegrained,349,2322 +fused_write32s_reset_ifchangedfinegrained,350,2316 +fused_write32s_reset_ifchangedfinegrained,351,2316 +fused_write32s_reset_ifchangedfinegrained,352,2316 +fused_write32s_reset_ifchangedfinegrained,353,2322 +fused_write32s_reset_ifchangedfinegrained,354,2321 +fused_write32s_reset_ifchangedfinegrained,355,2318 +fused_write32s_reset_ifchangedfinegrained,356,2322 +fused_write32s_reset_ifchangedfinegrained,357,2319 +fused_write32s_reset_ifchangedfinegrained,358,2324 +fused_write32s_reset_ifchangedfinegrained,359,2315 +fused_write32s_reset_ifchangedfinegrained,360,2319 +fused_write32s_reset_ifchangedfinegrained,361,2319 +fused_write32s_reset_ifchangedfinegrained,362,2330 +fused_write32s_reset_ifchangedfinegrained,363,2313 +fused_write32s_reset_ifchangedfinegrained,364,2308 +fused_write32s_reset_ifchangedfinegrained,365,2325 +fused_write32s_reset_ifchangedfinegrained,366,2325 +fused_write32s_reset_ifchangedfinegrained,367,2330 +fused_write32s_reset_ifchangedfinegrained,368,2324 +fused_write32s_reset_ifchangedfinegrained,369,2321 +fused_write32s_reset_ifchangedfinegrained,370,2324 +fused_write32s_reset_ifchangedfinegrained,371,2323 +fused_write32s_reset_ifchangedfinegrained,372,2322 +fused_write32s_reset_ifchangedfinegrained,373,2321 +fused_write32s_reset_ifchangedfinegrained,374,2322 +fused_write32s_reset_ifchangedfinegrained,375,2331 +fused_write32s_reset_ifchangedfinegrained,376,2349 +fused_write32s_reset_ifchangedfinegrained,377,2324 +fused_write32s_reset_ifchangedfinegrained,378,2326 +fused_write32s_reset_ifchangedfinegrained,379,2330 +fused_write32s_reset_ifchangedfinegrained,380,2313 +fused_write32s_reset_ifchangedfinegrained,381,2304 +fused_write32s_reset_ifchangedfinegrained,382,2302 +fused_write32s_reset_ifchangedfinegrained,383,2315 +fused_write32s_reset_ifchangedfinegrained,384,2307 +fused_write32s_reset_ifchangedfinegrained,385,2308 +fused_write32s_reset_ifchangedfinegrained,386,2310 +fused_write32s_reset_ifchangedfinegrained,387,2313 +fused_write32s_reset_ifchangedfinegrained,388,2311 +fused_write32s_reset_ifchangedfinegrained,389,2311 +fused_write32s_reset_ifchangedfinegrained,390,2313 +fused_write32s_reset_ifchangedfinegrained,391,2306 +fused_write32s_reset_ifchangedfinegrained,392,2309 +fused_write32s_reset_ifchangedfinegrained,393,2311 +fused_write32s_reset_ifchangedfinegrained,394,2319 +fused_write32s_reset_ifchangedfinegrained,395,2315 +fused_write32s_reset_ifchangedfinegrained,396,2324 +fused_write32s_reset_ifchangedfinegrained,397,2323 +fused_write32s_reset_ifchangedfinegrained,398,2324 +fused_write32s_reset_ifchangedfinegrained,399,2322 +fused_write32s_reset_ifchangedfinegrained,400,2321 +fused_write32s_reset_ifchangedfinegrained,401,2322 +fused_write32s_reset_ifchangedfinegrained,402,2330 +fused_write32s_reset_ifchangedfinegrained,403,2327 +fused_write32s_reset_ifchangedfinegrained,404,2320 +fused_write32s_reset_ifchangedfinegrained,405,2325 +fused_write32s_reset_ifchangedfinegrained,406,2317 +fused_write32s_reset_ifchangedfinegrained,407,2320 +fused_write32s_reset_ifchangedfinegrained,408,2321 +fused_write32s_reset_ifchangedfinegrained,409,2319 +fused_write32s_reset_ifchangedfinegrained,410,2319 +fused_write32s_reset_ifchangedfinegrained,411,2320 +fused_write32s_reset_ifchangedfinegrained,412,2319 +fused_write32s_reset_ifchangedfinegrained,413,2319 +fused_write32s_reset_ifchangedfinegrained,414,2323 +fused_write32s_reset_ifchangedfinegrained,415,2322 +fused_write32s_reset_ifchangedfinegrained,416,2321 +fused_write32s_reset_ifchangedfinegrained,417,2318 +fused_write32s_reset_ifchangedfinegrained,418,2312 +fused_write32s_reset_ifchangedfinegrained,419,2327 +fused_write32s_reset_ifchangedfinegrained,420,2322 +fused_write32s_reset_ifchangedfinegrained,421,2325 +fused_write32s_reset_ifchangedfinegrained,422,2322 +fused_write32s_reset_ifchangedfinegrained,423,2328 +fused_write32s_reset_ifchangedfinegrained,424,2328 +fused_write32s_reset_ifchangedfinegrained,425,2322 +fused_write32s_reset_ifchangedfinegrained,426,2324 +fused_write32s_reset_ifchangedfinegrained,427,2328 +fused_write32s_reset_ifchangedfinegrained,428,2323 +fused_write32s_reset_ifchangedfinegrained,429,2320 +fused_write32s_reset_ifchangedfinegrained,430,2332 +fused_write32s_reset_ifchangedfinegrained,431,2319 +fused_write32s_reset_ifchangedfinegrained,432,2323 +fused_write32s_reset_ifchangedfinegrained,433,2325 +fused_write32s_reset_ifchangedfinegrained,434,2325 +fused_write32s_reset_ifchangedfinegrained,435,2323 +fused_write32s_reset_ifchangedfinegrained,436,2323 +fused_write32s_reset_ifchangedfinegrained,437,2322 +fused_write32s_reset_ifchangedfinegrained,438,2325 +fused_write32s_reset_ifchangedfinegrained,439,2323 +fused_write32s_reset_ifchangedfinegrained,440,2324 +fused_write32s_reset_ifchangedfinegrained,441,2325 +fused_write32s_reset_ifchangedfinegrained,442,2325 +fused_write32s_reset_ifchangedfinegrained,443,2324 +fused_write32s_reset_ifchangedfinegrained,444,2324 +fused_write32s_reset_ifchangedfinegrained,445,2326 +fused_write32s_reset_ifchangedfinegrained,446,2322 +fused_write32s_reset_ifchangedfinegrained,447,2320 +fused_write32s_reset_ifchangedfinegrained,448,2321 +fused_write32s_reset_ifchangedfinegrained,449,2325 +fused_write32s_reset_ifchangedfinegrained,450,2326 +fused_write32s_reset_ifchangedfinegrained,451,2322 +fused_write32s_reset_ifchangedfinegrained,452,2320 +fused_write32s_reset_ifchangedfinegrained,453,2325 +fused_write32s_reset_ifchangedfinegrained,454,2320 +fused_write32s_reset_ifchangedfinegrained,455,2321 +fused_write32s_reset_ifchangedfinegrained,456,2323 +fused_write32s_reset_ifchangedfinegrained,457,2319 +fused_write32s_reset_ifchangedfinegrained,458,2323 +fused_write32s_reset_ifchangedfinegrained,459,2324 +fused_write32s_reset_ifchangedfinegrained,460,2321 +fused_write32s_reset_ifchangedfinegrained,461,2319 +fused_write32s_reset_ifchangedfinegrained,462,2326 +fused_write32s_reset_ifchangedfinegrained,463,2319 +fused_write32s_reset_ifchangedfinegrained,464,2325 +fused_write32s_reset_ifchangedfinegrained,465,2320 +fused_write32s_reset_ifchangedfinegrained,466,2326 +fused_write32s_reset_ifchangedfinegrained,467,2322 +fused_write32s_reset_ifchangedfinegrained,468,2325 +fused_write32s_reset_ifchangedfinegrained,469,2322 +fused_write32s_reset_ifchangedfinegrained,470,2321 +fused_write32s_reset_ifchangedfinegrained,471,2321 +fused_write32s_reset_ifchangedfinegrained,472,2320 +fused_write32s_reset_ifchangedfinegrained,473,2331 +fused_write32s_reset_ifchangedfinegrained,474,2322 +fused_write32s_reset_ifchangedfinegrained,475,2328 +fused_write32s_reset_ifchangedfinegrained,476,2320 +fused_write32s_reset_ifchangedfinegrained,477,2322 +fused_write32s_reset_ifchangedfinegrained,478,2325 +fused_write32s_reset_ifchangedfinegrained,479,2323 +fused_write32s_reset_ifchangedfinegrained,480,2307 +fused_write32s_reset_ifchangedfinegrained,481,2309 +fused_write32s_reset_ifchangedfinegrained,482,2315 +fused_write32s_reset_ifchangedfinegrained,483,2311 +fused_write32s_reset_ifchangedfinegrained,484,2310 +fused_write32s_reset_ifchangedfinegrained,485,2327 +fused_write32s_reset_ifchangedfinegrained,486,2329 +fused_write32s_reset_ifchangedfinegrained,487,2324 +fused_write32s_reset_ifchangedfinegrained,488,2322 +fused_write32s_reset_ifchangedfinegrained,489,2323 +fused_write32s_reset_ifchangedfinegrained,490,2322 +fused_write32s_reset_ifchangedfinegrained,491,2318 +fused_write32s_reset_ifchangedfinegrained,492,2321 +fused_write32s_reset_ifchangedfinegrained,493,2321 +fused_write32s_reset_ifchangedfinegrained,494,2324 +fused_write32s_reset_ifchangedfinegrained,495,2326 +fused_write32s_reset_ifchangedfinegrained,496,2322 +fused_write32s_reset_ifchangedfinegrained,497,2324 +fused_write32s_reset_ifchangedfinegrained,498,2321 +fused_write32s_reset_ifchangedfinegrained,499,2322 +fused_write32s_reset_ifchangedfinegrained,500,2319 +fused_write32s_reset_ifchangedfinegrained,501,2320 +fused_write32s_reset_ifchangedfinegrained,502,2326 +fused_write32s_reset_ifchangedfinegrained,503,2321 +fused_write32s_reset_ifchangedfinegrained,504,2322 +fused_write32s_reset_ifchangedfinegrained,505,2323 +fused_write32s_reset_ifchangedfinegrained,506,2324 +fused_write32s_reset_ifchangedfinegrained,507,2322 +fused_write32s_reset_ifchangedfinegrained,508,2323 +fused_write32s_reset_ifchangedfinegrained,509,2324 +fused_write32s_reset_ifchangedfinegrained,510,2325 +fused_write32s_reset_ifchangedfinegrained,511,2316 +fused_write32s_reset_ifchangedfinegrained,512,2306 +fused_write32s_reset_ifchangedfinegrained,513,2299 +fused_write32s_reset_ifchangedfinegrained,514,2311 +fused_write32s_reset_ifchangedfinegrained,515,2302 +fused_write32s_reset_ifchangedfinegrained,516,2310 +fused_write32s_reset_ifchangedfinegrained,517,2304 +fused_write32s_reset_ifchangedfinegrained,518,2310 +fused_write32s_reset_ifchangedfinegrained,519,2320 +fused_write32s_reset_ifchangedfinegrained,520,2322 +fused_write32s_reset_ifchangedfinegrained,521,2320 +fused_write32s_reset_ifchangedfinegrained,522,2319 +fused_write32s_reset_ifchangedfinegrained,523,2317 +fused_write32s_reset_ifchangedfinegrained,524,2322 +fused_write32s_reset_ifchangedfinegrained,525,2322 +fused_write32s_reset_ifchangedfinegrained,526,2325 +fused_write32s_reset_ifchangedfinegrained,527,2319 +fused_write32s_reset_ifchangedfinegrained,528,2322 +fused_write32s_reset_ifchangedfinegrained,529,2326 +fused_write32s_reset_ifchangedfinegrained,530,2325 +fused_write32s_reset_ifchangedfinegrained,531,2324 +fused_write32s_reset_ifchangedfinegrained,532,2321 +fused_write32s_reset_ifchangedfinegrained,533,2328 +fused_write32s_reset_ifchangedfinegrained,534,2323 +fused_write32s_reset_ifchangedfinegrained,535,2319 +fused_write32s_reset_ifchangedfinegrained,536,2322 +fused_write32s_reset_ifchangedfinegrained,537,2308 +fused_write32s_reset_ifchangedfinegrained,538,2310 +fused_write32s_reset_ifchangedfinegrained,539,2309 +fused_write32s_reset_ifchangedfinegrained,540,2308 +fused_write32s_reset_ifchangedfinegrained,541,2310 +fused_write32s_reset_ifchangedfinegrained,542,2310 +fused_write32s_reset_ifchangedfinegrained,543,2307 +fused_write32s_reset_ifchangedfinegrained,544,2310 +fused_write32s_reset_ifchangedfinegrained,545,2308 +fused_write32s_reset_ifchangedfinegrained,546,2307 +fused_write32s_reset_ifchangedfinegrained,547,2307 +fused_write32s_reset_ifchangedfinegrained,548,2311 +fused_write32s_reset_ifchangedfinegrained,549,2311 +fused_write32s_reset_ifchangedfinegrained,550,2313 +fused_write32s_reset_ifchangedfinegrained,551,2309 +fused_write32s_reset_ifchangedfinegrained,552,2311 +fused_write32s_reset_ifchangedfinegrained,553,2311 +fused_write32s_reset_ifchangedfinegrained,554,2313 +fused_write32s_reset_ifchangedfinegrained,555,2309 +fused_write32s_reset_ifchangedfinegrained,556,2305 +fused_write32s_reset_ifchangedfinegrained,557,2309 +fused_write32s_reset_ifchangedfinegrained,558,2308 +fused_write32s_reset_ifchangedfinegrained,559,2314 +fused_write32s_reset_ifchangedfinegrained,560,2305 +fused_write32s_reset_ifchangedfinegrained,561,2310 +fused_write32s_reset_ifchangedfinegrained,562,2308 +fused_write32s_reset_ifchangedfinegrained,563,2309 +fused_write32s_reset_ifchangedfinegrained,564,2308 +fused_write32s_reset_ifchangedfinegrained,565,2307 +fused_write32s_reset_ifchangedfinegrained,566,2311 +fused_write32s_reset_ifchangedfinegrained,567,2303 +fused_write32s_reset_ifchangedfinegrained,568,2306 +fused_write32s_reset_ifchangedfinegrained,569,2308 +fused_write32s_reset_ifchangedfinegrained,570,2305 +fused_write32s_reset_ifchangedfinegrained,571,2308 +fused_write32s_reset_ifchangedfinegrained,572,2307 +fused_write32s_reset_ifchangedfinegrained,573,2311 +fused_write32s_reset_ifchangedfinegrained,574,2315 +fused_write32s_reset_ifchangedfinegrained,575,2308 +fused_write32s_reset_ifchangedfinegrained,576,2307 +fused_write32s_reset_ifchangedfinegrained,577,2310 +fused_write32s_reset_ifchangedfinegrained,578,2307 +fused_write32s_reset_ifchangedfinegrained,579,2309 +fused_write32s_reset_ifchangedfinegrained,580,2309 +fused_write32s_reset_ifchangedfinegrained,581,2307 +fused_write32s_reset_ifchangedfinegrained,582,2310 +fused_write32s_reset_ifchangedfinegrained,583,2309 +fused_write32s_reset_ifchangedfinegrained,584,2310 +fused_write32s_reset_ifchangedfinegrained,585,2312 +fused_write32s_reset_ifchangedfinegrained,586,2308 +fused_write32s_reset_ifchangedfinegrained,587,2312 +fused_write32s_reset_ifchangedfinegrained,588,2310 +fused_write32s_reset_ifchangedfinegrained,589,2312 +fused_write32s_reset_ifchangedfinegrained,590,2308 +fused_write32s_reset_ifchangedfinegrained,591,2310 +fused_write32s_reset_ifchangedfinegrained,592,2307 +fused_write32s_reset_ifchangedfinegrained,593,2309 +fused_write32s_reset_ifchangedfinegrained,594,2310 +fused_write32s_reset_ifchangedfinegrained,595,2311 +fused_write32s_reset_ifchangedfinegrained,596,2305 +fused_write32s_reset_ifchangedfinegrained,597,2308 +fused_write32s_reset_ifchangedfinegrained,598,2310 +fused_write32s_reset_ifchangedfinegrained,599,2310 +fused_write32s_reset_ifchangedfinegrained,600,2307 +fused_write32s_reset_ifchangedfinegrained,601,2309 +fused_write32s_reset_ifchangedfinegrained,602,2310 +fused_write32s_reset_ifchangedfinegrained,603,2312 +fused_write32s_reset_ifchangedfinegrained,604,2309 +fused_write32s_reset_ifchangedfinegrained,605,2309 +fused_write32s_reset_ifchangedfinegrained,606,2310 +fused_write32s_reset_ifchangedfinegrained,607,2308 +fused_write32s_reset_ifchangedfinegrained,608,2311 +fused_write32s_reset_ifchangedfinegrained,609,2313 +fused_write32s_reset_ifchangedfinegrained,610,2311 +fused_write32s_reset_ifchangedfinegrained,611,2309 +fused_write32s_reset_ifchangedfinegrained,612,2308 +fused_write32s_reset_ifchangedfinegrained,613,2307 +fused_write32s_reset_ifchangedfinegrained,614,2311 +fused_write32s_reset_ifchangedfinegrained,615,2308 +fused_write32s_reset_ifchangedfinegrained,616,2309 +fused_write32s_reset_ifchangedfinegrained,617,2310 +fused_write32s_reset_ifchangedfinegrained,618,2307 +fused_write32s_reset_ifchangedfinegrained,619,2310 +fused_write32s_reset_ifchangedfinegrained,620,2308 +fused_write32s_reset_ifchangedfinegrained,621,2309 +fused_write32s_reset_ifchangedfinegrained,622,2307 +fused_write32s_reset_ifchangedfinegrained,623,2308 +fused_write32s_reset_ifchangedfinegrained,624,2306 +fused_write32s_reset_ifchangedfinegrained,625,2308 +fused_write32s_reset_ifchangedfinegrained,626,2309 +fused_write32s_reset_ifchangedfinegrained,627,2308 +fused_write32s_reset_ifchangedfinegrained,628,2312 +fused_write32s_reset_ifchangedfinegrained,629,2311 +fused_write32s_reset_ifchangedfinegrained,630,2312 +fused_write32s_reset_ifchangedfinegrained,631,2308 +fused_write32s_reset_ifchangedfinegrained,632,2306 +fused_write32s_reset_ifchangedfinegrained,633,2309 +fused_write32s_reset_ifchangedfinegrained,634,2308 +fused_write32s_reset_ifchangedfinegrained,635,2308 +fused_write32s_reset_ifchangedfinegrained,636,2309 +fused_write32s_reset_ifchangedfinegrained,637,2310 +fused_write32s_reset_ifchangedfinegrained,638,2309 +fused_write32s_reset_ifchangedfinegrained,639,2312 +fused_write32s_reset_ifchangedfinegrained,640,2308 +fused_write32s_reset_ifchangedfinegrained,641,2308 +fused_write32s_reset_ifchangedfinegrained,642,2307 +fused_write32s_reset_ifchangedfinegrained,643,2308 +fused_write32s_reset_ifchangedfinegrained,644,2311 +fused_write32s_reset_ifchangedfinegrained,645,2310 +fused_write32s_reset_ifchangedfinegrained,646,2316 +fused_write32s_reset_ifchangedfinegrained,647,2307 +fused_write32s_reset_ifchangedfinegrained,648,2307 +fused_write32s_reset_ifchangedfinegrained,649,2311 +fused_write32s_reset_ifchangedfinegrained,650,2310 +fused_write32s_reset_ifchangedfinegrained,651,2309 +fused_write32s_reset_ifchangedfinegrained,652,2305 +fused_write32s_reset_ifchangedfinegrained,653,2307 +fused_write32s_reset_ifchangedfinegrained,654,2313 +fused_write32s_reset_ifchangedfinegrained,655,2312 +fused_write32s_reset_ifchangedfinegrained,656,2312 +fused_write32s_reset_ifchangedfinegrained,657,2310 +fused_write32s_reset_ifchangedfinegrained,658,2309 +fused_write32s_reset_ifchangedfinegrained,659,2309 +fused_write32s_reset_ifchangedfinegrained,660,2312 +fused_write32s_reset_ifchangedfinegrained,661,2311 +fused_write32s_reset_ifchangedfinegrained,662,2308 +fused_write32s_reset_ifchangedfinegrained,663,2312 +fused_write32s_reset_ifchangedfinegrained,664,2307 +fused_write32s_reset_ifchangedfinegrained,665,2309 +fused_write32s_reset_ifchangedfinegrained,666,2307 +fused_write32s_reset_ifchangedfinegrained,667,2310 +fused_write32s_reset_ifchangedfinegrained,668,2312 +fused_write32s_reset_ifchangedfinegrained,669,2306 +fused_write32s_reset_ifchangedfinegrained,670,2309 +fused_write32s_reset_ifchangedfinegrained,671,2308 +fused_write32s_reset_ifchangedfinegrained,672,2308 +fused_write32s_reset_ifchangedfinegrained,673,2310 +fused_write32s_reset_ifchangedfinegrained,674,2312 +fused_write32s_reset_ifchangedfinegrained,675,2308 +fused_write32s_reset_ifchangedfinegrained,676,2307 +fused_write32s_reset_ifchangedfinegrained,677,2308 +fused_write32s_reset_ifchangedfinegrained,678,2304 +fused_write32s_reset_ifchangedfinegrained,679,2310 +fused_write32s_reset_ifchangedfinegrained,680,2310 +fused_write32s_reset_ifchangedfinegrained,681,2311 +fused_write32s_reset_ifchangedfinegrained,682,2313 +fused_write32s_reset_ifchangedfinegrained,683,2310 +fused_write32s_reset_ifchangedfinegrained,684,2306 +fused_write32s_reset_ifchangedfinegrained,685,2312 +fused_write32s_reset_ifchangedfinegrained,686,2308 +fused_write32s_reset_ifchangedfinegrained,687,2312 +fused_write32s_reset_ifchangedfinegrained,688,2308 +fused_write32s_reset_ifchangedfinegrained,689,2316 +fused_write32s_reset_ifchangedfinegrained,690,2309 +fused_write32s_reset_ifchangedfinegrained,691,2312 +fused_write32s_reset_ifchangedfinegrained,692,2309 +fused_write32s_reset_ifchangedfinegrained,693,2309 +fused_write32s_reset_ifchangedfinegrained,694,2314 +fused_write32s_reset_ifchangedfinegrained,695,2307 +fused_write32s_reset_ifchangedfinegrained,696,2309 +fused_write32s_reset_ifchangedfinegrained,697,2309 +fused_write32s_reset_ifchangedfinegrained,698,2309 +fused_write32s_reset_ifchangedfinegrained,699,2309 +fused_write32s_reset_ifchangedfinegrained,700,2310 +fused_write32s_reset_ifchangedfinegrained,701,2312 +fused_write32s_reset_ifchangedfinegrained,702,2307 +fused_write32s_reset_ifchangedfinegrained,703,2310 +fused_write32s_reset_ifchangedfinegrained,704,2307 +fused_write32s_reset_ifchangedfinegrained,705,2308 +fused_write32s_reset_ifchangedfinegrained,706,2311 +fused_write32s_reset_ifchangedfinegrained,707,2304 +fused_write32s_reset_ifchangedfinegrained,708,2311 +fused_write32s_reset_ifchangedfinegrained,709,2306 +fused_write32s_reset_ifchangedfinegrained,710,2309 +fused_write32s_reset_ifchangedfinegrained,711,2310 +fused_write32s_reset_ifchangedfinegrained,712,2308 +fused_write32s_reset_ifchangedfinegrained,713,2310 +fused_write32s_reset_ifchangedfinegrained,714,2307 +fused_write32s_reset_ifchangedfinegrained,715,2314 +fused_write32s_reset_ifchangedfinegrained,716,2308 +fused_write32s_reset_ifchangedfinegrained,717,2312 +fused_write32s_reset_ifchangedfinegrained,718,2309 +fused_write32s_reset_ifchangedfinegrained,719,2309 +fused_write32s_reset_ifchangedfinegrained,720,2311 +fused_write32s_reset_ifchangedfinegrained,721,2306 +fused_write32s_reset_ifchangedfinegrained,722,2308 +fused_write32s_reset_ifchangedfinegrained,723,2311 +fused_write32s_reset_ifchangedfinegrained,724,2312 +fused_write32s_reset_ifchangedfinegrained,725,2309 +fused_write32s_reset_ifchangedfinegrained,726,2309 +fused_write32s_reset_ifchangedfinegrained,727,2308 +fused_write32s_reset_ifchangedfinegrained,728,2310 +fused_write32s_reset_ifchangedfinegrained,729,2310 +fused_write32s_reset_ifchangedfinegrained,730,2312 +fused_write32s_reset_ifchangedfinegrained,731,2306 +fused_write32s_reset_ifchangedfinegrained,732,2316 +fused_write32s_reset_ifchangedfinegrained,733,2307 +fused_write32s_reset_ifchangedfinegrained,734,2309 +fused_write32s_reset_ifchangedfinegrained,735,2310 +fused_write32s_reset_ifchangedfinegrained,736,2312 +fused_write32s_reset_ifchangedfinegrained,737,2307 +fused_write32s_reset_ifchangedfinegrained,738,2310 +fused_write32s_reset_ifchangedfinegrained,739,2308 +fused_write32s_reset_ifchangedfinegrained,740,2309 +fused_write32s_reset_ifchangedfinegrained,741,2310 +fused_write32s_reset_ifchangedfinegrained,742,2307 +fused_write32s_reset_ifchangedfinegrained,743,2310 +fused_write32s_reset_ifchangedfinegrained,744,2312 +fused_write32s_reset_ifchangedfinegrained,745,2310 +fused_write32s_reset_ifchangedfinegrained,746,2310 +fused_write32s_reset_ifchangedfinegrained,747,2311 +fused_write32s_reset_ifchangedfinegrained,748,2311 +fused_write32s_reset_ifchangedfinegrained,749,2306 +fused_write32s_reset_ifchangedfinegrained,750,2312 +fused_write32s_reset_ifchangedfinegrained,751,2311 +fused_write32s_reset_ifchangedfinegrained,752,2310 +fused_write32s_reset_ifchangedfinegrained,753,2310 +fused_write32s_reset_ifchangedfinegrained,754,2310 +fused_write32s_reset_ifchangedfinegrained,755,2310 +fused_write32s_reset_ifchangedfinegrained,756,2307 +fused_write32s_reset_ifchangedfinegrained,757,2308 +fused_write32s_reset_ifchangedfinegrained,758,2310 +fused_write32s_reset_ifchangedfinegrained,759,2310 +fused_write32s_reset_ifchangedfinegrained,760,2311 +fused_write32s_reset_ifchangedfinegrained,761,2311 +fused_write32s_reset_ifchangedfinegrained,762,2311 +fused_write32s_reset_ifchangedfinegrained,763,2311 +fused_write32s_reset_ifchangedfinegrained,764,2308 +fused_write32s_reset_ifchangedfinegrained,765,2309 +fused_write32s_reset_ifchangedfinegrained,766,2309 +fused_write32s_reset_ifchangedfinegrained,767,2310 +fused_write32s_reset_ifchangedfinegrained,768,2308 +fused_write32s_reset_ifchangedfinegrained,769,2312 +fused_write32s_reset_ifchangedfinegrained,770,2310 +fused_write32s_reset_ifchangedfinegrained,771,2309 +fused_write32s_reset_ifchangedfinegrained,772,2309 +fused_write32s_reset_ifchangedfinegrained,773,2308 +fused_write32s_reset_ifchangedfinegrained,774,2311 +fused_write32s_reset_ifchangedfinegrained,775,2308 +fused_write32s_reset_ifchangedfinegrained,776,2318 +fused_write32s_reset_ifchangedfinegrained,777,2307 +fused_write32s_reset_ifchangedfinegrained,778,2310 +fused_write32s_reset_ifchangedfinegrained,779,2309 +fused_write32s_reset_ifchangedfinegrained,780,2309 +fused_write32s_reset_ifchangedfinegrained,781,2311 +fused_write32s_reset_ifchangedfinegrained,782,2306 +fused_write32s_reset_ifchangedfinegrained,783,2311 +fused_write32s_reset_ifchangedfinegrained,784,2309 +fused_write32s_reset_ifchangedfinegrained,785,2308 +fused_write32s_reset_ifchangedfinegrained,786,2307 +fused_write32s_reset_ifchangedfinegrained,787,2309 +fused_write32s_reset_ifchangedfinegrained,788,2310 +fused_write32s_reset_ifchangedfinegrained,789,2311 +fused_write32s_reset_ifchangedfinegrained,790,2313 +fused_write32s_reset_ifchangedfinegrained,791,2307 +fused_write32s_reset_ifchangedfinegrained,792,2313 +fused_write32s_reset_ifchangedfinegrained,793,2312 +fused_write32s_reset_ifchangedfinegrained,794,2309 +fused_write32s_reset_ifchangedfinegrained,795,2310 +fused_write32s_reset_ifchangedfinegrained,796,2308 +fused_write32s_reset_ifchangedfinegrained,797,2307 +fused_write32s_reset_ifchangedfinegrained,798,2311 +fused_write32s_reset_ifchangedfinegrained,799,2305 +fused_write32s_reset_ifchangedfinegrained,800,2309 +fused_write32s_reset_ifchangedfinegrained,801,2308 +fused_write32s_reset_ifchangedfinegrained,802,2309 +fused_write32s_reset_ifchangedfinegrained,803,2310 +fused_write32s_reset_ifchangedfinegrained,804,2308 +fused_write32s_reset_ifchangedfinegrained,805,2310 +fused_write32s_reset_ifchangedfinegrained,806,2307 +fused_write32s_reset_ifchangedfinegrained,807,2309 +fused_write32s_reset_ifchangedfinegrained,808,2309 +fused_write32s_reset_ifchangedfinegrained,809,2311 +fused_write32s_reset_ifchangedfinegrained,810,2306 +fused_write32s_reset_ifchangedfinegrained,811,2308 +fused_write32s_reset_ifchangedfinegrained,812,2310 +fused_write32s_reset_ifchangedfinegrained,813,2309 +fused_write32s_reset_ifchangedfinegrained,814,2308 +fused_write32s_reset_ifchangedfinegrained,815,2306 +fused_write32s_reset_ifchangedfinegrained,816,2310 +fused_write32s_reset_ifchangedfinegrained,817,2308 +fused_write32s_reset_ifchangedfinegrained,818,2308 +fused_write32s_reset_ifchangedfinegrained,819,2314 +fused_write32s_reset_ifchangedfinegrained,820,2310 +fused_write32s_reset_ifchangedfinegrained,821,2319 +fused_write32s_reset_ifchangedfinegrained,822,2308 +fused_write32s_reset_ifchangedfinegrained,823,2310 +fused_write32s_reset_ifchangedfinegrained,824,2308 +fused_write32s_reset_ifchangedfinegrained,825,2309 +fused_write32s_reset_ifchangedfinegrained,826,2311 +fused_write32s_reset_ifchangedfinegrained,827,2308 +fused_write32s_reset_ifchangedfinegrained,828,2308 +fused_write32s_reset_ifchangedfinegrained,829,2305 +fused_write32s_reset_ifchangedfinegrained,830,2312 +fused_write32s_reset_ifchangedfinegrained,831,2309 +fused_write32s_reset_ifchangedfinegrained,832,2310 +fused_write32s_reset_ifchangedfinegrained,833,2308 +fused_write32s_reset_ifchangedfinegrained,834,2297 +fused_write32s_reset_ifchangedfinegrained,835,2310 +fused_write32s_reset_ifchangedfinegrained,836,2307 +fused_write32s_reset_ifchangedfinegrained,837,2310 +fused_write32s_reset_ifchangedfinegrained,838,2308 +fused_write32s_reset_ifchangedfinegrained,839,2308 +fused_write32s_reset_ifchangedfinegrained,840,2305 +fused_write32s_reset_ifchangedfinegrained,841,2309 +fused_write32s_reset_ifchangedfinegrained,842,2310 +fused_write32s_reset_ifchangedfinegrained,843,2311 +fused_write32s_reset_ifchangedfinegrained,844,2309 +fused_write32s_reset_ifchangedfinegrained,845,2308 +fused_write32s_reset_ifchangedfinegrained,846,2310 +fused_write32s_reset_ifchangedfinegrained,847,2310 +fused_write32s_reset_ifchangedfinegrained,848,2307 +fused_write32s_reset_ifchangedfinegrained,849,2310 +fused_write32s_reset_ifchangedfinegrained,850,2308 +fused_write32s_reset_ifchangedfinegrained,851,2311 +fused_write32s_reset_ifchangedfinegrained,852,2310 +fused_write32s_reset_ifchangedfinegrained,853,2306 +fused_write32s_reset_ifchangedfinegrained,854,2310 +fused_write32s_reset_ifchangedfinegrained,855,2311 +fused_write32s_reset_ifchangedfinegrained,856,2310 +fused_write32s_reset_ifchangedfinegrained,857,2308 +fused_write32s_reset_ifchangedfinegrained,858,2306 +fused_write32s_reset_ifchangedfinegrained,859,2311 +fused_write32s_reset_ifchangedfinegrained,860,2306 +fused_write32s_reset_ifchangedfinegrained,861,2309 +fused_write32s_reset_ifchangedfinegrained,862,2316 +fused_write32s_reset_ifchangedfinegrained,863,2315 +fused_write32s_reset_ifchangedfinegrained,864,2310 +fused_write32s_reset_ifchangedfinegrained,865,2311 +fused_write32s_reset_ifchangedfinegrained,866,2309 +fused_write32s_reset_ifchangedfinegrained,867,2312 +fused_write32s_reset_ifchangedfinegrained,868,2310 +fused_write32s_reset_ifchangedfinegrained,869,2308 +fused_write32s_reset_ifchangedfinegrained,870,2311 +fused_write32s_reset_ifchangedfinegrained,871,2305 +fused_write32s_reset_ifchangedfinegrained,872,2307 +fused_write32s_reset_ifchangedfinegrained,873,2308 +fused_write32s_reset_ifchangedfinegrained,874,2309 +fused_write32s_reset_ifchangedfinegrained,875,2307 +fused_write32s_reset_ifchangedfinegrained,876,2307 +fused_write32s_reset_ifchangedfinegrained,877,2308 +fused_write32s_reset_ifchangedfinegrained,878,2312 +fused_write32s_reset_ifchangedfinegrained,879,2309 +fused_write32s_reset_ifchangedfinegrained,880,2311 +fused_write32s_reset_ifchangedfinegrained,881,2308 +fused_write32s_reset_ifchangedfinegrained,882,2310 +fused_write32s_reset_ifchangedfinegrained,883,2312 +fused_write32s_reset_ifchangedfinegrained,884,2313 +fused_write32s_reset_ifchangedfinegrained,885,2312 +fused_write32s_reset_ifchangedfinegrained,886,2308 +fused_write32s_reset_ifchangedfinegrained,887,2309 +fused_write32s_reset_ifchangedfinegrained,888,2308 +fused_write32s_reset_ifchangedfinegrained,889,2309 +fused_write32s_reset_ifchangedfinegrained,890,2308 +fused_write32s_reset_ifchangedfinegrained,891,2311 +fused_write32s_reset_ifchangedfinegrained,892,2311 +fused_write32s_reset_ifchangedfinegrained,893,2308 +fused_write32s_reset_ifchangedfinegrained,894,2309 +fused_write32s_reset_ifchangedfinegrained,895,2309 +fused_write32s_reset_ifchangedfinegrained,896,2310 +fused_write32s_reset_ifchangedfinegrained,897,2307 +fused_write32s_reset_ifchangedfinegrained,898,2312 +fused_write32s_reset_ifchangedfinegrained,899,2309 +fused_write32s_reset_ifchangedfinegrained,900,2310 +fused_write32s_reset_ifchangedfinegrained,901,2309 +fused_write32s_reset_ifchangedfinegrained,902,2309 +fused_write32s_reset_ifchangedfinegrained,903,2312 +fused_write32s_reset_ifchangedfinegrained,904,2306 +fused_write32s_reset_ifchangedfinegrained,905,2312 +fused_write32s_reset_ifchangedfinegrained,906,2308 +fused_write32s_reset_ifchangedfinegrained,907,2311 +fused_write32s_reset_ifchangedfinegrained,908,2309 +fused_write32s_reset_ifchangedfinegrained,909,2307 +fused_write32s_reset_ifchangedfinegrained,910,2312 +fused_write32s_reset_ifchangedfinegrained,911,2305 +fused_write32s_reset_ifchangedfinegrained,912,2307 +fused_write32s_reset_ifchangedfinegrained,913,2310 +fused_write32s_reset_ifchangedfinegrained,914,2309 +fused_write32s_reset_ifchangedfinegrained,915,2313 +fused_write32s_reset_ifchangedfinegrained,916,2308 +fused_write32s_reset_ifchangedfinegrained,917,2312 +fused_write32s_reset_ifchangedfinegrained,918,2312 +fused_write32s_reset_ifchangedfinegrained,919,2308 +fused_write32s_reset_ifchangedfinegrained,920,2306 +fused_write32s_reset_ifchangedfinegrained,921,2308 +fused_write32s_reset_ifchangedfinegrained,922,2308 +fused_write32s_reset_ifchangedfinegrained,923,2311 +fused_write32s_reset_ifchangedfinegrained,924,2310 +fused_write32s_reset_ifchangedfinegrained,925,2308 +fused_write32s_reset_ifchangedfinegrained,926,2309 +fused_write32s_reset_ifchangedfinegrained,927,2312 +fused_write32s_reset_ifchangedfinegrained,928,2308 +fused_write32s_reset_ifchangedfinegrained,929,2309 +fused_write32s_reset_ifchangedfinegrained,930,2309 +fused_write32s_reset_ifchangedfinegrained,931,2312 +fused_write32s_reset_ifchangedfinegrained,932,2310 +fused_write32s_reset_ifchangedfinegrained,933,2310 +fused_write32s_reset_ifchangedfinegrained,934,2310 +fused_write32s_reset_ifchangedfinegrained,935,2309 +fused_write32s_reset_ifchangedfinegrained,936,2308 +fused_write32s_reset_ifchangedfinegrained,937,2310 +fused_write32s_reset_ifchangedfinegrained,938,2309 +fused_write32s_reset_ifchangedfinegrained,939,2310 +fused_write32s_reset_ifchangedfinegrained,940,2311 +fused_write32s_reset_ifchangedfinegrained,941,2308 +fused_write32s_reset_ifchangedfinegrained,942,2308 +fused_write32s_reset_ifchangedfinegrained,943,2309 +fused_write32s_reset_ifchangedfinegrained,944,2311 +fused_write32s_reset_ifchangedfinegrained,945,2312 +fused_write32s_reset_ifchangedfinegrained,946,2311 +fused_write32s_reset_ifchangedfinegrained,947,2313 +fused_write32s_reset_ifchangedfinegrained,948,2306 +fused_write32s_reset_ifchangedfinegrained,949,2310 +fused_write32s_reset_ifchangedfinegrained,950,2309 +fused_write32s_reset_ifchangedfinegrained,951,2310 +fused_write32s_reset_ifchangedfinegrained,952,2312 +fused_write32s_reset_ifchangedfinegrained,953,2307 +fused_write32s_reset_ifchangedfinegrained,954,2306 +fused_write32s_reset_ifchangedfinegrained,955,2310 +fused_write32s_reset_ifchangedfinegrained,956,2311 +fused_write32s_reset_ifchangedfinegrained,957,2309 +fused_write32s_reset_ifchangedfinegrained,958,2308 +fused_write32s_reset_ifchangedfinegrained,959,2310 +fused_write32s_reset_ifchangedfinegrained,960,2310 +fused_write32s_reset_ifchangedfinegrained,961,2311 +fused_write32s_reset_ifchangedfinegrained,962,2310 +fused_write32s_reset_ifchangedfinegrained,963,2308 +fused_write32s_reset_ifchangedfinegrained,964,2311 +fused_write32s_reset_ifchangedfinegrained,965,2310 +fused_write32s_reset_ifchangedfinegrained,966,2307 +fused_write32s_reset_ifchangedfinegrained,967,2311 +fused_write32s_reset_ifchangedfinegrained,968,2306 +fused_write32s_reset_ifchangedfinegrained,969,2313 +fused_write32s_reset_ifchangedfinegrained,970,2310 +fused_write32s_reset_ifchangedfinegrained,971,2307 +fused_write32s_reset_ifchangedfinegrained,972,2308 +fused_write32s_reset_ifchangedfinegrained,973,2305 +fused_write32s_reset_ifchangedfinegrained,974,2309 +fused_write32s_reset_ifchangedfinegrained,975,2311 +fused_write32s_reset_ifchangedfinegrained,976,2312 +fused_write32s_reset_ifchangedfinegrained,977,2308 +fused_write32s_reset_ifchangedfinegrained,978,2312 +fused_write32s_reset_ifchangedfinegrained,979,2310 +fused_write32s_reset_ifchangedfinegrained,980,2314 +fused_write32s_reset_ifchangedfinegrained,981,2314 +fused_write32s_reset_ifchangedfinegrained,982,2307 +fused_write32s_reset_ifchangedfinegrained,983,2310 +fused_write32s_reset_ifchangedfinegrained,984,2310 +fused_write32s_reset_ifchangedfinegrained,985,2310 +fused_write32s_reset_ifchangedfinegrained,986,2311 +fused_write32s_reset_ifchangedfinegrained,987,2309 +fused_write32s_reset_ifchangedfinegrained,988,2311 +fused_write32s_reset_ifchangedfinegrained,989,2310 +fused_write32s_reset_ifchangedfinegrained,990,2310 +fused_write32s_reset_ifchangedfinegrained,991,2312 +fused_write32s_reset_ifchangedfinegrained,992,2310 +fused_write32s_reset_ifchangedfinegrained,993,2306 +fused_write32s_reset_ifchangedfinegrained,994,2308 +fused_write32s_reset_ifchangedfinegrained,995,2310 +fused_write32s_reset_ifchangedfinegrained,996,2311 +fused_write32s_reset_ifchangedfinegrained,997,2311 +fused_write32s_reset_ifchangedfinegrained,998,2309 +fused_write32s_reset_ifchangedfinegrained,999,2308 +fused_write32s_reset_never,0,2408 +fused_write32s_reset_never,1,2344 +fused_write32s_reset_never,2,2350 +fused_write32s_reset_never,3,2353 +fused_write32s_reset_never,4,2347 +fused_write32s_reset_never,5,2351 +fused_write32s_reset_never,6,2349 +fused_write32s_reset_never,7,2350 +fused_write32s_reset_never,8,2348 +fused_write32s_reset_never,9,2349 +fused_write32s_reset_never,10,2350 +fused_write32s_reset_never,11,2348 +fused_write32s_reset_never,12,2349 +fused_write32s_reset_never,13,2347 +fused_write32s_reset_never,14,2350 +fused_write32s_reset_never,15,2350 +fused_write32s_reset_never,16,2347 +fused_write32s_reset_never,17,2349 +fused_write32s_reset_never,18,2348 +fused_write32s_reset_never,19,2350 +fused_write32s_reset_never,20,2349 +fused_write32s_reset_never,21,2358 +fused_write32s_reset_never,22,2345 +fused_write32s_reset_never,23,2349 +fused_write32s_reset_never,24,2351 +fused_write32s_reset_never,25,2347 +fused_write32s_reset_never,26,2350 +fused_write32s_reset_never,27,2348 +fused_write32s_reset_never,28,2354 +fused_write32s_reset_never,29,2346 +fused_write32s_reset_never,30,2351 +fused_write32s_reset_never,31,2351 +fused_write32s_reset_never,32,2348 +fused_write32s_reset_never,33,2350 +fused_write32s_reset_never,34,2351 +fused_write32s_reset_never,35,2349 +fused_write32s_reset_never,36,2349 +fused_write32s_reset_never,37,2347 +fused_write32s_reset_never,38,2349 +fused_write32s_reset_never,39,2346 +fused_write32s_reset_never,40,2350 +fused_write32s_reset_never,41,2347 +fused_write32s_reset_never,42,2347 +fused_write32s_reset_never,43,2348 +fused_write32s_reset_never,44,2349 +fused_write32s_reset_never,45,2348 +fused_write32s_reset_never,46,2347 +fused_write32s_reset_never,47,2346 +fused_write32s_reset_never,48,2347 +fused_write32s_reset_never,49,2348 +fused_write32s_reset_never,50,2345 +fused_write32s_reset_never,51,2353 +fused_write32s_reset_never,52,2350 +fused_write32s_reset_never,53,2349 +fused_write32s_reset_never,54,2351 +fused_write32s_reset_never,55,2350 +fused_write32s_reset_never,56,2349 +fused_write32s_reset_never,57,2348 +fused_write32s_reset_never,58,2347 +fused_write32s_reset_never,59,2349 +fused_write32s_reset_never,60,2347 +fused_write32s_reset_never,61,2348 +fused_write32s_reset_never,62,2348 +fused_write32s_reset_never,63,2349 +fused_write32s_reset_never,64,2347 +fused_write32s_reset_never,65,2348 +fused_write32s_reset_never,66,2348 +fused_write32s_reset_never,67,2345 +fused_write32s_reset_never,68,2347 +fused_write32s_reset_never,69,2349 +fused_write32s_reset_never,70,2351 +fused_write32s_reset_never,71,2347 +fused_write32s_reset_never,72,2352 +fused_write32s_reset_never,73,2348 +fused_write32s_reset_never,74,2348 +fused_write32s_reset_never,75,2352 +fused_write32s_reset_never,76,2352 +fused_write32s_reset_never,77,2350 +fused_write32s_reset_never,78,2351 +fused_write32s_reset_never,79,2350 +fused_write32s_reset_never,80,2347 +fused_write32s_reset_never,81,2348 +fused_write32s_reset_never,82,2350 +fused_write32s_reset_never,83,2348 +fused_write32s_reset_never,84,2350 +fused_write32s_reset_never,85,2356 +fused_write32s_reset_never,86,2348 +fused_write32s_reset_never,87,2348 +fused_write32s_reset_never,88,2349 +fused_write32s_reset_never,89,2349 +fused_write32s_reset_never,90,2348 +fused_write32s_reset_never,91,2349 +fused_write32s_reset_never,92,2348 +fused_write32s_reset_never,93,2353 +fused_write32s_reset_never,94,2350 +fused_write32s_reset_never,95,2349 +fused_write32s_reset_never,96,2348 +fused_write32s_reset_never,97,2348 +fused_write32s_reset_never,98,2348 +fused_write32s_reset_never,99,2347 +fused_write32s_reset_never,100,2350 +fused_write32s_reset_never,101,2350 +fused_write32s_reset_never,102,2351 +fused_write32s_reset_never,103,2346 +fused_write32s_reset_never,104,2348 +fused_write32s_reset_never,105,2347 +fused_write32s_reset_never,106,2351 +fused_write32s_reset_never,107,2349 +fused_write32s_reset_never,108,2347 +fused_write32s_reset_never,109,2350 +fused_write32s_reset_never,110,2347 +fused_write32s_reset_never,111,2347 +fused_write32s_reset_never,112,2350 +fused_write32s_reset_never,113,2353 +fused_write32s_reset_never,114,2349 +fused_write32s_reset_never,115,2347 +fused_write32s_reset_never,116,2346 +fused_write32s_reset_never,117,2347 +fused_write32s_reset_never,118,2347 +fused_write32s_reset_never,119,2350 +fused_write32s_reset_never,120,2347 +fused_write32s_reset_never,121,2348 +fused_write32s_reset_never,122,2347 +fused_write32s_reset_never,123,2347 +fused_write32s_reset_never,124,2352 +fused_write32s_reset_never,125,2349 +fused_write32s_reset_never,126,2349 +fused_write32s_reset_never,127,2351 +fused_write32s_reset_never,128,2348 +fused_write32s_reset_never,129,2348 +fused_write32s_reset_never,130,2349 +fused_write32s_reset_never,131,2346 +fused_write32s_reset_never,132,2349 +fused_write32s_reset_never,133,2350 +fused_write32s_reset_never,134,2346 +fused_write32s_reset_never,135,2344 +fused_write32s_reset_never,136,2350 +fused_write32s_reset_never,137,2348 +fused_write32s_reset_never,138,2346 +fused_write32s_reset_never,139,2347 +fused_write32s_reset_never,140,2347 +fused_write32s_reset_never,141,2348 +fused_write32s_reset_never,142,2351 +fused_write32s_reset_never,143,2346 +fused_write32s_reset_never,144,2348 +fused_write32s_reset_never,145,2348 +fused_write32s_reset_never,146,2349 +fused_write32s_reset_never,147,2347 +fused_write32s_reset_never,148,2348 +fused_write32s_reset_never,149,2347 +fused_write32s_reset_never,150,2348 +fused_write32s_reset_never,151,2349 +fused_write32s_reset_never,152,2347 +fused_write32s_reset_never,153,2350 +fused_write32s_reset_never,154,2348 +fused_write32s_reset_never,155,2356 +fused_write32s_reset_never,156,2348 +fused_write32s_reset_never,157,2347 +fused_write32s_reset_never,158,2351 +fused_write32s_reset_never,159,2350 +fused_write32s_reset_never,160,2347 +fused_write32s_reset_never,161,2347 +fused_write32s_reset_never,162,2349 +fused_write32s_reset_never,163,2345 +fused_write32s_reset_never,164,2351 +fused_write32s_reset_never,165,2347 +fused_write32s_reset_never,166,2346 +fused_write32s_reset_never,167,2349 +fused_write32s_reset_never,168,2355 +fused_write32s_reset_never,169,2347 +fused_write32s_reset_never,170,2347 +fused_write32s_reset_never,171,2349 +fused_write32s_reset_never,172,2347 +fused_write32s_reset_never,173,2350 +fused_write32s_reset_never,174,2347 +fused_write32s_reset_never,175,2347 +fused_write32s_reset_never,176,2349 +fused_write32s_reset_never,177,2347 +fused_write32s_reset_never,178,2349 +fused_write32s_reset_never,179,2351 +fused_write32s_reset_never,180,2346 +fused_write32s_reset_never,181,2348 +fused_write32s_reset_never,182,2349 +fused_write32s_reset_never,183,2348 +fused_write32s_reset_never,184,2349 +fused_write32s_reset_never,185,2348 +fused_write32s_reset_never,186,2349 +fused_write32s_reset_never,187,2347 +fused_write32s_reset_never,188,2346 +fused_write32s_reset_never,189,2345 +fused_write32s_reset_never,190,2348 +fused_write32s_reset_never,191,2347 +fused_write32s_reset_never,192,2347 +fused_write32s_reset_never,193,2351 +fused_write32s_reset_never,194,2349 +fused_write32s_reset_never,195,2347 +fused_write32s_reset_never,196,2346 +fused_write32s_reset_never,197,2348 +fused_write32s_reset_never,198,2354 +fused_write32s_reset_never,199,2347 +fused_write32s_reset_never,200,2348 +fused_write32s_reset_never,201,2346 +fused_write32s_reset_never,202,2348 +fused_write32s_reset_never,203,2348 +fused_write32s_reset_never,204,2348 +fused_write32s_reset_never,205,2347 +fused_write32s_reset_never,206,2348 +fused_write32s_reset_never,207,2347 +fused_write32s_reset_never,208,2349 +fused_write32s_reset_never,209,2348 +fused_write32s_reset_never,210,2343 +fused_write32s_reset_never,211,2349 +fused_write32s_reset_never,212,2347 +fused_write32s_reset_never,213,2349 +fused_write32s_reset_never,214,2349 +fused_write32s_reset_never,215,2349 +fused_write32s_reset_never,216,2348 +fused_write32s_reset_never,217,2352 +fused_write32s_reset_never,218,2348 +fused_write32s_reset_never,219,2349 +fused_write32s_reset_never,220,2346 +fused_write32s_reset_never,221,2347 +fused_write32s_reset_never,222,2347 +fused_write32s_reset_never,223,2347 +fused_write32s_reset_never,224,2347 +fused_write32s_reset_never,225,2344 +fused_write32s_reset_never,226,2347 +fused_write32s_reset_never,227,2348 +fused_write32s_reset_never,228,2345 +fused_write32s_reset_never,229,2348 +fused_write32s_reset_never,230,2348 +fused_write32s_reset_never,231,2347 +fused_write32s_reset_never,232,2347 +fused_write32s_reset_never,233,2347 +fused_write32s_reset_never,234,2349 +fused_write32s_reset_never,235,2347 +fused_write32s_reset_never,236,2347 +fused_write32s_reset_never,237,2349 +fused_write32s_reset_never,238,2346 +fused_write32s_reset_never,239,2348 +fused_write32s_reset_never,240,2350 +fused_write32s_reset_never,241,2350 +fused_write32s_reset_never,242,2353 +fused_write32s_reset_never,243,2347 +fused_write32s_reset_never,244,2345 +fused_write32s_reset_never,245,2345 +fused_write32s_reset_never,246,2354 +fused_write32s_reset_never,247,2347 +fused_write32s_reset_never,248,2347 +fused_write32s_reset_never,249,2350 +fused_write32s_reset_never,250,2351 +fused_write32s_reset_never,251,2349 +fused_write32s_reset_never,252,2345 +fused_write32s_reset_never,253,2349 +fused_write32s_reset_never,254,2350 +fused_write32s_reset_never,255,2348 +fused_write32s_reset_never,256,2344 +fused_write32s_reset_never,257,2347 +fused_write32s_reset_never,258,2351 +fused_write32s_reset_never,259,2348 +fused_write32s_reset_never,260,2347 +fused_write32s_reset_never,261,2350 +fused_write32s_reset_never,262,2346 +fused_write32s_reset_never,263,2349 +fused_write32s_reset_never,264,2347 +fused_write32s_reset_never,265,2347 +fused_write32s_reset_never,266,2348 +fused_write32s_reset_never,267,2346 +fused_write32s_reset_never,268,2347 +fused_write32s_reset_never,269,2351 +fused_write32s_reset_never,270,2348 +fused_write32s_reset_never,271,2346 +fused_write32s_reset_never,272,2349 +fused_write32s_reset_never,273,2349 +fused_write32s_reset_never,274,2347 +fused_write32s_reset_never,275,2348 +fused_write32s_reset_never,276,2349 +fused_write32s_reset_never,277,2347 +fused_write32s_reset_never,278,2348 +fused_write32s_reset_never,279,2349 +fused_write32s_reset_never,280,2347 +fused_write32s_reset_never,281,2350 +fused_write32s_reset_never,282,2348 +fused_write32s_reset_never,283,2351 +fused_write32s_reset_never,284,2347 +fused_write32s_reset_never,285,2352 +fused_write32s_reset_never,286,2351 +fused_write32s_reset_never,287,2349 +fused_write32s_reset_never,288,2348 +fused_write32s_reset_never,289,2348 +fused_write32s_reset_never,290,2348 +fused_write32s_reset_never,291,2340 +fused_write32s_reset_never,292,2337 +fused_write32s_reset_never,293,2337 +fused_write32s_reset_never,294,2339 +fused_write32s_reset_never,295,2335 +fused_write32s_reset_never,296,2348 +fused_write32s_reset_never,297,2348 +fused_write32s_reset_never,298,2350 +fused_write32s_reset_never,299,2342 +fused_write32s_reset_never,300,2345 +fused_write32s_reset_never,301,2347 +fused_write32s_reset_never,302,2348 +fused_write32s_reset_never,303,2347 +fused_write32s_reset_never,304,2350 +fused_write32s_reset_never,305,2351 +fused_write32s_reset_never,306,2345 +fused_write32s_reset_never,307,2346 +fused_write32s_reset_never,308,2348 +fused_write32s_reset_never,309,2348 +fused_write32s_reset_never,310,2348 +fused_write32s_reset_never,311,2346 +fused_write32s_reset_never,312,2347 +fused_write32s_reset_never,313,2347 +fused_write32s_reset_never,314,2345 +fused_write32s_reset_never,315,2349 +fused_write32s_reset_never,316,2347 +fused_write32s_reset_never,317,2349 +fused_write32s_reset_never,318,2352 +fused_write32s_reset_never,319,2345 +fused_write32s_reset_never,320,2346 +fused_write32s_reset_never,321,2347 +fused_write32s_reset_never,322,2350 +fused_write32s_reset_never,323,2351 +fused_write32s_reset_never,324,2346 +fused_write32s_reset_never,325,2348 +fused_write32s_reset_never,326,2354 +fused_write32s_reset_never,327,2355 +fused_write32s_reset_never,328,2346 +fused_write32s_reset_never,329,2346 +fused_write32s_reset_never,330,2344 +fused_write32s_reset_never,331,2348 +fused_write32s_reset_never,332,2348 +fused_write32s_reset_never,333,2346 +fused_write32s_reset_never,334,2348 +fused_write32s_reset_never,335,2346 +fused_write32s_reset_never,336,2349 +fused_write32s_reset_never,337,2347 +fused_write32s_reset_never,338,2348 +fused_write32s_reset_never,339,2347 +fused_write32s_reset_never,340,2348 +fused_write32s_reset_never,341,2345 +fused_write32s_reset_never,342,2347 +fused_write32s_reset_never,343,2344 +fused_write32s_reset_never,344,2347 +fused_write32s_reset_never,345,2344 +fused_write32s_reset_never,346,2349 +fused_write32s_reset_never,347,2345 +fused_write32s_reset_never,348,2350 +fused_write32s_reset_never,349,2344 +fused_write32s_reset_never,350,2344 +fused_write32s_reset_never,351,2345 +fused_write32s_reset_never,352,2345 +fused_write32s_reset_never,353,2347 +fused_write32s_reset_never,354,2343 +fused_write32s_reset_never,355,2348 +fused_write32s_reset_never,356,2345 +fused_write32s_reset_never,357,2345 +fused_write32s_reset_never,358,2348 +fused_write32s_reset_never,359,2347 +fused_write32s_reset_never,360,2347 +fused_write32s_reset_never,361,2347 +fused_write32s_reset_never,362,2344 +fused_write32s_reset_never,363,2347 +fused_write32s_reset_never,364,2348 +fused_write32s_reset_never,365,2345 +fused_write32s_reset_never,366,2348 +fused_write32s_reset_never,367,2350 +fused_write32s_reset_never,368,2349 +fused_write32s_reset_never,369,2345 +fused_write32s_reset_never,370,2345 +fused_write32s_reset_never,371,2348 +fused_write32s_reset_never,372,2346 +fused_write32s_reset_never,373,2345 +fused_write32s_reset_never,374,2344 +fused_write32s_reset_never,375,2347 +fused_write32s_reset_never,376,2344 +fused_write32s_reset_never,377,2344 +fused_write32s_reset_never,378,2346 +fused_write32s_reset_never,379,2347 +fused_write32s_reset_never,380,2347 +fused_write32s_reset_never,381,2345 +fused_write32s_reset_never,382,2349 +fused_write32s_reset_never,383,2343 +fused_write32s_reset_never,384,2345 +fused_write32s_reset_never,385,2347 +fused_write32s_reset_never,386,2348 +fused_write32s_reset_never,387,2348 +fused_write32s_reset_never,388,2347 +fused_write32s_reset_never,389,2347 +fused_write32s_reset_never,390,2348 +fused_write32s_reset_never,391,2347 +fused_write32s_reset_never,392,2346 +fused_write32s_reset_never,393,2344 +fused_write32s_reset_never,394,2346 +fused_write32s_reset_never,395,2343 +fused_write32s_reset_never,396,2346 +fused_write32s_reset_never,397,2347 +fused_write32s_reset_never,398,2348 +fused_write32s_reset_never,399,2347 +fused_write32s_reset_never,400,2348 +fused_write32s_reset_never,401,2344 +fused_write32s_reset_never,402,2344 +fused_write32s_reset_never,403,2344 +fused_write32s_reset_never,404,2347 +fused_write32s_reset_never,405,2346 +fused_write32s_reset_never,406,2346 +fused_write32s_reset_never,407,2356 +fused_write32s_reset_never,408,2345 +fused_write32s_reset_never,409,2346 +fused_write32s_reset_never,410,2345 +fused_write32s_reset_never,411,2351 +fused_write32s_reset_never,412,2348 +fused_write32s_reset_never,413,2347 +fused_write32s_reset_never,414,2348 +fused_write32s_reset_never,415,2349 +fused_write32s_reset_never,416,2347 +fused_write32s_reset_never,417,2345 +fused_write32s_reset_never,418,2351 +fused_write32s_reset_never,419,2348 +fused_write32s_reset_never,420,2349 +fused_write32s_reset_never,421,2339 +fused_write32s_reset_never,422,2352 +fused_write32s_reset_never,423,2346 +fused_write32s_reset_never,424,2347 +fused_write32s_reset_never,425,2348 +fused_write32s_reset_never,426,2346 +fused_write32s_reset_never,427,2345 +fused_write32s_reset_never,428,2347 +fused_write32s_reset_never,429,2348 +fused_write32s_reset_never,430,2347 +fused_write32s_reset_never,431,2350 +fused_write32s_reset_never,432,2348 +fused_write32s_reset_never,433,2345 +fused_write32s_reset_never,434,2352 +fused_write32s_reset_never,435,2348 +fused_write32s_reset_never,436,2347 +fused_write32s_reset_never,437,2346 +fused_write32s_reset_never,438,2345 +fused_write32s_reset_never,439,2348 +fused_write32s_reset_never,440,2348 +fused_write32s_reset_never,441,2346 +fused_write32s_reset_never,442,2345 +fused_write32s_reset_never,443,2350 +fused_write32s_reset_never,444,2340 +fused_write32s_reset_never,445,2347 +fused_write32s_reset_never,446,2347 +fused_write32s_reset_never,447,2346 +fused_write32s_reset_never,448,2346 +fused_write32s_reset_never,449,2346 +fused_write32s_reset_never,450,2348 +fused_write32s_reset_never,451,2347 +fused_write32s_reset_never,452,2349 +fused_write32s_reset_never,453,2352 +fused_write32s_reset_never,454,2345 +fused_write32s_reset_never,455,2346 +fused_write32s_reset_never,456,2341 +fused_write32s_reset_never,457,2348 +fused_write32s_reset_never,458,2347 +fused_write32s_reset_never,459,2348 +fused_write32s_reset_never,460,2345 +fused_write32s_reset_never,461,2347 +fused_write32s_reset_never,462,2345 +fused_write32s_reset_never,463,2351 +fused_write32s_reset_never,464,2346 +fused_write32s_reset_never,465,2347 +fused_write32s_reset_never,466,2351 +fused_write32s_reset_never,467,2346 +fused_write32s_reset_never,468,2346 +fused_write32s_reset_never,469,2349 +fused_write32s_reset_never,470,2347 +fused_write32s_reset_never,471,2352 +fused_write32s_reset_never,472,2344 +fused_write32s_reset_never,473,2349 +fused_write32s_reset_never,474,2347 +fused_write32s_reset_never,475,2349 +fused_write32s_reset_never,476,2345 +fused_write32s_reset_never,477,2347 +fused_write32s_reset_never,478,2346 +fused_write32s_reset_never,479,2346 +fused_write32s_reset_never,480,2344 +fused_write32s_reset_never,481,2343 +fused_write32s_reset_never,482,2349 +fused_write32s_reset_never,483,2345 +fused_write32s_reset_never,484,2349 +fused_write32s_reset_never,485,2346 +fused_write32s_reset_never,486,2350 +fused_write32s_reset_never,487,2346 +fused_write32s_reset_never,488,2347 +fused_write32s_reset_never,489,2347 +fused_write32s_reset_never,490,2352 +fused_write32s_reset_never,491,2344 +fused_write32s_reset_never,492,2345 +fused_write32s_reset_never,493,2354 +fused_write32s_reset_never,494,2343 +fused_write32s_reset_never,495,2348 +fused_write32s_reset_never,496,2353 +fused_write32s_reset_never,497,2347 +fused_write32s_reset_never,498,2346 +fused_write32s_reset_never,499,2348 +fused_write32s_reset_never,500,2346 +fused_write32s_reset_never,501,2345 +fused_write32s_reset_never,502,2346 +fused_write32s_reset_never,503,2344 +fused_write32s_reset_never,504,2348 +fused_write32s_reset_never,505,2345 +fused_write32s_reset_never,506,2348 +fused_write32s_reset_never,507,2343 +fused_write32s_reset_never,508,2345 +fused_write32s_reset_never,509,2347 +fused_write32s_reset_never,510,2344 +fused_write32s_reset_never,511,2334 +fused_write32s_reset_never,512,2344 +fused_write32s_reset_never,513,2343 +fused_write32s_reset_never,514,2345 +fused_write32s_reset_never,515,2344 +fused_write32s_reset_never,516,2346 +fused_write32s_reset_never,517,2346 +fused_write32s_reset_never,518,2344 +fused_write32s_reset_never,519,2346 +fused_write32s_reset_never,520,2347 +fused_write32s_reset_never,521,2343 +fused_write32s_reset_never,522,2340 +fused_write32s_reset_never,523,2349 +fused_write32s_reset_never,524,2346 +fused_write32s_reset_never,525,2343 +fused_write32s_reset_never,526,2345 +fused_write32s_reset_never,527,2345 +fused_write32s_reset_never,528,2348 +fused_write32s_reset_never,529,2347 +fused_write32s_reset_never,530,2348 +fused_write32s_reset_never,531,2343 +fused_write32s_reset_never,532,2344 +fused_write32s_reset_never,533,2345 +fused_write32s_reset_never,534,2345 +fused_write32s_reset_never,535,2346 +fused_write32s_reset_never,536,2348 +fused_write32s_reset_never,537,2342 +fused_write32s_reset_never,538,2347 +fused_write32s_reset_never,539,2348 +fused_write32s_reset_never,540,2349 +fused_write32s_reset_never,541,2343 +fused_write32s_reset_never,542,2347 +fused_write32s_reset_never,543,2344 +fused_write32s_reset_never,544,2370 +fused_write32s_reset_never,545,2346 +fused_write32s_reset_never,546,2343 +fused_write32s_reset_never,547,2341 +fused_write32s_reset_never,548,2345 +fused_write32s_reset_never,549,2345 +fused_write32s_reset_never,550,2350 +fused_write32s_reset_never,551,2347 +fused_write32s_reset_never,552,2347 +fused_write32s_reset_never,553,2347 +fused_write32s_reset_never,554,2348 +fused_write32s_reset_never,555,2344 +fused_write32s_reset_never,556,2344 +fused_write32s_reset_never,557,2346 +fused_write32s_reset_never,558,2347 +fused_write32s_reset_never,559,2351 +fused_write32s_reset_never,560,2344 +fused_write32s_reset_never,561,2345 +fused_write32s_reset_never,562,2346 +fused_write32s_reset_never,563,2346 +fused_write32s_reset_never,564,2346 +fused_write32s_reset_never,565,2345 +fused_write32s_reset_never,566,2345 +fused_write32s_reset_never,567,2347 +fused_write32s_reset_never,568,2347 +fused_write32s_reset_never,569,2345 +fused_write32s_reset_never,570,2345 +fused_write32s_reset_never,571,2345 +fused_write32s_reset_never,572,2351 +fused_write32s_reset_never,573,2347 +fused_write32s_reset_never,574,2349 +fused_write32s_reset_never,575,2343 +fused_write32s_reset_never,576,2348 +fused_write32s_reset_never,577,2345 +fused_write32s_reset_never,578,2349 +fused_write32s_reset_never,579,2346 +fused_write32s_reset_never,580,2345 +fused_write32s_reset_never,581,2347 +fused_write32s_reset_never,582,2348 +fused_write32s_reset_never,583,2343 +fused_write32s_reset_never,584,2345 +fused_write32s_reset_never,585,2346 +fused_write32s_reset_never,586,2343 +fused_write32s_reset_never,587,2348 +fused_write32s_reset_never,588,2347 +fused_write32s_reset_never,589,2342 +fused_write32s_reset_never,590,2347 +fused_write32s_reset_never,591,2343 +fused_write32s_reset_never,592,2344 +fused_write32s_reset_never,593,2345 +fused_write32s_reset_never,594,2343 +fused_write32s_reset_never,595,2346 +fused_write32s_reset_never,596,2345 +fused_write32s_reset_never,597,2345 +fused_write32s_reset_never,598,2346 +fused_write32s_reset_never,599,2347 +fused_write32s_reset_never,600,2345 +fused_write32s_reset_never,601,2348 +fused_write32s_reset_never,602,2345 +fused_write32s_reset_never,603,2344 +fused_write32s_reset_never,604,2349 +fused_write32s_reset_never,605,2350 +fused_write32s_reset_never,606,2346 +fused_write32s_reset_never,607,2347 +fused_write32s_reset_never,608,2342 +fused_write32s_reset_never,609,2343 +fused_write32s_reset_never,610,2344 +fused_write32s_reset_never,611,2342 +fused_write32s_reset_never,612,2345 +fused_write32s_reset_never,613,2348 +fused_write32s_reset_never,614,2343 +fused_write32s_reset_never,615,2344 +fused_write32s_reset_never,616,2348 +fused_write32s_reset_never,617,2343 +fused_write32s_reset_never,618,2344 +fused_write32s_reset_never,619,2349 +fused_write32s_reset_never,620,2348 +fused_write32s_reset_never,621,2347 +fused_write32s_reset_never,622,2344 +fused_write32s_reset_never,623,2350 +fused_write32s_reset_never,624,2356 +fused_write32s_reset_never,625,2348 +fused_write32s_reset_never,626,2346 +fused_write32s_reset_never,627,2352 +fused_write32s_reset_never,628,2348 +fused_write32s_reset_never,629,2348 +fused_write32s_reset_never,630,2348 +fused_write32s_reset_never,631,2347 +fused_write32s_reset_never,632,2348 +fused_write32s_reset_never,633,2347 +fused_write32s_reset_never,634,2349 +fused_write32s_reset_never,635,2348 +fused_write32s_reset_never,636,2345 +fused_write32s_reset_never,637,2346 +fused_write32s_reset_never,638,2350 +fused_write32s_reset_never,639,2346 +fused_write32s_reset_never,640,2350 +fused_write32s_reset_never,641,2347 +fused_write32s_reset_never,642,2347 +fused_write32s_reset_never,643,2346 +fused_write32s_reset_never,644,2347 +fused_write32s_reset_never,645,2347 +fused_write32s_reset_never,646,2348 +fused_write32s_reset_never,647,2349 +fused_write32s_reset_never,648,2345 +fused_write32s_reset_never,649,2343 +fused_write32s_reset_never,650,2349 +fused_write32s_reset_never,651,2346 +fused_write32s_reset_never,652,2344 +fused_write32s_reset_never,653,2345 +fused_write32s_reset_never,654,2348 +fused_write32s_reset_never,655,2350 +fused_write32s_reset_never,656,2349 +fused_write32s_reset_never,657,2346 +fused_write32s_reset_never,658,2345 +fused_write32s_reset_never,659,2346 +fused_write32s_reset_never,660,2347 +fused_write32s_reset_never,661,2345 +fused_write32s_reset_never,662,2349 +fused_write32s_reset_never,663,2351 +fused_write32s_reset_never,664,2347 +fused_write32s_reset_never,665,2349 +fused_write32s_reset_never,666,2353 +fused_write32s_reset_never,667,2343 +fused_write32s_reset_never,668,2347 +fused_write32s_reset_never,669,2345 +fused_write32s_reset_never,670,2349 +fused_write32s_reset_never,671,2352 +fused_write32s_reset_never,672,2344 +fused_write32s_reset_never,673,2349 +fused_write32s_reset_never,674,2346 +fused_write32s_reset_never,675,2344 +fused_write32s_reset_never,676,2349 +fused_write32s_reset_never,677,2348 +fused_write32s_reset_never,678,2348 +fused_write32s_reset_never,679,2349 +fused_write32s_reset_never,680,2348 +fused_write32s_reset_never,681,2346 +fused_write32s_reset_never,682,2346 +fused_write32s_reset_never,683,2347 +fused_write32s_reset_never,684,2346 +fused_write32s_reset_never,685,2343 +fused_write32s_reset_never,686,2346 +fused_write32s_reset_never,687,2345 +fused_write32s_reset_never,688,2344 +fused_write32s_reset_never,689,2344 +fused_write32s_reset_never,690,2344 +fused_write32s_reset_never,691,2344 +fused_write32s_reset_never,692,2349 +fused_write32s_reset_never,693,2348 +fused_write32s_reset_never,694,2349 +fused_write32s_reset_never,695,2346 +fused_write32s_reset_never,696,2345 +fused_write32s_reset_never,697,2344 +fused_write32s_reset_never,698,2343 +fused_write32s_reset_never,699,2344 +fused_write32s_reset_never,700,2351 +fused_write32s_reset_never,701,2345 +fused_write32s_reset_never,702,2348 +fused_write32s_reset_never,703,2347 +fused_write32s_reset_never,704,2348 +fused_write32s_reset_never,705,2348 +fused_write32s_reset_never,706,2349 +fused_write32s_reset_never,707,2348 +fused_write32s_reset_never,708,2349 +fused_write32s_reset_never,709,2355 +fused_write32s_reset_never,710,2350 +fused_write32s_reset_never,711,2347 +fused_write32s_reset_never,712,2348 +fused_write32s_reset_never,713,2348 +fused_write32s_reset_never,714,2348 +fused_write32s_reset_never,715,2348 +fused_write32s_reset_never,716,2348 +fused_write32s_reset_never,717,2347 +fused_write32s_reset_never,718,2354 +fused_write32s_reset_never,719,2343 +fused_write32s_reset_never,720,2347 +fused_write32s_reset_never,721,2349 +fused_write32s_reset_never,722,2347 +fused_write32s_reset_never,723,2348 +fused_write32s_reset_never,724,2345 +fused_write32s_reset_never,725,2345 +fused_write32s_reset_never,726,2347 +fused_write32s_reset_never,727,2345 +fused_write32s_reset_never,728,2346 +fused_write32s_reset_never,729,2350 +fused_write32s_reset_never,730,2342 +fused_write32s_reset_never,731,2345 +fused_write32s_reset_never,732,2346 +fused_write32s_reset_never,733,2344 +fused_write32s_reset_never,734,2350 +fused_write32s_reset_never,735,2356 +fused_write32s_reset_never,736,2348 +fused_write32s_reset_never,737,2348 +fused_write32s_reset_never,738,2347 +fused_write32s_reset_never,739,2349 +fused_write32s_reset_never,740,2348 +fused_write32s_reset_never,741,2344 +fused_write32s_reset_never,742,2346 +fused_write32s_reset_never,743,2348 +fused_write32s_reset_never,744,2348 +fused_write32s_reset_never,745,2350 +fused_write32s_reset_never,746,2346 +fused_write32s_reset_never,747,2349 +fused_write32s_reset_never,748,2348 +fused_write32s_reset_never,749,2347 +fused_write32s_reset_never,750,2347 +fused_write32s_reset_never,751,2349 +fused_write32s_reset_never,752,2351 +fused_write32s_reset_never,753,2346 +fused_write32s_reset_never,754,2351 +fused_write32s_reset_never,755,2349 +fused_write32s_reset_never,756,2346 +fused_write32s_reset_never,757,2344 +fused_write32s_reset_never,758,2345 +fused_write32s_reset_never,759,2351 +fused_write32s_reset_never,760,2345 +fused_write32s_reset_never,761,2349 +fused_write32s_reset_never,762,2347 +fused_write32s_reset_never,763,2346 +fused_write32s_reset_never,764,2346 +fused_write32s_reset_never,765,2347 +fused_write32s_reset_never,766,2349 +fused_write32s_reset_never,767,2344 +fused_write32s_reset_never,768,2346 +fused_write32s_reset_never,769,2348 +fused_write32s_reset_never,770,2352 +fused_write32s_reset_never,771,2347 +fused_write32s_reset_never,772,2347 +fused_write32s_reset_never,773,2349 +fused_write32s_reset_never,774,2347 +fused_write32s_reset_never,775,2347 +fused_write32s_reset_never,776,2347 +fused_write32s_reset_never,777,2348 +fused_write32s_reset_never,778,2349 +fused_write32s_reset_never,779,2348 +fused_write32s_reset_never,780,2347 +fused_write32s_reset_never,781,2349 +fused_write32s_reset_never,782,2350 +fused_write32s_reset_never,783,2349 +fused_write32s_reset_never,784,2346 +fused_write32s_reset_never,785,2349 +fused_write32s_reset_never,786,2345 +fused_write32s_reset_never,787,2350 +fused_write32s_reset_never,788,2348 +fused_write32s_reset_never,789,2347 +fused_write32s_reset_never,790,2352 +fused_write32s_reset_never,791,2349 +fused_write32s_reset_never,792,2346 +fused_write32s_reset_never,793,2348 +fused_write32s_reset_never,794,2356 +fused_write32s_reset_never,795,2348 +fused_write32s_reset_never,796,2347 +fused_write32s_reset_never,797,2348 +fused_write32s_reset_never,798,2348 +fused_write32s_reset_never,799,2349 +fused_write32s_reset_never,800,2349 +fused_write32s_reset_never,801,2350 +fused_write32s_reset_never,802,2349 +fused_write32s_reset_never,803,2347 +fused_write32s_reset_never,804,2348 +fused_write32s_reset_never,805,2348 +fused_write32s_reset_never,806,2349 +fused_write32s_reset_never,807,2346 +fused_write32s_reset_never,808,2352 +fused_write32s_reset_never,809,2352 +fused_write32s_reset_never,810,2350 +fused_write32s_reset_never,811,2347 +fused_write32s_reset_never,812,2347 +fused_write32s_reset_never,813,2349 +fused_write32s_reset_never,814,2348 +fused_write32s_reset_never,815,2347 +fused_write32s_reset_never,816,2348 +fused_write32s_reset_never,817,2348 +fused_write32s_reset_never,818,2348 +fused_write32s_reset_never,819,2347 +fused_write32s_reset_never,820,2348 +fused_write32s_reset_never,821,2345 +fused_write32s_reset_never,822,2345 +fused_write32s_reset_never,823,2345 +fused_write32s_reset_never,824,2347 +fused_write32s_reset_never,825,2347 +fused_write32s_reset_never,826,2351 +fused_write32s_reset_never,827,2346 +fused_write32s_reset_never,828,2347 +fused_write32s_reset_never,829,2349 +fused_write32s_reset_never,830,2347 +fused_write32s_reset_never,831,2354 +fused_write32s_reset_never,832,2347 +fused_write32s_reset_never,833,2350 +fused_write32s_reset_never,834,2350 +fused_write32s_reset_never,835,2349 +fused_write32s_reset_never,836,2350 +fused_write32s_reset_never,837,2354 +fused_write32s_reset_never,838,2349 +fused_write32s_reset_never,839,2347 +fused_write32s_reset_never,840,2350 +fused_write32s_reset_never,841,2350 +fused_write32s_reset_never,842,2347 +fused_write32s_reset_never,843,2343 +fused_write32s_reset_never,844,2346 +fused_write32s_reset_never,845,2348 +fused_write32s_reset_never,846,2345 +fused_write32s_reset_never,847,2345 +fused_write32s_reset_never,848,2347 +fused_write32s_reset_never,849,2347 +fused_write32s_reset_never,850,2345 +fused_write32s_reset_never,851,2347 +fused_write32s_reset_never,852,2348 +fused_write32s_reset_never,853,2345 +fused_write32s_reset_never,854,2347 +fused_write32s_reset_never,855,2351 +fused_write32s_reset_never,856,2346 +fused_write32s_reset_never,857,2346 +fused_write32s_reset_never,858,2348 +fused_write32s_reset_never,859,2348 +fused_write32s_reset_never,860,2349 +fused_write32s_reset_never,861,2347 +fused_write32s_reset_never,862,2351 +fused_write32s_reset_never,863,2350 +fused_write32s_reset_never,864,2346 +fused_write32s_reset_never,865,2347 +fused_write32s_reset_never,866,2351 +fused_write32s_reset_never,867,2347 +fused_write32s_reset_never,868,2349 +fused_write32s_reset_never,869,2349 +fused_write32s_reset_never,870,2348 +fused_write32s_reset_never,871,2347 +fused_write32s_reset_never,872,2350 +fused_write32s_reset_never,873,2347 +fused_write32s_reset_never,874,2349 +fused_write32s_reset_never,875,2349 +fused_write32s_reset_never,876,2350 +fused_write32s_reset_never,877,2349 +fused_write32s_reset_never,878,2349 +fused_write32s_reset_never,879,2351 +fused_write32s_reset_never,880,2350 +fused_write32s_reset_never,881,2347 +fused_write32s_reset_never,882,2344 +fused_write32s_reset_never,883,2350 +fused_write32s_reset_never,884,2348 +fused_write32s_reset_never,885,2348 +fused_write32s_reset_never,886,2348 +fused_write32s_reset_never,887,2360 +fused_write32s_reset_never,888,2346 +fused_write32s_reset_never,889,2347 +fused_write32s_reset_never,890,2353 +fused_write32s_reset_never,891,2348 +fused_write32s_reset_never,892,2348 +fused_write32s_reset_never,893,2348 +fused_write32s_reset_never,894,2347 +fused_write32s_reset_never,895,2350 +fused_write32s_reset_never,896,2351 +fused_write32s_reset_never,897,2347 +fused_write32s_reset_never,898,2350 +fused_write32s_reset_never,899,2344 +fused_write32s_reset_never,900,2344 +fused_write32s_reset_never,901,2346 +fused_write32s_reset_never,902,2345 +fused_write32s_reset_never,903,2345 +fused_write32s_reset_never,904,2345 +fused_write32s_reset_never,905,2345 +fused_write32s_reset_never,906,2348 +fused_write32s_reset_never,907,2347 +fused_write32s_reset_never,908,2346 +fused_write32s_reset_never,909,2346 +fused_write32s_reset_never,910,2346 +fused_write32s_reset_never,911,2348 +fused_write32s_reset_never,912,2347 +fused_write32s_reset_never,913,2347 +fused_write32s_reset_never,914,2349 +fused_write32s_reset_never,915,2347 +fused_write32s_reset_never,916,2348 +fused_write32s_reset_never,917,2348 +fused_write32s_reset_never,918,2346 +fused_write32s_reset_never,919,2351 +fused_write32s_reset_never,920,2346 +fused_write32s_reset_never,921,2346 +fused_write32s_reset_never,922,2351 +fused_write32s_reset_never,923,2350 +fused_write32s_reset_never,924,2345 +fused_write32s_reset_never,925,2346 +fused_write32s_reset_never,926,2347 +fused_write32s_reset_never,927,2344 +fused_write32s_reset_never,928,2347 +fused_write32s_reset_never,929,2345 +fused_write32s_reset_never,930,2347 +fused_write32s_reset_never,931,2347 +fused_write32s_reset_never,932,2348 +fused_write32s_reset_never,933,2348 +fused_write32s_reset_never,934,2350 +fused_write32s_reset_never,935,2348 +fused_write32s_reset_never,936,2347 +fused_write32s_reset_never,937,2348 +fused_write32s_reset_never,938,2347 +fused_write32s_reset_never,939,2345 +fused_write32s_reset_never,940,2348 +fused_write32s_reset_never,941,2349 +fused_write32s_reset_never,942,2350 +fused_write32s_reset_never,943,2347 +fused_write32s_reset_never,944,2347 +fused_write32s_reset_never,945,2344 +fused_write32s_reset_never,946,2346 +fused_write32s_reset_never,947,2348 +fused_write32s_reset_never,948,2346 +fused_write32s_reset_never,949,2346 +fused_write32s_reset_never,950,2349 +fused_write32s_reset_never,951,2347 +fused_write32s_reset_never,952,2347 +fused_write32s_reset_never,953,2345 +fused_write32s_reset_never,954,2353 +fused_write32s_reset_never,955,2348 +fused_write32s_reset_never,956,2345 +fused_write32s_reset_never,957,2347 +fused_write32s_reset_never,958,2345 +fused_write32s_reset_never,959,2347 +fused_write32s_reset_never,960,2348 +fused_write32s_reset_never,961,2347 +fused_write32s_reset_never,962,2346 +fused_write32s_reset_never,963,2348 +fused_write32s_reset_never,964,2348 +fused_write32s_reset_never,965,2355 +fused_write32s_reset_never,966,2345 +fused_write32s_reset_never,967,2343 +fused_write32s_reset_never,968,2350 +fused_write32s_reset_never,969,2347 +fused_write32s_reset_never,970,2350 +fused_write32s_reset_never,971,2353 +fused_write32s_reset_never,972,2352 +fused_write32s_reset_never,973,2346 +fused_write32s_reset_never,974,2346 +fused_write32s_reset_never,975,2350 +fused_write32s_reset_never,976,2347 +fused_write32s_reset_never,977,2347 +fused_write32s_reset_never,978,2353 +fused_write32s_reset_never,979,2345 +fused_write32s_reset_never,980,2348 +fused_write32s_reset_never,981,2347 +fused_write32s_reset_never,982,2348 +fused_write32s_reset_never,983,2348 +fused_write32s_reset_never,984,2346 +fused_write32s_reset_never,985,2346 +fused_write32s_reset_never,986,2347 +fused_write32s_reset_never,987,2349 +fused_write32s_reset_never,988,2344 +fused_write32s_reset_never,989,2347 +fused_write32s_reset_never,990,2348 +fused_write32s_reset_never,991,2349 +fused_write32s_reset_never,992,2346 +fused_write32s_reset_never,993,2348 +fused_write32s_reset_never,994,2345 +fused_write32s_reset_never,995,2347 +fused_write32s_reset_never,996,2348 +fused_write32s_reset_never,997,2344 +fused_write32s_reset_never,998,2346 +fused_write32s_reset_never,999,2345 +runlist,0,8310 +runlist,1,4820 +runlist,2,4833 +runlist,3,4819 +runlist,4,4831 +runlist,5,4833 +runlist,6,4832 +runlist,7,4829 +runlist,8,4827 +runlist,9,4820 +runlist,10,4830 +runlist,11,4816 +runlist,12,4826 +runlist,13,4826 +runlist,14,4829 +runlist,15,4842 +runlist,16,4841 +runlist,17,4842 +runlist,18,4836 +runlist,19,4823 +runlist,20,4827 +runlist,21,4829 +runlist,22,4825 +runlist,23,4828 +runlist,24,4834 +runlist,25,4833 +runlist,26,4825 +runlist,27,4841 +runlist,28,4831 +runlist,29,4829 +runlist,30,4826 +runlist,31,4825 +runlist,32,4829 +runlist,33,4831 +runlist,34,4833 +runlist,35,4839 +runlist,36,4823 +runlist,37,4832 +runlist,38,4823 +runlist,39,4820 +runlist,40,4827 +runlist,41,4828 +runlist,42,4826 +runlist,43,4824 +runlist,44,4825 +runlist,45,4827 +runlist,46,4829 +runlist,47,4825 +runlist,48,4828 +runlist,49,4824 +runlist,50,4826 +runlist,51,4885 +runlist,52,4910 +runlist,53,4879 +runlist,54,4904 +runlist,55,4881 +runlist,56,4884 +runlist,57,4880 +runlist,58,4873 +runlist,59,4878 +runlist,60,4893 +runlist,61,4887 +runlist,62,4885 +runlist,63,4878 +runlist,64,4854 +runlist,65,4860 +runlist,66,4870 +runlist,67,4853 +runlist,68,4858 +runlist,69,4849 +runlist,70,4832 +runlist,71,4845 +runlist,72,4853 +runlist,73,4840 runlist,74,4852 -runlist,75,4852 -runlist,76,4842 -runlist,77,4852 -runlist,78,4847 -runlist,79,4845 -runlist,80,4854 -runlist,81,4844 -runlist,82,4849 -runlist,83,4849 -runlist,84,4846 -runlist,85,4846 -runlist,86,4843 -runlist,87,4849 -runlist,88,4857 -runlist,89,4845 -runlist,90,4846 -runlist,91,4850 -runlist,92,4848 -runlist,93,4848 -runlist,94,4844 -runlist,95,4855 -runlist,96,4849 -runlist,97,4845 -runlist,98,4851 -runlist,99,4858 -runlist,100,4840 -runlist,101,4852 -runlist,102,4848 -runlist,103,4853 -runlist,104,4855 -runlist,105,4839 -runlist,106,4838 -runlist,107,4832 -runlist,108,4846 -runlist,109,4846 -runlist,110,4850 -runlist,111,4842 -runlist,112,4838 -runlist,113,4841 -runlist,114,4847 -runlist,115,4845 -runlist,116,4862 -runlist,117,4837 -runlist,118,4835 -runlist,119,4848 -runlist,120,4841 -runlist,121,4836 -runlist,122,4837 +runlist,75,4843 +runlist,76,4853 +runlist,77,4846 +runlist,78,4850 +runlist,79,4860 +runlist,80,4853 +runlist,81,4852 +runlist,82,4840 +runlist,83,4846 +runlist,84,4843 +runlist,85,4859 +runlist,86,4854 +runlist,87,4866 +runlist,88,4856 +runlist,89,4867 +runlist,90,4852 +runlist,91,4853 +runlist,92,4852 +runlist,93,4846 +runlist,94,4845 +runlist,95,4864 +runlist,96,4922 +runlist,97,4901 +runlist,98,4844 +runlist,99,4839 +runlist,100,4854 +runlist,101,4844 +runlist,102,4847 +runlist,103,4845 +runlist,104,4844 +runlist,105,4841 +runlist,106,4858 +runlist,107,4857 +runlist,108,4848 +runlist,109,4853 +runlist,110,4855 +runlist,111,4851 +runlist,112,4855 +runlist,113,4849 +runlist,114,4849 +runlist,115,4854 +runlist,116,4852 +runlist,117,4856 +runlist,118,4851 +runlist,119,4853 +runlist,120,4852 +runlist,121,4847 +runlist,122,4851 runlist,123,4847 -runlist,124,4846 -runlist,125,4847 -runlist,126,4831 -runlist,127,4853 -runlist,128,4900 -runlist,129,4869 +runlist,124,4840 +runlist,125,4848 +runlist,126,4857 +runlist,127,4850 +runlist,128,4854 +runlist,129,4866 runlist,130,4856 -runlist,131,4854 +runlist,131,4844 runlist,132,4855 -runlist,133,4849 -runlist,134,4853 -runlist,135,4849 -runlist,136,4855 -runlist,137,4855 -runlist,138,4843 -runlist,139,4852 -runlist,140,4845 -runlist,141,4862 -runlist,142,4872 -runlist,143,4853 -runlist,144,4855 -runlist,145,4846 -runlist,146,4855 -runlist,147,4854 -runlist,148,4863 -runlist,149,4850 -runlist,150,4846 -runlist,151,4847 -runlist,152,4852 -runlist,153,4843 -runlist,154,4850 -runlist,155,4851 -runlist,156,4852 -runlist,157,4851 -runlist,158,4846 -runlist,159,4853 -runlist,160,4856 -runlist,161,4852 -runlist,162,4851 -runlist,163,4849 -runlist,164,4854 -runlist,165,4851 -runlist,166,4843 -runlist,167,4852 -runlist,168,4855 -runlist,169,4849 -runlist,170,4847 -runlist,171,4847 -runlist,172,4846 -runlist,173,4844 -runlist,174,4846 -runlist,175,4851 -runlist,176,4847 -runlist,177,4853 -runlist,178,4855 -runlist,179,4847 -runlist,180,4849 -runlist,181,4845 -runlist,182,4852 -runlist,183,4854 -runlist,184,4853 -runlist,185,4852 -runlist,186,4843 -runlist,187,4851 -runlist,188,4853 -runlist,189,4851 -runlist,190,4849 -runlist,191,4847 -runlist,192,4853 -runlist,193,4854 -runlist,194,4847 -runlist,195,4859 -runlist,196,4849 -runlist,197,4853 -runlist,198,4888 -runlist,199,4854 -runlist,200,4855 -runlist,201,4855 -runlist,202,4847 -runlist,203,4848 -runlist,204,4856 -runlist,205,4848 -runlist,206,4846 -runlist,207,4843 -runlist,208,4850 -runlist,209,4846 -runlist,210,4845 -runlist,211,4852 -runlist,212,4848 -runlist,213,4850 -runlist,214,4847 -runlist,215,4847 -runlist,216,4852 -runlist,217,4852 -runlist,218,4844 -runlist,219,4854 -runlist,220,4851 -runlist,221,4850 -runlist,222,4895 -runlist,223,4854 -runlist,224,4849 -runlist,225,4851 -runlist,226,4849 -runlist,227,4847 -runlist,228,4852 -runlist,229,4860 -runlist,230,4868 -runlist,231,4856 -runlist,232,4852 -runlist,233,4842 -runlist,234,4848 -runlist,235,4847 -runlist,236,4846 -runlist,237,4848 -runlist,238,4846 -runlist,239,4848 -runlist,240,4855 -runlist,241,4848 -runlist,242,4846 -runlist,243,4854 -runlist,244,4853 -runlist,245,4853 -runlist,246,4843 -runlist,247,4847 -runlist,248,4850 -runlist,249,4847 -runlist,250,4849 -runlist,251,4850 +runlist,133,4851 +runlist,134,4857 +runlist,135,4858 +runlist,136,4866 +runlist,137,4837 +runlist,138,4832 +runlist,139,4821 +runlist,140,4837 +runlist,141,4858 +runlist,142,4835 +runlist,143,4851 +runlist,144,4854 +runlist,145,4852 +runlist,146,4849 +runlist,147,4837 +runlist,148,4848 +runlist,149,4843 +runlist,150,4849 +runlist,151,4846 +runlist,152,4839 +runlist,153,4846 +runlist,154,4840 +runlist,155,4835 +runlist,156,4849 +runlist,157,4840 +runlist,158,4841 +runlist,159,4846 +runlist,160,4851 +runlist,161,4842 +runlist,162,4843 +runlist,163,4844 +runlist,164,4841 +runlist,165,4838 +runlist,166,4840 +runlist,167,4836 +runlist,168,4843 +runlist,169,4843 +runlist,170,4844 +runlist,171,4843 +runlist,172,4852 +runlist,173,4849 +runlist,174,4844 +runlist,175,4843 +runlist,176,4840 +runlist,177,4842 +runlist,178,4851 +runlist,179,4848 +runlist,180,4852 +runlist,181,4841 +runlist,182,4861 +runlist,183,4846 +runlist,184,4856 +runlist,185,4841 +runlist,186,4848 +runlist,187,4848 +runlist,188,4846 +runlist,189,4847 +runlist,190,4852 +runlist,191,4845 +runlist,192,4855 +runlist,193,4844 +runlist,194,4851 +runlist,195,4842 +runlist,196,4844 +runlist,197,4848 +runlist,198,4846 +runlist,199,4847 +runlist,200,4848 +runlist,201,4849 +runlist,202,4850 +runlist,203,4850 +runlist,204,4849 +runlist,205,4869 +runlist,206,4869 +runlist,207,4846 +runlist,208,4841 +runlist,209,4843 +runlist,210,4844 +runlist,211,4839 +runlist,212,4838 +runlist,213,4840 +runlist,214,4842 +runlist,215,4851 +runlist,216,4843 +runlist,217,4846 +runlist,218,4853 +runlist,219,4844 +runlist,220,4844 +runlist,221,4842 +runlist,222,4849 +runlist,223,4838 +runlist,224,4841 +runlist,225,4841 +runlist,226,4846 +runlist,227,4845 +runlist,228,4837 +runlist,229,4848 +runlist,230,4842 +runlist,231,4852 +runlist,232,4846 +runlist,233,4849 +runlist,234,4840 +runlist,235,4845 +runlist,236,4845 +runlist,237,4849 +runlist,238,4842 +runlist,239,4850 +runlist,240,4836 +runlist,241,4841 +runlist,242,4841 +runlist,243,4845 +runlist,244,4845 +runlist,245,4841 +runlist,246,4841 +runlist,247,4839 +runlist,248,4847 +runlist,249,4842 +runlist,250,4844 +runlist,251,4837 runlist,252,4846 -runlist,253,4845 -runlist,254,4849 -runlist,255,4849 -runlist,256,4845 -runlist,257,4845 -runlist,258,4851 -runlist,259,4845 -runlist,260,4850 -runlist,261,4853 -runlist,262,4848 -runlist,263,4849 -runlist,264,4853 -runlist,265,4849 -runlist,266,4848 +runlist,253,4844 +runlist,254,4846 +runlist,255,4844 +runlist,256,4846 +runlist,257,4848 +runlist,258,4840 +runlist,259,4837 +runlist,260,4840 +runlist,261,4845 +runlist,262,4958 +runlist,263,4865 +runlist,264,4847 +runlist,265,4842 +runlist,266,4837 runlist,267,4846 -runlist,268,4843 -runlist,269,4844 -runlist,270,4848 -runlist,271,4851 -runlist,272,4851 -runlist,273,4841 -runlist,274,4846 -runlist,275,4846 -runlist,276,4849 -runlist,277,4851 -runlist,278,4842 -runlist,279,4845 -runlist,280,4850 -runlist,281,4848 -runlist,282,4845 -runlist,283,4846 -runlist,284,4851 -runlist,285,4851 -runlist,286,4853 -runlist,287,4842 -runlist,288,4880 -runlist,289,4857 -runlist,290,4851 -runlist,291,4849 -runlist,292,4842 +runlist,268,4842 +runlist,269,4839 +runlist,270,4846 +runlist,271,4846 +runlist,272,4847 +runlist,273,4846 +runlist,274,4851 +runlist,275,4839 +runlist,276,4846 +runlist,277,4844 +runlist,278,4846 +runlist,279,4839 +runlist,280,4839 +runlist,281,4856 +runlist,282,4844 +runlist,283,4849 +runlist,284,4845 +runlist,285,4841 +runlist,286,4847 +runlist,287,4845 +runlist,288,4849 +runlist,289,4844 +runlist,290,4852 +runlist,291,4843 +runlist,292,4845 runlist,293,4844 -runlist,294,4845 -runlist,295,4846 -runlist,296,4844 -runlist,297,4846 -runlist,298,4852 -runlist,299,4850 -runlist,300,4845 -runlist,301,4850 -runlist,302,4845 -runlist,303,4852 -runlist,304,4844 -runlist,305,4845 -runlist,306,4849 -runlist,307,4849 -runlist,308,4851 -runlist,309,4846 -runlist,310,4845 -runlist,311,4846 -runlist,312,4855 -runlist,313,4848 -runlist,314,4844 -runlist,315,4843 -runlist,316,4848 -runlist,317,4853 -runlist,318,4848 -runlist,319,4852 -runlist,320,4845 -runlist,321,4847 -runlist,322,4845 -runlist,323,4857 -runlist,324,4856 -runlist,325,4846 -runlist,326,4848 -runlist,327,4846 -runlist,328,4845 -runlist,329,4847 -runlist,330,4852 -runlist,331,4849 -runlist,332,4848 -runlist,333,4847 -runlist,334,4871 -runlist,335,4870 +runlist,294,4842 +runlist,295,4844 +runlist,296,4849 +runlist,297,4845 +runlist,298,4845 +runlist,299,4841 +runlist,300,4842 +runlist,301,4844 +runlist,302,4841 +runlist,303,4854 +runlist,304,4847 +runlist,305,4851 +runlist,306,4845 +runlist,307,4848 +runlist,308,4843 +runlist,309,4848 +runlist,310,4873 +runlist,311,4879 +runlist,312,4848 +runlist,313,4843 +runlist,314,4862 +runlist,315,4849 +runlist,316,4849 +runlist,317,4843 +runlist,318,4844 +runlist,319,4843 +runlist,320,4843 +runlist,321,4845 +runlist,322,4846 +runlist,323,4853 +runlist,324,4850 +runlist,325,4855 +runlist,326,4843 +runlist,327,4850 +runlist,328,4848 +runlist,329,4852 +runlist,330,4842 +runlist,331,4842 +runlist,332,4842 +runlist,333,4846 +runlist,334,4848 +runlist,335,4844 runlist,336,4842 -runlist,337,4847 -runlist,338,4851 -runlist,339,4847 -runlist,340,4853 -runlist,341,4845 -runlist,342,4846 -runlist,343,4849 -runlist,344,4845 -runlist,345,4844 -runlist,346,4850 -runlist,347,4847 -runlist,348,4851 -runlist,349,4848 -runlist,350,4846 -runlist,351,4857 -runlist,352,4848 -runlist,353,4853 -runlist,354,4853 -runlist,355,4868 -runlist,356,4891 -runlist,357,4881 -runlist,358,4878 -runlist,359,4879 -runlist,360,4880 -runlist,361,4875 -runlist,362,4819 -runlist,363,4828 -runlist,364,4824 -runlist,365,4837 -runlist,366,4825 -runlist,367,4827 -runlist,368,4828 -runlist,369,4851 -runlist,370,4852 -runlist,371,4848 -runlist,372,4841 -runlist,373,4845 -runlist,374,4845 -runlist,375,4848 -runlist,376,4849 -runlist,377,4852 -runlist,378,4850 -runlist,379,4841 -runlist,380,4846 +runlist,337,4845 +runlist,338,4847 +runlist,339,4844 +runlist,340,4850 +runlist,341,4840 +runlist,342,4847 +runlist,343,4845 +runlist,344,4850 +runlist,345,4849 +runlist,346,4842 +runlist,347,4841 +runlist,348,4841 +runlist,349,4850 +runlist,350,4838 +runlist,351,4843 +runlist,352,4839 +runlist,353,4848 +runlist,354,4841 +runlist,355,4845 +runlist,356,4848 +runlist,357,4847 +runlist,358,4836 +runlist,359,4846 +runlist,360,4847 +runlist,361,4845 +runlist,362,4848 +runlist,363,4839 +runlist,364,4843 +runlist,365,4842 +runlist,366,4860 +runlist,367,4841 +runlist,368,4840 +runlist,369,4842 +runlist,370,4843 +runlist,371,4843 +runlist,372,4848 +runlist,373,4841 +runlist,374,4844 +runlist,375,4844 +runlist,376,4844 +runlist,377,4844 +runlist,378,4839 +runlist,379,4845 +runlist,380,4841 runlist,381,4841 runlist,382,4842 -runlist,383,4854 -runlist,384,4852 -runlist,385,4850 -runlist,386,4844 -runlist,387,4845 -runlist,388,4841 -runlist,389,4905 -runlist,390,4886 -runlist,391,4847 -runlist,392,4842 -runlist,393,4848 -runlist,394,4844 -runlist,395,4841 -runlist,396,4850 -runlist,397,4847 -runlist,398,4850 -runlist,399,4847 -runlist,400,4852 -runlist,401,4851 -runlist,402,4842 -runlist,403,4842 -runlist,404,4853 -runlist,405,4850 +runlist,383,4840 +runlist,384,4840 +runlist,385,4840 +runlist,386,4841 +runlist,387,4841 +runlist,388,4843 +runlist,389,4842 +runlist,390,4840 +runlist,391,4845 +runlist,392,4847 +runlist,393,4843 +runlist,394,4847 +runlist,395,4840 +runlist,396,4845 +runlist,397,4839 +runlist,398,4877 +runlist,399,4850 +runlist,400,4845 +runlist,401,4843 +runlist,402,4839 +runlist,403,4839 +runlist,404,4846 +runlist,405,4843 runlist,406,4853 -runlist,407,4841 -runlist,408,4848 -runlist,409,4846 -runlist,410,4845 -runlist,411,4842 -runlist,412,4844 -runlist,413,4848 -runlist,414,4849 -runlist,415,4844 -runlist,416,4844 -runlist,417,4847 -runlist,418,4845 -runlist,419,4846 -runlist,420,4862 -runlist,421,4843 -runlist,422,4842 -runlist,423,4841 -runlist,424,4845 -runlist,425,4849 -runlist,426,4849 -runlist,427,4846 +runlist,407,4839 +runlist,408,4844 +runlist,409,4847 +runlist,410,4840 +runlist,411,4845 +runlist,412,4842 +runlist,413,4854 +runlist,414,4843 +runlist,415,4872 +runlist,416,4867 +runlist,417,4858 +runlist,418,4870 +runlist,419,4847 +runlist,420,4847 +runlist,421,4846 +runlist,422,4840 +runlist,423,4840 +runlist,424,4840 +runlist,425,4852 +runlist,426,4843 +runlist,427,4849 runlist,428,4844 -runlist,429,4848 +runlist,429,4841 runlist,430,4848 -runlist,431,4848 -runlist,432,4844 -runlist,433,4842 +runlist,431,4838 +runlist,432,4850 +runlist,433,4844 runlist,434,4845 -runlist,435,4841 +runlist,435,4847 runlist,436,4846 -runlist,437,4844 -runlist,438,4860 -runlist,439,4871 -runlist,440,4857 -runlist,441,4848 -runlist,442,4847 +runlist,437,4850 +runlist,438,4844 +runlist,439,4849 +runlist,440,4842 +runlist,441,4847 +runlist,442,4840 runlist,443,4848 -runlist,444,4848 -runlist,445,4844 -runlist,446,4849 -runlist,447,4850 +runlist,444,4838 +runlist,445,4845 +runlist,446,4847 +runlist,447,4844 runlist,448,4845 -runlist,449,4842 -runlist,450,4848 -runlist,451,4850 -runlist,452,4846 -runlist,453,4849 -runlist,454,4848 -runlist,455,4846 -runlist,456,4845 -runlist,457,4851 -runlist,458,4849 -runlist,459,4849 -runlist,460,4843 -runlist,461,4848 -runlist,462,4866 -runlist,463,4891 -runlist,464,4852 -runlist,465,4851 -runlist,466,4854 -runlist,467,4844 -runlist,468,4848 -runlist,469,4849 -runlist,470,4856 -runlist,471,4846 -runlist,472,4841 -runlist,473,4853 -runlist,474,4852 -runlist,475,4851 -runlist,476,4844 -runlist,477,4851 -runlist,478,4850 -runlist,479,4847 -runlist,480,4845 -runlist,481,4848 -runlist,482,4850 -runlist,483,4851 -runlist,484,4848 -runlist,485,4847 -runlist,486,4857 -runlist,487,4857 -runlist,488,4844 -runlist,489,4850 -runlist,490,4845 -runlist,491,4852 -runlist,492,4852 -runlist,493,4854 -runlist,494,4844 -runlist,495,4843 -runlist,496,4848 -runlist,497,4845 -runlist,498,4848 -runlist,499,4844 -runlist,500,4848 -runlist,501,4849 -runlist,502,4845 -runlist,503,4848 -runlist,504,4846 -runlist,505,4842 -runlist,506,4837 -runlist,507,4861 +runlist,449,4843 +runlist,450,4845 +runlist,451,4842 +runlist,452,4834 +runlist,453,4846 +runlist,454,4844 +runlist,455,4842 +runlist,456,4849 +runlist,457,4840 +runlist,458,4846 +runlist,459,4841 +runlist,460,4840 +runlist,461,4843 +runlist,462,4842 +runlist,463,4845 +runlist,464,4842 +runlist,465,4837 +runlist,466,4849 +runlist,467,4849 +runlist,468,4852 +runlist,469,4845 +runlist,470,4840 +runlist,471,4838 +runlist,472,4842 +runlist,473,4837 +runlist,474,4849 +runlist,475,4837 +runlist,476,4846 +runlist,477,4844 +runlist,478,4842 +runlist,479,4842 +runlist,480,4842 +runlist,481,4838 +runlist,482,4844 +runlist,483,4842 +runlist,484,4840 +runlist,485,4843 +runlist,486,4850 +runlist,487,4838 +runlist,488,4846 +runlist,489,4851 +runlist,490,4838 +runlist,491,4846 +runlist,492,4843 +runlist,493,4840 +runlist,494,4846 +runlist,495,4844 +runlist,496,4842 +runlist,497,4839 +runlist,498,4841 +runlist,499,4841 +runlist,500,4839 +runlist,501,4843 +runlist,502,4840 +runlist,503,4839 +runlist,504,4845 +runlist,505,4851 +runlist,506,4841 +runlist,507,4834 runlist,508,4848 -runlist,509,4843 -runlist,510,4847 -runlist,511,4850 -runlist,512,4844 -runlist,513,4863 -runlist,514,4846 -runlist,515,4841 -runlist,516,4845 +runlist,509,4856 +runlist,510,4852 +runlist,511,4841 +runlist,512,4849 +runlist,513,4859 +runlist,514,4845 +runlist,515,4845 +runlist,516,4841 runlist,517,4844 -runlist,518,4844 -runlist,519,4845 -runlist,520,4841 -runlist,521,4839 -runlist,522,4847 -runlist,523,4843 -runlist,524,4847 -runlist,525,4846 -runlist,526,4848 -runlist,527,4845 -runlist,528,4850 -runlist,529,4851 -runlist,530,4848 -runlist,531,4851 -runlist,532,4851 +runlist,518,4846 +runlist,519,4846 +runlist,520,4845 +runlist,521,4842 +runlist,522,4849 +runlist,523,4840 +runlist,524,4842 +runlist,525,4842 +runlist,526,4844 +runlist,527,4842 +runlist,528,4843 +runlist,529,4846 +runlist,530,4851 +runlist,531,4843 +runlist,532,4858 runlist,533,4849 -runlist,534,4850 -runlist,535,4843 -runlist,536,4853 -runlist,537,4848 -runlist,538,4847 -runlist,539,4851 -runlist,540,4851 -runlist,541,4850 -runlist,542,4851 -runlist,543,4873 -runlist,544,4869 -runlist,545,4840 -runlist,546,4844 -runlist,547,4852 -runlist,548,4844 -runlist,549,4857 -runlist,550,4850 -runlist,551,4846 -runlist,552,4844 -runlist,553,4845 -runlist,554,4852 -runlist,555,4841 -runlist,556,4838 -runlist,557,4846 +runlist,534,4859 +runlist,535,4865 +runlist,536,4862 +runlist,537,4851 +runlist,538,4845 +runlist,539,4839 +runlist,540,4841 +runlist,541,4893 +runlist,542,4855 +runlist,543,4839 +runlist,544,4835 +runlist,545,4837 +runlist,546,4851 +runlist,547,4848 +runlist,548,4837 +runlist,549,4832 +runlist,550,4840 +runlist,551,4850 +runlist,552,4846 +runlist,553,4843 +runlist,554,4839 +runlist,555,4840 +runlist,556,4842 +runlist,557,4838 runlist,558,4843 -runlist,559,4840 -runlist,560,4847 -runlist,561,4844 -runlist,562,4846 -runlist,563,4844 -runlist,564,4856 -runlist,565,4845 -runlist,566,4851 -runlist,567,4846 -runlist,568,4858 -runlist,569,4859 -runlist,570,4825 -runlist,571,4847 -runlist,572,4851 -runlist,573,4861 -runlist,574,4855 -runlist,575,4846 -runlist,576,4850 +runlist,559,4841 +runlist,560,4838 +runlist,561,4845 +runlist,562,4842 +runlist,563,4843 +runlist,564,4844 +runlist,565,4836 +runlist,566,4831 +runlist,567,4834 +runlist,568,4836 +runlist,569,4841 +runlist,570,4840 +runlist,571,4835 +runlist,572,4855 +runlist,573,4854 +runlist,574,4849 +runlist,575,4844 +runlist,576,4840 runlist,577,4845 -runlist,578,4846 +runlist,578,4843 runlist,579,4845 -runlist,580,4844 -runlist,581,4843 -runlist,582,4839 -runlist,583,4846 -runlist,584,4845 -runlist,585,4857 -runlist,586,4860 -runlist,587,4860 -runlist,588,4852 -runlist,589,4850 -runlist,590,4861 -runlist,591,4858 -runlist,592,4844 -runlist,593,4843 -runlist,594,4856 -runlist,595,4842 -runlist,596,4849 -runlist,597,4865 -runlist,598,4848 -runlist,599,4845 -runlist,600,4855 +runlist,580,4841 +runlist,581,4842 +runlist,582,4841 +runlist,583,4847 +runlist,584,4847 +runlist,585,4847 +runlist,586,4835 +runlist,587,4840 +runlist,588,4839 +runlist,589,4834 +runlist,590,4845 +runlist,591,4845 +runlist,592,4841 +runlist,593,4846 +runlist,594,4839 +runlist,595,4841 +runlist,596,4841 +runlist,597,4846 +runlist,598,4837 +runlist,599,4846 +runlist,600,4842 runlist,601,4844 -runlist,602,4845 -runlist,603,4847 -runlist,604,4844 -runlist,605,4849 +runlist,602,4844 +runlist,603,4844 +runlist,604,4857 +runlist,605,4844 runlist,606,4843 -runlist,607,4840 -runlist,608,4837 -runlist,609,4844 -runlist,610,4844 -runlist,611,4851 +runlist,607,4838 +runlist,608,4884 +runlist,609,4870 +runlist,610,4831 +runlist,611,4850 runlist,612,4844 -runlist,613,4850 -runlist,614,4849 -runlist,615,4844 -runlist,616,4846 -runlist,617,4849 -runlist,618,4850 -runlist,619,4847 -runlist,620,4845 -runlist,621,4858 +runlist,613,4849 +runlist,614,4838 +runlist,615,4838 +runlist,616,4841 +runlist,617,4840 +runlist,618,4846 +runlist,619,4842 +runlist,620,4841 +runlist,621,4840 runlist,622,4841 -runlist,623,4852 -runlist,624,4859 -runlist,625,4843 -runlist,626,4844 -runlist,627,4848 -runlist,628,4878 -runlist,629,4845 -runlist,630,4855 -runlist,631,4853 -runlist,632,4842 -runlist,633,4850 -runlist,634,4846 -runlist,635,4839 -runlist,636,4852 -runlist,637,4844 -runlist,638,4843 -runlist,639,4847 -runlist,640,4848 -runlist,641,4849 -runlist,642,4841 -runlist,643,4845 -runlist,644,4850 -runlist,645,4848 -runlist,646,4844 -runlist,647,4880 -runlist,648,4874 -runlist,649,4850 -runlist,650,4845 -runlist,651,4851 -runlist,652,4861 -runlist,653,4851 -runlist,654,4859 -runlist,655,4843 -runlist,656,4844 -runlist,657,4850 -runlist,658,4848 -runlist,659,4845 -runlist,660,4849 -runlist,661,4846 -runlist,662,4847 -runlist,663,4850 -runlist,664,4846 -runlist,665,4846 -runlist,666,4844 -runlist,667,4844 -runlist,668,4845 -runlist,669,4849 -runlist,670,4847 -runlist,671,4845 -runlist,672,4857 -runlist,673,4852 -runlist,674,4838 -runlist,675,4845 -runlist,676,4840 -runlist,677,4844 -runlist,678,4843 -runlist,679,4846 -runlist,680,4848 -runlist,681,4838 -runlist,682,4845 +runlist,623,4839 +runlist,624,4845 +runlist,625,4835 +runlist,626,4838 +runlist,627,4840 +runlist,628,4844 +runlist,629,4840 +runlist,630,4843 +runlist,631,4840 +runlist,632,4844 +runlist,633,4844 +runlist,634,4841 +runlist,635,4847 +runlist,636,4838 +runlist,637,4841 +runlist,638,4837 +runlist,639,4844 +runlist,640,4846 +runlist,641,4837 +runlist,642,4853 +runlist,643,4842 +runlist,644,4835 +runlist,645,4846 +runlist,646,4839 +runlist,647,4839 +runlist,648,4840 +runlist,649,4837 +runlist,650,4836 +runlist,651,4841 +runlist,652,4839 +runlist,653,4831 +runlist,654,4842 +runlist,655,4840 +runlist,656,4832 +runlist,657,4837 +runlist,658,4835 +runlist,659,4841 +runlist,660,4835 +runlist,661,4844 +runlist,662,4832 +runlist,663,4842 +runlist,664,4838 +runlist,665,4840 +runlist,666,4865 +runlist,667,4887 +runlist,668,4861 +runlist,669,4848 +runlist,670,4843 +runlist,671,4847 +runlist,672,4836 +runlist,673,4842 +runlist,674,4849 +runlist,675,4851 +runlist,676,4845 +runlist,677,4845 +runlist,678,4840 +runlist,679,4841 +runlist,680,4841 +runlist,681,4850 +runlist,682,4867 runlist,683,4846 -runlist,684,4849 -runlist,685,4846 -runlist,686,4843 -runlist,687,4842 -runlist,688,4838 -runlist,689,4841 -runlist,690,4842 +runlist,684,4842 +runlist,685,4839 +runlist,686,4839 +runlist,687,4844 +runlist,688,4851 +runlist,689,4840 +runlist,690,4845 runlist,691,4842 runlist,692,4844 -runlist,693,4859 -runlist,694,4844 -runlist,695,4850 -runlist,696,4843 -runlist,697,4838 -runlist,698,4844 -runlist,699,4841 -runlist,700,4847 -runlist,701,4844 -runlist,702,4847 -runlist,703,4840 -runlist,704,4850 -runlist,705,4848 -runlist,706,4860 -runlist,707,4848 -runlist,708,4848 -runlist,709,4849 -runlist,710,4842 -runlist,711,4846 -runlist,712,4848 -runlist,713,4842 -runlist,714,4863 -runlist,715,4840 -runlist,716,4841 -runlist,717,4849 -runlist,718,4845 -runlist,719,4840 +runlist,693,4841 +runlist,694,4846 +runlist,695,4851 +runlist,696,4852 +runlist,697,4844 +runlist,698,4846 +runlist,699,4839 +runlist,700,4843 +runlist,701,4839 +runlist,702,4844 +runlist,703,4837 +runlist,704,4843 +runlist,705,4835 +runlist,706,4838 +runlist,707,4844 +runlist,708,4842 +runlist,709,4843 +runlist,710,4846 +runlist,711,4840 +runlist,712,4844 +runlist,713,4844 +runlist,714,4851 +runlist,715,4846 +runlist,716,4852 +runlist,717,4845 +runlist,718,4843 +runlist,719,4841 runlist,720,4841 -runlist,721,4841 -runlist,722,4849 -runlist,723,4841 -runlist,724,4846 -runlist,725,4845 -runlist,726,4849 -runlist,727,4844 -runlist,728,4842 -runlist,729,4846 -runlist,730,4841 -runlist,731,4844 -runlist,732,4849 -runlist,733,4844 -runlist,734,4850 -runlist,735,4836 -runlist,736,4851 -runlist,737,4848 -runlist,738,4843 -runlist,739,4847 -runlist,740,4849 -runlist,741,4845 -runlist,742,4841 +runlist,721,4838 +runlist,722,4839 +runlist,723,4849 +runlist,724,4843 +runlist,725,4840 +runlist,726,4863 +runlist,727,4846 +runlist,728,4840 +runlist,729,4843 +runlist,730,4843 +runlist,731,4841 +runlist,732,4847 +runlist,733,4842 +runlist,734,4849 +runlist,735,4837 +runlist,736,4845 +runlist,737,4846 +runlist,738,4847 +runlist,739,4845 +runlist,740,4844 +runlist,741,4851 +runlist,742,4851 runlist,743,4843 -runlist,744,4842 -runlist,745,4854 -runlist,746,4846 -runlist,747,4843 -runlist,748,4849 -runlist,749,4850 -runlist,750,4847 -runlist,751,4847 -runlist,752,4918 -runlist,753,4871 -runlist,754,4845 -runlist,755,4854 -runlist,756,4846 -runlist,757,4847 -runlist,758,4845 -runlist,759,4845 -runlist,760,4848 -runlist,761,4847 -runlist,762,4842 +runlist,744,4838 +runlist,745,4845 +runlist,746,4845 +runlist,747,4846 +runlist,748,4845 +runlist,749,4844 +runlist,750,4842 +runlist,751,4839 +runlist,752,4852 +runlist,753,4848 +runlist,754,4838 +runlist,755,4838 +runlist,756,4837 +runlist,757,4858 +runlist,758,4841 +runlist,759,4844 +runlist,760,4841 +runlist,761,4843 +runlist,762,4847 runlist,763,4844 -runlist,764,4850 +runlist,764,4843 runlist,765,4839 -runlist,766,4847 -runlist,767,4841 -runlist,768,4847 -runlist,769,4841 -runlist,770,4849 -runlist,771,4844 -runlist,772,4841 -runlist,773,4845 -runlist,774,4835 -runlist,775,4822 -runlist,776,4837 -runlist,777,4849 -runlist,778,4844 -runlist,779,4846 -runlist,780,4850 -runlist,781,4847 -runlist,782,4850 -runlist,783,4846 -runlist,784,4844 -runlist,785,4842 -runlist,786,4844 -runlist,787,4847 +runlist,766,4851 +runlist,767,4843 +runlist,768,4839 +runlist,769,4842 +runlist,770,4850 +runlist,771,4843 +runlist,772,4844 +runlist,773,4846 +runlist,774,4840 +runlist,775,4850 +runlist,776,4839 +runlist,777,4854 +runlist,778,4865 +runlist,779,4887 +runlist,780,4865 +runlist,781,4859 +runlist,782,4839 +runlist,783,4842 +runlist,784,4846 +runlist,785,4844 +runlist,786,4840 +runlist,787,4838 runlist,788,4841 -runlist,789,4845 -runlist,790,4844 -runlist,791,4843 -runlist,792,4851 -runlist,793,4850 +runlist,789,4843 +runlist,790,4839 +runlist,791,4846 +runlist,792,4841 +runlist,793,4845 runlist,794,4842 -runlist,795,4858 -runlist,796,4849 -runlist,797,4847 -runlist,798,4845 -runlist,799,4841 -runlist,800,4844 -runlist,801,4846 -runlist,802,4845 -runlist,803,4844 -runlist,804,4838 -runlist,805,4842 -runlist,806,4847 -runlist,807,4850 -runlist,808,4857 -runlist,809,4845 -runlist,810,4842 -runlist,811,4845 +runlist,795,4840 +runlist,796,4835 +runlist,797,4843 +runlist,798,4843 +runlist,799,4847 +runlist,800,4847 +runlist,801,4844 +runlist,802,4844 +runlist,803,4843 +runlist,804,4847 +runlist,805,4839 +runlist,806,4842 +runlist,807,4846 +runlist,808,4840 +runlist,809,4838 +runlist,810,4845 +runlist,811,4850 runlist,812,4848 runlist,813,4846 -runlist,814,4841 -runlist,815,4848 -runlist,816,4846 -runlist,817,4851 -runlist,818,4842 -runlist,819,4886 -runlist,820,4845 -runlist,821,4843 -runlist,822,4843 -runlist,823,4845 -runlist,824,4843 +runlist,814,4856 +runlist,815,4842 +runlist,816,4840 +runlist,817,4842 +runlist,818,4853 +runlist,819,4847 +runlist,820,4844 +runlist,821,4846 +runlist,822,4844 +runlist,823,4839 +runlist,824,4840 runlist,825,4845 -runlist,826,4851 -runlist,827,4843 -runlist,828,4849 -runlist,829,4844 -runlist,830,4842 -runlist,831,4844 -runlist,832,4844 -runlist,833,4842 -runlist,834,4842 -runlist,835,4840 -runlist,836,4843 -runlist,837,4849 -runlist,838,4850 -runlist,839,4843 -runlist,840,4843 -runlist,841,4840 -runlist,842,4843 -runlist,843,4843 -runlist,844,4841 -runlist,845,4845 -runlist,846,4842 -runlist,847,4845 +runlist,826,4839 +runlist,827,4840 +runlist,828,4846 +runlist,829,4845 +runlist,830,4850 +runlist,831,4841 +runlist,832,4839 +runlist,833,4840 +runlist,834,4837 +runlist,835,4852 +runlist,836,4836 +runlist,837,4856 +runlist,838,4848 +runlist,839,4847 +runlist,840,4847 +runlist,841,4847 +runlist,842,4844 +runlist,843,4840 +runlist,844,4844 +runlist,845,4841 +runlist,846,4845 +runlist,847,4846 runlist,848,4841 -runlist,849,4847 -runlist,850,4845 -runlist,851,4844 -runlist,852,4847 -runlist,853,4842 -runlist,854,4843 -runlist,855,4846 -runlist,856,4862 -runlist,857,4877 -runlist,858,4864 -runlist,859,4848 -runlist,860,4847 -runlist,861,4843 -runlist,862,4847 -runlist,863,4853 -runlist,864,4847 -runlist,865,4850 -runlist,866,4848 -runlist,867,4841 -runlist,868,4843 -runlist,869,4846 -runlist,870,4836 -runlist,871,4844 -runlist,872,4845 -runlist,873,4842 -runlist,874,4840 -runlist,875,4842 -runlist,876,4851 +runlist,849,4846 +runlist,850,4848 +runlist,851,4842 +runlist,852,4839 +runlist,853,4839 +runlist,854,4851 +runlist,855,4842 +runlist,856,4842 +runlist,857,4845 +runlist,858,4834 +runlist,859,4837 +runlist,860,4848 +runlist,861,4856 +runlist,862,4855 +runlist,863,4860 +runlist,864,4842 +runlist,865,4837 +runlist,866,4846 +runlist,867,4837 +runlist,868,4842 +runlist,869,4837 +runlist,870,4842 +runlist,871,4842 +runlist,872,4841 +runlist,873,4835 +runlist,874,4841 +runlist,875,4837 +runlist,876,4838 runlist,877,4840 -runlist,878,4853 -runlist,879,4854 -runlist,880,4844 -runlist,881,4846 -runlist,882,4843 -runlist,883,4840 -runlist,884,4840 +runlist,878,4844 +runlist,879,4836 +runlist,880,4850 +runlist,881,4845 +runlist,882,4868 +runlist,883,4878 +runlist,884,4844 runlist,885,4840 -runlist,886,4839 -runlist,887,4846 -runlist,888,4851 -runlist,889,4844 -runlist,890,4870 -runlist,891,4864 +runlist,886,4860 +runlist,887,4847 +runlist,888,4849 +runlist,889,4849 +runlist,890,4838 +runlist,891,4846 runlist,892,4850 -runlist,893,4855 -runlist,894,4847 -runlist,895,4845 -runlist,896,4892 -runlist,897,4891 -runlist,898,4872 -runlist,899,4848 -runlist,900,4840 -runlist,901,4849 -runlist,902,4847 -runlist,903,4840 -runlist,904,4849 -runlist,905,4841 -runlist,906,4843 -runlist,907,4849 -runlist,908,4850 -runlist,909,4848 -runlist,910,4847 +runlist,893,4833 +runlist,894,4844 +runlist,895,4839 +runlist,896,4856 +runlist,897,4849 +runlist,898,4847 +runlist,899,4852 +runlist,900,4858 +runlist,901,4846 +runlist,902,4871 +runlist,903,4876 +runlist,904,4850 +runlist,905,4844 +runlist,906,4842 +runlist,907,4848 +runlist,908,4845 +runlist,909,4847 +runlist,910,4840 runlist,911,4846 -runlist,912,4846 -runlist,913,4843 -runlist,914,4841 -runlist,915,4847 -runlist,916,4849 -runlist,917,4845 -runlist,918,4851 -runlist,919,4849 -runlist,920,4854 +runlist,912,4839 +runlist,913,4842 +runlist,914,4848 +runlist,915,4842 +runlist,916,4847 +runlist,917,4865 +runlist,918,4843 +runlist,919,4843 +runlist,920,4842 runlist,921,4848 -runlist,922,4846 -runlist,923,4845 -runlist,924,4845 -runlist,925,4846 -runlist,926,4841 -runlist,927,4846 -runlist,928,4843 -runlist,929,4841 -runlist,930,4847 -runlist,931,4846 -runlist,932,4851 -runlist,933,4846 -runlist,934,4844 -runlist,935,4843 -runlist,936,4841 -runlist,937,4847 +runlist,922,4854 +runlist,923,4856 +runlist,924,4850 +runlist,925,4844 +runlist,926,4850 +runlist,927,4845 +runlist,928,4850 +runlist,929,4845 +runlist,930,4843 +runlist,931,4838 +runlist,932,4838 +runlist,933,4839 +runlist,934,4841 +runlist,935,4851 +runlist,936,4849 +runlist,937,4840 runlist,938,4842 -runlist,939,4850 -runlist,940,4844 -runlist,941,4854 -runlist,942,4841 -runlist,943,4838 -runlist,944,4861 -runlist,945,4852 -runlist,946,4851 +runlist,939,4844 +runlist,940,4838 +runlist,941,4841 +runlist,942,4847 +runlist,943,4847 +runlist,944,4841 +runlist,945,4842 +runlist,946,4834 runlist,947,4848 -runlist,948,4849 -runlist,949,4846 -runlist,950,4864 -runlist,951,4851 -runlist,952,4836 -runlist,953,4843 -runlist,954,4845 -runlist,955,4840 -runlist,956,4847 -runlist,957,4844 -runlist,958,4843 -runlist,959,4851 -runlist,960,4848 -runlist,961,4875 -runlist,962,4866 -runlist,963,4850 -runlist,964,4844 -runlist,965,4854 -runlist,966,4846 -runlist,967,4847 -runlist,968,4854 -runlist,969,4845 -runlist,970,4834 -runlist,971,4820 -runlist,972,4817 -runlist,973,4821 -runlist,974,4827 -runlist,975,4813 -runlist,976,4816 -runlist,977,4830 -runlist,978,4827 -runlist,979,4822 -runlist,980,4825 -runlist,981,4822 -runlist,982,4842 -runlist,983,4824 -runlist,984,4824 -runlist,985,4825 -runlist,986,4824 -runlist,987,4828 -runlist,988,4821 -runlist,989,4826 -runlist,990,4826 -runlist,991,4828 -runlist,992,4825 -runlist,993,4821 -runlist,994,4829 -runlist,995,4824 -runlist,996,4819 -runlist,997,4821 -runlist,998,4821 -runlist,999,4824 -fused_transactions_loadpdi,0,4859 -fused_transactions_loadpdi,1,4839 -fused_transactions_loadpdi,2,4836 -fused_transactions_loadpdi,3,4832 -fused_transactions_loadpdi,4,4826 -fused_transactions_loadpdi,5,4830 -fused_transactions_loadpdi,6,4831 -fused_transactions_loadpdi,7,4824 -fused_transactions_loadpdi,8,4819 +runlist,948,4844 +runlist,949,4842 +runlist,950,4846 +runlist,951,4840 +runlist,952,4844 +runlist,953,4840 +runlist,954,4869 +runlist,955,4857 +runlist,956,4846 +runlist,957,4860 +runlist,958,4873 +runlist,959,4878 +runlist,960,4852 +runlist,961,4831 +runlist,962,4840 +runlist,963,4840 +runlist,964,4858 +runlist,965,4842 +runlist,966,4847 +runlist,967,4849 +runlist,968,4844 +runlist,969,4850 +runlist,970,4837 +runlist,971,4840 +runlist,972,4837 +runlist,973,4844 +runlist,974,4844 +runlist,975,4838 +runlist,976,4837 +runlist,977,4839 +runlist,978,4837 +runlist,979,4842 +runlist,980,4863 +runlist,981,4870 +runlist,982,4849 +runlist,983,4852 +runlist,984,4849 +runlist,985,4854 +runlist,986,4850 +runlist,987,4840 +runlist,988,4846 +runlist,989,4856 +runlist,990,4865 +runlist,991,4847 +runlist,992,4847 +runlist,993,4850 +runlist,994,4842 +runlist,995,4855 +runlist,996,4836 +runlist,997,4838 +runlist,998,4849 +runlist,999,4853 +fused_write32s_reset_ifchanged,0,4729 +fused_write32s_reset_ifchanged,1,4658 +fused_write32s_reset_ifchanged,2,4656 +fused_write32s_reset_ifchanged,3,4662 +fused_write32s_reset_ifchanged,4,4685 +fused_write32s_reset_ifchanged,5,4675 +fused_write32s_reset_ifchanged,6,4654 +fused_write32s_reset_ifchanged,7,4657 +fused_write32s_reset_ifchanged,8,4652 +fused_write32s_reset_ifchanged,9,4658 +fused_write32s_reset_ifchanged,10,4660 +fused_write32s_reset_ifchanged,11,4684 +fused_write32s_reset_ifchanged,12,4661 +fused_write32s_reset_ifchanged,13,4659 +fused_write32s_reset_ifchanged,14,4662 +fused_write32s_reset_ifchanged,15,4687 +fused_write32s_reset_ifchanged,16,4651 +fused_write32s_reset_ifchanged,17,4642 +fused_write32s_reset_ifchanged,18,4653 +fused_write32s_reset_ifchanged,19,4638 +fused_write32s_reset_ifchanged,20,4632 +fused_write32s_reset_ifchanged,21,4630 +fused_write32s_reset_ifchanged,22,4645 +fused_write32s_reset_ifchanged,23,4656 +fused_write32s_reset_ifchanged,24,4653 +fused_write32s_reset_ifchanged,25,4646 +fused_write32s_reset_ifchanged,26,4648 +fused_write32s_reset_ifchanged,27,4652 +fused_write32s_reset_ifchanged,28,4654 +fused_write32s_reset_ifchanged,29,4648 +fused_write32s_reset_ifchanged,30,4646 +fused_write32s_reset_ifchanged,31,4656 +fused_write32s_reset_ifchanged,32,4649 +fused_write32s_reset_ifchanged,33,4656 +fused_write32s_reset_ifchanged,34,4659 +fused_write32s_reset_ifchanged,35,4645 +fused_write32s_reset_ifchanged,36,4652 +fused_write32s_reset_ifchanged,37,4649 +fused_write32s_reset_ifchanged,38,4645 +fused_write32s_reset_ifchanged,39,4647 +fused_write32s_reset_ifchanged,40,4652 +fused_write32s_reset_ifchanged,41,4654 +fused_write32s_reset_ifchanged,42,4649 +fused_write32s_reset_ifchanged,43,4650 +fused_write32s_reset_ifchanged,44,4650 +fused_write32s_reset_ifchanged,45,4653 +fused_write32s_reset_ifchanged,46,4657 +fused_write32s_reset_ifchanged,47,4659 +fused_write32s_reset_ifchanged,48,4643 +fused_write32s_reset_ifchanged,49,4634 +fused_write32s_reset_ifchanged,50,4637 +fused_write32s_reset_ifchanged,51,4633 +fused_write32s_reset_ifchanged,52,4657 +fused_write32s_reset_ifchanged,53,4654 +fused_write32s_reset_ifchanged,54,4649 +fused_write32s_reset_ifchanged,55,4649 +fused_write32s_reset_ifchanged,56,4652 +fused_write32s_reset_ifchanged,57,4652 +fused_write32s_reset_ifchanged,58,4655 +fused_write32s_reset_ifchanged,59,4658 +fused_write32s_reset_ifchanged,60,4647 +fused_write32s_reset_ifchanged,61,4654 +fused_write32s_reset_ifchanged,62,4655 +fused_write32s_reset_ifchanged,63,4648 +fused_write32s_reset_ifchanged,64,4653 +fused_write32s_reset_ifchanged,65,4655 +fused_write32s_reset_ifchanged,66,4652 +fused_write32s_reset_ifchanged,67,4652 +fused_write32s_reset_ifchanged,68,4653 +fused_write32s_reset_ifchanged,69,4653 +fused_write32s_reset_ifchanged,70,4650 +fused_write32s_reset_ifchanged,71,4648 +fused_write32s_reset_ifchanged,72,4648 +fused_write32s_reset_ifchanged,73,4651 +fused_write32s_reset_ifchanged,74,4631 +fused_write32s_reset_ifchanged,75,4633 +fused_write32s_reset_ifchanged,76,4642 +fused_write32s_reset_ifchanged,77,4654 +fused_write32s_reset_ifchanged,78,4656 +fused_write32s_reset_ifchanged,79,4633 +fused_write32s_reset_ifchanged,80,4635 +fused_write32s_reset_ifchanged,81,4638 +fused_write32s_reset_ifchanged,82,4646 +fused_write32s_reset_ifchanged,83,4663 +fused_write32s_reset_ifchanged,84,4645 +fused_write32s_reset_ifchanged,85,4627 +fused_write32s_reset_ifchanged,86,4626 +fused_write32s_reset_ifchanged,87,4646 +fused_write32s_reset_ifchanged,88,4649 +fused_write32s_reset_ifchanged,89,4649 +fused_write32s_reset_ifchanged,90,4657 +fused_write32s_reset_ifchanged,91,4652 +fused_write32s_reset_ifchanged,92,4655 +fused_write32s_reset_ifchanged,93,4681 +fused_write32s_reset_ifchanged,94,4647 +fused_write32s_reset_ifchanged,95,4647 +fused_write32s_reset_ifchanged,96,4658 +fused_write32s_reset_ifchanged,97,4654 +fused_write32s_reset_ifchanged,98,4651 +fused_write32s_reset_ifchanged,99,4650 +fused_write32s_reset_ifchanged,100,4650 +fused_write32s_reset_ifchanged,101,4652 +fused_write32s_reset_ifchanged,102,4651 +fused_write32s_reset_ifchanged,103,4647 +fused_write32s_reset_ifchanged,104,4649 +fused_write32s_reset_ifchanged,105,4646 +fused_write32s_reset_ifchanged,106,4645 +fused_write32s_reset_ifchanged,107,4656 +fused_write32s_reset_ifchanged,108,4653 +fused_write32s_reset_ifchanged,109,4653 +fused_write32s_reset_ifchanged,110,4653 +fused_write32s_reset_ifchanged,111,4652 +fused_write32s_reset_ifchanged,112,4652 +fused_write32s_reset_ifchanged,113,4649 +fused_write32s_reset_ifchanged,114,4651 +fused_write32s_reset_ifchanged,115,4648 +fused_write32s_reset_ifchanged,116,4649 +fused_write32s_reset_ifchanged,117,4655 +fused_write32s_reset_ifchanged,118,4656 +fused_write32s_reset_ifchanged,119,4654 +fused_write32s_reset_ifchanged,120,4653 +fused_write32s_reset_ifchanged,121,4652 +fused_write32s_reset_ifchanged,122,4655 +fused_write32s_reset_ifchanged,123,4655 +fused_write32s_reset_ifchanged,124,4653 +fused_write32s_reset_ifchanged,125,4645 +fused_write32s_reset_ifchanged,126,4649 +fused_write32s_reset_ifchanged,127,4660 +fused_write32s_reset_ifchanged,128,4654 +fused_write32s_reset_ifchanged,129,4651 +fused_write32s_reset_ifchanged,130,4651 +fused_write32s_reset_ifchanged,131,4650 +fused_write32s_reset_ifchanged,132,4635 +fused_write32s_reset_ifchanged,133,4637 +fused_write32s_reset_ifchanged,134,4652 +fused_write32s_reset_ifchanged,135,4646 +fused_write32s_reset_ifchanged,136,4641 +fused_write32s_reset_ifchanged,137,4645 +fused_write32s_reset_ifchanged,138,4640 +fused_write32s_reset_ifchanged,139,4647 +fused_write32s_reset_ifchanged,140,4669 +fused_write32s_reset_ifchanged,141,4653 +fused_write32s_reset_ifchanged,142,4658 +fused_write32s_reset_ifchanged,143,4653 +fused_write32s_reset_ifchanged,144,4656 +fused_write32s_reset_ifchanged,145,4656 +fused_write32s_reset_ifchanged,146,4658 +fused_write32s_reset_ifchanged,147,4652 +fused_write32s_reset_ifchanged,148,4648 +fused_write32s_reset_ifchanged,149,4657 +fused_write32s_reset_ifchanged,150,4662 +fused_write32s_reset_ifchanged,151,4630 +fused_write32s_reset_ifchanged,152,4636 +fused_write32s_reset_ifchanged,153,4647 +fused_write32s_reset_ifchanged,154,4650 +fused_write32s_reset_ifchanged,155,4646 +fused_write32s_reset_ifchanged,156,4654 +fused_write32s_reset_ifchanged,157,4656 +fused_write32s_reset_ifchanged,158,4648 +fused_write32s_reset_ifchanged,159,4647 +fused_write32s_reset_ifchanged,160,4652 +fused_write32s_reset_ifchanged,161,4657 +fused_write32s_reset_ifchanged,162,4657 +fused_write32s_reset_ifchanged,163,4662 +fused_write32s_reset_ifchanged,164,4662 +fused_write32s_reset_ifchanged,165,4642 +fused_write32s_reset_ifchanged,166,4644 +fused_write32s_reset_ifchanged,167,4647 +fused_write32s_reset_ifchanged,168,4659 +fused_write32s_reset_ifchanged,169,4659 +fused_write32s_reset_ifchanged,170,4661 +fused_write32s_reset_ifchanged,171,4658 +fused_write32s_reset_ifchanged,172,4650 +fused_write32s_reset_ifchanged,173,4655 +fused_write32s_reset_ifchanged,174,4655 +fused_write32s_reset_ifchanged,175,4649 +fused_write32s_reset_ifchanged,176,4641 +fused_write32s_reset_ifchanged,177,4632 +fused_write32s_reset_ifchanged,178,4643 +fused_write32s_reset_ifchanged,179,4649 +fused_write32s_reset_ifchanged,180,4657 +fused_write32s_reset_ifchanged,181,4654 +fused_write32s_reset_ifchanged,182,4651 +fused_write32s_reset_ifchanged,183,4649 +fused_write32s_reset_ifchanged,184,4651 +fused_write32s_reset_ifchanged,185,4651 +fused_write32s_reset_ifchanged,186,4649 +fused_write32s_reset_ifchanged,187,4650 +fused_write32s_reset_ifchanged,188,4651 +fused_write32s_reset_ifchanged,189,4650 +fused_write32s_reset_ifchanged,190,4649 +fused_write32s_reset_ifchanged,191,4653 +fused_write32s_reset_ifchanged,192,4653 +fused_write32s_reset_ifchanged,193,4659 +fused_write32s_reset_ifchanged,194,4652 +fused_write32s_reset_ifchanged,195,4650 +fused_write32s_reset_ifchanged,196,4649 +fused_write32s_reset_ifchanged,197,4664 +fused_write32s_reset_ifchanged,198,4652 +fused_write32s_reset_ifchanged,199,4656 +fused_write32s_reset_ifchanged,200,4657 +fused_write32s_reset_ifchanged,201,4657 +fused_write32s_reset_ifchanged,202,4648 +fused_write32s_reset_ifchanged,203,4648 +fused_write32s_reset_ifchanged,204,4647 +fused_write32s_reset_ifchanged,205,4651 +fused_write32s_reset_ifchanged,206,4651 +fused_write32s_reset_ifchanged,207,4650 +fused_write32s_reset_ifchanged,208,4636 +fused_write32s_reset_ifchanged,209,4642 +fused_write32s_reset_ifchanged,210,4647 +fused_write32s_reset_ifchanged,211,4660 +fused_write32s_reset_ifchanged,212,4642 +fused_write32s_reset_ifchanged,213,4643 +fused_write32s_reset_ifchanged,214,4639 +fused_write32s_reset_ifchanged,215,4635 +fused_write32s_reset_ifchanged,216,4647 +fused_write32s_reset_ifchanged,217,4650 +fused_write32s_reset_ifchanged,218,4647 +fused_write32s_reset_ifchanged,219,4648 +fused_write32s_reset_ifchanged,220,4649 +fused_write32s_reset_ifchanged,221,4647 +fused_write32s_reset_ifchanged,222,4656 +fused_write32s_reset_ifchanged,223,4646 +fused_write32s_reset_ifchanged,224,4654 +fused_write32s_reset_ifchanged,225,4653 +fused_write32s_reset_ifchanged,226,4642 +fused_write32s_reset_ifchanged,227,4646 +fused_write32s_reset_ifchanged,228,4653 +fused_write32s_reset_ifchanged,229,4646 +fused_write32s_reset_ifchanged,230,4656 +fused_write32s_reset_ifchanged,231,4652 +fused_write32s_reset_ifchanged,232,4650 +fused_write32s_reset_ifchanged,233,4648 +fused_write32s_reset_ifchanged,234,4651 +fused_write32s_reset_ifchanged,235,4650 +fused_write32s_reset_ifchanged,236,4649 +fused_write32s_reset_ifchanged,237,4648 +fused_write32s_reset_ifchanged,238,4642 +fused_write32s_reset_ifchanged,239,4636 +fused_write32s_reset_ifchanged,240,4625 +fused_write32s_reset_ifchanged,241,4627 +fused_write32s_reset_ifchanged,242,4643 +fused_write32s_reset_ifchanged,243,4654 +fused_write32s_reset_ifchanged,244,4650 +fused_write32s_reset_ifchanged,245,4652 +fused_write32s_reset_ifchanged,246,4647 +fused_write32s_reset_ifchanged,247,4645 +fused_write32s_reset_ifchanged,248,4645 +fused_write32s_reset_ifchanged,249,4648 +fused_write32s_reset_ifchanged,250,4656 +fused_write32s_reset_ifchanged,251,4652 +fused_write32s_reset_ifchanged,252,4643 +fused_write32s_reset_ifchanged,253,4649 +fused_write32s_reset_ifchanged,254,4650 +fused_write32s_reset_ifchanged,255,4650 +fused_write32s_reset_ifchanged,256,4652 +fused_write32s_reset_ifchanged,257,4650 +fused_write32s_reset_ifchanged,258,4648 +fused_write32s_reset_ifchanged,259,4652 +fused_write32s_reset_ifchanged,260,4649 +fused_write32s_reset_ifchanged,261,4656 +fused_write32s_reset_ifchanged,262,4655 +fused_write32s_reset_ifchanged,263,4654 +fused_write32s_reset_ifchanged,264,4652 +fused_write32s_reset_ifchanged,265,4648 +fused_write32s_reset_ifchanged,266,4639 +fused_write32s_reset_ifchanged,267,4655 +fused_write32s_reset_ifchanged,268,4654 +fused_write32s_reset_ifchanged,269,4644 +fused_write32s_reset_ifchanged,270,4657 +fused_write32s_reset_ifchanged,271,4664 +fused_write32s_reset_ifchanged,272,4655 +fused_write32s_reset_ifchanged,273,4660 +fused_write32s_reset_ifchanged,274,4644 +fused_write32s_reset_ifchanged,275,4647 +fused_write32s_reset_ifchanged,276,4643 +fused_write32s_reset_ifchanged,277,4652 +fused_write32s_reset_ifchanged,278,4648 +fused_write32s_reset_ifchanged,279,4645 +fused_write32s_reset_ifchanged,280,4650 +fused_write32s_reset_ifchanged,281,4652 +fused_write32s_reset_ifchanged,282,4649 +fused_write32s_reset_ifchanged,283,4650 +fused_write32s_reset_ifchanged,284,4645 +fused_write32s_reset_ifchanged,285,4648 +fused_write32s_reset_ifchanged,286,4656 +fused_write32s_reset_ifchanged,287,4654 +fused_write32s_reset_ifchanged,288,4647 +fused_write32s_reset_ifchanged,289,4644 +fused_write32s_reset_ifchanged,290,4651 +fused_write32s_reset_ifchanged,291,4653 +fused_write32s_reset_ifchanged,292,4646 +fused_write32s_reset_ifchanged,293,4646 +fused_write32s_reset_ifchanged,294,4648 +fused_write32s_reset_ifchanged,295,4649 +fused_write32s_reset_ifchanged,296,4648 +fused_write32s_reset_ifchanged,297,4652 +fused_write32s_reset_ifchanged,298,4648 +fused_write32s_reset_ifchanged,299,4653 +fused_write32s_reset_ifchanged,300,4646 +fused_write32s_reset_ifchanged,301,4659 +fused_write32s_reset_ifchanged,302,4656 +fused_write32s_reset_ifchanged,303,4660 +fused_write32s_reset_ifchanged,304,4649 +fused_write32s_reset_ifchanged,305,4650 +fused_write32s_reset_ifchanged,306,4645 +fused_write32s_reset_ifchanged,307,4652 +fused_write32s_reset_ifchanged,308,4646 +fused_write32s_reset_ifchanged,309,4649 +fused_write32s_reset_ifchanged,310,4650 +fused_write32s_reset_ifchanged,311,4645 +fused_write32s_reset_ifchanged,312,4646 +fused_write32s_reset_ifchanged,313,4650 +fused_write32s_reset_ifchanged,314,4652 +fused_write32s_reset_ifchanged,315,4649 +fused_write32s_reset_ifchanged,316,4648 +fused_write32s_reset_ifchanged,317,4648 +fused_write32s_reset_ifchanged,318,4668 +fused_write32s_reset_ifchanged,319,4674 +fused_write32s_reset_ifchanged,320,4659 +fused_write32s_reset_ifchanged,321,4653 +fused_write32s_reset_ifchanged,322,4658 +fused_write32s_reset_ifchanged,323,4647 +fused_write32s_reset_ifchanged,324,4648 +fused_write32s_reset_ifchanged,325,4651 +fused_write32s_reset_ifchanged,326,4651 +fused_write32s_reset_ifchanged,327,4653 +fused_write32s_reset_ifchanged,328,4648 +fused_write32s_reset_ifchanged,329,4650 +fused_write32s_reset_ifchanged,330,4650 +fused_write32s_reset_ifchanged,331,4652 +fused_write32s_reset_ifchanged,332,4640 +fused_write32s_reset_ifchanged,333,4634 +fused_write32s_reset_ifchanged,334,4652 +fused_write32s_reset_ifchanged,335,4641 +fused_write32s_reset_ifchanged,336,4640 +fused_write32s_reset_ifchanged,337,4649 +fused_write32s_reset_ifchanged,338,4655 +fused_write32s_reset_ifchanged,339,4640 +fused_write32s_reset_ifchanged,340,4644 +fused_write32s_reset_ifchanged,341,4646 +fused_write32s_reset_ifchanged,342,4654 +fused_write32s_reset_ifchanged,343,4651 +fused_write32s_reset_ifchanged,344,4652 +fused_write32s_reset_ifchanged,345,4650 +fused_write32s_reset_ifchanged,346,4646 +fused_write32s_reset_ifchanged,347,4649 +fused_write32s_reset_ifchanged,348,4646 +fused_write32s_reset_ifchanged,349,4658 +fused_write32s_reset_ifchanged,350,4648 +fused_write32s_reset_ifchanged,351,4658 +fused_write32s_reset_ifchanged,352,4656 +fused_write32s_reset_ifchanged,353,4655 +fused_write32s_reset_ifchanged,354,4645 +fused_write32s_reset_ifchanged,355,4654 +fused_write32s_reset_ifchanged,356,4650 +fused_write32s_reset_ifchanged,357,4648 +fused_write32s_reset_ifchanged,358,4651 +fused_write32s_reset_ifchanged,359,4648 +fused_write32s_reset_ifchanged,360,4652 +fused_write32s_reset_ifchanged,361,4648 +fused_write32s_reset_ifchanged,362,4650 +fused_write32s_reset_ifchanged,363,4644 +fused_write32s_reset_ifchanged,364,4648 +fused_write32s_reset_ifchanged,365,4647 +fused_write32s_reset_ifchanged,366,4651 +fused_write32s_reset_ifchanged,367,4651 +fused_write32s_reset_ifchanged,368,4647 +fused_write32s_reset_ifchanged,369,4648 +fused_write32s_reset_ifchanged,370,4654 +fused_write32s_reset_ifchanged,371,4649 +fused_write32s_reset_ifchanged,372,4648 +fused_write32s_reset_ifchanged,373,4646 +fused_write32s_reset_ifchanged,374,4648 +fused_write32s_reset_ifchanged,375,4647 +fused_write32s_reset_ifchanged,376,4651 +fused_write32s_reset_ifchanged,377,4649 +fused_write32s_reset_ifchanged,378,4651 +fused_write32s_reset_ifchanged,379,4650 +fused_write32s_reset_ifchanged,380,4645 +fused_write32s_reset_ifchanged,381,4649 +fused_write32s_reset_ifchanged,382,4646 +fused_write32s_reset_ifchanged,383,4646 +fused_write32s_reset_ifchanged,384,4647 +fused_write32s_reset_ifchanged,385,4653 +fused_write32s_reset_ifchanged,386,4648 +fused_write32s_reset_ifchanged,387,4635 +fused_write32s_reset_ifchanged,388,4633 +fused_write32s_reset_ifchanged,389,4636 +fused_write32s_reset_ifchanged,390,4629 +fused_write32s_reset_ifchanged,391,4627 +fused_write32s_reset_ifchanged,392,4625 +fused_write32s_reset_ifchanged,393,4630 +fused_write32s_reset_ifchanged,394,4646 +fused_write32s_reset_ifchanged,395,4647 +fused_write32s_reset_ifchanged,396,4646 +fused_write32s_reset_ifchanged,397,4645 +fused_write32s_reset_ifchanged,398,4649 +fused_write32s_reset_ifchanged,399,4650 +fused_write32s_reset_ifchanged,400,4651 +fused_write32s_reset_ifchanged,401,4645 +fused_write32s_reset_ifchanged,402,4650 +fused_write32s_reset_ifchanged,403,4648 +fused_write32s_reset_ifchanged,404,4674 +fused_write32s_reset_ifchanged,405,4658 +fused_write32s_reset_ifchanged,406,4634 +fused_write32s_reset_ifchanged,407,4629 +fused_write32s_reset_ifchanged,408,4634 +fused_write32s_reset_ifchanged,409,4637 +fused_write32s_reset_ifchanged,410,4641 +fused_write32s_reset_ifchanged,411,4643 +fused_write32s_reset_ifchanged,412,4654 +fused_write32s_reset_ifchanged,413,4645 +fused_write32s_reset_ifchanged,414,4651 +fused_write32s_reset_ifchanged,415,4645 +fused_write32s_reset_ifchanged,416,4635 +fused_write32s_reset_ifchanged,417,4638 +fused_write32s_reset_ifchanged,418,4641 +fused_write32s_reset_ifchanged,419,4637 +fused_write32s_reset_ifchanged,420,4645 +fused_write32s_reset_ifchanged,421,4660 +fused_write32s_reset_ifchanged,422,4655 +fused_write32s_reset_ifchanged,423,4634 +fused_write32s_reset_ifchanged,424,4637 +fused_write32s_reset_ifchanged,425,4651 +fused_write32s_reset_ifchanged,426,4652 +fused_write32s_reset_ifchanged,427,4649 +fused_write32s_reset_ifchanged,428,4651 +fused_write32s_reset_ifchanged,429,4650 +fused_write32s_reset_ifchanged,430,4650 +fused_write32s_reset_ifchanged,431,4645 +fused_write32s_reset_ifchanged,432,4646 +fused_write32s_reset_ifchanged,433,4647 +fused_write32s_reset_ifchanged,434,4644 +fused_write32s_reset_ifchanged,435,4648 +fused_write32s_reset_ifchanged,436,4646 +fused_write32s_reset_ifchanged,437,4648 +fused_write32s_reset_ifchanged,438,4646 +fused_write32s_reset_ifchanged,439,4646 +fused_write32s_reset_ifchanged,440,4646 +fused_write32s_reset_ifchanged,441,4645 +fused_write32s_reset_ifchanged,442,4649 +fused_write32s_reset_ifchanged,443,4649 +fused_write32s_reset_ifchanged,444,4646 +fused_write32s_reset_ifchanged,445,4646 +fused_write32s_reset_ifchanged,446,4650 +fused_write32s_reset_ifchanged,447,4646 +fused_write32s_reset_ifchanged,448,4632 +fused_write32s_reset_ifchanged,449,4645 +fused_write32s_reset_ifchanged,450,4639 +fused_write32s_reset_ifchanged,451,4624 +fused_write32s_reset_ifchanged,452,4623 +fused_write32s_reset_ifchanged,453,4643 +fused_write32s_reset_ifchanged,454,4625 +fused_write32s_reset_ifchanged,455,4647 +fused_write32s_reset_ifchanged,456,4661 +fused_write32s_reset_ifchanged,457,4665 +fused_write32s_reset_ifchanged,458,4665 +fused_write32s_reset_ifchanged,459,4662 +fused_write32s_reset_ifchanged,460,4666 +fused_write32s_reset_ifchanged,461,4665 +fused_write32s_reset_ifchanged,462,4662 +fused_write32s_reset_ifchanged,463,4662 +fused_write32s_reset_ifchanged,464,4660 +fused_write32s_reset_ifchanged,465,4663 +fused_write32s_reset_ifchanged,466,4655 +fused_write32s_reset_ifchanged,467,4657 +fused_write32s_reset_ifchanged,468,4635 +fused_write32s_reset_ifchanged,469,4651 +fused_write32s_reset_ifchanged,470,4659 +fused_write32s_reset_ifchanged,471,4661 +fused_write32s_reset_ifchanged,472,4660 +fused_write32s_reset_ifchanged,473,4660 +fused_write32s_reset_ifchanged,474,4665 +fused_write32s_reset_ifchanged,475,5036 +fused_write32s_reset_ifchanged,476,4998 +fused_write32s_reset_ifchanged,477,5079 +fused_write32s_reset_ifchanged,478,4981 +fused_write32s_reset_ifchanged,479,5021 +fused_write32s_reset_ifchanged,480,5023 +fused_write32s_reset_ifchanged,481,4646 +fused_write32s_reset_ifchanged,482,4633 +fused_write32s_reset_ifchanged,483,4644 +fused_write32s_reset_ifchanged,484,4640 +fused_write32s_reset_ifchanged,485,4643 +fused_write32s_reset_ifchanged,486,4643 +fused_write32s_reset_ifchanged,487,4648 +fused_write32s_reset_ifchanged,488,4659 +fused_write32s_reset_ifchanged,489,4659 +fused_write32s_reset_ifchanged,490,4660 +fused_write32s_reset_ifchanged,491,4662 +fused_write32s_reset_ifchanged,492,4663 +fused_write32s_reset_ifchanged,493,4673 +fused_write32s_reset_ifchanged,494,4661 +fused_write32s_reset_ifchanged,495,4661 +fused_write32s_reset_ifchanged,496,4661 +fused_write32s_reset_ifchanged,497,4661 +fused_write32s_reset_ifchanged,498,4660 +fused_write32s_reset_ifchanged,499,4653 +fused_write32s_reset_ifchanged,500,4658 +fused_write32s_reset_ifchanged,501,4660 +fused_write32s_reset_ifchanged,502,4659 +fused_write32s_reset_ifchanged,503,4662 +fused_write32s_reset_ifchanged,504,4646 +fused_write32s_reset_ifchanged,505,4643 +fused_write32s_reset_ifchanged,506,4657 +fused_write32s_reset_ifchanged,507,4630 +fused_write32s_reset_ifchanged,508,4658 +fused_write32s_reset_ifchanged,509,4667 +fused_write32s_reset_ifchanged,510,4656 +fused_write32s_reset_ifchanged,511,4662 +fused_write32s_reset_ifchanged,512,4665 +fused_write32s_reset_ifchanged,513,4670 +fused_write32s_reset_ifchanged,514,4660 +fused_write32s_reset_ifchanged,515,4680 +fused_write32s_reset_ifchanged,516,4663 +fused_write32s_reset_ifchanged,517,4659 +fused_write32s_reset_ifchanged,518,4666 +fused_write32s_reset_ifchanged,519,4641 +fused_write32s_reset_ifchanged,520,4643 +fused_write32s_reset_ifchanged,521,4654 +fused_write32s_reset_ifchanged,522,4660 +fused_write32s_reset_ifchanged,523,4660 +fused_write32s_reset_ifchanged,524,4660 +fused_write32s_reset_ifchanged,525,4660 +fused_write32s_reset_ifchanged,526,4659 +fused_write32s_reset_ifchanged,527,4657 +fused_write32s_reset_ifchanged,528,4660 +fused_write32s_reset_ifchanged,529,4670 +fused_write32s_reset_ifchanged,530,4669 +fused_write32s_reset_ifchanged,531,4657 +fused_write32s_reset_ifchanged,532,4648 +fused_write32s_reset_ifchanged,533,4650 +fused_write32s_reset_ifchanged,534,4655 +fused_write32s_reset_ifchanged,535,4664 +fused_write32s_reset_ifchanged,536,4663 +fused_write32s_reset_ifchanged,537,4662 +fused_write32s_reset_ifchanged,538,4667 +fused_write32s_reset_ifchanged,539,4653 +fused_write32s_reset_ifchanged,540,4664 +fused_write32s_reset_ifchanged,541,4662 +fused_write32s_reset_ifchanged,542,4667 +fused_write32s_reset_ifchanged,543,4665 +fused_write32s_reset_ifchanged,544,4661 +fused_write32s_reset_ifchanged,545,4666 +fused_write32s_reset_ifchanged,546,4665 +fused_write32s_reset_ifchanged,547,4662 +fused_write32s_reset_ifchanged,548,4661 +fused_write32s_reset_ifchanged,549,4663 +fused_write32s_reset_ifchanged,550,4662 +fused_write32s_reset_ifchanged,551,4661 +fused_write32s_reset_ifchanged,552,4663 +fused_write32s_reset_ifchanged,553,4666 +fused_write32s_reset_ifchanged,554,4659 +fused_write32s_reset_ifchanged,555,4660 +fused_write32s_reset_ifchanged,556,4666 +fused_write32s_reset_ifchanged,557,4663 +fused_write32s_reset_ifchanged,558,4654 +fused_write32s_reset_ifchanged,559,4655 +fused_write32s_reset_ifchanged,560,4655 +fused_write32s_reset_ifchanged,561,4639 +fused_write32s_reset_ifchanged,562,4652 +fused_write32s_reset_ifchanged,563,4646 +fused_write32s_reset_ifchanged,564,4637 +fused_write32s_reset_ifchanged,565,4641 +fused_write32s_reset_ifchanged,566,4640 +fused_write32s_reset_ifchanged,567,4640 +fused_write32s_reset_ifchanged,568,4643 +fused_write32s_reset_ifchanged,569,4638 +fused_write32s_reset_ifchanged,570,4639 +fused_write32s_reset_ifchanged,571,4642 +fused_write32s_reset_ifchanged,572,4640 +fused_write32s_reset_ifchanged,573,4638 +fused_write32s_reset_ifchanged,574,4642 +fused_write32s_reset_ifchanged,575,4640 +fused_write32s_reset_ifchanged,576,4638 +fused_write32s_reset_ifchanged,577,4640 +fused_write32s_reset_ifchanged,578,4646 +fused_write32s_reset_ifchanged,579,4638 +fused_write32s_reset_ifchanged,580,4640 +fused_write32s_reset_ifchanged,581,4650 +fused_write32s_reset_ifchanged,582,4640 +fused_write32s_reset_ifchanged,583,4642 +fused_write32s_reset_ifchanged,584,4642 +fused_write32s_reset_ifchanged,585,4637 +fused_write32s_reset_ifchanged,586,4640 +fused_write32s_reset_ifchanged,587,4640 +fused_write32s_reset_ifchanged,588,4641 +fused_write32s_reset_ifchanged,589,4638 +fused_write32s_reset_ifchanged,590,4637 +fused_write32s_reset_ifchanged,591,4641 +fused_write32s_reset_ifchanged,592,4641 +fused_write32s_reset_ifchanged,593,4639 +fused_write32s_reset_ifchanged,594,4641 +fused_write32s_reset_ifchanged,595,4638 +fused_write32s_reset_ifchanged,596,4639 +fused_write32s_reset_ifchanged,597,4637 +fused_write32s_reset_ifchanged,598,4637 +fused_write32s_reset_ifchanged,599,4639 +fused_write32s_reset_ifchanged,600,4637 +fused_write32s_reset_ifchanged,601,4641 +fused_write32s_reset_ifchanged,602,4642 +fused_write32s_reset_ifchanged,603,4640 +fused_write32s_reset_ifchanged,604,4637 +fused_write32s_reset_ifchanged,605,4637 +fused_write32s_reset_ifchanged,606,4643 +fused_write32s_reset_ifchanged,607,4640 +fused_write32s_reset_ifchanged,608,4637 +fused_write32s_reset_ifchanged,609,4641 +fused_write32s_reset_ifchanged,610,4640 +fused_write32s_reset_ifchanged,611,4638 +fused_write32s_reset_ifchanged,612,4639 +fused_write32s_reset_ifchanged,613,4640 +fused_write32s_reset_ifchanged,614,4641 +fused_write32s_reset_ifchanged,615,4638 +fused_write32s_reset_ifchanged,616,4640 +fused_write32s_reset_ifchanged,617,4640 +fused_write32s_reset_ifchanged,618,4644 +fused_write32s_reset_ifchanged,619,4638 +fused_write32s_reset_ifchanged,620,4641 +fused_write32s_reset_ifchanged,621,4644 +fused_write32s_reset_ifchanged,622,4639 +fused_write32s_reset_ifchanged,623,4637 +fused_write32s_reset_ifchanged,624,4641 +fused_write32s_reset_ifchanged,625,4639 +fused_write32s_reset_ifchanged,626,4640 +fused_write32s_reset_ifchanged,627,4637 +fused_write32s_reset_ifchanged,628,4640 +fused_write32s_reset_ifchanged,629,4639 +fused_write32s_reset_ifchanged,630,4639 +fused_write32s_reset_ifchanged,631,4638 +fused_write32s_reset_ifchanged,632,4642 +fused_write32s_reset_ifchanged,633,4638 +fused_write32s_reset_ifchanged,634,4638 +fused_write32s_reset_ifchanged,635,4643 +fused_write32s_reset_ifchanged,636,4639 +fused_write32s_reset_ifchanged,637,4638 +fused_write32s_reset_ifchanged,638,4640 +fused_write32s_reset_ifchanged,639,4638 +fused_write32s_reset_ifchanged,640,4639 +fused_write32s_reset_ifchanged,641,4639 +fused_write32s_reset_ifchanged,642,4643 +fused_write32s_reset_ifchanged,643,4638 +fused_write32s_reset_ifchanged,644,4639 +fused_write32s_reset_ifchanged,645,4636 +fused_write32s_reset_ifchanged,646,4638 +fused_write32s_reset_ifchanged,647,4637 +fused_write32s_reset_ifchanged,648,4642 +fused_write32s_reset_ifchanged,649,4638 +fused_write32s_reset_ifchanged,650,4643 +fused_write32s_reset_ifchanged,651,4639 +fused_write32s_reset_ifchanged,652,4640 +fused_write32s_reset_ifchanged,653,4637 +fused_write32s_reset_ifchanged,654,4638 +fused_write32s_reset_ifchanged,655,4639 +fused_write32s_reset_ifchanged,656,4640 +fused_write32s_reset_ifchanged,657,4639 +fused_write32s_reset_ifchanged,658,4637 +fused_write32s_reset_ifchanged,659,4641 +fused_write32s_reset_ifchanged,660,4641 +fused_write32s_reset_ifchanged,661,4640 +fused_write32s_reset_ifchanged,662,4643 +fused_write32s_reset_ifchanged,663,4637 +fused_write32s_reset_ifchanged,664,4643 +fused_write32s_reset_ifchanged,665,4659 +fused_write32s_reset_ifchanged,666,4641 +fused_write32s_reset_ifchanged,667,4641 +fused_write32s_reset_ifchanged,668,4637 +fused_write32s_reset_ifchanged,669,4640 +fused_write32s_reset_ifchanged,670,4640 +fused_write32s_reset_ifchanged,671,4642 +fused_write32s_reset_ifchanged,672,4636 +fused_write32s_reset_ifchanged,673,4639 +fused_write32s_reset_ifchanged,674,4638 +fused_write32s_reset_ifchanged,675,4641 +fused_write32s_reset_ifchanged,676,4638 +fused_write32s_reset_ifchanged,677,4641 +fused_write32s_reset_ifchanged,678,4637 +fused_write32s_reset_ifchanged,679,4639 +fused_write32s_reset_ifchanged,680,4641 +fused_write32s_reset_ifchanged,681,4637 +fused_write32s_reset_ifchanged,682,4638 +fused_write32s_reset_ifchanged,683,4642 +fused_write32s_reset_ifchanged,684,4638 +fused_write32s_reset_ifchanged,685,4637 +fused_write32s_reset_ifchanged,686,4639 +fused_write32s_reset_ifchanged,687,4640 +fused_write32s_reset_ifchanged,688,4642 +fused_write32s_reset_ifchanged,689,4640 +fused_write32s_reset_ifchanged,690,4633 +fused_write32s_reset_ifchanged,691,4639 +fused_write32s_reset_ifchanged,692,4637 +fused_write32s_reset_ifchanged,693,4640 +fused_write32s_reset_ifchanged,694,4639 +fused_write32s_reset_ifchanged,695,4639 +fused_write32s_reset_ifchanged,696,4638 +fused_write32s_reset_ifchanged,697,4641 +fused_write32s_reset_ifchanged,698,4636 +fused_write32s_reset_ifchanged,699,4639 +fused_write32s_reset_ifchanged,700,4638 +fused_write32s_reset_ifchanged,701,4635 +fused_write32s_reset_ifchanged,702,4640 +fused_write32s_reset_ifchanged,703,4636 +fused_write32s_reset_ifchanged,704,4639 +fused_write32s_reset_ifchanged,705,4640 +fused_write32s_reset_ifchanged,706,4640 +fused_write32s_reset_ifchanged,707,4641 +fused_write32s_reset_ifchanged,708,4640 +fused_write32s_reset_ifchanged,709,4638 +fused_write32s_reset_ifchanged,710,4636 +fused_write32s_reset_ifchanged,711,4638 +fused_write32s_reset_ifchanged,712,4640 +fused_write32s_reset_ifchanged,713,4640 +fused_write32s_reset_ifchanged,714,4637 +fused_write32s_reset_ifchanged,715,4638 +fused_write32s_reset_ifchanged,716,4630 +fused_write32s_reset_ifchanged,717,4641 +fused_write32s_reset_ifchanged,718,4645 +fused_write32s_reset_ifchanged,719,4642 +fused_write32s_reset_ifchanged,720,4638 +fused_write32s_reset_ifchanged,721,4642 +fused_write32s_reset_ifchanged,722,4642 +fused_write32s_reset_ifchanged,723,4637 +fused_write32s_reset_ifchanged,724,4636 +fused_write32s_reset_ifchanged,725,4642 +fused_write32s_reset_ifchanged,726,4642 +fused_write32s_reset_ifchanged,727,4644 +fused_write32s_reset_ifchanged,728,4637 +fused_write32s_reset_ifchanged,729,4640 +fused_write32s_reset_ifchanged,730,4643 +fused_write32s_reset_ifchanged,731,4639 +fused_write32s_reset_ifchanged,732,4640 +fused_write32s_reset_ifchanged,733,4642 +fused_write32s_reset_ifchanged,734,4634 +fused_write32s_reset_ifchanged,735,4639 +fused_write32s_reset_ifchanged,736,4639 +fused_write32s_reset_ifchanged,737,4636 +fused_write32s_reset_ifchanged,738,4643 +fused_write32s_reset_ifchanged,739,4638 +fused_write32s_reset_ifchanged,740,4660 +fused_write32s_reset_ifchanged,741,4665 +fused_write32s_reset_ifchanged,742,4651 +fused_write32s_reset_ifchanged,743,4658 +fused_write32s_reset_ifchanged,744,4658 +fused_write32s_reset_ifchanged,745,4658 +fused_write32s_reset_ifchanged,746,4649 +fused_write32s_reset_ifchanged,747,4659 +fused_write32s_reset_ifchanged,748,4652 +fused_write32s_reset_ifchanged,749,4651 +fused_write32s_reset_ifchanged,750,4650 +fused_write32s_reset_ifchanged,751,4653 +fused_write32s_reset_ifchanged,752,4652 +fused_write32s_reset_ifchanged,753,4649 +fused_write32s_reset_ifchanged,754,4654 +fused_write32s_reset_ifchanged,755,4653 +fused_write32s_reset_ifchanged,756,4650 +fused_write32s_reset_ifchanged,757,4653 +fused_write32s_reset_ifchanged,758,4652 +fused_write32s_reset_ifchanged,759,4654 +fused_write32s_reset_ifchanged,760,4652 +fused_write32s_reset_ifchanged,761,4657 +fused_write32s_reset_ifchanged,762,4657 +fused_write32s_reset_ifchanged,763,4661 +fused_write32s_reset_ifchanged,764,4658 +fused_write32s_reset_ifchanged,765,4651 +fused_write32s_reset_ifchanged,766,4651 +fused_write32s_reset_ifchanged,767,4656 +fused_write32s_reset_ifchanged,768,4651 +fused_write32s_reset_ifchanged,769,4656 +fused_write32s_reset_ifchanged,770,4657 +fused_write32s_reset_ifchanged,771,4664 +fused_write32s_reset_ifchanged,772,4665 +fused_write32s_reset_ifchanged,773,4656 +fused_write32s_reset_ifchanged,774,4652 +fused_write32s_reset_ifchanged,775,4652 +fused_write32s_reset_ifchanged,776,4654 +fused_write32s_reset_ifchanged,777,4656 +fused_write32s_reset_ifchanged,778,4651 +fused_write32s_reset_ifchanged,779,4657 +fused_write32s_reset_ifchanged,780,4656 +fused_write32s_reset_ifchanged,781,4650 +fused_write32s_reset_ifchanged,782,4652 +fused_write32s_reset_ifchanged,783,4651 +fused_write32s_reset_ifchanged,784,4653 +fused_write32s_reset_ifchanged,785,4655 +fused_write32s_reset_ifchanged,786,4651 +fused_write32s_reset_ifchanged,787,4651 +fused_write32s_reset_ifchanged,788,4648 +fused_write32s_reset_ifchanged,789,4651 +fused_write32s_reset_ifchanged,790,4655 +fused_write32s_reset_ifchanged,791,4649 +fused_write32s_reset_ifchanged,792,4649 +fused_write32s_reset_ifchanged,793,4660 +fused_write32s_reset_ifchanged,794,4657 +fused_write32s_reset_ifchanged,795,4660 +fused_write32s_reset_ifchanged,796,4650 +fused_write32s_reset_ifchanged,797,4650 +fused_write32s_reset_ifchanged,798,4654 +fused_write32s_reset_ifchanged,799,4653 +fused_write32s_reset_ifchanged,800,4647 +fused_write32s_reset_ifchanged,801,4651 +fused_write32s_reset_ifchanged,802,4654 +fused_write32s_reset_ifchanged,803,4652 +fused_write32s_reset_ifchanged,804,4650 +fused_write32s_reset_ifchanged,805,4650 +fused_write32s_reset_ifchanged,806,4651 +fused_write32s_reset_ifchanged,807,4650 +fused_write32s_reset_ifchanged,808,4651 +fused_write32s_reset_ifchanged,809,4652 +fused_write32s_reset_ifchanged,810,4650 +fused_write32s_reset_ifchanged,811,4652 +fused_write32s_reset_ifchanged,812,4650 +fused_write32s_reset_ifchanged,813,4658 +fused_write32s_reset_ifchanged,814,4657 +fused_write32s_reset_ifchanged,815,4658 +fused_write32s_reset_ifchanged,816,4649 +fused_write32s_reset_ifchanged,817,4657 +fused_write32s_reset_ifchanged,818,4660 +fused_write32s_reset_ifchanged,819,4659 +fused_write32s_reset_ifchanged,820,4656 +fused_write32s_reset_ifchanged,821,4655 +fused_write32s_reset_ifchanged,822,4653 +fused_write32s_reset_ifchanged,823,4654 +fused_write32s_reset_ifchanged,824,4655 +fused_write32s_reset_ifchanged,825,4660 +fused_write32s_reset_ifchanged,826,4656 +fused_write32s_reset_ifchanged,827,4656 +fused_write32s_reset_ifchanged,828,4655 +fused_write32s_reset_ifchanged,829,4662 +fused_write32s_reset_ifchanged,830,4658 +fused_write32s_reset_ifchanged,831,4657 +fused_write32s_reset_ifchanged,832,4658 +fused_write32s_reset_ifchanged,833,4654 +fused_write32s_reset_ifchanged,834,4654 +fused_write32s_reset_ifchanged,835,4657 +fused_write32s_reset_ifchanged,836,4658 +fused_write32s_reset_ifchanged,837,4657 +fused_write32s_reset_ifchanged,838,4660 +fused_write32s_reset_ifchanged,839,4653 +fused_write32s_reset_ifchanged,840,4657 +fused_write32s_reset_ifchanged,841,4653 +fused_write32s_reset_ifchanged,842,4655 +fused_write32s_reset_ifchanged,843,4655 +fused_write32s_reset_ifchanged,844,4651 +fused_write32s_reset_ifchanged,845,4651 +fused_write32s_reset_ifchanged,846,4660 +fused_write32s_reset_ifchanged,847,4657 +fused_write32s_reset_ifchanged,848,4655 +fused_write32s_reset_ifchanged,849,4656 +fused_write32s_reset_ifchanged,850,4653 +fused_write32s_reset_ifchanged,851,4653 +fused_write32s_reset_ifchanged,852,4660 +fused_write32s_reset_ifchanged,853,4665 +fused_write32s_reset_ifchanged,854,4654 +fused_write32s_reset_ifchanged,855,4658 +fused_write32s_reset_ifchanged,856,4658 +fused_write32s_reset_ifchanged,857,4655 +fused_write32s_reset_ifchanged,858,4655 +fused_write32s_reset_ifchanged,859,4650 +fused_write32s_reset_ifchanged,860,4654 +fused_write32s_reset_ifchanged,861,4659 +fused_write32s_reset_ifchanged,862,4652 +fused_write32s_reset_ifchanged,863,4653 +fused_write32s_reset_ifchanged,864,4649 +fused_write32s_reset_ifchanged,865,4655 +fused_write32s_reset_ifchanged,866,4656 +fused_write32s_reset_ifchanged,867,4653 +fused_write32s_reset_ifchanged,868,4664 +fused_write32s_reset_ifchanged,869,4653 +fused_write32s_reset_ifchanged,870,4660 +fused_write32s_reset_ifchanged,871,4658 +fused_write32s_reset_ifchanged,872,4657 +fused_write32s_reset_ifchanged,873,4647 +fused_write32s_reset_ifchanged,874,4659 +fused_write32s_reset_ifchanged,875,4655 +fused_write32s_reset_ifchanged,876,4653 +fused_write32s_reset_ifchanged,877,4650 +fused_write32s_reset_ifchanged,878,4651 +fused_write32s_reset_ifchanged,879,4651 +fused_write32s_reset_ifchanged,880,4652 +fused_write32s_reset_ifchanged,881,4650 +fused_write32s_reset_ifchanged,882,4648 +fused_write32s_reset_ifchanged,883,4652 +fused_write32s_reset_ifchanged,884,4655 +fused_write32s_reset_ifchanged,885,4652 +fused_write32s_reset_ifchanged,886,4651 +fused_write32s_reset_ifchanged,887,4651 +fused_write32s_reset_ifchanged,888,4656 +fused_write32s_reset_ifchanged,889,4652 +fused_write32s_reset_ifchanged,890,4650 +fused_write32s_reset_ifchanged,891,4649 +fused_write32s_reset_ifchanged,892,4651 +fused_write32s_reset_ifchanged,893,4654 +fused_write32s_reset_ifchanged,894,4655 +fused_write32s_reset_ifchanged,895,4650 +fused_write32s_reset_ifchanged,896,4648 +fused_write32s_reset_ifchanged,897,4653 +fused_write32s_reset_ifchanged,898,4656 +fused_write32s_reset_ifchanged,899,4654 +fused_write32s_reset_ifchanged,900,4654 +fused_write32s_reset_ifchanged,901,4652 +fused_write32s_reset_ifchanged,902,4659 +fused_write32s_reset_ifchanged,903,4656 +fused_write32s_reset_ifchanged,904,4656 +fused_write32s_reset_ifchanged,905,4656 +fused_write32s_reset_ifchanged,906,4651 +fused_write32s_reset_ifchanged,907,4653 +fused_write32s_reset_ifchanged,908,4650 +fused_write32s_reset_ifchanged,909,4649 +fused_write32s_reset_ifchanged,910,4651 +fused_write32s_reset_ifchanged,911,4650 +fused_write32s_reset_ifchanged,912,4649 +fused_write32s_reset_ifchanged,913,4652 +fused_write32s_reset_ifchanged,914,4650 +fused_write32s_reset_ifchanged,915,4636 +fused_write32s_reset_ifchanged,916,4634 +fused_write32s_reset_ifchanged,917,4635 +fused_write32s_reset_ifchanged,918,4634 +fused_write32s_reset_ifchanged,919,4637 +fused_write32s_reset_ifchanged,920,4638 +fused_write32s_reset_ifchanged,921,4635 +fused_write32s_reset_ifchanged,922,4636 +fused_write32s_reset_ifchanged,923,4634 +fused_write32s_reset_ifchanged,924,4637 +fused_write32s_reset_ifchanged,925,4634 +fused_write32s_reset_ifchanged,926,4637 +fused_write32s_reset_ifchanged,927,4634 +fused_write32s_reset_ifchanged,928,4639 +fused_write32s_reset_ifchanged,929,4637 +fused_write32s_reset_ifchanged,930,4637 +fused_write32s_reset_ifchanged,931,4636 +fused_write32s_reset_ifchanged,932,4635 +fused_write32s_reset_ifchanged,933,4639 +fused_write32s_reset_ifchanged,934,4640 +fused_write32s_reset_ifchanged,935,4624 +fused_write32s_reset_ifchanged,936,4626 +fused_write32s_reset_ifchanged,937,4626 +fused_write32s_reset_ifchanged,938,4638 +fused_write32s_reset_ifchanged,939,4636 +fused_write32s_reset_ifchanged,940,4620 +fused_write32s_reset_ifchanged,941,4624 +fused_write32s_reset_ifchanged,942,4625 +fused_write32s_reset_ifchanged,943,4626 +fused_write32s_reset_ifchanged,944,4625 +fused_write32s_reset_ifchanged,945,4627 +fused_write32s_reset_ifchanged,946,4624 +fused_write32s_reset_ifchanged,947,4628 +fused_write32s_reset_ifchanged,948,4626 +fused_write32s_reset_ifchanged,949,4622 +fused_write32s_reset_ifchanged,950,4634 +fused_write32s_reset_ifchanged,951,4620 +fused_write32s_reset_ifchanged,952,4630 +fused_write32s_reset_ifchanged,953,4635 +fused_write32s_reset_ifchanged,954,4635 +fused_write32s_reset_ifchanged,955,4634 +fused_write32s_reset_ifchanged,956,4635 +fused_write32s_reset_ifchanged,957,4633 +fused_write32s_reset_ifchanged,958,4635 +fused_write32s_reset_ifchanged,959,4637 +fused_write32s_reset_ifchanged,960,4635 +fused_write32s_reset_ifchanged,961,4637 +fused_write32s_reset_ifchanged,962,4637 +fused_write32s_reset_ifchanged,963,4634 +fused_write32s_reset_ifchanged,964,4634 +fused_write32s_reset_ifchanged,965,4638 +fused_write32s_reset_ifchanged,966,4637 +fused_write32s_reset_ifchanged,967,4636 +fused_write32s_reset_ifchanged,968,4637 +fused_write32s_reset_ifchanged,969,4633 +fused_write32s_reset_ifchanged,970,4637 +fused_write32s_reset_ifchanged,971,4632 +fused_write32s_reset_ifchanged,972,4636 +fused_write32s_reset_ifchanged,973,4634 +fused_write32s_reset_ifchanged,974,4636 +fused_write32s_reset_ifchanged,975,4637 +fused_write32s_reset_ifchanged,976,4636 +fused_write32s_reset_ifchanged,977,4636 +fused_write32s_reset_ifchanged,978,4639 +fused_write32s_reset_ifchanged,979,4638 +fused_write32s_reset_ifchanged,980,4633 +fused_write32s_reset_ifchanged,981,4636 +fused_write32s_reset_ifchanged,982,4636 +fused_write32s_reset_ifchanged,983,4635 +fused_write32s_reset_ifchanged,984,4636 +fused_write32s_reset_ifchanged,985,4636 +fused_write32s_reset_ifchanged,986,4637 +fused_write32s_reset_ifchanged,987,4668 +fused_write32s_reset_ifchanged,988,4691 +fused_write32s_reset_ifchanged,989,4663 +fused_write32s_reset_ifchanged,990,4656 +fused_write32s_reset_ifchanged,991,4657 +fused_write32s_reset_ifchanged,992,4658 +fused_write32s_reset_ifchanged,993,4647 +fused_write32s_reset_ifchanged,994,4648 +fused_write32s_reset_ifchanged,995,4652 +fused_write32s_reset_ifchanged,996,4650 +fused_write32s_reset_ifchanged,997,4649 +fused_write32s_reset_ifchanged,998,4640 +fused_write32s_reset_ifchanged,999,4650 +fused_transactions_loadpdi,0,4902 +fused_transactions_loadpdi,1,4817 +fused_transactions_loadpdi,2,4818 +fused_transactions_loadpdi,3,4819 +fused_transactions_loadpdi,4,4819 +fused_transactions_loadpdi,5,4832 +fused_transactions_loadpdi,6,4820 +fused_transactions_loadpdi,7,4813 +fused_transactions_loadpdi,8,4820 fused_transactions_loadpdi,9,4816 -fused_transactions_loadpdi,10,4812 -fused_transactions_loadpdi,11,4819 -fused_transactions_loadpdi,12,4812 -fused_transactions_loadpdi,13,4819 -fused_transactions_loadpdi,14,4819 -fused_transactions_loadpdi,15,4821 -fused_transactions_loadpdi,16,4817 -fused_transactions_loadpdi,17,4814 -fused_transactions_loadpdi,18,4818 -fused_transactions_loadpdi,19,4820 -fused_transactions_loadpdi,20,4811 -fused_transactions_loadpdi,21,4818 -fused_transactions_loadpdi,22,4815 -fused_transactions_loadpdi,23,4823 -fused_transactions_loadpdi,24,4812 +fused_transactions_loadpdi,10,4822 +fused_transactions_loadpdi,11,4820 +fused_transactions_loadpdi,12,4819 +fused_transactions_loadpdi,13,4818 +fused_transactions_loadpdi,14,4816 +fused_transactions_loadpdi,15,4820 +fused_transactions_loadpdi,16,4818 +fused_transactions_loadpdi,17,4827 +fused_transactions_loadpdi,18,4815 +fused_transactions_loadpdi,19,4821 +fused_transactions_loadpdi,20,4825 +fused_transactions_loadpdi,21,4815 +fused_transactions_loadpdi,22,4831 +fused_transactions_loadpdi,23,4813 +fused_transactions_loadpdi,24,4816 fused_transactions_loadpdi,25,4815 -fused_transactions_loadpdi,26,4811 -fused_transactions_loadpdi,27,4820 -fused_transactions_loadpdi,28,4815 -fused_transactions_loadpdi,29,4809 -fused_transactions_loadpdi,30,4813 -fused_transactions_loadpdi,31,4816 -fused_transactions_loadpdi,32,4813 -fused_transactions_loadpdi,33,4812 -fused_transactions_loadpdi,34,4817 -fused_transactions_loadpdi,35,4813 -fused_transactions_loadpdi,36,4811 -fused_transactions_loadpdi,37,4814 -fused_transactions_loadpdi,38,4814 -fused_transactions_loadpdi,39,4817 -fused_transactions_loadpdi,40,4812 -fused_transactions_loadpdi,41,4814 -fused_transactions_loadpdi,42,4815 -fused_transactions_loadpdi,43,4819 -fused_transactions_loadpdi,44,4814 -fused_transactions_loadpdi,45,4817 -fused_transactions_loadpdi,46,4812 -fused_transactions_loadpdi,47,4820 -fused_transactions_loadpdi,48,4817 -fused_transactions_loadpdi,49,4814 -fused_transactions_loadpdi,50,4808 -fused_transactions_loadpdi,51,4815 -fused_transactions_loadpdi,52,4818 -fused_transactions_loadpdi,53,4817 -fused_transactions_loadpdi,54,4815 -fused_transactions_loadpdi,55,4821 -fused_transactions_loadpdi,56,4817 -fused_transactions_loadpdi,57,4818 -fused_transactions_loadpdi,58,4804 -fused_transactions_loadpdi,59,4803 -fused_transactions_loadpdi,60,4815 -fused_transactions_loadpdi,61,4816 -fused_transactions_loadpdi,62,4821 -fused_transactions_loadpdi,63,4809 -fused_transactions_loadpdi,64,4805 -fused_transactions_loadpdi,65,4820 -fused_transactions_loadpdi,66,4815 -fused_transactions_loadpdi,67,4816 -fused_transactions_loadpdi,68,4822 -fused_transactions_loadpdi,69,4820 -fused_transactions_loadpdi,70,4812 -fused_transactions_loadpdi,71,4818 -fused_transactions_loadpdi,72,4817 -fused_transactions_loadpdi,73,4813 -fused_transactions_loadpdi,74,4810 -fused_transactions_loadpdi,75,4814 -fused_transactions_loadpdi,76,4820 -fused_transactions_loadpdi,77,4816 -fused_transactions_loadpdi,78,4818 -fused_transactions_loadpdi,79,4843 -fused_transactions_loadpdi,80,4835 -fused_transactions_loadpdi,81,4836 -fused_transactions_loadpdi,82,4827 -fused_transactions_loadpdi,83,4832 -fused_transactions_loadpdi,84,4835 -fused_transactions_loadpdi,85,4835 -fused_transactions_loadpdi,86,4834 -fused_transactions_loadpdi,87,4833 -fused_transactions_loadpdi,88,4825 -fused_transactions_loadpdi,89,4826 -fused_transactions_loadpdi,90,4832 -fused_transactions_loadpdi,91,4828 +fused_transactions_loadpdi,26,4815 +fused_transactions_loadpdi,27,4819 +fused_transactions_loadpdi,28,4816 +fused_transactions_loadpdi,29,4817 +fused_transactions_loadpdi,30,4818 +fused_transactions_loadpdi,31,4814 +fused_transactions_loadpdi,32,4811 +fused_transactions_loadpdi,33,4815 +fused_transactions_loadpdi,34,4818 +fused_transactions_loadpdi,35,4854 +fused_transactions_loadpdi,36,4856 +fused_transactions_loadpdi,37,4829 +fused_transactions_loadpdi,38,4832 +fused_transactions_loadpdi,39,4840 +fused_transactions_loadpdi,40,4829 +fused_transactions_loadpdi,41,4831 +fused_transactions_loadpdi,42,4831 +fused_transactions_loadpdi,43,4833 +fused_transactions_loadpdi,44,4833 +fused_transactions_loadpdi,45,4832 +fused_transactions_loadpdi,46,4826 +fused_transactions_loadpdi,47,4830 +fused_transactions_loadpdi,48,4850 +fused_transactions_loadpdi,49,4846 +fused_transactions_loadpdi,50,4825 +fused_transactions_loadpdi,51,4811 +fused_transactions_loadpdi,52,4816 +fused_transactions_loadpdi,53,4818 +fused_transactions_loadpdi,54,4816 +fused_transactions_loadpdi,55,4814 +fused_transactions_loadpdi,56,4822 +fused_transactions_loadpdi,57,4820 +fused_transactions_loadpdi,58,4815 +fused_transactions_loadpdi,59,4824 +fused_transactions_loadpdi,60,4817 +fused_transactions_loadpdi,61,4817 +fused_transactions_loadpdi,62,4816 +fused_transactions_loadpdi,63,4822 +fused_transactions_loadpdi,64,4816 +fused_transactions_loadpdi,65,4813 +fused_transactions_loadpdi,66,4819 +fused_transactions_loadpdi,67,4817 +fused_transactions_loadpdi,68,4817 +fused_transactions_loadpdi,69,4813 +fused_transactions_loadpdi,70,4819 +fused_transactions_loadpdi,71,4820 +fused_transactions_loadpdi,72,4820 +fused_transactions_loadpdi,73,4818 +fused_transactions_loadpdi,74,4854 +fused_transactions_loadpdi,75,4842 +fused_transactions_loadpdi,76,4821 +fused_transactions_loadpdi,77,4850 +fused_transactions_loadpdi,78,4865 +fused_transactions_loadpdi,79,4841 +fused_transactions_loadpdi,80,4831 +fused_transactions_loadpdi,81,4840 +fused_transactions_loadpdi,82,4828 +fused_transactions_loadpdi,83,4833 +fused_transactions_loadpdi,84,4832 +fused_transactions_loadpdi,85,4832 +fused_transactions_loadpdi,86,4831 +fused_transactions_loadpdi,87,4827 +fused_transactions_loadpdi,88,4832 +fused_transactions_loadpdi,89,4832 +fused_transactions_loadpdi,90,4831 +fused_transactions_loadpdi,91,4833 fused_transactions_loadpdi,92,4829 -fused_transactions_loadpdi,93,4830 -fused_transactions_loadpdi,94,4832 -fused_transactions_loadpdi,95,4829 -fused_transactions_loadpdi,96,4825 -fused_transactions_loadpdi,97,4831 -fused_transactions_loadpdi,98,4827 -fused_transactions_loadpdi,99,4825 -fused_transactions_loadpdi,100,4833 -fused_transactions_loadpdi,101,4835 -fused_transactions_loadpdi,102,4828 -fused_transactions_loadpdi,103,4825 -fused_transactions_loadpdi,104,4827 -fused_transactions_loadpdi,105,4826 -fused_transactions_loadpdi,106,4841 -fused_transactions_loadpdi,107,4838 -fused_transactions_loadpdi,108,4841 -fused_transactions_loadpdi,109,4826 -fused_transactions_loadpdi,110,4822 -fused_transactions_loadpdi,111,4824 -fused_transactions_loadpdi,112,4835 -fused_transactions_loadpdi,113,4828 -fused_transactions_loadpdi,114,4835 -fused_transactions_loadpdi,115,4827 -fused_transactions_loadpdi,116,4840 -fused_transactions_loadpdi,117,4826 -fused_transactions_loadpdi,118,4827 -fused_transactions_loadpdi,119,4825 -fused_transactions_loadpdi,120,4831 -fused_transactions_loadpdi,121,4834 -fused_transactions_loadpdi,122,4829 -fused_transactions_loadpdi,123,4832 -fused_transactions_loadpdi,124,4830 -fused_transactions_loadpdi,125,4831 -fused_transactions_loadpdi,126,4836 -fused_transactions_loadpdi,127,4826 -fused_transactions_loadpdi,128,4823 -fused_transactions_loadpdi,129,4826 -fused_transactions_loadpdi,130,4829 -fused_transactions_loadpdi,131,4825 -fused_transactions_loadpdi,132,4821 -fused_transactions_loadpdi,133,4826 -fused_transactions_loadpdi,134,4828 -fused_transactions_loadpdi,135,4825 -fused_transactions_loadpdi,136,4831 -fused_transactions_loadpdi,137,4833 -fused_transactions_loadpdi,138,4835 -fused_transactions_loadpdi,139,4822 -fused_transactions_loadpdi,140,4826 +fused_transactions_loadpdi,93,4828 +fused_transactions_loadpdi,94,4834 +fused_transactions_loadpdi,95,4831 +fused_transactions_loadpdi,96,4827 +fused_transactions_loadpdi,97,4840 +fused_transactions_loadpdi,98,4836 +fused_transactions_loadpdi,99,4834 +fused_transactions_loadpdi,100,4838 +fused_transactions_loadpdi,101,4832 +fused_transactions_loadpdi,102,4837 +fused_transactions_loadpdi,103,4827 +fused_transactions_loadpdi,104,4834 +fused_transactions_loadpdi,105,4827 +fused_transactions_loadpdi,106,4831 +fused_transactions_loadpdi,107,4828 +fused_transactions_loadpdi,108,4834 +fused_transactions_loadpdi,109,4830 +fused_transactions_loadpdi,110,4830 +fused_transactions_loadpdi,111,4833 +fused_transactions_loadpdi,112,4825 +fused_transactions_loadpdi,113,4830 +fused_transactions_loadpdi,114,4822 +fused_transactions_loadpdi,115,4825 +fused_transactions_loadpdi,116,4832 +fused_transactions_loadpdi,117,4833 +fused_transactions_loadpdi,118,4829 +fused_transactions_loadpdi,119,4832 +fused_transactions_loadpdi,120,4833 +fused_transactions_loadpdi,121,4830 +fused_transactions_loadpdi,122,4830 +fused_transactions_loadpdi,123,4834 +fused_transactions_loadpdi,124,4833 +fused_transactions_loadpdi,125,4829 +fused_transactions_loadpdi,126,4832 +fused_transactions_loadpdi,127,4828 +fused_transactions_loadpdi,128,4833 +fused_transactions_loadpdi,129,4836 +fused_transactions_loadpdi,130,4831 +fused_transactions_loadpdi,131,4832 +fused_transactions_loadpdi,132,4826 +fused_transactions_loadpdi,133,4833 +fused_transactions_loadpdi,134,4833 +fused_transactions_loadpdi,135,4828 +fused_transactions_loadpdi,136,4825 +fused_transactions_loadpdi,137,4826 +fused_transactions_loadpdi,138,4831 +fused_transactions_loadpdi,139,4838 +fused_transactions_loadpdi,140,4836 fused_transactions_loadpdi,141,4832 -fused_transactions_loadpdi,142,4830 +fused_transactions_loadpdi,142,4835 fused_transactions_loadpdi,143,4827 -fused_transactions_loadpdi,144,4824 -fused_transactions_loadpdi,145,4828 -fused_transactions_loadpdi,146,4849 -fused_transactions_loadpdi,147,4887 -fused_transactions_loadpdi,148,4845 -fused_transactions_loadpdi,149,4840 -fused_transactions_loadpdi,150,4842 -fused_transactions_loadpdi,151,4840 -fused_transactions_loadpdi,152,4809 -fused_transactions_loadpdi,153,4807 -fused_transactions_loadpdi,154,4808 -fused_transactions_loadpdi,155,4807 -fused_transactions_loadpdi,156,4800 -fused_transactions_loadpdi,157,4825 -fused_transactions_loadpdi,158,4825 -fused_transactions_loadpdi,159,4827 -fused_transactions_loadpdi,160,4819 -fused_transactions_loadpdi,161,4833 -fused_transactions_loadpdi,162,4829 -fused_transactions_loadpdi,163,4826 -fused_transactions_loadpdi,164,4826 +fused_transactions_loadpdi,144,4827 +fused_transactions_loadpdi,145,4826 +fused_transactions_loadpdi,146,4828 +fused_transactions_loadpdi,147,4824 +fused_transactions_loadpdi,148,4831 +fused_transactions_loadpdi,149,4836 +fused_transactions_loadpdi,150,4833 +fused_transactions_loadpdi,151,4833 +fused_transactions_loadpdi,152,4825 +fused_transactions_loadpdi,153,4828 +fused_transactions_loadpdi,154,4829 +fused_transactions_loadpdi,155,4857 +fused_transactions_loadpdi,156,4860 +fused_transactions_loadpdi,157,4836 +fused_transactions_loadpdi,158,4830 +fused_transactions_loadpdi,159,4831 +fused_transactions_loadpdi,160,4826 +fused_transactions_loadpdi,161,4824 +fused_transactions_loadpdi,162,4827 +fused_transactions_loadpdi,163,4823 +fused_transactions_loadpdi,164,4827 fused_transactions_loadpdi,165,4824 fused_transactions_loadpdi,166,4826 -fused_transactions_loadpdi,167,4827 -fused_transactions_loadpdi,168,4831 -fused_transactions_loadpdi,169,4820 -fused_transactions_loadpdi,170,4828 -fused_transactions_loadpdi,171,4824 -fused_transactions_loadpdi,172,4822 +fused_transactions_loadpdi,167,4826 +fused_transactions_loadpdi,168,4827 +fused_transactions_loadpdi,169,4825 +fused_transactions_loadpdi,170,4832 +fused_transactions_loadpdi,171,4834 +fused_transactions_loadpdi,172,4827 fused_transactions_loadpdi,173,4829 -fused_transactions_loadpdi,174,4828 -fused_transactions_loadpdi,175,4818 -fused_transactions_loadpdi,176,4826 -fused_transactions_loadpdi,177,4825 -fused_transactions_loadpdi,178,4816 -fused_transactions_loadpdi,179,4828 -fused_transactions_loadpdi,180,4834 -fused_transactions_loadpdi,181,4831 -fused_transactions_loadpdi,182,4821 -fused_transactions_loadpdi,183,4827 -fused_transactions_loadpdi,184,4824 -fused_transactions_loadpdi,185,4820 -fused_transactions_loadpdi,186,4828 -fused_transactions_loadpdi,187,4821 -fused_transactions_loadpdi,188,4828 -fused_transactions_loadpdi,189,4823 -fused_transactions_loadpdi,190,4823 -fused_transactions_loadpdi,191,4832 -fused_transactions_loadpdi,192,4823 -fused_transactions_loadpdi,193,4822 -fused_transactions_loadpdi,194,4830 -fused_transactions_loadpdi,195,4826 -fused_transactions_loadpdi,196,4823 -fused_transactions_loadpdi,197,4824 -fused_transactions_loadpdi,198,4824 -fused_transactions_loadpdi,199,4826 -fused_transactions_loadpdi,200,4829 -fused_transactions_loadpdi,201,4827 -fused_transactions_loadpdi,202,4827 -fused_transactions_loadpdi,203,4829 -fused_transactions_loadpdi,204,4826 -fused_transactions_loadpdi,205,4827 -fused_transactions_loadpdi,206,4827 -fused_transactions_loadpdi,207,4825 -fused_transactions_loadpdi,208,4827 +fused_transactions_loadpdi,174,4834 +fused_transactions_loadpdi,175,4834 +fused_transactions_loadpdi,176,4831 +fused_transactions_loadpdi,177,4829 +fused_transactions_loadpdi,178,4826 +fused_transactions_loadpdi,179,4824 +fused_transactions_loadpdi,180,4838 +fused_transactions_loadpdi,181,4832 +fused_transactions_loadpdi,182,4834 +fused_transactions_loadpdi,183,4832 +fused_transactions_loadpdi,184,4832 +fused_transactions_loadpdi,185,4834 +fused_transactions_loadpdi,186,4824 +fused_transactions_loadpdi,187,4832 +fused_transactions_loadpdi,188,4832 +fused_transactions_loadpdi,189,4832 +fused_transactions_loadpdi,190,4833 +fused_transactions_loadpdi,191,4829 +fused_transactions_loadpdi,192,4831 +fused_transactions_loadpdi,193,4827 +fused_transactions_loadpdi,194,4832 +fused_transactions_loadpdi,195,4829 +fused_transactions_loadpdi,196,4832 +fused_transactions_loadpdi,197,4832 +fused_transactions_loadpdi,198,4832 +fused_transactions_loadpdi,199,4832 +fused_transactions_loadpdi,200,4836 +fused_transactions_loadpdi,201,4838 +fused_transactions_loadpdi,202,4830 +fused_transactions_loadpdi,203,4830 +fused_transactions_loadpdi,204,4832 +fused_transactions_loadpdi,205,4828 +fused_transactions_loadpdi,206,4824 +fused_transactions_loadpdi,207,4823 +fused_transactions_loadpdi,208,4832 fused_transactions_loadpdi,209,4832 -fused_transactions_loadpdi,210,4822 -fused_transactions_loadpdi,211,4837 -fused_transactions_loadpdi,212,4841 -fused_transactions_loadpdi,213,4825 -fused_transactions_loadpdi,214,4827 -fused_transactions_loadpdi,215,4824 +fused_transactions_loadpdi,210,4824 +fused_transactions_loadpdi,211,4828 +fused_transactions_loadpdi,212,4829 +fused_transactions_loadpdi,213,4827 +fused_transactions_loadpdi,214,4834 +fused_transactions_loadpdi,215,4829 fused_transactions_loadpdi,216,4828 -fused_transactions_loadpdi,217,4822 +fused_transactions_loadpdi,217,4827 fused_transactions_loadpdi,218,4826 -fused_transactions_loadpdi,219,4819 -fused_transactions_loadpdi,220,4824 -fused_transactions_loadpdi,221,4823 -fused_transactions_loadpdi,222,4824 -fused_transactions_loadpdi,223,4832 -fused_transactions_loadpdi,224,4831 -fused_transactions_loadpdi,225,4822 -fused_transactions_loadpdi,226,4824 -fused_transactions_loadpdi,227,4827 -fused_transactions_loadpdi,228,4830 -fused_transactions_loadpdi,229,4826 -fused_transactions_loadpdi,230,4831 -fused_transactions_loadpdi,231,4826 -fused_transactions_loadpdi,232,4826 -fused_transactions_loadpdi,233,4827 -fused_transactions_loadpdi,234,4826 -fused_transactions_loadpdi,235,4822 -fused_transactions_loadpdi,236,4820 -fused_transactions_loadpdi,237,4831 -fused_transactions_loadpdi,238,4822 -fused_transactions_loadpdi,239,4826 -fused_transactions_loadpdi,240,4828 -fused_transactions_loadpdi,241,4822 -fused_transactions_loadpdi,242,4825 -fused_transactions_loadpdi,243,4832 -fused_transactions_loadpdi,244,4827 -fused_transactions_loadpdi,245,4826 -fused_transactions_loadpdi,246,4828 -fused_transactions_loadpdi,247,4832 -fused_transactions_loadpdi,248,4828 -fused_transactions_loadpdi,249,4831 -fused_transactions_loadpdi,250,4823 -fused_transactions_loadpdi,251,4827 -fused_transactions_loadpdi,252,4834 -fused_transactions_loadpdi,253,4827 -fused_transactions_loadpdi,254,4828 -fused_transactions_loadpdi,255,4832 -fused_transactions_loadpdi,256,4825 -fused_transactions_loadpdi,257,4832 -fused_transactions_loadpdi,258,4826 -fused_transactions_loadpdi,259,4826 -fused_transactions_loadpdi,260,4825 -fused_transactions_loadpdi,261,4825 -fused_transactions_loadpdi,262,4823 -fused_transactions_loadpdi,263,4824 -fused_transactions_loadpdi,264,4837 -fused_transactions_loadpdi,265,4825 -fused_transactions_loadpdi,266,4822 -fused_transactions_loadpdi,267,4832 -fused_transactions_loadpdi,268,4831 -fused_transactions_loadpdi,269,4826 -fused_transactions_loadpdi,270,4827 -fused_transactions_loadpdi,271,4828 -fused_transactions_loadpdi,272,4827 -fused_transactions_loadpdi,273,4828 -fused_transactions_loadpdi,274,4829 -fused_transactions_loadpdi,275,4823 -fused_transactions_loadpdi,276,4825 -fused_transactions_loadpdi,277,4826 -fused_transactions_loadpdi,278,4824 -fused_transactions_loadpdi,279,4827 -fused_transactions_loadpdi,280,4830 -fused_transactions_loadpdi,281,4828 -fused_transactions_loadpdi,282,4827 -fused_transactions_loadpdi,283,4820 -fused_transactions_loadpdi,284,4829 -fused_transactions_loadpdi,285,4830 -fused_transactions_loadpdi,286,4828 -fused_transactions_loadpdi,287,4841 -fused_transactions_loadpdi,288,4832 -fused_transactions_loadpdi,289,4832 -fused_transactions_loadpdi,290,4828 -fused_transactions_loadpdi,291,4829 -fused_transactions_loadpdi,292,4839 -fused_transactions_loadpdi,293,4827 -fused_transactions_loadpdi,294,4834 -fused_transactions_loadpdi,295,4834 -fused_transactions_loadpdi,296,4832 -fused_transactions_loadpdi,297,4837 +fused_transactions_loadpdi,219,4829 +fused_transactions_loadpdi,220,4829 +fused_transactions_loadpdi,221,4832 +fused_transactions_loadpdi,222,4833 +fused_transactions_loadpdi,223,4828 +fused_transactions_loadpdi,224,4834 +fused_transactions_loadpdi,225,4832 +fused_transactions_loadpdi,226,4832 +fused_transactions_loadpdi,227,4826 +fused_transactions_loadpdi,228,4826 +fused_transactions_loadpdi,229,4833 +fused_transactions_loadpdi,230,4826 +fused_transactions_loadpdi,231,4828 +fused_transactions_loadpdi,232,4832 +fused_transactions_loadpdi,233,4843 +fused_transactions_loadpdi,234,4829 +fused_transactions_loadpdi,235,4830 +fused_transactions_loadpdi,236,4835 +fused_transactions_loadpdi,237,4835 +fused_transactions_loadpdi,238,4824 +fused_transactions_loadpdi,239,4827 +fused_transactions_loadpdi,240,4830 +fused_transactions_loadpdi,241,4828 +fused_transactions_loadpdi,242,4831 +fused_transactions_loadpdi,243,4825 +fused_transactions_loadpdi,244,4823 +fused_transactions_loadpdi,245,4833 +fused_transactions_loadpdi,246,4831 +fused_transactions_loadpdi,247,4831 +fused_transactions_loadpdi,248,4841 +fused_transactions_loadpdi,249,4832 +fused_transactions_loadpdi,250,4835 +fused_transactions_loadpdi,251,4825 +fused_transactions_loadpdi,252,4831 +fused_transactions_loadpdi,253,4831 +fused_transactions_loadpdi,254,4824 +fused_transactions_loadpdi,255,4826 +fused_transactions_loadpdi,256,4833 +fused_transactions_loadpdi,257,4841 +fused_transactions_loadpdi,258,4828 +fused_transactions_loadpdi,259,4828 +fused_transactions_loadpdi,260,4865 +fused_transactions_loadpdi,261,4864 +fused_transactions_loadpdi,262,4826 +fused_transactions_loadpdi,263,4834 +fused_transactions_loadpdi,264,4826 +fused_transactions_loadpdi,265,4832 +fused_transactions_loadpdi,266,4828 +fused_transactions_loadpdi,267,4833 +fused_transactions_loadpdi,268,4824 +fused_transactions_loadpdi,269,4832 +fused_transactions_loadpdi,270,4832 +fused_transactions_loadpdi,271,4832 +fused_transactions_loadpdi,272,4829 +fused_transactions_loadpdi,273,4831 +fused_transactions_loadpdi,274,4825 +fused_transactions_loadpdi,275,4828 +fused_transactions_loadpdi,276,4838 +fused_transactions_loadpdi,277,4851 +fused_transactions_loadpdi,278,4855 +fused_transactions_loadpdi,279,4845 +fused_transactions_loadpdi,280,4845 +fused_transactions_loadpdi,281,4834 +fused_transactions_loadpdi,282,4831 +fused_transactions_loadpdi,283,4832 +fused_transactions_loadpdi,284,4842 +fused_transactions_loadpdi,285,4838 +fused_transactions_loadpdi,286,4856 +fused_transactions_loadpdi,287,4827 +fused_transactions_loadpdi,288,4823 +fused_transactions_loadpdi,289,4829 +fused_transactions_loadpdi,290,4822 +fused_transactions_loadpdi,291,4819 +fused_transactions_loadpdi,292,4826 +fused_transactions_loadpdi,293,4829 +fused_transactions_loadpdi,294,4828 +fused_transactions_loadpdi,295,4830 +fused_transactions_loadpdi,296,4825 +fused_transactions_loadpdi,297,4827 fused_transactions_loadpdi,298,4836 -fused_transactions_loadpdi,299,4832 -fused_transactions_loadpdi,300,4837 -fused_transactions_loadpdi,301,4833 -fused_transactions_loadpdi,302,4830 -fused_transactions_loadpdi,303,4829 -fused_transactions_loadpdi,304,4827 -fused_transactions_loadpdi,305,4830 -fused_transactions_loadpdi,306,4823 -fused_transactions_loadpdi,307,4824 -fused_transactions_loadpdi,308,4824 -fused_transactions_loadpdi,309,4829 -fused_transactions_loadpdi,310,4823 -fused_transactions_loadpdi,311,4827 -fused_transactions_loadpdi,312,4827 -fused_transactions_loadpdi,313,4830 -fused_transactions_loadpdi,314,4827 -fused_transactions_loadpdi,315,4832 -fused_transactions_loadpdi,316,4827 -fused_transactions_loadpdi,317,4827 -fused_transactions_loadpdi,318,4830 -fused_transactions_loadpdi,319,4834 -fused_transactions_loadpdi,320,4830 -fused_transactions_loadpdi,321,4825 -fused_transactions_loadpdi,322,4824 -fused_transactions_loadpdi,323,4824 +fused_transactions_loadpdi,299,4827 +fused_transactions_loadpdi,300,4838 +fused_transactions_loadpdi,301,4830 +fused_transactions_loadpdi,302,4829 +fused_transactions_loadpdi,303,4824 +fused_transactions_loadpdi,304,4834 +fused_transactions_loadpdi,305,4829 +fused_transactions_loadpdi,306,4833 +fused_transactions_loadpdi,307,4822 +fused_transactions_loadpdi,308,4830 +fused_transactions_loadpdi,309,4830 +fused_transactions_loadpdi,310,4829 +fused_transactions_loadpdi,311,4830 +fused_transactions_loadpdi,312,4835 +fused_transactions_loadpdi,313,4825 +fused_transactions_loadpdi,314,4825 +fused_transactions_loadpdi,315,4831 +fused_transactions_loadpdi,316,4833 +fused_transactions_loadpdi,317,4829 +fused_transactions_loadpdi,318,4829 +fused_transactions_loadpdi,319,4824 +fused_transactions_loadpdi,320,4832 +fused_transactions_loadpdi,321,4831 +fused_transactions_loadpdi,322,4822 +fused_transactions_loadpdi,323,4833 fused_transactions_loadpdi,324,4830 -fused_transactions_loadpdi,325,4831 -fused_transactions_loadpdi,326,4826 +fused_transactions_loadpdi,325,4833 +fused_transactions_loadpdi,326,4830 fused_transactions_loadpdi,327,4828 -fused_transactions_loadpdi,328,4815 -fused_transactions_loadpdi,329,4835 -fused_transactions_loadpdi,330,4826 -fused_transactions_loadpdi,331,4831 -fused_transactions_loadpdi,332,4826 -fused_transactions_loadpdi,333,4837 -fused_transactions_loadpdi,334,4839 -fused_transactions_loadpdi,335,4837 -fused_transactions_loadpdi,336,4821 -fused_transactions_loadpdi,337,4829 -fused_transactions_loadpdi,338,4828 -fused_transactions_loadpdi,339,4825 -fused_transactions_loadpdi,340,4830 -fused_transactions_loadpdi,341,4825 -fused_transactions_loadpdi,342,4831 -fused_transactions_loadpdi,343,4829 -fused_transactions_loadpdi,344,4829 -fused_transactions_loadpdi,345,4826 +fused_transactions_loadpdi,328,4823 +fused_transactions_loadpdi,329,4838 +fused_transactions_loadpdi,330,4828 +fused_transactions_loadpdi,331,4832 +fused_transactions_loadpdi,332,4828 +fused_transactions_loadpdi,333,4829 +fused_transactions_loadpdi,334,4842 +fused_transactions_loadpdi,335,4826 +fused_transactions_loadpdi,336,4833 +fused_transactions_loadpdi,337,4830 +fused_transactions_loadpdi,338,4830 +fused_transactions_loadpdi,339,4831 +fused_transactions_loadpdi,340,4837 +fused_transactions_loadpdi,341,4832 +fused_transactions_loadpdi,342,4827 +fused_transactions_loadpdi,343,4825 +fused_transactions_loadpdi,344,4824 +fused_transactions_loadpdi,345,4827 fused_transactions_loadpdi,346,4833 -fused_transactions_loadpdi,347,4823 -fused_transactions_loadpdi,348,4820 +fused_transactions_loadpdi,347,4827 +fused_transactions_loadpdi,348,4828 fused_transactions_loadpdi,349,4833 -fused_transactions_loadpdi,350,4836 -fused_transactions_loadpdi,351,4823 -fused_transactions_loadpdi,352,4835 -fused_transactions_loadpdi,353,4826 -fused_transactions_loadpdi,354,4831 -fused_transactions_loadpdi,355,4825 -fused_transactions_loadpdi,356,4833 -fused_transactions_loadpdi,357,4827 -fused_transactions_loadpdi,358,4828 -fused_transactions_loadpdi,359,4862 -fused_transactions_loadpdi,360,4865 -fused_transactions_loadpdi,361,4832 -fused_transactions_loadpdi,362,4825 -fused_transactions_loadpdi,363,4825 -fused_transactions_loadpdi,364,4823 -fused_transactions_loadpdi,365,4829 -fused_transactions_loadpdi,366,4833 -fused_transactions_loadpdi,367,4828 -fused_transactions_loadpdi,368,4831 -fused_transactions_loadpdi,369,4827 -fused_transactions_loadpdi,370,4832 -fused_transactions_loadpdi,371,4827 -fused_transactions_loadpdi,372,4830 -fused_transactions_loadpdi,373,4835 -fused_transactions_loadpdi,374,4826 -fused_transactions_loadpdi,375,4847 +fused_transactions_loadpdi,350,4829 +fused_transactions_loadpdi,351,4830 +fused_transactions_loadpdi,352,4828 +fused_transactions_loadpdi,353,4829 +fused_transactions_loadpdi,354,4837 +fused_transactions_loadpdi,355,4827 +fused_transactions_loadpdi,356,4827 +fused_transactions_loadpdi,357,4831 +fused_transactions_loadpdi,358,4829 +fused_transactions_loadpdi,359,4834 +fused_transactions_loadpdi,360,4826 +fused_transactions_loadpdi,361,4830 +fused_transactions_loadpdi,362,4827 +fused_transactions_loadpdi,363,4822 +fused_transactions_loadpdi,364,4829 +fused_transactions_loadpdi,365,4853 +fused_transactions_loadpdi,366,4864 +fused_transactions_loadpdi,367,4830 +fused_transactions_loadpdi,368,4826 +fused_transactions_loadpdi,369,4826 +fused_transactions_loadpdi,370,4827 +fused_transactions_loadpdi,371,4829 +fused_transactions_loadpdi,372,4833 +fused_transactions_loadpdi,373,4830 +fused_transactions_loadpdi,374,4824 +fused_transactions_loadpdi,375,4832 fused_transactions_loadpdi,376,4830 -fused_transactions_loadpdi,377,4829 +fused_transactions_loadpdi,377,4826 fused_transactions_loadpdi,378,4829 -fused_transactions_loadpdi,379,4821 -fused_transactions_loadpdi,380,4825 -fused_transactions_loadpdi,381,4831 +fused_transactions_loadpdi,379,4829 +fused_transactions_loadpdi,380,4836 +fused_transactions_loadpdi,381,4824 fused_transactions_loadpdi,382,4832 -fused_transactions_loadpdi,383,4824 -fused_transactions_loadpdi,384,4831 -fused_transactions_loadpdi,385,4827 -fused_transactions_loadpdi,386,4825 -fused_transactions_loadpdi,387,4828 -fused_transactions_loadpdi,388,4825 -fused_transactions_loadpdi,389,4828 -fused_transactions_loadpdi,390,4823 -fused_transactions_loadpdi,391,4831 -fused_transactions_loadpdi,392,4828 -fused_transactions_loadpdi,393,4825 -fused_transactions_loadpdi,394,4825 -fused_transactions_loadpdi,395,4834 +fused_transactions_loadpdi,383,4832 +fused_transactions_loadpdi,384,4828 +fused_transactions_loadpdi,385,4825 +fused_transactions_loadpdi,386,4830 +fused_transactions_loadpdi,387,4829 +fused_transactions_loadpdi,388,4836 +fused_transactions_loadpdi,389,4827 +fused_transactions_loadpdi,390,4828 +fused_transactions_loadpdi,391,4833 +fused_transactions_loadpdi,392,4831 +fused_transactions_loadpdi,393,4828 +fused_transactions_loadpdi,394,4830 +fused_transactions_loadpdi,395,4833 fused_transactions_loadpdi,396,4827 -fused_transactions_loadpdi,397,4839 -fused_transactions_loadpdi,398,4835 -fused_transactions_loadpdi,399,4828 -fused_transactions_loadpdi,400,4834 +fused_transactions_loadpdi,397,4828 +fused_transactions_loadpdi,398,4831 +fused_transactions_loadpdi,399,4830 +fused_transactions_loadpdi,400,4830 fused_transactions_loadpdi,401,4825 -fused_transactions_loadpdi,402,4834 -fused_transactions_loadpdi,403,4829 -fused_transactions_loadpdi,404,4825 -fused_transactions_loadpdi,405,4831 -fused_transactions_loadpdi,406,4836 -fused_transactions_loadpdi,407,4827 -fused_transactions_loadpdi,408,4830 -fused_transactions_loadpdi,409,4839 -fused_transactions_loadpdi,410,4832 -fused_transactions_loadpdi,411,4830 -fused_transactions_loadpdi,412,4829 -fused_transactions_loadpdi,413,4828 -fused_transactions_loadpdi,414,4833 -fused_transactions_loadpdi,415,4836 -fused_transactions_loadpdi,416,4839 -fused_transactions_loadpdi,417,4832 +fused_transactions_loadpdi,402,4828 +fused_transactions_loadpdi,403,4830 +fused_transactions_loadpdi,404,4827 +fused_transactions_loadpdi,405,4830 +fused_transactions_loadpdi,406,4827 +fused_transactions_loadpdi,407,4825 +fused_transactions_loadpdi,408,4836 +fused_transactions_loadpdi,409,4826 +fused_transactions_loadpdi,410,4826 +fused_transactions_loadpdi,411,4823 +fused_transactions_loadpdi,412,4830 +fused_transactions_loadpdi,413,4826 +fused_transactions_loadpdi,414,4826 +fused_transactions_loadpdi,415,4824 +fused_transactions_loadpdi,416,4825 +fused_transactions_loadpdi,417,4829 fused_transactions_loadpdi,418,4825 -fused_transactions_loadpdi,419,4829 -fused_transactions_loadpdi,420,4822 -fused_transactions_loadpdi,421,4835 -fused_transactions_loadpdi,422,4823 -fused_transactions_loadpdi,423,4831 -fused_transactions_loadpdi,424,4823 -fused_transactions_loadpdi,425,4823 -fused_transactions_loadpdi,426,4824 -fused_transactions_loadpdi,427,4827 -fused_transactions_loadpdi,428,4829 -fused_transactions_loadpdi,429,4825 -fused_transactions_loadpdi,430,4831 -fused_transactions_loadpdi,431,4824 -fused_transactions_loadpdi,432,4826 -fused_transactions_loadpdi,433,4826 -fused_transactions_loadpdi,434,4820 -fused_transactions_loadpdi,435,4819 -fused_transactions_loadpdi,436,4824 -fused_transactions_loadpdi,437,4825 -fused_transactions_loadpdi,438,4845 +fused_transactions_loadpdi,419,4826 +fused_transactions_loadpdi,420,4829 +fused_transactions_loadpdi,421,4827 +fused_transactions_loadpdi,422,4829 +fused_transactions_loadpdi,423,4836 +fused_transactions_loadpdi,424,4830 +fused_transactions_loadpdi,425,4831 +fused_transactions_loadpdi,426,4836 +fused_transactions_loadpdi,427,4826 +fused_transactions_loadpdi,428,4825 +fused_transactions_loadpdi,429,4839 +fused_transactions_loadpdi,430,4832 +fused_transactions_loadpdi,431,4834 +fused_transactions_loadpdi,432,4829 +fused_transactions_loadpdi,433,4840 +fused_transactions_loadpdi,434,4832 +fused_transactions_loadpdi,435,4826 +fused_transactions_loadpdi,436,4826 +fused_transactions_loadpdi,437,4824 +fused_transactions_loadpdi,438,4828 fused_transactions_loadpdi,439,4828 -fused_transactions_loadpdi,440,4829 -fused_transactions_loadpdi,441,4827 -fused_transactions_loadpdi,442,4825 -fused_transactions_loadpdi,443,4827 -fused_transactions_loadpdi,444,4831 -fused_transactions_loadpdi,445,4829 -fused_transactions_loadpdi,446,4822 -fused_transactions_loadpdi,447,4826 -fused_transactions_loadpdi,448,4825 -fused_transactions_loadpdi,449,4829 -fused_transactions_loadpdi,450,4822 -fused_transactions_loadpdi,451,4822 -fused_transactions_loadpdi,452,4826 -fused_transactions_loadpdi,453,4831 -fused_transactions_loadpdi,454,4830 -fused_transactions_loadpdi,455,4822 -fused_transactions_loadpdi,456,4826 -fused_transactions_loadpdi,457,4826 -fused_transactions_loadpdi,458,4835 -fused_transactions_loadpdi,459,4824 -fused_transactions_loadpdi,460,4825 -fused_transactions_loadpdi,461,4830 -fused_transactions_loadpdi,462,4826 -fused_transactions_loadpdi,463,4821 -fused_transactions_loadpdi,464,4829 -fused_transactions_loadpdi,465,4821 -fused_transactions_loadpdi,466,4832 -fused_transactions_loadpdi,467,4817 -fused_transactions_loadpdi,468,4832 -fused_transactions_loadpdi,469,4826 -fused_transactions_loadpdi,470,4822 -fused_transactions_loadpdi,471,4826 -fused_transactions_loadpdi,472,4826 -fused_transactions_loadpdi,473,4818 -fused_transactions_loadpdi,474,4821 -fused_transactions_loadpdi,475,4828 -fused_transactions_loadpdi,476,4832 -fused_transactions_loadpdi,477,4832 -fused_transactions_loadpdi,478,4835 +fused_transactions_loadpdi,440,4825 +fused_transactions_loadpdi,441,4826 +fused_transactions_loadpdi,442,4828 +fused_transactions_loadpdi,443,4824 +fused_transactions_loadpdi,444,4821 +fused_transactions_loadpdi,445,4835 +fused_transactions_loadpdi,446,4829 +fused_transactions_loadpdi,447,4824 +fused_transactions_loadpdi,448,4828 +fused_transactions_loadpdi,449,4831 +fused_transactions_loadpdi,450,4824 +fused_transactions_loadpdi,451,4827 +fused_transactions_loadpdi,452,4834 +fused_transactions_loadpdi,453,4834 +fused_transactions_loadpdi,454,4823 +fused_transactions_loadpdi,455,4829 +fused_transactions_loadpdi,456,4823 +fused_transactions_loadpdi,457,4831 +fused_transactions_loadpdi,458,4833 +fused_transactions_loadpdi,459,4826 +fused_transactions_loadpdi,460,4833 +fused_transactions_loadpdi,461,4823 +fused_transactions_loadpdi,462,4828 +fused_transactions_loadpdi,463,4825 +fused_transactions_loadpdi,464,4822 +fused_transactions_loadpdi,465,4834 +fused_transactions_loadpdi,466,4838 +fused_transactions_loadpdi,467,4826 +fused_transactions_loadpdi,468,4828 +fused_transactions_loadpdi,469,4834 +fused_transactions_loadpdi,470,4860 +fused_transactions_loadpdi,471,4855 +fused_transactions_loadpdi,472,4828 +fused_transactions_loadpdi,473,4828 +fused_transactions_loadpdi,474,4832 +fused_transactions_loadpdi,475,4832 +fused_transactions_loadpdi,476,4831 +fused_transactions_loadpdi,477,4830 +fused_transactions_loadpdi,478,4830 fused_transactions_loadpdi,479,4826 -fused_transactions_loadpdi,480,4829 -fused_transactions_loadpdi,481,4824 +fused_transactions_loadpdi,480,4825 +fused_transactions_loadpdi,481,4821 fused_transactions_loadpdi,482,4825 -fused_transactions_loadpdi,483,4821 +fused_transactions_loadpdi,483,4832 fused_transactions_loadpdi,484,4824 -fused_transactions_loadpdi,485,4821 -fused_transactions_loadpdi,486,4824 -fused_transactions_loadpdi,487,4826 -fused_transactions_loadpdi,488,4824 -fused_transactions_loadpdi,489,4827 -fused_transactions_loadpdi,490,4826 -fused_transactions_loadpdi,491,4822 -fused_transactions_loadpdi,492,4827 -fused_transactions_loadpdi,493,4829 -fused_transactions_loadpdi,494,4823 -fused_transactions_loadpdi,495,4830 -fused_transactions_loadpdi,496,4828 -fused_transactions_loadpdi,497,4824 -fused_transactions_loadpdi,498,4830 -fused_transactions_loadpdi,499,4843 -fused_transactions_loadpdi,500,4837 -fused_transactions_loadpdi,501,4831 -fused_transactions_loadpdi,502,4829 -fused_transactions_loadpdi,503,4828 -fused_transactions_loadpdi,504,4821 -fused_transactions_loadpdi,505,4830 -fused_transactions_loadpdi,506,4829 -fused_transactions_loadpdi,507,4829 -fused_transactions_loadpdi,508,4828 -fused_transactions_loadpdi,509,4830 -fused_transactions_loadpdi,510,4833 -fused_transactions_loadpdi,511,4825 -fused_transactions_loadpdi,512,4836 -fused_transactions_loadpdi,513,4829 -fused_transactions_loadpdi,514,4839 -fused_transactions_loadpdi,515,4821 -fused_transactions_loadpdi,516,4829 +fused_transactions_loadpdi,485,4828 +fused_transactions_loadpdi,486,4834 +fused_transactions_loadpdi,487,4819 +fused_transactions_loadpdi,488,4825 +fused_transactions_loadpdi,489,4828 +fused_transactions_loadpdi,490,4824 +fused_transactions_loadpdi,491,4832 +fused_transactions_loadpdi,492,4831 +fused_transactions_loadpdi,493,4831 +fused_transactions_loadpdi,494,4834 +fused_transactions_loadpdi,495,4823 +fused_transactions_loadpdi,496,4831 +fused_transactions_loadpdi,497,4827 +fused_transactions_loadpdi,498,4826 +fused_transactions_loadpdi,499,4831 +fused_transactions_loadpdi,500,4824 +fused_transactions_loadpdi,501,4838 +fused_transactions_loadpdi,502,4845 +fused_transactions_loadpdi,503,4837 +fused_transactions_loadpdi,504,4832 +fused_transactions_loadpdi,505,4823 +fused_transactions_loadpdi,506,4832 +fused_transactions_loadpdi,507,4824 +fused_transactions_loadpdi,508,4833 +fused_transactions_loadpdi,509,4831 +fused_transactions_loadpdi,510,4824 +fused_transactions_loadpdi,511,4827 +fused_transactions_loadpdi,512,4831 +fused_transactions_loadpdi,513,4835 +fused_transactions_loadpdi,514,4830 +fused_transactions_loadpdi,515,4827 +fused_transactions_loadpdi,516,4831 fused_transactions_loadpdi,517,4833 -fused_transactions_loadpdi,518,4835 -fused_transactions_loadpdi,519,4828 -fused_transactions_loadpdi,520,4846 -fused_transactions_loadpdi,521,4833 +fused_transactions_loadpdi,518,4821 +fused_transactions_loadpdi,519,4830 +fused_transactions_loadpdi,520,4827 +fused_transactions_loadpdi,521,4829 fused_transactions_loadpdi,522,4830 fused_transactions_loadpdi,523,4831 -fused_transactions_loadpdi,524,4828 -fused_transactions_loadpdi,525,4829 -fused_transactions_loadpdi,526,4818 -fused_transactions_loadpdi,527,4840 -fused_transactions_loadpdi,528,4836 -fused_transactions_loadpdi,529,4827 -fused_transactions_loadpdi,530,4822 -fused_transactions_loadpdi,531,4830 -fused_transactions_loadpdi,532,4825 -fused_transactions_loadpdi,533,4826 -fused_transactions_loadpdi,534,4826 -fused_transactions_loadpdi,535,4824 -fused_transactions_loadpdi,536,4829 -fused_transactions_loadpdi,537,4824 -fused_transactions_loadpdi,538,4825 -fused_transactions_loadpdi,539,4824 -fused_transactions_loadpdi,540,4826 -fused_transactions_loadpdi,541,4827 -fused_transactions_loadpdi,542,4825 -fused_transactions_loadpdi,543,4826 -fused_transactions_loadpdi,544,4818 -fused_transactions_loadpdi,545,4821 -fused_transactions_loadpdi,546,4823 -fused_transactions_loadpdi,547,4828 -fused_transactions_loadpdi,548,4825 -fused_transactions_loadpdi,549,4825 -fused_transactions_loadpdi,550,4832 -fused_transactions_loadpdi,551,4817 -fused_transactions_loadpdi,552,4822 -fused_transactions_loadpdi,553,4827 -fused_transactions_loadpdi,554,4831 -fused_transactions_loadpdi,555,4821 -fused_transactions_loadpdi,556,4823 -fused_transactions_loadpdi,557,4818 -fused_transactions_loadpdi,558,4824 -fused_transactions_loadpdi,559,4826 -fused_transactions_loadpdi,560,4824 +fused_transactions_loadpdi,524,4835 +fused_transactions_loadpdi,525,4830 +fused_transactions_loadpdi,526,4831 +fused_transactions_loadpdi,527,4833 +fused_transactions_loadpdi,528,4825 +fused_transactions_loadpdi,529,4828 +fused_transactions_loadpdi,530,4823 +fused_transactions_loadpdi,531,4824 +fused_transactions_loadpdi,532,4830 +fused_transactions_loadpdi,533,4822 +fused_transactions_loadpdi,534,4830 +fused_transactions_loadpdi,535,4827 +fused_transactions_loadpdi,536,4827 +fused_transactions_loadpdi,537,4833 +fused_transactions_loadpdi,538,4831 +fused_transactions_loadpdi,539,4836 +fused_transactions_loadpdi,540,4827 +fused_transactions_loadpdi,541,4825 +fused_transactions_loadpdi,542,4830 +fused_transactions_loadpdi,543,4827 +fused_transactions_loadpdi,544,4830 +fused_transactions_loadpdi,545,4826 +fused_transactions_loadpdi,546,4824 +fused_transactions_loadpdi,547,4831 +fused_transactions_loadpdi,548,4824 +fused_transactions_loadpdi,549,4831 +fused_transactions_loadpdi,550,4830 +fused_transactions_loadpdi,551,4831 +fused_transactions_loadpdi,552,4829 +fused_transactions_loadpdi,553,4835 +fused_transactions_loadpdi,554,4826 +fused_transactions_loadpdi,555,4828 +fused_transactions_loadpdi,556,4826 +fused_transactions_loadpdi,557,4827 +fused_transactions_loadpdi,558,4826 +fused_transactions_loadpdi,559,4825 +fused_transactions_loadpdi,560,4825 fused_transactions_loadpdi,561,4826 -fused_transactions_loadpdi,562,4829 -fused_transactions_loadpdi,563,4822 -fused_transactions_loadpdi,564,4821 -fused_transactions_loadpdi,565,4830 -fused_transactions_loadpdi,566,4817 -fused_transactions_loadpdi,567,4813 -fused_transactions_loadpdi,568,4820 -fused_transactions_loadpdi,569,4827 -fused_transactions_loadpdi,570,4827 -fused_transactions_loadpdi,571,4829 -fused_transactions_loadpdi,572,4828 -fused_transactions_loadpdi,573,4819 +fused_transactions_loadpdi,562,4827 +fused_transactions_loadpdi,563,4823 +fused_transactions_loadpdi,564,4824 +fused_transactions_loadpdi,565,4829 +fused_transactions_loadpdi,566,4828 +fused_transactions_loadpdi,567,4829 +fused_transactions_loadpdi,568,4825 +fused_transactions_loadpdi,569,4825 +fused_transactions_loadpdi,570,4823 +fused_transactions_loadpdi,571,4827 +fused_transactions_loadpdi,572,4827 +fused_transactions_loadpdi,573,4823 fused_transactions_loadpdi,574,4825 -fused_transactions_loadpdi,575,4821 -fused_transactions_loadpdi,576,4832 -fused_transactions_loadpdi,577,4825 -fused_transactions_loadpdi,578,4830 -fused_transactions_loadpdi,579,4826 -fused_transactions_loadpdi,580,4830 -fused_transactions_loadpdi,581,4825 -fused_transactions_loadpdi,582,4829 -fused_transactions_loadpdi,583,4828 -fused_transactions_loadpdi,584,4825 -fused_transactions_loadpdi,585,4822 +fused_transactions_loadpdi,575,4854 +fused_transactions_loadpdi,576,4870 +fused_transactions_loadpdi,577,4845 +fused_transactions_loadpdi,578,4827 +fused_transactions_loadpdi,579,4830 +fused_transactions_loadpdi,580,4827 +fused_transactions_loadpdi,581,4833 +fused_transactions_loadpdi,582,4830 +fused_transactions_loadpdi,583,4834 +fused_transactions_loadpdi,584,4831 +fused_transactions_loadpdi,585,4831 fused_transactions_loadpdi,586,4827 -fused_transactions_loadpdi,587,4822 +fused_transactions_loadpdi,587,4825 fused_transactions_loadpdi,588,4829 -fused_transactions_loadpdi,589,4829 -fused_transactions_loadpdi,590,4829 -fused_transactions_loadpdi,591,4823 -fused_transactions_loadpdi,592,4822 -fused_transactions_loadpdi,593,4828 -fused_transactions_loadpdi,594,4811 -fused_transactions_loadpdi,595,4805 -fused_transactions_loadpdi,596,4809 -fused_transactions_loadpdi,597,4808 -fused_transactions_loadpdi,598,4800 -fused_transactions_loadpdi,599,4809 -fused_transactions_loadpdi,600,4803 -fused_transactions_loadpdi,601,4810 -fused_transactions_loadpdi,602,4813 -fused_transactions_loadpdi,603,4808 -fused_transactions_loadpdi,604,4810 -fused_transactions_loadpdi,605,4804 -fused_transactions_loadpdi,606,4805 -fused_transactions_loadpdi,607,4801 -fused_transactions_loadpdi,608,4814 -fused_transactions_loadpdi,609,4810 -fused_transactions_loadpdi,610,4820 -fused_transactions_loadpdi,611,4823 -fused_transactions_loadpdi,612,4815 -fused_transactions_loadpdi,613,4812 -fused_transactions_loadpdi,614,4815 -fused_transactions_loadpdi,615,4818 -fused_transactions_loadpdi,616,4813 -fused_transactions_loadpdi,617,4819 -fused_transactions_loadpdi,618,4811 -fused_transactions_loadpdi,619,4815 -fused_transactions_loadpdi,620,4819 -fused_transactions_loadpdi,621,4812 -fused_transactions_loadpdi,622,4819 -fused_transactions_loadpdi,623,4816 -fused_transactions_loadpdi,624,4814 -fused_transactions_loadpdi,625,4810 -fused_transactions_loadpdi,626,4812 -fused_transactions_loadpdi,627,4817 -fused_transactions_loadpdi,628,4818 -fused_transactions_loadpdi,629,4813 -fused_transactions_loadpdi,630,4811 -fused_transactions_loadpdi,631,4822 -fused_transactions_loadpdi,632,4832 -fused_transactions_loadpdi,633,4821 -fused_transactions_loadpdi,634,4815 -fused_transactions_loadpdi,635,4817 -fused_transactions_loadpdi,636,4818 -fused_transactions_loadpdi,637,4813 -fused_transactions_loadpdi,638,4816 -fused_transactions_loadpdi,639,4810 -fused_transactions_loadpdi,640,4811 -fused_transactions_loadpdi,641,4818 -fused_transactions_loadpdi,642,4813 -fused_transactions_loadpdi,643,4816 -fused_transactions_loadpdi,644,4817 -fused_transactions_loadpdi,645,4809 -fused_transactions_loadpdi,646,4814 -fused_transactions_loadpdi,647,4821 -fused_transactions_loadpdi,648,4814 -fused_transactions_loadpdi,649,4814 -fused_transactions_loadpdi,650,4818 -fused_transactions_loadpdi,651,4820 -fused_transactions_loadpdi,652,4816 -fused_transactions_loadpdi,653,4817 -fused_transactions_loadpdi,654,4813 -fused_transactions_loadpdi,655,4814 -fused_transactions_loadpdi,656,4813 -fused_transactions_loadpdi,657,4815 -fused_transactions_loadpdi,658,4817 -fused_transactions_loadpdi,659,4816 -fused_transactions_loadpdi,660,4818 -fused_transactions_loadpdi,661,4822 -fused_transactions_loadpdi,662,4814 -fused_transactions_loadpdi,663,4813 -fused_transactions_loadpdi,664,4819 -fused_transactions_loadpdi,665,4823 -fused_transactions_loadpdi,666,4818 -fused_transactions_loadpdi,667,4815 -fused_transactions_loadpdi,668,4812 -fused_transactions_loadpdi,669,4829 -fused_transactions_loadpdi,670,4815 -fused_transactions_loadpdi,671,4814 -fused_transactions_loadpdi,672,4817 -fused_transactions_loadpdi,673,4821 -fused_transactions_loadpdi,674,4813 -fused_transactions_loadpdi,675,4824 -fused_transactions_loadpdi,676,4818 -fused_transactions_loadpdi,677,4816 -fused_transactions_loadpdi,678,4816 -fused_transactions_loadpdi,679,4819 -fused_transactions_loadpdi,680,4821 -fused_transactions_loadpdi,681,4815 -fused_transactions_loadpdi,682,4816 -fused_transactions_loadpdi,683,4819 -fused_transactions_loadpdi,684,4811 -fused_transactions_loadpdi,685,4801 -fused_transactions_loadpdi,686,4820 -fused_transactions_loadpdi,687,4814 -fused_transactions_loadpdi,688,4815 -fused_transactions_loadpdi,689,4812 -fused_transactions_loadpdi,690,4814 -fused_transactions_loadpdi,691,4815 -fused_transactions_loadpdi,692,4813 -fused_transactions_loadpdi,693,4818 -fused_transactions_loadpdi,694,4812 -fused_transactions_loadpdi,695,4822 -fused_transactions_loadpdi,696,4821 -fused_transactions_loadpdi,697,4811 -fused_transactions_loadpdi,698,4811 -fused_transactions_loadpdi,699,4823 -fused_transactions_loadpdi,700,4813 -fused_transactions_loadpdi,701,4814 -fused_transactions_loadpdi,702,4810 -fused_transactions_loadpdi,703,4816 -fused_transactions_loadpdi,704,4815 -fused_transactions_loadpdi,705,4813 -fused_transactions_loadpdi,706,4818 -fused_transactions_loadpdi,707,4812 -fused_transactions_loadpdi,708,4823 -fused_transactions_loadpdi,709,4811 -fused_transactions_loadpdi,710,4809 -fused_transactions_loadpdi,711,4817 -fused_transactions_loadpdi,712,4819 -fused_transactions_loadpdi,713,4815 -fused_transactions_loadpdi,714,4816 -fused_transactions_loadpdi,715,4818 -fused_transactions_loadpdi,716,4815 -fused_transactions_loadpdi,717,4820 -fused_transactions_loadpdi,718,4811 -fused_transactions_loadpdi,719,4821 -fused_transactions_loadpdi,720,4813 -fused_transactions_loadpdi,721,4812 -fused_transactions_loadpdi,722,4816 -fused_transactions_loadpdi,723,4814 -fused_transactions_loadpdi,724,4811 -fused_transactions_loadpdi,725,4818 +fused_transactions_loadpdi,589,4825 +fused_transactions_loadpdi,590,4828 +fused_transactions_loadpdi,591,4827 +fused_transactions_loadpdi,592,4831 +fused_transactions_loadpdi,593,4832 +fused_transactions_loadpdi,594,4832 +fused_transactions_loadpdi,595,4830 +fused_transactions_loadpdi,596,4829 +fused_transactions_loadpdi,597,4825 +fused_transactions_loadpdi,598,4828 +fused_transactions_loadpdi,599,4825 +fused_transactions_loadpdi,600,4830 +fused_transactions_loadpdi,601,4833 +fused_transactions_loadpdi,602,4829 +fused_transactions_loadpdi,603,4824 +fused_transactions_loadpdi,604,4826 +fused_transactions_loadpdi,605,4825 +fused_transactions_loadpdi,606,4827 +fused_transactions_loadpdi,607,4827 +fused_transactions_loadpdi,608,4832 +fused_transactions_loadpdi,609,4821 +fused_transactions_loadpdi,610,4831 +fused_transactions_loadpdi,611,4831 +fused_transactions_loadpdi,612,4831 +fused_transactions_loadpdi,613,4828 +fused_transactions_loadpdi,614,4821 +fused_transactions_loadpdi,615,4826 +fused_transactions_loadpdi,616,4827 +fused_transactions_loadpdi,617,4828 +fused_transactions_loadpdi,618,4833 +fused_transactions_loadpdi,619,4830 +fused_transactions_loadpdi,620,4824 +fused_transactions_loadpdi,621,4830 +fused_transactions_loadpdi,622,4824 +fused_transactions_loadpdi,623,4827 +fused_transactions_loadpdi,624,4830 +fused_transactions_loadpdi,625,4828 +fused_transactions_loadpdi,626,4826 +fused_transactions_loadpdi,627,4824 +fused_transactions_loadpdi,628,4826 +fused_transactions_loadpdi,629,4828 +fused_transactions_loadpdi,630,4832 +fused_transactions_loadpdi,631,4834 +fused_transactions_loadpdi,632,4822 +fused_transactions_loadpdi,633,4832 +fused_transactions_loadpdi,634,4829 +fused_transactions_loadpdi,635,4828 +fused_transactions_loadpdi,636,4840 +fused_transactions_loadpdi,637,4827 +fused_transactions_loadpdi,638,4831 +fused_transactions_loadpdi,639,4831 +fused_transactions_loadpdi,640,4828 +fused_transactions_loadpdi,641,4827 +fused_transactions_loadpdi,642,4827 +fused_transactions_loadpdi,643,4824 +fused_transactions_loadpdi,644,4831 +fused_transactions_loadpdi,645,4826 +fused_transactions_loadpdi,646,4826 +fused_transactions_loadpdi,647,4826 +fused_transactions_loadpdi,648,4826 +fused_transactions_loadpdi,649,4830 +fused_transactions_loadpdi,650,4824 +fused_transactions_loadpdi,651,4826 +fused_transactions_loadpdi,652,4830 +fused_transactions_loadpdi,653,4826 +fused_transactions_loadpdi,654,4836 +fused_transactions_loadpdi,655,4831 +fused_transactions_loadpdi,656,4835 +fused_transactions_loadpdi,657,4826 +fused_transactions_loadpdi,658,4832 +fused_transactions_loadpdi,659,4819 +fused_transactions_loadpdi,660,4825 +fused_transactions_loadpdi,661,4830 +fused_transactions_loadpdi,662,4829 +fused_transactions_loadpdi,663,4826 +fused_transactions_loadpdi,664,4832 +fused_transactions_loadpdi,665,4828 +fused_transactions_loadpdi,666,4824 +fused_transactions_loadpdi,667,4832 +fused_transactions_loadpdi,668,4829 +fused_transactions_loadpdi,669,4822 +fused_transactions_loadpdi,670,4826 +fused_transactions_loadpdi,671,4832 +fused_transactions_loadpdi,672,4826 +fused_transactions_loadpdi,673,4826 +fused_transactions_loadpdi,674,4826 +fused_transactions_loadpdi,675,4828 +fused_transactions_loadpdi,676,4831 +fused_transactions_loadpdi,677,4837 +fused_transactions_loadpdi,678,4826 +fused_transactions_loadpdi,679,4818 +fused_transactions_loadpdi,680,4834 +fused_transactions_loadpdi,681,4825 +fused_transactions_loadpdi,682,4827 +fused_transactions_loadpdi,683,4834 +fused_transactions_loadpdi,684,4827 +fused_transactions_loadpdi,685,4831 +fused_transactions_loadpdi,686,4828 +fused_transactions_loadpdi,687,4825 +fused_transactions_loadpdi,688,4827 +fused_transactions_loadpdi,689,4832 +fused_transactions_loadpdi,690,4824 +fused_transactions_loadpdi,691,4825 +fused_transactions_loadpdi,692,4827 +fused_transactions_loadpdi,693,4832 +fused_transactions_loadpdi,694,4826 +fused_transactions_loadpdi,695,4827 +fused_transactions_loadpdi,696,4827 +fused_transactions_loadpdi,697,4832 +fused_transactions_loadpdi,698,4833 +fused_transactions_loadpdi,699,4833 +fused_transactions_loadpdi,700,4826 +fused_transactions_loadpdi,701,4826 +fused_transactions_loadpdi,702,4835 +fused_transactions_loadpdi,703,4854 +fused_transactions_loadpdi,704,4852 +fused_transactions_loadpdi,705,4823 +fused_transactions_loadpdi,706,4828 +fused_transactions_loadpdi,707,4829 +fused_transactions_loadpdi,708,4824 +fused_transactions_loadpdi,709,4825 +fused_transactions_loadpdi,710,4831 +fused_transactions_loadpdi,711,4830 +fused_transactions_loadpdi,712,4833 +fused_transactions_loadpdi,713,4831 +fused_transactions_loadpdi,714,4829 +fused_transactions_loadpdi,715,4828 +fused_transactions_loadpdi,716,4828 +fused_transactions_loadpdi,717,4828 +fused_transactions_loadpdi,718,4834 +fused_transactions_loadpdi,719,4830 +fused_transactions_loadpdi,720,4834 +fused_transactions_loadpdi,721,4829 +fused_transactions_loadpdi,722,4828 +fused_transactions_loadpdi,723,4829 +fused_transactions_loadpdi,724,4824 +fused_transactions_loadpdi,725,4830 fused_transactions_loadpdi,726,4824 -fused_transactions_loadpdi,727,4819 -fused_transactions_loadpdi,728,4814 -fused_transactions_loadpdi,729,4818 -fused_transactions_loadpdi,730,4817 -fused_transactions_loadpdi,731,4821 -fused_transactions_loadpdi,732,4811 -fused_transactions_loadpdi,733,4815 -fused_transactions_loadpdi,734,4813 -fused_transactions_loadpdi,735,4817 -fused_transactions_loadpdi,736,4814 -fused_transactions_loadpdi,737,4841 -fused_transactions_loadpdi,738,4826 -fused_transactions_loadpdi,739,4820 -fused_transactions_loadpdi,740,4828 -fused_transactions_loadpdi,741,4816 -fused_transactions_loadpdi,742,4815 -fused_transactions_loadpdi,743,4814 -fused_transactions_loadpdi,744,4809 -fused_transactions_loadpdi,745,4822 -fused_transactions_loadpdi,746,4823 -fused_transactions_loadpdi,747,4812 -fused_transactions_loadpdi,748,4818 -fused_transactions_loadpdi,749,4817 -fused_transactions_loadpdi,750,4814 -fused_transactions_loadpdi,751,4817 -fused_transactions_loadpdi,752,4809 -fused_transactions_loadpdi,753,4808 -fused_transactions_loadpdi,754,4822 -fused_transactions_loadpdi,755,4818 -fused_transactions_loadpdi,756,4812 -fused_transactions_loadpdi,757,4812 -fused_transactions_loadpdi,758,4808 -fused_transactions_loadpdi,759,4819 -fused_transactions_loadpdi,760,4812 -fused_transactions_loadpdi,761,4818 -fused_transactions_loadpdi,762,4817 -fused_transactions_loadpdi,763,4816 -fused_transactions_loadpdi,764,4815 -fused_transactions_loadpdi,765,4809 -fused_transactions_loadpdi,766,4814 -fused_transactions_loadpdi,767,4818 -fused_transactions_loadpdi,768,4818 -fused_transactions_loadpdi,769,4822 -fused_transactions_loadpdi,770,4816 -fused_transactions_loadpdi,771,4812 -fused_transactions_loadpdi,772,4814 -fused_transactions_loadpdi,773,4817 -fused_transactions_loadpdi,774,4817 -fused_transactions_loadpdi,775,4819 -fused_transactions_loadpdi,776,4817 -fused_transactions_loadpdi,777,4813 -fused_transactions_loadpdi,778,4820 -fused_transactions_loadpdi,779,4807 -fused_transactions_loadpdi,780,4819 -fused_transactions_loadpdi,781,4814 -fused_transactions_loadpdi,782,4814 -fused_transactions_loadpdi,783,4811 -fused_transactions_loadpdi,784,4812 -fused_transactions_loadpdi,785,4818 -fused_transactions_loadpdi,786,4824 -fused_transactions_loadpdi,787,4814 -fused_transactions_loadpdi,788,4809 -fused_transactions_loadpdi,789,4816 -fused_transactions_loadpdi,790,4814 -fused_transactions_loadpdi,791,4821 -fused_transactions_loadpdi,792,4819 -fused_transactions_loadpdi,793,4817 -fused_transactions_loadpdi,794,4818 -fused_transactions_loadpdi,795,4816 -fused_transactions_loadpdi,796,4815 -fused_transactions_loadpdi,797,4807 -fused_transactions_loadpdi,798,4818 -fused_transactions_loadpdi,799,4820 -fused_transactions_loadpdi,800,4818 -fused_transactions_loadpdi,801,4811 -fused_transactions_loadpdi,802,4816 -fused_transactions_loadpdi,803,4818 -fused_transactions_loadpdi,804,4811 -fused_transactions_loadpdi,805,4816 -fused_transactions_loadpdi,806,4816 -fused_transactions_loadpdi,807,4814 -fused_transactions_loadpdi,808,4855 -fused_transactions_loadpdi,809,4855 -fused_transactions_loadpdi,810,4869 -fused_transactions_loadpdi,811,4821 -fused_transactions_loadpdi,812,4811 -fused_transactions_loadpdi,813,4814 -fused_transactions_loadpdi,814,4811 -fused_transactions_loadpdi,815,4813 -fused_transactions_loadpdi,816,4814 -fused_transactions_loadpdi,817,4814 -fused_transactions_loadpdi,818,4809 -fused_transactions_loadpdi,819,4813 -fused_transactions_loadpdi,820,4813 -fused_transactions_loadpdi,821,4814 -fused_transactions_loadpdi,822,4812 -fused_transactions_loadpdi,823,4812 -fused_transactions_loadpdi,824,4811 -fused_transactions_loadpdi,825,4817 -fused_transactions_loadpdi,826,4813 -fused_transactions_loadpdi,827,4820 -fused_transactions_loadpdi,828,4814 -fused_transactions_loadpdi,829,4814 -fused_transactions_loadpdi,830,4814 +fused_transactions_loadpdi,727,4824 +fused_transactions_loadpdi,728,4830 +fused_transactions_loadpdi,729,4826 +fused_transactions_loadpdi,730,4833 +fused_transactions_loadpdi,731,4825 +fused_transactions_loadpdi,732,4827 +fused_transactions_loadpdi,733,4824 +fused_transactions_loadpdi,734,4830 +fused_transactions_loadpdi,735,4829 +fused_transactions_loadpdi,736,4826 +fused_transactions_loadpdi,737,4834 +fused_transactions_loadpdi,738,4828 +fused_transactions_loadpdi,739,4831 +fused_transactions_loadpdi,740,4827 +fused_transactions_loadpdi,741,4827 +fused_transactions_loadpdi,742,4829 +fused_transactions_loadpdi,743,4835 +fused_transactions_loadpdi,744,4828 +fused_transactions_loadpdi,745,4821 +fused_transactions_loadpdi,746,4832 +fused_transactions_loadpdi,747,4821 +fused_transactions_loadpdi,748,4831 +fused_transactions_loadpdi,749,4832 +fused_transactions_loadpdi,750,4825 +fused_transactions_loadpdi,751,4828 +fused_transactions_loadpdi,752,4833 +fused_transactions_loadpdi,753,4839 +fused_transactions_loadpdi,754,4834 +fused_transactions_loadpdi,755,4829 +fused_transactions_loadpdi,756,4829 +fused_transactions_loadpdi,757,4826 +fused_transactions_loadpdi,758,4837 +fused_transactions_loadpdi,759,4827 +fused_transactions_loadpdi,760,4836 +fused_transactions_loadpdi,761,4828 +fused_transactions_loadpdi,762,4828 +fused_transactions_loadpdi,763,4830 +fused_transactions_loadpdi,764,4825 +fused_transactions_loadpdi,765,4827 +fused_transactions_loadpdi,766,4847 +fused_transactions_loadpdi,767,4834 +fused_transactions_loadpdi,768,4824 +fused_transactions_loadpdi,769,4834 +fused_transactions_loadpdi,770,4833 +fused_transactions_loadpdi,771,4838 +fused_transactions_loadpdi,772,4832 +fused_transactions_loadpdi,773,4844 +fused_transactions_loadpdi,774,4832 +fused_transactions_loadpdi,775,4833 +fused_transactions_loadpdi,776,4836 +fused_transactions_loadpdi,777,4831 +fused_transactions_loadpdi,778,4824 +fused_transactions_loadpdi,779,4824 +fused_transactions_loadpdi,780,4831 +fused_transactions_loadpdi,781,4832 +fused_transactions_loadpdi,782,4826 +fused_transactions_loadpdi,783,4827 +fused_transactions_loadpdi,784,4831 +fused_transactions_loadpdi,785,4823 +fused_transactions_loadpdi,786,4827 +fused_transactions_loadpdi,787,4835 +fused_transactions_loadpdi,788,4832 +fused_transactions_loadpdi,789,4827 +fused_transactions_loadpdi,790,4833 +fused_transactions_loadpdi,791,4835 +fused_transactions_loadpdi,792,4829 +fused_transactions_loadpdi,793,4826 +fused_transactions_loadpdi,794,4825 +fused_transactions_loadpdi,795,4830 +fused_transactions_loadpdi,796,4833 +fused_transactions_loadpdi,797,4829 +fused_transactions_loadpdi,798,4823 +fused_transactions_loadpdi,799,4835 +fused_transactions_loadpdi,800,4827 +fused_transactions_loadpdi,801,4844 +fused_transactions_loadpdi,802,4827 +fused_transactions_loadpdi,803,4831 +fused_transactions_loadpdi,804,4833 +fused_transactions_loadpdi,805,4830 +fused_transactions_loadpdi,806,4826 +fused_transactions_loadpdi,807,4825 +fused_transactions_loadpdi,808,4852 +fused_transactions_loadpdi,809,4869 +fused_transactions_loadpdi,810,4836 +fused_transactions_loadpdi,811,4826 +fused_transactions_loadpdi,812,4826 +fused_transactions_loadpdi,813,4825 +fused_transactions_loadpdi,814,4828 +fused_transactions_loadpdi,815,4830 +fused_transactions_loadpdi,816,4830 +fused_transactions_loadpdi,817,4831 +fused_transactions_loadpdi,818,4824 +fused_transactions_loadpdi,819,4831 +fused_transactions_loadpdi,820,4827 +fused_transactions_loadpdi,821,4826 +fused_transactions_loadpdi,822,4834 +fused_transactions_loadpdi,823,4829 +fused_transactions_loadpdi,824,4830 +fused_transactions_loadpdi,825,4825 +fused_transactions_loadpdi,826,4827 +fused_transactions_loadpdi,827,4829 +fused_transactions_loadpdi,828,4828 +fused_transactions_loadpdi,829,4829 +fused_transactions_loadpdi,830,4823 fused_transactions_loadpdi,831,4828 -fused_transactions_loadpdi,832,4818 -fused_transactions_loadpdi,833,4822 -fused_transactions_loadpdi,834,4823 -fused_transactions_loadpdi,835,4809 -fused_transactions_loadpdi,836,4809 -fused_transactions_loadpdi,837,4807 -fused_transactions_loadpdi,838,4821 -fused_transactions_loadpdi,839,4815 -fused_transactions_loadpdi,840,4810 -fused_transactions_loadpdi,841,4825 -fused_transactions_loadpdi,842,4828 -fused_transactions_loadpdi,843,4827 -fused_transactions_loadpdi,844,4834 -fused_transactions_loadpdi,845,4830 -fused_transactions_loadpdi,846,4823 -fused_transactions_loadpdi,847,4824 -fused_transactions_loadpdi,848,4819 -fused_transactions_loadpdi,849,4822 -fused_transactions_loadpdi,850,4825 -fused_transactions_loadpdi,851,4828 -fused_transactions_loadpdi,852,4833 -fused_transactions_loadpdi,853,4835 -fused_transactions_loadpdi,854,4831 -fused_transactions_loadpdi,855,4835 -fused_transactions_loadpdi,856,4825 -fused_transactions_loadpdi,857,4829 -fused_transactions_loadpdi,858,4825 -fused_transactions_loadpdi,859,4827 -fused_transactions_loadpdi,860,4822 -fused_transactions_loadpdi,861,4827 -fused_transactions_loadpdi,862,4825 -fused_transactions_loadpdi,863,4823 -fused_transactions_loadpdi,864,4825 -fused_transactions_loadpdi,865,4822 -fused_transactions_loadpdi,866,4830 +fused_transactions_loadpdi,832,4823 +fused_transactions_loadpdi,833,4826 +fused_transactions_loadpdi,834,4824 +fused_transactions_loadpdi,835,4827 +fused_transactions_loadpdi,836,4829 +fused_transactions_loadpdi,837,4834 +fused_transactions_loadpdi,838,4828 +fused_transactions_loadpdi,839,4830 +fused_transactions_loadpdi,840,4826 +fused_transactions_loadpdi,841,4827 +fused_transactions_loadpdi,842,4824 +fused_transactions_loadpdi,843,4838 +fused_transactions_loadpdi,844,4839 +fused_transactions_loadpdi,845,4828 +fused_transactions_loadpdi,846,4834 +fused_transactions_loadpdi,847,4831 +fused_transactions_loadpdi,848,4826 +fused_transactions_loadpdi,849,4834 +fused_transactions_loadpdi,850,4828 +fused_transactions_loadpdi,851,4827 +fused_transactions_loadpdi,852,4829 +fused_transactions_loadpdi,853,4824 +fused_transactions_loadpdi,854,4821 +fused_transactions_loadpdi,855,4829 +fused_transactions_loadpdi,856,4836 +fused_transactions_loadpdi,857,4827 +fused_transactions_loadpdi,858,4827 +fused_transactions_loadpdi,859,4824 +fused_transactions_loadpdi,860,4825 +fused_transactions_loadpdi,861,4832 +fused_transactions_loadpdi,862,4830 +fused_transactions_loadpdi,863,4830 +fused_transactions_loadpdi,864,4828 +fused_transactions_loadpdi,865,4828 +fused_transactions_loadpdi,866,4829 fused_transactions_loadpdi,867,4828 -fused_transactions_loadpdi,868,4824 -fused_transactions_loadpdi,869,4834 -fused_transactions_loadpdi,870,4830 -fused_transactions_loadpdi,871,4818 -fused_transactions_loadpdi,872,4825 +fused_transactions_loadpdi,868,4832 +fused_transactions_loadpdi,869,4824 +fused_transactions_loadpdi,870,4827 +fused_transactions_loadpdi,871,4835 +fused_transactions_loadpdi,872,4835 fused_transactions_loadpdi,873,4825 -fused_transactions_loadpdi,874,4828 -fused_transactions_loadpdi,875,4827 -fused_transactions_loadpdi,876,4823 -fused_transactions_loadpdi,877,4839 -fused_transactions_loadpdi,878,4821 -fused_transactions_loadpdi,879,4826 -fused_transactions_loadpdi,880,4820 -fused_transactions_loadpdi,881,4824 -fused_transactions_loadpdi,882,4825 -fused_transactions_loadpdi,883,4819 -fused_transactions_loadpdi,884,4825 -fused_transactions_loadpdi,885,4824 -fused_transactions_loadpdi,886,4824 -fused_transactions_loadpdi,887,4824 -fused_transactions_loadpdi,888,4821 -fused_transactions_loadpdi,889,4822 -fused_transactions_loadpdi,890,4822 -fused_transactions_loadpdi,891,4814 -fused_transactions_loadpdi,892,4829 -fused_transactions_loadpdi,893,4834 -fused_transactions_loadpdi,894,4828 -fused_transactions_loadpdi,895,4825 -fused_transactions_loadpdi,896,4828 -fused_transactions_loadpdi,897,4829 -fused_transactions_loadpdi,898,4825 -fused_transactions_loadpdi,899,4826 -fused_transactions_loadpdi,900,4822 -fused_transactions_loadpdi,901,4826 -fused_transactions_loadpdi,902,4818 -fused_transactions_loadpdi,903,4820 -fused_transactions_loadpdi,904,4827 -fused_transactions_loadpdi,905,4820 -fused_transactions_loadpdi,906,4825 -fused_transactions_loadpdi,907,4832 -fused_transactions_loadpdi,908,4826 -fused_transactions_loadpdi,909,4823 -fused_transactions_loadpdi,910,4819 -fused_transactions_loadpdi,911,4825 -fused_transactions_loadpdi,912,4829 -fused_transactions_loadpdi,913,4816 -fused_transactions_loadpdi,914,4829 -fused_transactions_loadpdi,915,4824 -fused_transactions_loadpdi,916,4824 -fused_transactions_loadpdi,917,4822 -fused_transactions_loadpdi,918,4826 -fused_transactions_loadpdi,919,4825 -fused_transactions_loadpdi,920,4822 -fused_transactions_loadpdi,921,4826 -fused_transactions_loadpdi,922,4820 -fused_transactions_loadpdi,923,4829 -fused_transactions_loadpdi,924,4833 -fused_transactions_loadpdi,925,4825 -fused_transactions_loadpdi,926,4820 -fused_transactions_loadpdi,927,4828 -fused_transactions_loadpdi,928,4832 -fused_transactions_loadpdi,929,4825 -fused_transactions_loadpdi,930,4822 -fused_transactions_loadpdi,931,4825 -fused_transactions_loadpdi,932,4823 -fused_transactions_loadpdi,933,4830 -fused_transactions_loadpdi,934,4822 -fused_transactions_loadpdi,935,4832 -fused_transactions_loadpdi,936,4821 -fused_transactions_loadpdi,937,4830 +fused_transactions_loadpdi,874,4829 +fused_transactions_loadpdi,875,4830 +fused_transactions_loadpdi,876,4826 +fused_transactions_loadpdi,877,4829 +fused_transactions_loadpdi,878,4827 +fused_transactions_loadpdi,879,4830 +fused_transactions_loadpdi,880,4825 +fused_transactions_loadpdi,881,4827 +fused_transactions_loadpdi,882,4834 +fused_transactions_loadpdi,883,4834 +fused_transactions_loadpdi,884,4839 +fused_transactions_loadpdi,885,4830 +fused_transactions_loadpdi,886,4831 +fused_transactions_loadpdi,887,4828 +fused_transactions_loadpdi,888,4827 +fused_transactions_loadpdi,889,4831 +fused_transactions_loadpdi,890,4839 +fused_transactions_loadpdi,891,4832 +fused_transactions_loadpdi,892,4837 +fused_transactions_loadpdi,893,4831 +fused_transactions_loadpdi,894,4833 +fused_transactions_loadpdi,895,4841 +fused_transactions_loadpdi,896,4837 +fused_transactions_loadpdi,897,4833 +fused_transactions_loadpdi,898,4839 +fused_transactions_loadpdi,899,4836 +fused_transactions_loadpdi,900,4846 +fused_transactions_loadpdi,901,4835 +fused_transactions_loadpdi,902,4807 +fused_transactions_loadpdi,903,4810 +fused_transactions_loadpdi,904,4816 +fused_transactions_loadpdi,905,4841 +fused_transactions_loadpdi,906,4841 +fused_transactions_loadpdi,907,4839 +fused_transactions_loadpdi,908,4833 +fused_transactions_loadpdi,909,4829 +fused_transactions_loadpdi,910,4832 +fused_transactions_loadpdi,911,4831 +fused_transactions_loadpdi,912,4858 +fused_transactions_loadpdi,913,4873 +fused_transactions_loadpdi,914,4872 +fused_transactions_loadpdi,915,4833 +fused_transactions_loadpdi,916,4836 +fused_transactions_loadpdi,917,4831 +fused_transactions_loadpdi,918,4832 +fused_transactions_loadpdi,919,4827 +fused_transactions_loadpdi,920,4835 +fused_transactions_loadpdi,921,4829 +fused_transactions_loadpdi,922,4829 +fused_transactions_loadpdi,923,4834 +fused_transactions_loadpdi,924,4825 +fused_transactions_loadpdi,925,4835 +fused_transactions_loadpdi,926,4828 +fused_transactions_loadpdi,927,4824 +fused_transactions_loadpdi,928,4824 +fused_transactions_loadpdi,929,4824 +fused_transactions_loadpdi,930,4831 +fused_transactions_loadpdi,931,4833 +fused_transactions_loadpdi,932,4833 +fused_transactions_loadpdi,933,4831 +fused_transactions_loadpdi,934,4832 +fused_transactions_loadpdi,935,4827 +fused_transactions_loadpdi,936,4823 +fused_transactions_loadpdi,937,4826 fused_transactions_loadpdi,938,4833 -fused_transactions_loadpdi,939,4826 +fused_transactions_loadpdi,939,4832 fused_transactions_loadpdi,940,4824 -fused_transactions_loadpdi,941,4824 -fused_transactions_loadpdi,942,4830 +fused_transactions_loadpdi,941,4836 +fused_transactions_loadpdi,942,4833 fused_transactions_loadpdi,943,4827 -fused_transactions_loadpdi,944,4841 -fused_transactions_loadpdi,945,4844 -fused_transactions_loadpdi,946,4821 -fused_transactions_loadpdi,947,4830 -fused_transactions_loadpdi,948,4824 -fused_transactions_loadpdi,949,4824 -fused_transactions_loadpdi,950,4828 -fused_transactions_loadpdi,951,4828 +fused_transactions_loadpdi,944,4829 +fused_transactions_loadpdi,945,4832 +fused_transactions_loadpdi,946,4834 +fused_transactions_loadpdi,947,4831 +fused_transactions_loadpdi,948,4852 +fused_transactions_loadpdi,949,4844 +fused_transactions_loadpdi,950,4835 +fused_transactions_loadpdi,951,4830 fused_transactions_loadpdi,952,4826 -fused_transactions_loadpdi,953,4822 -fused_transactions_loadpdi,954,4822 -fused_transactions_loadpdi,955,4829 -fused_transactions_loadpdi,956,4823 -fused_transactions_loadpdi,957,4826 -fused_transactions_loadpdi,958,4836 -fused_transactions_loadpdi,959,4825 -fused_transactions_loadpdi,960,4821 -fused_transactions_loadpdi,961,4821 -fused_transactions_loadpdi,962,4821 -fused_transactions_loadpdi,963,4818 -fused_transactions_loadpdi,964,4827 -fused_transactions_loadpdi,965,4829 -fused_transactions_loadpdi,966,4824 -fused_transactions_loadpdi,967,4822 -fused_transactions_loadpdi,968,4825 -fused_transactions_loadpdi,969,4821 -fused_transactions_loadpdi,970,4826 -fused_transactions_loadpdi,971,4827 -fused_transactions_loadpdi,972,4820 -fused_transactions_loadpdi,973,4822 -fused_transactions_loadpdi,974,4825 -fused_transactions_loadpdi,975,4832 -fused_transactions_loadpdi,976,4825 -fused_transactions_loadpdi,977,4827 -fused_transactions_loadpdi,978,4829 -fused_transactions_loadpdi,979,4832 -fused_transactions_loadpdi,980,4824 -fused_transactions_loadpdi,981,4823 -fused_transactions_loadpdi,982,4822 -fused_transactions_loadpdi,983,4824 -fused_transactions_loadpdi,984,4829 -fused_transactions_loadpdi,985,4825 -fused_transactions_loadpdi,986,4821 -fused_transactions_loadpdi,987,4834 -fused_transactions_loadpdi,988,4810 -fused_transactions_loadpdi,989,4816 -fused_transactions_loadpdi,990,4810 -fused_transactions_loadpdi,991,4812 -fused_transactions_loadpdi,992,4816 -fused_transactions_loadpdi,993,4808 -fused_transactions_loadpdi,994,4809 -fused_transactions_loadpdi,995,4810 -fused_transactions_loadpdi,996,4812 -fused_transactions_loadpdi,997,4819 -fused_transactions_loadpdi,998,4811 -fused_transactions_loadpdi,999,4815 -fused_transactions_write32s,0,2325 -fused_transactions_write32s,1,2305 -fused_transactions_write32s,2,2295 -fused_transactions_write32s,3,2299 -fused_transactions_write32s,4,2297 -fused_transactions_write32s,5,2300 -fused_transactions_write32s,6,2300 -fused_transactions_write32s,7,2305 -fused_transactions_write32s,8,2304 -fused_transactions_write32s,9,2302 -fused_transactions_write32s,10,2295 -fused_transactions_write32s,11,2296 -fused_transactions_write32s,12,2293 -fused_transactions_write32s,13,2293 -fused_transactions_write32s,14,2304 -fused_transactions_write32s,15,2290 -fused_transactions_write32s,16,2302 -fused_transactions_write32s,17,2298 -fused_transactions_write32s,18,2298 -fused_transactions_write32s,19,2297 -fused_transactions_write32s,20,2298 -fused_transactions_write32s,21,2293 -fused_transactions_write32s,22,2293 -fused_transactions_write32s,23,2292 -fused_transactions_write32s,24,2298 -fused_transactions_write32s,25,2297 -fused_transactions_write32s,26,2303 -fused_transactions_write32s,27,2300 -fused_transactions_write32s,28,2301 -fused_transactions_write32s,29,2295 -fused_transactions_write32s,30,2296 -fused_transactions_write32s,31,2295 -fused_transactions_write32s,32,2294 -fused_transactions_write32s,33,2297 -fused_transactions_write32s,34,2294 -fused_transactions_write32s,35,2307 -fused_transactions_write32s,36,2293 -fused_transactions_write32s,37,2295 -fused_transactions_write32s,38,2301 -fused_transactions_write32s,39,2295 -fused_transactions_write32s,40,2293 -fused_transactions_write32s,41,2293 -fused_transactions_write32s,42,2294 -fused_transactions_write32s,43,2298 -fused_transactions_write32s,44,2296 -fused_transactions_write32s,45,2294 -fused_transactions_write32s,46,2296 -fused_transactions_write32s,47,2293 -fused_transactions_write32s,48,2297 -fused_transactions_write32s,49,2286 -fused_transactions_write32s,50,2292 -fused_transactions_write32s,51,2301 -fused_transactions_write32s,52,2302 -fused_transactions_write32s,53,2296 -fused_transactions_write32s,54,2298 -fused_transactions_write32s,55,2299 -fused_transactions_write32s,56,2293 -fused_transactions_write32s,57,2297 -fused_transactions_write32s,58,2294 -fused_transactions_write32s,59,2292 -fused_transactions_write32s,60,2294 -fused_transactions_write32s,61,2293 -fused_transactions_write32s,62,2296 -fused_transactions_write32s,63,2293 -fused_transactions_write32s,64,2294 -fused_transactions_write32s,65,2294 -fused_transactions_write32s,66,2293 -fused_transactions_write32s,67,2297 -fused_transactions_write32s,68,2301 -fused_transactions_write32s,69,2298 -fused_transactions_write32s,70,2295 -fused_transactions_write32s,71,2297 -fused_transactions_write32s,72,2295 -fused_transactions_write32s,73,2296 -fused_transactions_write32s,74,2293 -fused_transactions_write32s,75,2297 -fused_transactions_write32s,76,2298 -fused_transactions_write32s,77,2296 -fused_transactions_write32s,78,2297 -fused_transactions_write32s,79,2297 -fused_transactions_write32s,80,2297 -fused_transactions_write32s,81,2297 -fused_transactions_write32s,82,2297 -fused_transactions_write32s,83,2297 -fused_transactions_write32s,84,2296 -fused_transactions_write32s,85,2293 -fused_transactions_write32s,86,2298 -fused_transactions_write32s,87,2296 -fused_transactions_write32s,88,2301 -fused_transactions_write32s,89,2295 -fused_transactions_write32s,90,2300 -fused_transactions_write32s,91,2298 -fused_transactions_write32s,92,2296 -fused_transactions_write32s,93,2297 -fused_transactions_write32s,94,2301 -fused_transactions_write32s,95,2302 -fused_transactions_write32s,96,2300 -fused_transactions_write32s,97,2299 -fused_transactions_write32s,98,2302 -fused_transactions_write32s,99,2300 -fused_transactions_write32s,100,2297 -fused_transactions_write32s,101,2298 -fused_transactions_write32s,102,2296 -fused_transactions_write32s,103,2292 -fused_transactions_write32s,104,2295 -fused_transactions_write32s,105,2292 -fused_transactions_write32s,106,2293 -fused_transactions_write32s,107,2297 -fused_transactions_write32s,108,2293 -fused_transactions_write32s,109,2297 -fused_transactions_write32s,110,2293 -fused_transactions_write32s,111,2296 -fused_transactions_write32s,112,2296 -fused_transactions_write32s,113,2297 -fused_transactions_write32s,114,2296 -fused_transactions_write32s,115,2294 -fused_transactions_write32s,116,2293 -fused_transactions_write32s,117,2294 -fused_transactions_write32s,118,2297 -fused_transactions_write32s,119,2296 -fused_transactions_write32s,120,2297 -fused_transactions_write32s,121,2295 -fused_transactions_write32s,122,2298 -fused_transactions_write32s,123,2296 -fused_transactions_write32s,124,2294 -fused_transactions_write32s,125,2297 -fused_transactions_write32s,126,2296 -fused_transactions_write32s,127,2298 -fused_transactions_write32s,128,2297 -fused_transactions_write32s,129,2298 -fused_transactions_write32s,130,2293 -fused_transactions_write32s,131,2295 -fused_transactions_write32s,132,2300 -fused_transactions_write32s,133,2301 -fused_transactions_write32s,134,2296 -fused_transactions_write32s,135,2295 -fused_transactions_write32s,136,2298 -fused_transactions_write32s,137,2293 -fused_transactions_write32s,138,2301 -fused_transactions_write32s,139,2294 -fused_transactions_write32s,140,2296 -fused_transactions_write32s,141,2299 -fused_transactions_write32s,142,2295 -fused_transactions_write32s,143,2299 -fused_transactions_write32s,144,2296 -fused_transactions_write32s,145,2293 -fused_transactions_write32s,146,2293 -fused_transactions_write32s,147,2293 -fused_transactions_write32s,148,2298 -fused_transactions_write32s,149,2293 -fused_transactions_write32s,150,2296 -fused_transactions_write32s,151,2294 -fused_transactions_write32s,152,2294 -fused_transactions_write32s,153,2297 -fused_transactions_write32s,154,2293 -fused_transactions_write32s,155,2296 -fused_transactions_write32s,156,2296 -fused_transactions_write32s,157,2294 -fused_transactions_write32s,158,2294 -fused_transactions_write32s,159,2300 -fused_transactions_write32s,160,2296 -fused_transactions_write32s,161,2294 -fused_transactions_write32s,162,2295 -fused_transactions_write32s,163,2294 -fused_transactions_write32s,164,2292 -fused_transactions_write32s,165,2297 -fused_transactions_write32s,166,2293 -fused_transactions_write32s,167,2296 -fused_transactions_write32s,168,2294 -fused_transactions_write32s,169,2297 -fused_transactions_write32s,170,2295 -fused_transactions_write32s,171,2296 -fused_transactions_write32s,172,2305 -fused_transactions_write32s,173,2296 -fused_transactions_write32s,174,2298 -fused_transactions_write32s,175,2296 -fused_transactions_write32s,176,2293 -fused_transactions_write32s,177,2298 -fused_transactions_write32s,178,2295 -fused_transactions_write32s,179,2300 -fused_transactions_write32s,180,2298 -fused_transactions_write32s,181,2298 -fused_transactions_write32s,182,2300 -fused_transactions_write32s,183,2299 -fused_transactions_write32s,184,2294 -fused_transactions_write32s,185,2294 -fused_transactions_write32s,186,2304 -fused_transactions_write32s,187,2293 -fused_transactions_write32s,188,2299 -fused_transactions_write32s,189,2294 -fused_transactions_write32s,190,2294 -fused_transactions_write32s,191,2298 -fused_transactions_write32s,192,2295 -fused_transactions_write32s,193,2297 -fused_transactions_write32s,194,2293 -fused_transactions_write32s,195,2296 -fused_transactions_write32s,196,2294 -fused_transactions_write32s,197,2296 -fused_transactions_write32s,198,2296 -fused_transactions_write32s,199,2294 -fused_transactions_write32s,200,2296 -fused_transactions_write32s,201,2297 -fused_transactions_write32s,202,2297 -fused_transactions_write32s,203,2293 -fused_transactions_write32s,204,2298 -fused_transactions_write32s,205,2300 -fused_transactions_write32s,206,2291 -fused_transactions_write32s,207,2294 -fused_transactions_write32s,208,2292 -fused_transactions_write32s,209,2307 -fused_transactions_write32s,210,2296 -fused_transactions_write32s,211,2296 -fused_transactions_write32s,212,2294 -fused_transactions_write32s,213,2298 -fused_transactions_write32s,214,2292 -fused_transactions_write32s,215,2299 -fused_transactions_write32s,216,2298 -fused_transactions_write32s,217,2295 -fused_transactions_write32s,218,2294 -fused_transactions_write32s,219,2294 -fused_transactions_write32s,220,2296 -fused_transactions_write32s,221,2294 -fused_transactions_write32s,222,2296 -fused_transactions_write32s,223,2300 -fused_transactions_write32s,224,2294 -fused_transactions_write32s,225,2296 -fused_transactions_write32s,226,2308 -fused_transactions_write32s,227,2299 -fused_transactions_write32s,228,2297 -fused_transactions_write32s,229,2296 -fused_transactions_write32s,230,2292 -fused_transactions_write32s,231,2297 -fused_transactions_write32s,232,2298 -fused_transactions_write32s,233,2297 -fused_transactions_write32s,234,2296 -fused_transactions_write32s,235,2294 -fused_transactions_write32s,236,2295 -fused_transactions_write32s,237,2298 -fused_transactions_write32s,238,2294 -fused_transactions_write32s,239,2298 -fused_transactions_write32s,240,2295 -fused_transactions_write32s,241,2297 -fused_transactions_write32s,242,2294 -fused_transactions_write32s,243,2298 -fused_transactions_write32s,244,2299 -fused_transactions_write32s,245,2297 -fused_transactions_write32s,246,2301 -fused_transactions_write32s,247,2301 -fused_transactions_write32s,248,2297 -fused_transactions_write32s,249,2293 -fused_transactions_write32s,250,2296 -fused_transactions_write32s,251,2297 -fused_transactions_write32s,252,2297 -fused_transactions_write32s,253,2293 -fused_transactions_write32s,254,2295 -fused_transactions_write32s,255,2293 -fused_transactions_write32s,256,2295 -fused_transactions_write32s,257,2296 -fused_transactions_write32s,258,2295 -fused_transactions_write32s,259,2297 -fused_transactions_write32s,260,2296 -fused_transactions_write32s,261,2295 -fused_transactions_write32s,262,2295 -fused_transactions_write32s,263,2307 -fused_transactions_write32s,264,2293 -fused_transactions_write32s,265,2296 -fused_transactions_write32s,266,2300 -fused_transactions_write32s,267,2295 -fused_transactions_write32s,268,2296 -fused_transactions_write32s,269,2295 -fused_transactions_write32s,270,2293 -fused_transactions_write32s,271,2296 -fused_transactions_write32s,272,2298 -fused_transactions_write32s,273,2297 -fused_transactions_write32s,274,2295 -fused_transactions_write32s,275,2295 -fused_transactions_write32s,276,2296 -fused_transactions_write32s,277,2297 -fused_transactions_write32s,278,2298 -fused_transactions_write32s,279,2295 -fused_transactions_write32s,280,2294 -fused_transactions_write32s,281,2297 -fused_transactions_write32s,282,2294 -fused_transactions_write32s,283,2297 -fused_transactions_write32s,284,2295 -fused_transactions_write32s,285,2294 -fused_transactions_write32s,286,2295 -fused_transactions_write32s,287,2296 -fused_transactions_write32s,288,2295 -fused_transactions_write32s,289,2300 -fused_transactions_write32s,290,2293 -fused_transactions_write32s,291,2294 -fused_transactions_write32s,292,2299 -fused_transactions_write32s,293,2294 -fused_transactions_write32s,294,2295 -fused_transactions_write32s,295,2294 -fused_transactions_write32s,296,2296 -fused_transactions_write32s,297,2295 -fused_transactions_write32s,298,2296 -fused_transactions_write32s,299,2293 -fused_transactions_write32s,300,2301 -fused_transactions_write32s,301,2293 -fused_transactions_write32s,302,2293 -fused_transactions_write32s,303,2297 -fused_transactions_write32s,304,2298 -fused_transactions_write32s,305,2295 -fused_transactions_write32s,306,2298 -fused_transactions_write32s,307,2296 -fused_transactions_write32s,308,2298 -fused_transactions_write32s,309,2296 -fused_transactions_write32s,310,2298 -fused_transactions_write32s,311,2295 -fused_transactions_write32s,312,2299 -fused_transactions_write32s,313,2298 -fused_transactions_write32s,314,2299 -fused_transactions_write32s,315,2293 -fused_transactions_write32s,316,2295 -fused_transactions_write32s,317,2297 -fused_transactions_write32s,318,2297 -fused_transactions_write32s,319,2297 -fused_transactions_write32s,320,2299 -fused_transactions_write32s,321,2294 -fused_transactions_write32s,322,2298 -fused_transactions_write32s,323,2298 -fused_transactions_write32s,324,2295 -fused_transactions_write32s,325,2296 -fused_transactions_write32s,326,2296 -fused_transactions_write32s,327,2301 -fused_transactions_write32s,328,2297 -fused_transactions_write32s,329,2298 -fused_transactions_write32s,330,2299 -fused_transactions_write32s,331,2293 -fused_transactions_write32s,332,2297 -fused_transactions_write32s,333,2300 -fused_transactions_write32s,334,2293 -fused_transactions_write32s,335,2296 -fused_transactions_write32s,336,2297 -fused_transactions_write32s,337,2297 -fused_transactions_write32s,338,2298 -fused_transactions_write32s,339,2294 -fused_transactions_write32s,340,2294 -fused_transactions_write32s,341,2297 -fused_transactions_write32s,342,2301 -fused_transactions_write32s,343,2296 -fused_transactions_write32s,344,2298 -fused_transactions_write32s,345,2295 -fused_transactions_write32s,346,2293 -fused_transactions_write32s,347,2293 -fused_transactions_write32s,348,2298 -fused_transactions_write32s,349,2297 -fused_transactions_write32s,350,2296 -fused_transactions_write32s,351,2297 -fused_transactions_write32s,352,2298 -fused_transactions_write32s,353,2295 -fused_transactions_write32s,354,2296 -fused_transactions_write32s,355,2297 -fused_transactions_write32s,356,2282 -fused_transactions_write32s,357,2279 -fused_transactions_write32s,358,2281 -fused_transactions_write32s,359,2284 -fused_transactions_write32s,360,2284 -fused_transactions_write32s,361,2285 -fused_transactions_write32s,362,2297 -fused_transactions_write32s,363,2294 -fused_transactions_write32s,364,2282 -fused_transactions_write32s,365,2278 -fused_transactions_write32s,366,2282 -fused_transactions_write32s,367,2284 -fused_transactions_write32s,368,2289 -fused_transactions_write32s,369,2286 -fused_transactions_write32s,370,2273 -fused_transactions_write32s,371,2268 -fused_transactions_write32s,372,2269 -fused_transactions_write32s,373,2268 -fused_transactions_write32s,374,2267 -fused_transactions_write32s,375,2272 -fused_transactions_write32s,376,2270 -fused_transactions_write32s,377,2268 -fused_transactions_write32s,378,2268 -fused_transactions_write32s,379,2276 -fused_transactions_write32s,380,2282 -fused_transactions_write32s,381,2282 -fused_transactions_write32s,382,2283 -fused_transactions_write32s,383,2285 -fused_transactions_write32s,384,2294 -fused_transactions_write32s,385,2292 -fused_transactions_write32s,386,2289 -fused_transactions_write32s,387,2292 -fused_transactions_write32s,388,2294 -fused_transactions_write32s,389,2293 -fused_transactions_write32s,390,2290 -fused_transactions_write32s,391,2291 -fused_transactions_write32s,392,2297 -fused_transactions_write32s,393,2294 -fused_transactions_write32s,394,2291 -fused_transactions_write32s,395,2292 -fused_transactions_write32s,396,2291 -fused_transactions_write32s,397,2290 -fused_transactions_write32s,398,2294 -fused_transactions_write32s,399,2296 -fused_transactions_write32s,400,2299 -fused_transactions_write32s,401,2296 -fused_transactions_write32s,402,2290 -fused_transactions_write32s,403,2294 -fused_transactions_write32s,404,2289 -fused_transactions_write32s,405,2292 -fused_transactions_write32s,406,2301 -fused_transactions_write32s,407,2294 -fused_transactions_write32s,408,2294 -fused_transactions_write32s,409,2295 -fused_transactions_write32s,410,2291 -fused_transactions_write32s,411,2290 -fused_transactions_write32s,412,2299 -fused_transactions_write32s,413,2300 -fused_transactions_write32s,414,2291 -fused_transactions_write32s,415,2293 -fused_transactions_write32s,416,2294 -fused_transactions_write32s,417,2297 -fused_transactions_write32s,418,2294 -fused_transactions_write32s,419,2292 -fused_transactions_write32s,420,2292 -fused_transactions_write32s,421,2298 -fused_transactions_write32s,422,2294 -fused_transactions_write32s,423,2292 -fused_transactions_write32s,424,2294 -fused_transactions_write32s,425,2292 -fused_transactions_write32s,426,2289 -fused_transactions_write32s,427,2293 -fused_transactions_write32s,428,2295 -fused_transactions_write32s,429,2293 -fused_transactions_write32s,430,2296 -fused_transactions_write32s,431,2292 -fused_transactions_write32s,432,2292 -fused_transactions_write32s,433,2291 -fused_transactions_write32s,434,2291 -fused_transactions_write32s,435,2290 -fused_transactions_write32s,436,2294 -fused_transactions_write32s,437,2292 -fused_transactions_write32s,438,2290 -fused_transactions_write32s,439,2295 -fused_transactions_write32s,440,2290 -fused_transactions_write32s,441,2290 -fused_transactions_write32s,442,2293 -fused_transactions_write32s,443,2289 -fused_transactions_write32s,444,2295 -fused_transactions_write32s,445,2291 -fused_transactions_write32s,446,2292 -fused_transactions_write32s,447,2292 -fused_transactions_write32s,448,2291 -fused_transactions_write32s,449,2292 -fused_transactions_write32s,450,2301 -fused_transactions_write32s,451,2301 -fused_transactions_write32s,452,2298 -fused_transactions_write32s,453,2301 -fused_transactions_write32s,454,2297 -fused_transactions_write32s,455,2292 -fused_transactions_write32s,456,2294 -fused_transactions_write32s,457,2293 -fused_transactions_write32s,458,2293 -fused_transactions_write32s,459,2292 -fused_transactions_write32s,460,2288 -fused_transactions_write32s,461,2298 -fused_transactions_write32s,462,2294 -fused_transactions_write32s,463,2292 -fused_transactions_write32s,464,2298 -fused_transactions_write32s,465,2292 -fused_transactions_write32s,466,2293 -fused_transactions_write32s,467,2293 -fused_transactions_write32s,468,2289 -fused_transactions_write32s,469,2293 -fused_transactions_write32s,470,2292 -fused_transactions_write32s,471,2290 -fused_transactions_write32s,472,2293 -fused_transactions_write32s,473,2288 -fused_transactions_write32s,474,2294 -fused_transactions_write32s,475,2293 -fused_transactions_write32s,476,2289 -fused_transactions_write32s,477,2293 -fused_transactions_write32s,478,2296 -fused_transactions_write32s,479,2297 -fused_transactions_write32s,480,2297 -fused_transactions_write32s,481,2297 -fused_transactions_write32s,482,2295 -fused_transactions_write32s,483,2287 -fused_transactions_write32s,484,2286 -fused_transactions_write32s,485,2293 -fused_transactions_write32s,486,2293 -fused_transactions_write32s,487,2294 -fused_transactions_write32s,488,2293 -fused_transactions_write32s,489,2294 -fused_transactions_write32s,490,2299 -fused_transactions_write32s,491,2290 -fused_transactions_write32s,492,2292 -fused_transactions_write32s,493,2302 -fused_transactions_write32s,494,2300 -fused_transactions_write32s,495,2289 -fused_transactions_write32s,496,2297 -fused_transactions_write32s,497,2289 -fused_transactions_write32s,498,2293 -fused_transactions_write32s,499,2293 -fused_transactions_write32s,500,2293 -fused_transactions_write32s,501,2296 -fused_transactions_write32s,502,2294 -fused_transactions_write32s,503,2293 -fused_transactions_write32s,504,2297 -fused_transactions_write32s,505,2302 -fused_transactions_write32s,506,2294 -fused_transactions_write32s,507,2291 -fused_transactions_write32s,508,2296 -fused_transactions_write32s,509,2294 -fused_transactions_write32s,510,2293 -fused_transactions_write32s,511,2290 -fused_transactions_write32s,512,2294 -fused_transactions_write32s,513,2292 -fused_transactions_write32s,514,2291 -fused_transactions_write32s,515,2294 -fused_transactions_write32s,516,2288 -fused_transactions_write32s,517,2290 -fused_transactions_write32s,518,2293 -fused_transactions_write32s,519,2301 -fused_transactions_write32s,520,2297 -fused_transactions_write32s,521,2300 -fused_transactions_write32s,522,2294 -fused_transactions_write32s,523,2292 -fused_transactions_write32s,524,2294 -fused_transactions_write32s,525,2299 -fused_transactions_write32s,526,2291 -fused_transactions_write32s,527,2297 -fused_transactions_write32s,528,2300 -fused_transactions_write32s,529,2295 -fused_transactions_write32s,530,2291 -fused_transactions_write32s,531,2299 -fused_transactions_write32s,532,2293 -fused_transactions_write32s,533,2301 -fused_transactions_write32s,534,2301 -fused_transactions_write32s,535,2300 -fused_transactions_write32s,536,2300 -fused_transactions_write32s,537,2297 -fused_transactions_write32s,538,2294 -fused_transactions_write32s,539,2291 -fused_transactions_write32s,540,2298 -fused_transactions_write32s,541,2298 -fused_transactions_write32s,542,2303 -fused_transactions_write32s,543,2293 -fused_transactions_write32s,544,2292 -fused_transactions_write32s,545,2290 -fused_transactions_write32s,546,2293 -fused_transactions_write32s,547,2301 -fused_transactions_write32s,548,2290 -fused_transactions_write32s,549,2303 -fused_transactions_write32s,550,2293 -fused_transactions_write32s,551,2290 -fused_transactions_write32s,552,2295 -fused_transactions_write32s,553,2299 -fused_transactions_write32s,554,2301 -fused_transactions_write32s,555,2297 -fused_transactions_write32s,556,2300 -fused_transactions_write32s,557,2297 -fused_transactions_write32s,558,2301 -fused_transactions_write32s,559,2301 -fused_transactions_write32s,560,2294 -fused_transactions_write32s,561,2297 -fused_transactions_write32s,562,2302 -fused_transactions_write32s,563,2299 -fused_transactions_write32s,564,2287 -fused_transactions_write32s,565,2289 -fused_transactions_write32s,566,2287 -fused_transactions_write32s,567,2288 -fused_transactions_write32s,568,2289 -fused_transactions_write32s,569,2289 -fused_transactions_write32s,570,2285 -fused_transactions_write32s,571,2290 -fused_transactions_write32s,572,2297 -fused_transactions_write32s,573,2289 -fused_transactions_write32s,574,2293 -fused_transactions_write32s,575,2287 -fused_transactions_write32s,576,2293 -fused_transactions_write32s,577,2297 -fused_transactions_write32s,578,2289 -fused_transactions_write32s,579,2291 -fused_transactions_write32s,580,2290 -fused_transactions_write32s,581,2291 -fused_transactions_write32s,582,2289 -fused_transactions_write32s,583,2290 -fused_transactions_write32s,584,2297 -fused_transactions_write32s,585,2290 -fused_transactions_write32s,586,2293 -fused_transactions_write32s,587,2296 -fused_transactions_write32s,588,2286 -fused_transactions_write32s,589,2288 -fused_transactions_write32s,590,2298 -fused_transactions_write32s,591,2288 -fused_transactions_write32s,592,2297 -fused_transactions_write32s,593,2286 -fused_transactions_write32s,594,2291 -fused_transactions_write32s,595,2286 -fused_transactions_write32s,596,2290 -fused_transactions_write32s,597,2288 -fused_transactions_write32s,598,2287 -fused_transactions_write32s,599,2288 -fused_transactions_write32s,600,2288 -fused_transactions_write32s,601,2297 -fused_transactions_write32s,602,2291 -fused_transactions_write32s,603,2287 -fused_transactions_write32s,604,2298 -fused_transactions_write32s,605,2294 -fused_transactions_write32s,606,2286 -fused_transactions_write32s,607,2285 -fused_transactions_write32s,608,2299 -fused_transactions_write32s,609,2299 -fused_transactions_write32s,610,2299 -fused_transactions_write32s,611,2289 -fused_transactions_write32s,612,2291 -fused_transactions_write32s,613,2291 -fused_transactions_write32s,614,2291 -fused_transactions_write32s,615,2297 -fused_transactions_write32s,616,2289 -fused_transactions_write32s,617,2303 -fused_transactions_write32s,618,2297 -fused_transactions_write32s,619,2301 -fused_transactions_write32s,620,2297 -fused_transactions_write32s,621,2300 -fused_transactions_write32s,622,2292 -fused_transactions_write32s,623,2290 -fused_transactions_write32s,624,2292 -fused_transactions_write32s,625,2289 -fused_transactions_write32s,626,2300 -fused_transactions_write32s,627,2290 -fused_transactions_write32s,628,2295 -fused_transactions_write32s,629,2290 -fused_transactions_write32s,630,2292 -fused_transactions_write32s,631,2289 -fused_transactions_write32s,632,2295 -fused_transactions_write32s,633,2292 -fused_transactions_write32s,634,2295 -fused_transactions_write32s,635,2291 -fused_transactions_write32s,636,2294 -fused_transactions_write32s,637,2292 -fused_transactions_write32s,638,2290 -fused_transactions_write32s,639,2295 -fused_transactions_write32s,640,2293 -fused_transactions_write32s,641,2297 -fused_transactions_write32s,642,2293 -fused_transactions_write32s,643,2289 -fused_transactions_write32s,644,2294 -fused_transactions_write32s,645,2292 -fused_transactions_write32s,646,2293 -fused_transactions_write32s,647,2293 -fused_transactions_write32s,648,2290 -fused_transactions_write32s,649,2293 -fused_transactions_write32s,650,2292 -fused_transactions_write32s,651,2297 -fused_transactions_write32s,652,2293 -fused_transactions_write32s,653,2294 -fused_transactions_write32s,654,2292 -fused_transactions_write32s,655,2292 -fused_transactions_write32s,656,2290 -fused_transactions_write32s,657,2296 -fused_transactions_write32s,658,2293 -fused_transactions_write32s,659,2293 -fused_transactions_write32s,660,2296 -fused_transactions_write32s,661,2291 -fused_transactions_write32s,662,2295 -fused_transactions_write32s,663,2294 -fused_transactions_write32s,664,2297 -fused_transactions_write32s,665,2297 -fused_transactions_write32s,666,2294 -fused_transactions_write32s,667,2296 -fused_transactions_write32s,668,2278 -fused_transactions_write32s,669,2293 -fused_transactions_write32s,670,2292 -fused_transactions_write32s,671,2292 -fused_transactions_write32s,672,2293 -fused_transactions_write32s,673,2293 -fused_transactions_write32s,674,2293 -fused_transactions_write32s,675,2297 -fused_transactions_write32s,676,2288 -fused_transactions_write32s,677,2290 -fused_transactions_write32s,678,2298 -fused_transactions_write32s,679,2292 -fused_transactions_write32s,680,2288 -fused_transactions_write32s,681,2294 -fused_transactions_write32s,682,2293 -fused_transactions_write32s,683,2291 -fused_transactions_write32s,684,2286 -fused_transactions_write32s,685,2295 -fused_transactions_write32s,686,2296 -fused_transactions_write32s,687,2291 -fused_transactions_write32s,688,2292 -fused_transactions_write32s,689,2291 -fused_transactions_write32s,690,2292 -fused_transactions_write32s,691,2290 -fused_transactions_write32s,692,2292 -fused_transactions_write32s,693,2292 -fused_transactions_write32s,694,2290 -fused_transactions_write32s,695,2290 -fused_transactions_write32s,696,2289 -fused_transactions_write32s,697,2301 -fused_transactions_write32s,698,2289 -fused_transactions_write32s,699,2294 -fused_transactions_write32s,700,2293 -fused_transactions_write32s,701,2292 -fused_transactions_write32s,702,2294 -fused_transactions_write32s,703,2292 -fused_transactions_write32s,704,2294 -fused_transactions_write32s,705,2297 -fused_transactions_write32s,706,2294 -fused_transactions_write32s,707,2292 -fused_transactions_write32s,708,2293 -fused_transactions_write32s,709,2293 -fused_transactions_write32s,710,2294 -fused_transactions_write32s,711,2294 -fused_transactions_write32s,712,2291 -fused_transactions_write32s,713,2294 -fused_transactions_write32s,714,2297 -fused_transactions_write32s,715,2292 -fused_transactions_write32s,716,2296 -fused_transactions_write32s,717,2294 -fused_transactions_write32s,718,2293 -fused_transactions_write32s,719,2296 -fused_transactions_write32s,720,2297 -fused_transactions_write32s,721,2295 -fused_transactions_write32s,722,2297 -fused_transactions_write32s,723,2292 -fused_transactions_write32s,724,2307 -fused_transactions_write32s,725,2295 -fused_transactions_write32s,726,2294 -fused_transactions_write32s,727,2300 -fused_transactions_write32s,728,2296 -fused_transactions_write32s,729,2296 -fused_transactions_write32s,730,2294 -fused_transactions_write32s,731,2293 -fused_transactions_write32s,732,2293 -fused_transactions_write32s,733,2293 -fused_transactions_write32s,734,2292 -fused_transactions_write32s,735,2293 -fused_transactions_write32s,736,2296 -fused_transactions_write32s,737,2296 -fused_transactions_write32s,738,2295 -fused_transactions_write32s,739,2296 -fused_transactions_write32s,740,2294 -fused_transactions_write32s,741,2297 -fused_transactions_write32s,742,2292 -fused_transactions_write32s,743,2297 -fused_transactions_write32s,744,2293 -fused_transactions_write32s,745,2295 -fused_transactions_write32s,746,2296 -fused_transactions_write32s,747,2297 -fused_transactions_write32s,748,2298 -fused_transactions_write32s,749,2301 -fused_transactions_write32s,750,2294 -fused_transactions_write32s,751,2292 -fused_transactions_write32s,752,2291 -fused_transactions_write32s,753,2298 -fused_transactions_write32s,754,2298 -fused_transactions_write32s,755,2296 -fused_transactions_write32s,756,2300 -fused_transactions_write32s,757,2293 -fused_transactions_write32s,758,2292 -fused_transactions_write32s,759,2294 -fused_transactions_write32s,760,2293 -fused_transactions_write32s,761,2294 -fused_transactions_write32s,762,2303 -fused_transactions_write32s,763,2312 -fused_transactions_write32s,764,2295 -fused_transactions_write32s,765,2294 -fused_transactions_write32s,766,2295 -fused_transactions_write32s,767,2294 -fused_transactions_write32s,768,2296 -fused_transactions_write32s,769,2294 -fused_transactions_write32s,770,2296 -fused_transactions_write32s,771,2293 -fused_transactions_write32s,772,2295 -fused_transactions_write32s,773,2296 -fused_transactions_write32s,774,2301 -fused_transactions_write32s,775,2295 -fused_transactions_write32s,776,2292 -fused_transactions_write32s,777,2298 -fused_transactions_write32s,778,2294 -fused_transactions_write32s,779,2296 -fused_transactions_write32s,780,2301 -fused_transactions_write32s,781,2304 -fused_transactions_write32s,782,2297 -fused_transactions_write32s,783,2293 -fused_transactions_write32s,784,2294 -fused_transactions_write32s,785,2292 -fused_transactions_write32s,786,2296 -fused_transactions_write32s,787,2294 -fused_transactions_write32s,788,2295 -fused_transactions_write32s,789,2295 -fused_transactions_write32s,790,2293 -fused_transactions_write32s,791,2293 -fused_transactions_write32s,792,2298 -fused_transactions_write32s,793,2296 -fused_transactions_write32s,794,2295 -fused_transactions_write32s,795,2296 -fused_transactions_write32s,796,2296 -fused_transactions_write32s,797,2296 -fused_transactions_write32s,798,2299 -fused_transactions_write32s,799,2297 -fused_transactions_write32s,800,2295 -fused_transactions_write32s,801,2294 -fused_transactions_write32s,802,2292 -fused_transactions_write32s,803,2297 -fused_transactions_write32s,804,2294 -fused_transactions_write32s,805,2292 -fused_transactions_write32s,806,2301 -fused_transactions_write32s,807,2304 -fused_transactions_write32s,808,2298 -fused_transactions_write32s,809,2304 -fused_transactions_write32s,810,2300 -fused_transactions_write32s,811,2296 -fused_transactions_write32s,812,2297 -fused_transactions_write32s,813,2301 -fused_transactions_write32s,814,2297 -fused_transactions_write32s,815,2298 -fused_transactions_write32s,816,2297 -fused_transactions_write32s,817,2297 -fused_transactions_write32s,818,2288 -fused_transactions_write32s,819,2289 -fused_transactions_write32s,820,2297 -fused_transactions_write32s,821,2296 -fused_transactions_write32s,822,2289 -fused_transactions_write32s,823,2297 -fused_transactions_write32s,824,2297 -fused_transactions_write32s,825,2291 -fused_transactions_write32s,826,2291 -fused_transactions_write32s,827,2297 -fused_transactions_write32s,828,2291 -fused_transactions_write32s,829,2292 -fused_transactions_write32s,830,2296 -fused_transactions_write32s,831,2297 -fused_transactions_write32s,832,2289 -fused_transactions_write32s,833,2292 -fused_transactions_write32s,834,2290 -fused_transactions_write32s,835,2293 -fused_transactions_write32s,836,2296 -fused_transactions_write32s,837,2293 -fused_transactions_write32s,838,2293 -fused_transactions_write32s,839,2297 -fused_transactions_write32s,840,2296 -fused_transactions_write32s,841,2299 -fused_transactions_write32s,842,2295 -fused_transactions_write32s,843,2293 -fused_transactions_write32s,844,2289 -fused_transactions_write32s,845,2301 -fused_transactions_write32s,846,2295 -fused_transactions_write32s,847,2296 -fused_transactions_write32s,848,2293 -fused_transactions_write32s,849,2293 -fused_transactions_write32s,850,2293 -fused_transactions_write32s,851,2294 -fused_transactions_write32s,852,2293 -fused_transactions_write32s,853,2298 -fused_transactions_write32s,854,2299 -fused_transactions_write32s,855,2293 -fused_transactions_write32s,856,2295 -fused_transactions_write32s,857,2301 -fused_transactions_write32s,858,2295 -fused_transactions_write32s,859,2299 -fused_transactions_write32s,860,2293 -fused_transactions_write32s,861,2292 -fused_transactions_write32s,862,2293 -fused_transactions_write32s,863,2294 -fused_transactions_write32s,864,2306 -fused_transactions_write32s,865,2301 -fused_transactions_write32s,866,2297 -fused_transactions_write32s,867,2294 -fused_transactions_write32s,868,2291 -fused_transactions_write32s,869,2294 -fused_transactions_write32s,870,2297 -fused_transactions_write32s,871,2300 -fused_transactions_write32s,872,2295 -fused_transactions_write32s,873,2306 -fused_transactions_write32s,874,2313 -fused_transactions_write32s,875,2294 -fused_transactions_write32s,876,2292 -fused_transactions_write32s,877,2296 -fused_transactions_write32s,878,2294 -fused_transactions_write32s,879,2302 -fused_transactions_write32s,880,2294 -fused_transactions_write32s,881,2294 -fused_transactions_write32s,882,2294 -fused_transactions_write32s,883,2294 -fused_transactions_write32s,884,2296 -fused_transactions_write32s,885,2299 -fused_transactions_write32s,886,2293 -fused_transactions_write32s,887,2293 -fused_transactions_write32s,888,2293 -fused_transactions_write32s,889,2293 -fused_transactions_write32s,890,2291 -fused_transactions_write32s,891,2310 -fused_transactions_write32s,892,2296 -fused_transactions_write32s,893,2298 -fused_transactions_write32s,894,2294 -fused_transactions_write32s,895,2295 -fused_transactions_write32s,896,2293 -fused_transactions_write32s,897,2291 -fused_transactions_write32s,898,2293 -fused_transactions_write32s,899,2293 -fused_transactions_write32s,900,2298 -fused_transactions_write32s,901,2295 -fused_transactions_write32s,902,2294 -fused_transactions_write32s,903,2293 -fused_transactions_write32s,904,2295 -fused_transactions_write32s,905,2290 -fused_transactions_write32s,906,2294 -fused_transactions_write32s,907,2295 -fused_transactions_write32s,908,2294 -fused_transactions_write32s,909,2297 -fused_transactions_write32s,910,2295 -fused_transactions_write32s,911,2295 -fused_transactions_write32s,912,2295 -fused_transactions_write32s,913,2294 -fused_transactions_write32s,914,2296 -fused_transactions_write32s,915,2292 -fused_transactions_write32s,916,2302 -fused_transactions_write32s,917,2297 -fused_transactions_write32s,918,2293 -fused_transactions_write32s,919,2294 -fused_transactions_write32s,920,2308 -fused_transactions_write32s,921,2301 -fused_transactions_write32s,922,2292 -fused_transactions_write32s,923,2300 -fused_transactions_write32s,924,2294 -fused_transactions_write32s,925,2295 -fused_transactions_write32s,926,2294 -fused_transactions_write32s,927,2293 -fused_transactions_write32s,928,2297 -fused_transactions_write32s,929,2297 -fused_transactions_write32s,930,2296 -fused_transactions_write32s,931,2296 -fused_transactions_write32s,932,2299 -fused_transactions_write32s,933,2297 -fused_transactions_write32s,934,2297 -fused_transactions_write32s,935,2294 -fused_transactions_write32s,936,2298 -fused_transactions_write32s,937,2293 -fused_transactions_write32s,938,2294 -fused_transactions_write32s,939,2296 -fused_transactions_write32s,940,2292 -fused_transactions_write32s,941,2295 -fused_transactions_write32s,942,2294 -fused_transactions_write32s,943,2296 -fused_transactions_write32s,944,2296 -fused_transactions_write32s,945,2293 -fused_transactions_write32s,946,2293 -fused_transactions_write32s,947,2298 -fused_transactions_write32s,948,2295 -fused_transactions_write32s,949,2294 -fused_transactions_write32s,950,2293 -fused_transactions_write32s,951,2297 -fused_transactions_write32s,952,2297 -fused_transactions_write32s,953,2292 -fused_transactions_write32s,954,2294 -fused_transactions_write32s,955,2296 -fused_transactions_write32s,956,2295 -fused_transactions_write32s,957,2295 -fused_transactions_write32s,958,2294 -fused_transactions_write32s,959,2296 -fused_transactions_write32s,960,2293 -fused_transactions_write32s,961,2297 -fused_transactions_write32s,962,2294 -fused_transactions_write32s,963,2295 -fused_transactions_write32s,964,2294 -fused_transactions_write32s,965,2296 -fused_transactions_write32s,966,2299 -fused_transactions_write32s,967,2295 -fused_transactions_write32s,968,2293 -fused_transactions_write32s,969,2293 -fused_transactions_write32s,970,2293 -fused_transactions_write32s,971,2295 -fused_transactions_write32s,972,2298 -fused_transactions_write32s,973,2298 -fused_transactions_write32s,974,2300 -fused_transactions_write32s,975,2294 -fused_transactions_write32s,976,2293 -fused_transactions_write32s,977,2292 -fused_transactions_write32s,978,2293 -fused_transactions_write32s,979,2293 -fused_transactions_write32s,980,2293 -fused_transactions_write32s,981,2293 -fused_transactions_write32s,982,2293 -fused_transactions_write32s,983,2295 -fused_transactions_write32s,984,2296 -fused_transactions_write32s,985,2293 -fused_transactions_write32s,986,2293 -fused_transactions_write32s,987,2296 -fused_transactions_write32s,988,2293 -fused_transactions_write32s,989,2297 -fused_transactions_write32s,990,2302 -fused_transactions_write32s,991,2296 -fused_transactions_write32s,992,2295 -fused_transactions_write32s,993,2295 -fused_transactions_write32s,994,2292 -fused_transactions_write32s,995,2293 -fused_transactions_write32s,996,2292 -fused_transactions_write32s,997,2293 -fused_transactions_write32s,998,2294 -fused_transactions_write32s,999,2296 +fused_transactions_loadpdi,953,4829 +fused_transactions_loadpdi,954,4828 +fused_transactions_loadpdi,955,4820 +fused_transactions_loadpdi,956,4825 +fused_transactions_loadpdi,957,4828 +fused_transactions_loadpdi,958,4831 +fused_transactions_loadpdi,959,4830 +fused_transactions_loadpdi,960,4839 +fused_transactions_loadpdi,961,4838 +fused_transactions_loadpdi,962,4827 +fused_transactions_loadpdi,963,4828 +fused_transactions_loadpdi,964,4826 +fused_transactions_loadpdi,965,4828 +fused_transactions_loadpdi,966,4828 +fused_transactions_loadpdi,967,4832 +fused_transactions_loadpdi,968,4820 +fused_transactions_loadpdi,969,4830 +fused_transactions_loadpdi,970,4838 +fused_transactions_loadpdi,971,4843 +fused_transactions_loadpdi,972,4824 +fused_transactions_loadpdi,973,4836 +fused_transactions_loadpdi,974,4824 +fused_transactions_loadpdi,975,4823 +fused_transactions_loadpdi,976,4828 +fused_transactions_loadpdi,977,4828 +fused_transactions_loadpdi,978,4819 +fused_transactions_loadpdi,979,4825 +fused_transactions_loadpdi,980,4822 +fused_transactions_loadpdi,981,4828 +fused_transactions_loadpdi,982,4830 +fused_transactions_loadpdi,983,4826 +fused_transactions_loadpdi,984,4828 +fused_transactions_loadpdi,985,4830 +fused_transactions_loadpdi,986,4834 +fused_transactions_loadpdi,987,4825 +fused_transactions_loadpdi,988,4834 +fused_transactions_loadpdi,989,4829 +fused_transactions_loadpdi,990,4826 +fused_transactions_loadpdi,991,4830 +fused_transactions_loadpdi,992,4829 +fused_transactions_loadpdi,993,4821 +fused_transactions_loadpdi,994,4826 +fused_transactions_loadpdi,995,4826 +fused_transactions_loadpdi,996,4830 +fused_transactions_loadpdi,997,4828 +fused_transactions_loadpdi,998,4831 +fused_transactions_loadpdi,999,4823 +fused_write32s_reset_ifused,0,5993 +fused_write32s_reset_ifused,1,5934 +fused_write32s_reset_ifused,2,5932 +fused_write32s_reset_ifused,3,5937 +fused_write32s_reset_ifused,4,5934 +fused_write32s_reset_ifused,5,5938 +fused_write32s_reset_ifused,6,5936 +fused_write32s_reset_ifused,7,5938 +fused_write32s_reset_ifused,8,5934 +fused_write32s_reset_ifused,9,5936 +fused_write32s_reset_ifused,10,5936 +fused_write32s_reset_ifused,11,5937 +fused_write32s_reset_ifused,12,5934 +fused_write32s_reset_ifused,13,5938 +fused_write32s_reset_ifused,14,5939 +fused_write32s_reset_ifused,15,5938 +fused_write32s_reset_ifused,16,5939 +fused_write32s_reset_ifused,17,5936 +fused_write32s_reset_ifused,18,5935 +fused_write32s_reset_ifused,19,5936 +fused_write32s_reset_ifused,20,5934 +fused_write32s_reset_ifused,21,5940 +fused_write32s_reset_ifused,22,5935 +fused_write32s_reset_ifused,23,5935 +fused_write32s_reset_ifused,24,5935 +fused_write32s_reset_ifused,25,5934 +fused_write32s_reset_ifused,26,5937 +fused_write32s_reset_ifused,27,5934 +fused_write32s_reset_ifused,28,5934 +fused_write32s_reset_ifused,29,5936 +fused_write32s_reset_ifused,30,5938 +fused_write32s_reset_ifused,31,5938 +fused_write32s_reset_ifused,32,5934 +fused_write32s_reset_ifused,33,5936 +fused_write32s_reset_ifused,34,5937 +fused_write32s_reset_ifused,35,5935 +fused_write32s_reset_ifused,36,5933 +fused_write32s_reset_ifused,37,5935 +fused_write32s_reset_ifused,38,5937 +fused_write32s_reset_ifused,39,5934 +fused_write32s_reset_ifused,40,5937 +fused_write32s_reset_ifused,41,5939 +fused_write32s_reset_ifused,42,5933 +fused_write32s_reset_ifused,43,5936 +fused_write32s_reset_ifused,44,5933 +fused_write32s_reset_ifused,45,5932 +fused_write32s_reset_ifused,46,5933 +fused_write32s_reset_ifused,47,5939 +fused_write32s_reset_ifused,48,5933 +fused_write32s_reset_ifused,49,5933 +fused_write32s_reset_ifused,50,5932 +fused_write32s_reset_ifused,51,5931 +fused_write32s_reset_ifused,52,5935 +fused_write32s_reset_ifused,53,5932 +fused_write32s_reset_ifused,54,5935 +fused_write32s_reset_ifused,55,5934 +fused_write32s_reset_ifused,56,5933 +fused_write32s_reset_ifused,57,5933 +fused_write32s_reset_ifused,58,5936 +fused_write32s_reset_ifused,59,5934 +fused_write32s_reset_ifused,60,5938 +fused_write32s_reset_ifused,61,5931 +fused_write32s_reset_ifused,62,5934 +fused_write32s_reset_ifused,63,5938 +fused_write32s_reset_ifused,64,5933 +fused_write32s_reset_ifused,65,5932 +fused_write32s_reset_ifused,66,5931 +fused_write32s_reset_ifused,67,5938 +fused_write32s_reset_ifused,68,5933 +fused_write32s_reset_ifused,69,5931 +fused_write32s_reset_ifused,70,5934 +fused_write32s_reset_ifused,71,5932 +fused_write32s_reset_ifused,72,5933 +fused_write32s_reset_ifused,73,5933 +fused_write32s_reset_ifused,74,5933 +fused_write32s_reset_ifused,75,5937 +fused_write32s_reset_ifused,76,5934 +fused_write32s_reset_ifused,77,5943 +fused_write32s_reset_ifused,78,5932 +fused_write32s_reset_ifused,79,5934 +fused_write32s_reset_ifused,80,5934 +fused_write32s_reset_ifused,81,5933 +fused_write32s_reset_ifused,82,5933 +fused_write32s_reset_ifused,83,5932 +fused_write32s_reset_ifused,84,5945 +fused_write32s_reset_ifused,85,5934 +fused_write32s_reset_ifused,86,5933 +fused_write32s_reset_ifused,87,5933 +fused_write32s_reset_ifused,88,5933 +fused_write32s_reset_ifused,89,5934 +fused_write32s_reset_ifused,90,5933 +fused_write32s_reset_ifused,91,5933 +fused_write32s_reset_ifused,92,5931 +fused_write32s_reset_ifused,93,5939 +fused_write32s_reset_ifused,94,5935 +fused_write32s_reset_ifused,95,5934 +fused_write32s_reset_ifused,96,5931 +fused_write32s_reset_ifused,97,5937 +fused_write32s_reset_ifused,98,5937 +fused_write32s_reset_ifused,99,5939 +fused_write32s_reset_ifused,100,5933 +fused_write32s_reset_ifused,101,5933 +fused_write32s_reset_ifused,102,5933 +fused_write32s_reset_ifused,103,5932 +fused_write32s_reset_ifused,104,5935 +fused_write32s_reset_ifused,105,5934 +fused_write32s_reset_ifused,106,5936 +fused_write32s_reset_ifused,107,5935 +fused_write32s_reset_ifused,108,5932 +fused_write32s_reset_ifused,109,5933 +fused_write32s_reset_ifused,110,5935 +fused_write32s_reset_ifused,111,5932 +fused_write32s_reset_ifused,112,5938 +fused_write32s_reset_ifused,113,5937 +fused_write32s_reset_ifused,114,5939 +fused_write32s_reset_ifused,115,5934 +fused_write32s_reset_ifused,116,5934 +fused_write32s_reset_ifused,117,5933 +fused_write32s_reset_ifused,118,5936 +fused_write32s_reset_ifused,119,5931 +fused_write32s_reset_ifused,120,5933 +fused_write32s_reset_ifused,121,5935 +fused_write32s_reset_ifused,122,5935 +fused_write32s_reset_ifused,123,5932 +fused_write32s_reset_ifused,124,5934 +fused_write32s_reset_ifused,125,5932 +fused_write32s_reset_ifused,126,5935 +fused_write32s_reset_ifused,127,5933 +fused_write32s_reset_ifused,128,5934 +fused_write32s_reset_ifused,129,5932 +fused_write32s_reset_ifused,130,5931 +fused_write32s_reset_ifused,131,5935 +fused_write32s_reset_ifused,132,5931 +fused_write32s_reset_ifused,133,5931 +fused_write32s_reset_ifused,134,5937 +fused_write32s_reset_ifused,135,5930 +fused_write32s_reset_ifused,136,5934 +fused_write32s_reset_ifused,137,5939 +fused_write32s_reset_ifused,138,5933 +fused_write32s_reset_ifused,139,5934 +fused_write32s_reset_ifused,140,5933 +fused_write32s_reset_ifused,141,5933 +fused_write32s_reset_ifused,142,5936 +fused_write32s_reset_ifused,143,5938 +fused_write32s_reset_ifused,144,5932 +fused_write32s_reset_ifused,145,5932 +fused_write32s_reset_ifused,146,5937 +fused_write32s_reset_ifused,147,5931 +fused_write32s_reset_ifused,148,5932 +fused_write32s_reset_ifused,149,5931 +fused_write32s_reset_ifused,150,5931 +fused_write32s_reset_ifused,151,5934 +fused_write32s_reset_ifused,152,5934 +fused_write32s_reset_ifused,153,5933 +fused_write32s_reset_ifused,154,5937 +fused_write32s_reset_ifused,155,5935 +fused_write32s_reset_ifused,156,5934 +fused_write32s_reset_ifused,157,5933 +fused_write32s_reset_ifused,158,5936 +fused_write32s_reset_ifused,159,5935 +fused_write32s_reset_ifused,160,5935 +fused_write32s_reset_ifused,161,5937 +fused_write32s_reset_ifused,162,5934 +fused_write32s_reset_ifused,163,5934 +fused_write32s_reset_ifused,164,5934 +fused_write32s_reset_ifused,165,5932 +fused_write32s_reset_ifused,166,5933 +fused_write32s_reset_ifused,167,5930 +fused_write32s_reset_ifused,168,5933 +fused_write32s_reset_ifused,169,5934 +fused_write32s_reset_ifused,170,5932 +fused_write32s_reset_ifused,171,5932 +fused_write32s_reset_ifused,172,5932 +fused_write32s_reset_ifused,173,5932 +fused_write32s_reset_ifused,174,5929 +fused_write32s_reset_ifused,175,5933 +fused_write32s_reset_ifused,176,5937 +fused_write32s_reset_ifused,177,5935 +fused_write32s_reset_ifused,178,5937 +fused_write32s_reset_ifused,179,5935 +fused_write32s_reset_ifused,180,5932 +fused_write32s_reset_ifused,181,5933 +fused_write32s_reset_ifused,182,5932 +fused_write32s_reset_ifused,183,5933 +fused_write32s_reset_ifused,184,5934 +fused_write32s_reset_ifused,185,5932 +fused_write32s_reset_ifused,186,5934 +fused_write32s_reset_ifused,187,5935 +fused_write32s_reset_ifused,188,5933 +fused_write32s_reset_ifused,189,5934 +fused_write32s_reset_ifused,190,5934 +fused_write32s_reset_ifused,191,5934 +fused_write32s_reset_ifused,192,5935 +fused_write32s_reset_ifused,193,5932 +fused_write32s_reset_ifused,194,5936 +fused_write32s_reset_ifused,195,5931 +fused_write32s_reset_ifused,196,5930 +fused_write32s_reset_ifused,197,5934 +fused_write32s_reset_ifused,198,5932 +fused_write32s_reset_ifused,199,5934 +fused_write32s_reset_ifused,200,5935 +fused_write32s_reset_ifused,201,5932 +fused_write32s_reset_ifused,202,5936 +fused_write32s_reset_ifused,203,5931 +fused_write32s_reset_ifused,204,5938 +fused_write32s_reset_ifused,205,5936 +fused_write32s_reset_ifused,206,5934 +fused_write32s_reset_ifused,207,5934 +fused_write32s_reset_ifused,208,5932 +fused_write32s_reset_ifused,209,5935 +fused_write32s_reset_ifused,210,5931 +fused_write32s_reset_ifused,211,5931 +fused_write32s_reset_ifused,212,5932 +fused_write32s_reset_ifused,213,5933 +fused_write32s_reset_ifused,214,5933 +fused_write32s_reset_ifused,215,5932 +fused_write32s_reset_ifused,216,5933 +fused_write32s_reset_ifused,217,5933 +fused_write32s_reset_ifused,218,5934 +fused_write32s_reset_ifused,219,5934 +fused_write32s_reset_ifused,220,5938 +fused_write32s_reset_ifused,221,5933 +fused_write32s_reset_ifused,222,5931 +fused_write32s_reset_ifused,223,5935 +fused_write32s_reset_ifused,224,5934 +fused_write32s_reset_ifused,225,5931 +fused_write32s_reset_ifused,226,5935 +fused_write32s_reset_ifused,227,5932 +fused_write32s_reset_ifused,228,5935 +fused_write32s_reset_ifused,229,5933 +fused_write32s_reset_ifused,230,5932 +fused_write32s_reset_ifused,231,5938 +fused_write32s_reset_ifused,232,5933 +fused_write32s_reset_ifused,233,5933 +fused_write32s_reset_ifused,234,5934 +fused_write32s_reset_ifused,235,5935 +fused_write32s_reset_ifused,236,5931 +fused_write32s_reset_ifused,237,5933 +fused_write32s_reset_ifused,238,5933 +fused_write32s_reset_ifused,239,5932 +fused_write32s_reset_ifused,240,5936 +fused_write32s_reset_ifused,241,5937 +fused_write32s_reset_ifused,242,5933 +fused_write32s_reset_ifused,243,5934 +fused_write32s_reset_ifused,244,5937 +fused_write32s_reset_ifused,245,5933 +fused_write32s_reset_ifused,246,5938 +fused_write32s_reset_ifused,247,5933 +fused_write32s_reset_ifused,248,5934 +fused_write32s_reset_ifused,249,5937 +fused_write32s_reset_ifused,250,5936 +fused_write32s_reset_ifused,251,5932 +fused_write32s_reset_ifused,252,5935 +fused_write32s_reset_ifused,253,5934 +fused_write32s_reset_ifused,254,5932 +fused_write32s_reset_ifused,255,5938 +fused_write32s_reset_ifused,256,5934 +fused_write32s_reset_ifused,257,5934 +fused_write32s_reset_ifused,258,5931 +fused_write32s_reset_ifused,259,5934 +fused_write32s_reset_ifused,260,5934 +fused_write32s_reset_ifused,261,5933 +fused_write32s_reset_ifused,262,5931 +fused_write32s_reset_ifused,263,5964 +fused_write32s_reset_ifused,264,5953 +fused_write32s_reset_ifused,265,5951 +fused_write32s_reset_ifused,266,5953 +fused_write32s_reset_ifused,267,5957 +fused_write32s_reset_ifused,268,5955 +fused_write32s_reset_ifused,269,5958 +fused_write32s_reset_ifused,270,5952 +fused_write32s_reset_ifused,271,5958 +fused_write32s_reset_ifused,272,5954 +fused_write32s_reset_ifused,273,5955 +fused_write32s_reset_ifused,274,5959 +fused_write32s_reset_ifused,275,5957 +fused_write32s_reset_ifused,276,5958 +fused_write32s_reset_ifused,277,5951 +fused_write32s_reset_ifused,278,5947 +fused_write32s_reset_ifused,279,5951 +fused_write32s_reset_ifused,280,5948 +fused_write32s_reset_ifused,281,5956 +fused_write32s_reset_ifused,282,5957 +fused_write32s_reset_ifused,283,5947 +fused_write32s_reset_ifused,284,5950 +fused_write32s_reset_ifused,285,5961 +fused_write32s_reset_ifused,286,5950 +fused_write32s_reset_ifused,287,5957 +fused_write32s_reset_ifused,288,5949 +fused_write32s_reset_ifused,289,5948 +fused_write32s_reset_ifused,290,5950 +fused_write32s_reset_ifused,291,5949 +fused_write32s_reset_ifused,292,5949 +fused_write32s_reset_ifused,293,5948 +fused_write32s_reset_ifused,294,5959 +fused_write32s_reset_ifused,295,5949 +fused_write32s_reset_ifused,296,5953 +fused_write32s_reset_ifused,297,5961 +fused_write32s_reset_ifused,298,5949 +fused_write32s_reset_ifused,299,5950 +fused_write32s_reset_ifused,300,5953 +fused_write32s_reset_ifused,301,5951 +fused_write32s_reset_ifused,302,5946 +fused_write32s_reset_ifused,303,5956 +fused_write32s_reset_ifused,304,5951 +fused_write32s_reset_ifused,305,5957 +fused_write32s_reset_ifused,306,5947 +fused_write32s_reset_ifused,307,5954 +fused_write32s_reset_ifused,308,5949 +fused_write32s_reset_ifused,309,5949 +fused_write32s_reset_ifused,310,5952 +fused_write32s_reset_ifused,311,5949 +fused_write32s_reset_ifused,312,5949 +fused_write32s_reset_ifused,313,5948 +fused_write32s_reset_ifused,314,5951 +fused_write32s_reset_ifused,315,5950 +fused_write32s_reset_ifused,316,5951 +fused_write32s_reset_ifused,317,5950 +fused_write32s_reset_ifused,318,5946 +fused_write32s_reset_ifused,319,5949 +fused_write32s_reset_ifused,320,5948 +fused_write32s_reset_ifused,321,5952 +fused_write32s_reset_ifused,322,5950 +fused_write32s_reset_ifused,323,5960 +fused_write32s_reset_ifused,324,5947 +fused_write32s_reset_ifused,325,5953 +fused_write32s_reset_ifused,326,5960 +fused_write32s_reset_ifused,327,5962 +fused_write32s_reset_ifused,328,5950 +fused_write32s_reset_ifused,329,5956 +fused_write32s_reset_ifused,330,5958 +fused_write32s_reset_ifused,331,5949 +fused_write32s_reset_ifused,332,5948 +fused_write32s_reset_ifused,333,5952 +fused_write32s_reset_ifused,334,5945 +fused_write32s_reset_ifused,335,5946 +fused_write32s_reset_ifused,336,5948 +fused_write32s_reset_ifused,337,5956 +fused_write32s_reset_ifused,338,5949 +fused_write32s_reset_ifused,339,5952 +fused_write32s_reset_ifused,340,5947 +fused_write32s_reset_ifused,341,5949 +fused_write32s_reset_ifused,342,5949 +fused_write32s_reset_ifused,343,5949 +fused_write32s_reset_ifused,344,5957 +fused_write32s_reset_ifused,345,5951 +fused_write32s_reset_ifused,346,5952 +fused_write32s_reset_ifused,347,5952 +fused_write32s_reset_ifused,348,5957 +fused_write32s_reset_ifused,349,5961 +fused_write32s_reset_ifused,350,5949 +fused_write32s_reset_ifused,351,5950 +fused_write32s_reset_ifused,352,5951 +fused_write32s_reset_ifused,353,5947 +fused_write32s_reset_ifused,354,5948 +fused_write32s_reset_ifused,355,5947 +fused_write32s_reset_ifused,356,5949 +fused_write32s_reset_ifused,357,5947 +fused_write32s_reset_ifused,358,5950 +fused_write32s_reset_ifused,359,5956 +fused_write32s_reset_ifused,360,5948 +fused_write32s_reset_ifused,361,5954 +fused_write32s_reset_ifused,362,5948 +fused_write32s_reset_ifused,363,5951 +fused_write32s_reset_ifused,364,5948 +fused_write32s_reset_ifused,365,5956 +fused_write32s_reset_ifused,366,5951 +fused_write32s_reset_ifused,367,5961 +fused_write32s_reset_ifused,368,5946 +fused_write32s_reset_ifused,369,5950 +fused_write32s_reset_ifused,370,5947 +fused_write32s_reset_ifused,371,5951 +fused_write32s_reset_ifused,372,5952 +fused_write32s_reset_ifused,373,5952 +fused_write32s_reset_ifused,374,5950 +fused_write32s_reset_ifused,375,5947 +fused_write32s_reset_ifused,376,5948 +fused_write32s_reset_ifused,377,5948 +fused_write32s_reset_ifused,378,5948 +fused_write32s_reset_ifused,379,5952 +fused_write32s_reset_ifused,380,5949 +fused_write32s_reset_ifused,381,5948 +fused_write32s_reset_ifused,382,5949 +fused_write32s_reset_ifused,383,5948 +fused_write32s_reset_ifused,384,5949 +fused_write32s_reset_ifused,385,5948 +fused_write32s_reset_ifused,386,5956 +fused_write32s_reset_ifused,387,5955 +fused_write32s_reset_ifused,388,5951 +fused_write32s_reset_ifused,389,5953 +fused_write32s_reset_ifused,390,5982 +fused_write32s_reset_ifused,391,5951 +fused_write32s_reset_ifused,392,5952 +fused_write32s_reset_ifused,393,5946 +fused_write32s_reset_ifused,394,5950 +fused_write32s_reset_ifused,395,5949 +fused_write32s_reset_ifused,396,5946 +fused_write32s_reset_ifused,397,5951 +fused_write32s_reset_ifused,398,5946 +fused_write32s_reset_ifused,399,5947 +fused_write32s_reset_ifused,400,5946 +fused_write32s_reset_ifused,401,5942 +fused_write32s_reset_ifused,402,5946 +fused_write32s_reset_ifused,403,5945 +fused_write32s_reset_ifused,404,5947 +fused_write32s_reset_ifused,405,5950 +fused_write32s_reset_ifused,406,5945 +fused_write32s_reset_ifused,407,5946 +fused_write32s_reset_ifused,408,5946 +fused_write32s_reset_ifused,409,5952 +fused_write32s_reset_ifused,410,5956 +fused_write32s_reset_ifused,411,5960 +fused_write32s_reset_ifused,412,5951 +fused_write32s_reset_ifused,413,5953 +fused_write32s_reset_ifused,414,5949 +fused_write32s_reset_ifused,415,5954 +fused_write32s_reset_ifused,416,5944 +fused_write32s_reset_ifused,417,5946 +fused_write32s_reset_ifused,418,5947 +fused_write32s_reset_ifused,419,5946 +fused_write32s_reset_ifused,420,5942 +fused_write32s_reset_ifused,421,5934 +fused_write32s_reset_ifused,422,5948 +fused_write32s_reset_ifused,423,5950 +fused_write32s_reset_ifused,424,5952 +fused_write32s_reset_ifused,425,5946 +fused_write32s_reset_ifused,426,5951 +fused_write32s_reset_ifused,427,5943 +fused_write32s_reset_ifused,428,5946 +fused_write32s_reset_ifused,429,5946 +fused_write32s_reset_ifused,430,5941 +fused_write32s_reset_ifused,431,5944 +fused_write32s_reset_ifused,432,5951 +fused_write32s_reset_ifused,433,5961 +fused_write32s_reset_ifused,434,5957 +fused_write32s_reset_ifused,435,5956 +fused_write32s_reset_ifused,436,6021 +fused_write32s_reset_ifused,437,6059 +fused_write32s_reset_ifused,438,6067 +fused_write32s_reset_ifused,439,6225 +fused_write32s_reset_ifused,440,6019 +fused_write32s_reset_ifused,441,5970 +fused_write32s_reset_ifused,442,5954 +fused_write32s_reset_ifused,443,5946 +fused_write32s_reset_ifused,444,5949 +fused_write32s_reset_ifused,445,5945 +fused_write32s_reset_ifused,446,5958 +fused_write32s_reset_ifused,447,6278 +fused_write32s_reset_ifused,448,6035 +fused_write32s_reset_ifused,449,5970 +fused_write32s_reset_ifused,450,5957 +fused_write32s_reset_ifused,451,5947 +fused_write32s_reset_ifused,452,5932 +fused_write32s_reset_ifused,453,5924 +fused_write32s_reset_ifused,454,5925 +fused_write32s_reset_ifused,455,5931 +fused_write32s_reset_ifused,456,5931 +fused_write32s_reset_ifused,457,5931 +fused_write32s_reset_ifused,458,5950 +fused_write32s_reset_ifused,459,5951 +fused_write32s_reset_ifused,460,5945 +fused_write32s_reset_ifused,461,5930 +fused_write32s_reset_ifused,462,5942 +fused_write32s_reset_ifused,463,5947 +fused_write32s_reset_ifused,464,5949 +fused_write32s_reset_ifused,465,5946 +fused_write32s_reset_ifused,466,5949 +fused_write32s_reset_ifused,467,5944 +fused_write32s_reset_ifused,468,5945 +fused_write32s_reset_ifused,469,5947 +fused_write32s_reset_ifused,470,5933 +fused_write32s_reset_ifused,471,5942 +fused_write32s_reset_ifused,472,5935 +fused_write32s_reset_ifused,473,5945 +fused_write32s_reset_ifused,474,5949 +fused_write32s_reset_ifused,475,5946 +fused_write32s_reset_ifused,476,5939 +fused_write32s_reset_ifused,477,5941 +fused_write32s_reset_ifused,478,5941 +fused_write32s_reset_ifused,479,5941 +fused_write32s_reset_ifused,480,5946 +fused_write32s_reset_ifused,481,5944 +fused_write32s_reset_ifused,482,5941 +fused_write32s_reset_ifused,483,5942 +fused_write32s_reset_ifused,484,5941 +fused_write32s_reset_ifused,485,5941 +fused_write32s_reset_ifused,486,5941 +fused_write32s_reset_ifused,487,5947 +fused_write32s_reset_ifused,488,5950 +fused_write32s_reset_ifused,489,5944 +fused_write32s_reset_ifused,490,5941 +fused_write32s_reset_ifused,491,5943 +fused_write32s_reset_ifused,492,5947 +fused_write32s_reset_ifused,493,5941 +fused_write32s_reset_ifused,494,5941 +fused_write32s_reset_ifused,495,5945 +fused_write32s_reset_ifused,496,5943 +fused_write32s_reset_ifused,497,5940 +fused_write32s_reset_ifused,498,5940 +fused_write32s_reset_ifused,499,5942 +fused_write32s_reset_ifused,500,5938 +fused_write32s_reset_ifused,501,5941 +fused_write32s_reset_ifused,502,5928 +fused_write32s_reset_ifused,503,5946 +fused_write32s_reset_ifused,504,5946 +fused_write32s_reset_ifused,505,5941 +fused_write32s_reset_ifused,506,5943 +fused_write32s_reset_ifused,507,5942 +fused_write32s_reset_ifused,508,5943 +fused_write32s_reset_ifused,509,5940 +fused_write32s_reset_ifused,510,5941 +fused_write32s_reset_ifused,511,5943 +fused_write32s_reset_ifused,512,5944 +fused_write32s_reset_ifused,513,5949 +fused_write32s_reset_ifused,514,5939 +fused_write32s_reset_ifused,515,5940 +fused_write32s_reset_ifused,516,5943 +fused_write32s_reset_ifused,517,5941 +fused_write32s_reset_ifused,518,5941 +fused_write32s_reset_ifused,519,5943 +fused_write32s_reset_ifused,520,5940 +fused_write32s_reset_ifused,521,5940 +fused_write32s_reset_ifused,522,5929 +fused_write32s_reset_ifused,523,5934 +fused_write32s_reset_ifused,524,5949 +fused_write32s_reset_ifused,525,5945 +fused_write32s_reset_ifused,526,5943 +fused_write32s_reset_ifused,527,5941 +fused_write32s_reset_ifused,528,5942 +fused_write32s_reset_ifused,529,5941 +fused_write32s_reset_ifused,530,5942 +fused_write32s_reset_ifused,531,5942 +fused_write32s_reset_ifused,532,5947 +fused_write32s_reset_ifused,533,5941 +fused_write32s_reset_ifused,534,5942 +fused_write32s_reset_ifused,535,5943 +fused_write32s_reset_ifused,536,5942 +fused_write32s_reset_ifused,537,5942 +fused_write32s_reset_ifused,538,5942 +fused_write32s_reset_ifused,539,5941 +fused_write32s_reset_ifused,540,5944 +fused_write32s_reset_ifused,541,5940 +fused_write32s_reset_ifused,542,5940 +fused_write32s_reset_ifused,543,5943 +fused_write32s_reset_ifused,544,5941 +fused_write32s_reset_ifused,545,5948 +fused_write32s_reset_ifused,546,5943 +fused_write32s_reset_ifused,547,5939 +fused_write32s_reset_ifused,548,5942 +fused_write32s_reset_ifused,549,5941 +fused_write32s_reset_ifused,550,5940 +fused_write32s_reset_ifused,551,5941 +fused_write32s_reset_ifused,552,5946 +fused_write32s_reset_ifused,553,5942 +fused_write32s_reset_ifused,554,5941 +fused_write32s_reset_ifused,555,5947 +fused_write32s_reset_ifused,556,5942 +fused_write32s_reset_ifused,557,5949 +fused_write32s_reset_ifused,558,5941 +fused_write32s_reset_ifused,559,5945 +fused_write32s_reset_ifused,560,5945 +fused_write32s_reset_ifused,561,5940 +fused_write32s_reset_ifused,562,5942 +fused_write32s_reset_ifused,563,5940 +fused_write32s_reset_ifused,564,5942 +fused_write32s_reset_ifused,565,5943 +fused_write32s_reset_ifused,566,5941 +fused_write32s_reset_ifused,567,5947 +fused_write32s_reset_ifused,568,5941 +fused_write32s_reset_ifused,569,5941 +fused_write32s_reset_ifused,570,5939 +fused_write32s_reset_ifused,571,5939 +fused_write32s_reset_ifused,572,5941 +fused_write32s_reset_ifused,573,5941 +fused_write32s_reset_ifused,574,5944 +fused_write32s_reset_ifused,575,5944 +fused_write32s_reset_ifused,576,5943 +fused_write32s_reset_ifused,577,5941 +fused_write32s_reset_ifused,578,5943 +fused_write32s_reset_ifused,579,5942 +fused_write32s_reset_ifused,580,5946 +fused_write32s_reset_ifused,581,5941 +fused_write32s_reset_ifused,582,5939 +fused_write32s_reset_ifused,583,5943 +fused_write32s_reset_ifused,584,5942 +fused_write32s_reset_ifused,585,5943 +fused_write32s_reset_ifused,586,5941 +fused_write32s_reset_ifused,587,5941 +fused_write32s_reset_ifused,588,5928 +fused_write32s_reset_ifused,589,5931 +fused_write32s_reset_ifused,590,5945 +fused_write32s_reset_ifused,591,5943 +fused_write32s_reset_ifused,592,5945 +fused_write32s_reset_ifused,593,5942 +fused_write32s_reset_ifused,594,5941 +fused_write32s_reset_ifused,595,5943 +fused_write32s_reset_ifused,596,5939 +fused_write32s_reset_ifused,597,5948 +fused_write32s_reset_ifused,598,5940 +fused_write32s_reset_ifused,599,5925 +fused_write32s_reset_ifused,600,5950 +fused_write32s_reset_ifused,601,5944 +fused_write32s_reset_ifused,602,5941 +fused_write32s_reset_ifused,603,5941 +fused_write32s_reset_ifused,604,5941 +fused_write32s_reset_ifused,605,5941 +fused_write32s_reset_ifused,606,5945 +fused_write32s_reset_ifused,607,5943 +fused_write32s_reset_ifused,608,5940 +fused_write32s_reset_ifused,609,5942 +fused_write32s_reset_ifused,610,5941 +fused_write32s_reset_ifused,611,5939 +fused_write32s_reset_ifused,612,5944 +fused_write32s_reset_ifused,613,5946 +fused_write32s_reset_ifused,614,5944 +fused_write32s_reset_ifused,615,5942 +fused_write32s_reset_ifused,616,5937 +fused_write32s_reset_ifused,617,5927 +fused_write32s_reset_ifused,618,5930 +fused_write32s_reset_ifused,619,5944 +fused_write32s_reset_ifused,620,5944 +fused_write32s_reset_ifused,621,5940 +fused_write32s_reset_ifused,622,5941 +fused_write32s_reset_ifused,623,5942 +fused_write32s_reset_ifused,624,5944 +fused_write32s_reset_ifused,625,5942 +fused_write32s_reset_ifused,626,5941 +fused_write32s_reset_ifused,627,5950 +fused_write32s_reset_ifused,628,5944 +fused_write32s_reset_ifused,629,5941 +fused_write32s_reset_ifused,630,5942 +fused_write32s_reset_ifused,631,5951 +fused_write32s_reset_ifused,632,5940 +fused_write32s_reset_ifused,633,5943 +fused_write32s_reset_ifused,634,5939 +fused_write32s_reset_ifused,635,5939 +fused_write32s_reset_ifused,636,5947 +fused_write32s_reset_ifused,637,5943 +fused_write32s_reset_ifused,638,5953 +fused_write32s_reset_ifused,639,5941 +fused_write32s_reset_ifused,640,5942 +fused_write32s_reset_ifused,641,5945 +fused_write32s_reset_ifused,642,5944 +fused_write32s_reset_ifused,643,5944 +fused_write32s_reset_ifused,644,5942 +fused_write32s_reset_ifused,645,5951 +fused_write32s_reset_ifused,646,5940 +fused_write32s_reset_ifused,647,5951 +fused_write32s_reset_ifused,648,5941 +fused_write32s_reset_ifused,649,5942 +fused_write32s_reset_ifused,650,5943 +fused_write32s_reset_ifused,651,5942 +fused_write32s_reset_ifused,652,5939 +fused_write32s_reset_ifused,653,5939 +fused_write32s_reset_ifused,654,5941 +fused_write32s_reset_ifused,655,5943 +fused_write32s_reset_ifused,656,5950 +fused_write32s_reset_ifused,657,5940 +fused_write32s_reset_ifused,658,5933 +fused_write32s_reset_ifused,659,5927 +fused_write32s_reset_ifused,660,5942 +fused_write32s_reset_ifused,661,5946 +fused_write32s_reset_ifused,662,5939 +fused_write32s_reset_ifused,663,5943 +fused_write32s_reset_ifused,664,5941 +fused_write32s_reset_ifused,665,5941 +fused_write32s_reset_ifused,666,5941 +fused_write32s_reset_ifused,667,5949 +fused_write32s_reset_ifused,668,5946 +fused_write32s_reset_ifused,669,5941 +fused_write32s_reset_ifused,670,5938 +fused_write32s_reset_ifused,671,5942 +fused_write32s_reset_ifused,672,5940 +fused_write32s_reset_ifused,673,5941 +fused_write32s_reset_ifused,674,5939 +fused_write32s_reset_ifused,675,5941 +fused_write32s_reset_ifused,676,5941 +fused_write32s_reset_ifused,677,5948 +fused_write32s_reset_ifused,678,5941 +fused_write32s_reset_ifused,679,5950 +fused_write32s_reset_ifused,680,5943 +fused_write32s_reset_ifused,681,5952 +fused_write32s_reset_ifused,682,5945 +fused_write32s_reset_ifused,683,5950 +fused_write32s_reset_ifused,684,5942 +fused_write32s_reset_ifused,685,5943 +fused_write32s_reset_ifused,686,5942 +fused_write32s_reset_ifused,687,5941 +fused_write32s_reset_ifused,688,5941 +fused_write32s_reset_ifused,689,5949 +fused_write32s_reset_ifused,690,5943 +fused_write32s_reset_ifused,691,5944 +fused_write32s_reset_ifused,692,5947 +fused_write32s_reset_ifused,693,5944 +fused_write32s_reset_ifused,694,5948 +fused_write32s_reset_ifused,695,5944 +fused_write32s_reset_ifused,696,5940 +fused_write32s_reset_ifused,697,5942 +fused_write32s_reset_ifused,698,5940 +fused_write32s_reset_ifused,699,5932 +fused_write32s_reset_ifused,700,5926 +fused_write32s_reset_ifused,701,5930 +fused_write32s_reset_ifused,702,5932 +fused_write32s_reset_ifused,703,5920 +fused_write32s_reset_ifused,704,5917 +fused_write32s_reset_ifused,705,5937 +fused_write32s_reset_ifused,706,5941 +fused_write32s_reset_ifused,707,5939 +fused_write32s_reset_ifused,708,5941 +fused_write32s_reset_ifused,709,5944 +fused_write32s_reset_ifused,710,5941 +fused_write32s_reset_ifused,711,5946 +fused_write32s_reset_ifused,712,5940 +fused_write32s_reset_ifused,713,5935 +fused_write32s_reset_ifused,714,5938 +fused_write32s_reset_ifused,715,5946 +fused_write32s_reset_ifused,716,5942 +fused_write32s_reset_ifused,717,5940 +fused_write32s_reset_ifused,718,5943 +fused_write32s_reset_ifused,719,5944 +fused_write32s_reset_ifused,720,5945 +fused_write32s_reset_ifused,721,5951 +fused_write32s_reset_ifused,722,5942 +fused_write32s_reset_ifused,723,5945 +fused_write32s_reset_ifused,724,5941 +fused_write32s_reset_ifused,725,5941 +fused_write32s_reset_ifused,726,5942 +fused_write32s_reset_ifused,727,5944 +fused_write32s_reset_ifused,728,5942 +fused_write32s_reset_ifused,729,5943 +fused_write32s_reset_ifused,730,5940 +fused_write32s_reset_ifused,731,5940 +fused_write32s_reset_ifused,732,5942 +fused_write32s_reset_ifused,733,5943 +fused_write32s_reset_ifused,734,5947 +fused_write32s_reset_ifused,735,5940 +fused_write32s_reset_ifused,736,5943 +fused_write32s_reset_ifused,737,5943 +fused_write32s_reset_ifused,738,5941 +fused_write32s_reset_ifused,739,5943 +fused_write32s_reset_ifused,740,5947 +fused_write32s_reset_ifused,741,5947 +fused_write32s_reset_ifused,742,5944 +fused_write32s_reset_ifused,743,5943 +fused_write32s_reset_ifused,744,5930 +fused_write32s_reset_ifused,745,5930 +fused_write32s_reset_ifused,746,5947 +fused_write32s_reset_ifused,747,5941 +fused_write32s_reset_ifused,748,5939 +fused_write32s_reset_ifused,749,5938 +fused_write32s_reset_ifused,750,5940 +fused_write32s_reset_ifused,751,5942 +fused_write32s_reset_ifused,752,5941 +fused_write32s_reset_ifused,753,5944 +fused_write32s_reset_ifused,754,5943 +fused_write32s_reset_ifused,755,5943 +fused_write32s_reset_ifused,756,5944 +fused_write32s_reset_ifused,757,5945 +fused_write32s_reset_ifused,758,5938 +fused_write32s_reset_ifused,759,5944 +fused_write32s_reset_ifused,760,5940 +fused_write32s_reset_ifused,761,5942 +fused_write32s_reset_ifused,762,5945 +fused_write32s_reset_ifused,763,5938 +fused_write32s_reset_ifused,764,5941 +fused_write32s_reset_ifused,765,5942 +fused_write32s_reset_ifused,766,5942 +fused_write32s_reset_ifused,767,5940 +fused_write32s_reset_ifused,768,5941 +fused_write32s_reset_ifused,769,5941 +fused_write32s_reset_ifused,770,5939 +fused_write32s_reset_ifused,771,5943 +fused_write32s_reset_ifused,772,5942 +fused_write32s_reset_ifused,773,5949 +fused_write32s_reset_ifused,774,5941 +fused_write32s_reset_ifused,775,5941 +fused_write32s_reset_ifused,776,5940 +fused_write32s_reset_ifused,777,5943 +fused_write32s_reset_ifused,778,5940 +fused_write32s_reset_ifused,779,5941 +fused_write32s_reset_ifused,780,5944 +fused_write32s_reset_ifused,781,5940 +fused_write32s_reset_ifused,782,5942 +fused_write32s_reset_ifused,783,5946 +fused_write32s_reset_ifused,784,5946 +fused_write32s_reset_ifused,785,5949 +fused_write32s_reset_ifused,786,5944 +fused_write32s_reset_ifused,787,5926 +fused_write32s_reset_ifused,788,5953 +fused_write32s_reset_ifused,789,5958 +fused_write32s_reset_ifused,790,5956 +fused_write32s_reset_ifused,791,5946 +fused_write32s_reset_ifused,792,5943 +fused_write32s_reset_ifused,793,5946 +fused_write32s_reset_ifused,794,5945 +fused_write32s_reset_ifused,795,5941 +fused_write32s_reset_ifused,796,5943 +fused_write32s_reset_ifused,797,5947 +fused_write32s_reset_ifused,798,5944 +fused_write32s_reset_ifused,799,5942 +fused_write32s_reset_ifused,800,5943 +fused_write32s_reset_ifused,801,5943 +fused_write32s_reset_ifused,802,5943 +fused_write32s_reset_ifused,803,5943 +fused_write32s_reset_ifused,804,5951 +fused_write32s_reset_ifused,805,5950 +fused_write32s_reset_ifused,806,5945 +fused_write32s_reset_ifused,807,5945 +fused_write32s_reset_ifused,808,5941 +fused_write32s_reset_ifused,809,5947 +fused_write32s_reset_ifused,810,5946 +fused_write32s_reset_ifused,811,5943 +fused_write32s_reset_ifused,812,5943 +fused_write32s_reset_ifused,813,5945 +fused_write32s_reset_ifused,814,5944 +fused_write32s_reset_ifused,815,5942 +fused_write32s_reset_ifused,816,5945 +fused_write32s_reset_ifused,817,5948 +fused_write32s_reset_ifused,818,5946 +fused_write32s_reset_ifused,819,5944 +fused_write32s_reset_ifused,820,5945 +fused_write32s_reset_ifused,821,5943 +fused_write32s_reset_ifused,822,5945 +fused_write32s_reset_ifused,823,5943 +fused_write32s_reset_ifused,824,5942 +fused_write32s_reset_ifused,825,5948 +fused_write32s_reset_ifused,826,5946 +fused_write32s_reset_ifused,827,5945 +fused_write32s_reset_ifused,828,5953 +fused_write32s_reset_ifused,829,5951 +fused_write32s_reset_ifused,830,5943 +fused_write32s_reset_ifused,831,5945 +fused_write32s_reset_ifused,832,5946 +fused_write32s_reset_ifused,833,5943 +fused_write32s_reset_ifused,834,5943 +fused_write32s_reset_ifused,835,5943 +fused_write32s_reset_ifused,836,5945 +fused_write32s_reset_ifused,837,5948 +fused_write32s_reset_ifused,838,5948 +fused_write32s_reset_ifused,839,5949 +fused_write32s_reset_ifused,840,5948 +fused_write32s_reset_ifused,841,5958 +fused_write32s_reset_ifused,842,5943 +fused_write32s_reset_ifused,843,5946 +fused_write32s_reset_ifused,844,5944 +fused_write32s_reset_ifused,845,5951 +fused_write32s_reset_ifused,846,5946 +fused_write32s_reset_ifused,847,5946 +fused_write32s_reset_ifused,848,5943 +fused_write32s_reset_ifused,849,5952 +fused_write32s_reset_ifused,850,5949 +fused_write32s_reset_ifused,851,5944 +fused_write32s_reset_ifused,852,5943 +fused_write32s_reset_ifused,853,5944 +fused_write32s_reset_ifused,854,5943 +fused_write32s_reset_ifused,855,5945 +fused_write32s_reset_ifused,856,5943 +fused_write32s_reset_ifused,857,5949 +fused_write32s_reset_ifused,858,5944 +fused_write32s_reset_ifused,859,5946 +fused_write32s_reset_ifused,860,5942 +fused_write32s_reset_ifused,861,5944 +fused_write32s_reset_ifused,862,5947 +fused_write32s_reset_ifused,863,5944 +fused_write32s_reset_ifused,864,5943 +fused_write32s_reset_ifused,865,5943 +fused_write32s_reset_ifused,866,5943 +fused_write32s_reset_ifused,867,5948 +fused_write32s_reset_ifused,868,5948 +fused_write32s_reset_ifused,869,5941 +fused_write32s_reset_ifused,870,5949 +fused_write32s_reset_ifused,871,5949 +fused_write32s_reset_ifused,872,5932 +fused_write32s_reset_ifused,873,5926 +fused_write32s_reset_ifused,874,5925 +fused_write32s_reset_ifused,875,5916 +fused_write32s_reset_ifused,876,5919 +fused_write32s_reset_ifused,877,5919 +fused_write32s_reset_ifused,878,5925 +fused_write32s_reset_ifused,879,5941 +fused_write32s_reset_ifused,880,5948 +fused_write32s_reset_ifused,881,5945 +fused_write32s_reset_ifused,882,5943 +fused_write32s_reset_ifused,883,5943 +fused_write32s_reset_ifused,884,5945 +fused_write32s_reset_ifused,885,5947 +fused_write32s_reset_ifused,886,5948 +fused_write32s_reset_ifused,887,5943 +fused_write32s_reset_ifused,888,5944 +fused_write32s_reset_ifused,889,5944 +fused_write32s_reset_ifused,890,5946 +fused_write32s_reset_ifused,891,5943 +fused_write32s_reset_ifused,892,5943 +fused_write32s_reset_ifused,893,5945 +fused_write32s_reset_ifused,894,5946 +fused_write32s_reset_ifused,895,5950 +fused_write32s_reset_ifused,896,5947 +fused_write32s_reset_ifused,897,5949 +fused_write32s_reset_ifused,898,5945 +fused_write32s_reset_ifused,899,5945 +fused_write32s_reset_ifused,900,5945 +fused_write32s_reset_ifused,901,5946 +fused_write32s_reset_ifused,902,5948 +fused_write32s_reset_ifused,903,5949 +fused_write32s_reset_ifused,904,5942 +fused_write32s_reset_ifused,905,5946 +fused_write32s_reset_ifused,906,5943 +fused_write32s_reset_ifused,907,5945 +fused_write32s_reset_ifused,908,5945 +fused_write32s_reset_ifused,909,5944 +fused_write32s_reset_ifused,910,5946 +fused_write32s_reset_ifused,911,5943 +fused_write32s_reset_ifused,912,5941 +fused_write32s_reset_ifused,913,5942 +fused_write32s_reset_ifused,914,5943 +fused_write32s_reset_ifused,915,5943 +fused_write32s_reset_ifused,916,5946 +fused_write32s_reset_ifused,917,5941 +fused_write32s_reset_ifused,918,5947 +fused_write32s_reset_ifused,919,5947 +fused_write32s_reset_ifused,920,5945 +fused_write32s_reset_ifused,921,5941 +fused_write32s_reset_ifused,922,5954 +fused_write32s_reset_ifused,923,5945 +fused_write32s_reset_ifused,924,5942 +fused_write32s_reset_ifused,925,5946 +fused_write32s_reset_ifused,926,5952 +fused_write32s_reset_ifused,927,5942 +fused_write32s_reset_ifused,928,5943 +fused_write32s_reset_ifused,929,5943 +fused_write32s_reset_ifused,930,5943 +fused_write32s_reset_ifused,931,5945 +fused_write32s_reset_ifused,932,5944 +fused_write32s_reset_ifused,933,5946 +fused_write32s_reset_ifused,934,5947 +fused_write32s_reset_ifused,935,5943 +fused_write32s_reset_ifused,936,5942 +fused_write32s_reset_ifused,937,5945 +fused_write32s_reset_ifused,938,5942 +fused_write32s_reset_ifused,939,5948 +fused_write32s_reset_ifused,940,5942 +fused_write32s_reset_ifused,941,5946 +fused_write32s_reset_ifused,942,5952 +fused_write32s_reset_ifused,943,5945 +fused_write32s_reset_ifused,944,5943 +fused_write32s_reset_ifused,945,5943 +fused_write32s_reset_ifused,946,5945 +fused_write32s_reset_ifused,947,5944 +fused_write32s_reset_ifused,948,5945 +fused_write32s_reset_ifused,949,5943 +fused_write32s_reset_ifused,950,5942 +fused_write32s_reset_ifused,951,5943 +fused_write32s_reset_ifused,952,5942 +fused_write32s_reset_ifused,953,5947 +fused_write32s_reset_ifused,954,5949 +fused_write32s_reset_ifused,955,5945 +fused_write32s_reset_ifused,956,5944 +fused_write32s_reset_ifused,957,5948 +fused_write32s_reset_ifused,958,5950 +fused_write32s_reset_ifused,959,5946 +fused_write32s_reset_ifused,960,5947 +fused_write32s_reset_ifused,961,5943 +fused_write32s_reset_ifused,962,5943 +fused_write32s_reset_ifused,963,5942 +fused_write32s_reset_ifused,964,5946 +fused_write32s_reset_ifused,965,5944 +fused_write32s_reset_ifused,966,5943 +fused_write32s_reset_ifused,967,5943 +fused_write32s_reset_ifused,968,5944 +fused_write32s_reset_ifused,969,5948 +fused_write32s_reset_ifused,970,5944 +fused_write32s_reset_ifused,971,5942 +fused_write32s_reset_ifused,972,5946 +fused_write32s_reset_ifused,973,5953 +fused_write32s_reset_ifused,974,5945 +fused_write32s_reset_ifused,975,5950 +fused_write32s_reset_ifused,976,5943 +fused_write32s_reset_ifused,977,5943 +fused_write32s_reset_ifused,978,5945 +fused_write32s_reset_ifused,979,5949 +fused_write32s_reset_ifused,980,5944 +fused_write32s_reset_ifused,981,5945 +fused_write32s_reset_ifused,982,5944 +fused_write32s_reset_ifused,983,5946 +fused_write32s_reset_ifused,984,5945 +fused_write32s_reset_ifused,985,5944 +fused_write32s_reset_ifused,986,5945 +fused_write32s_reset_ifused,987,5942 +fused_write32s_reset_ifused,988,5946 +fused_write32s_reset_ifused,989,5945 +fused_write32s_reset_ifused,990,5940 +fused_write32s_reset_ifused,991,5945 +fused_write32s_reset_ifused,992,5944 +fused_write32s_reset_ifused,993,5947 +fused_write32s_reset_ifused,994,5943 +fused_write32s_reset_ifused,995,5946 +fused_write32s_reset_ifused,996,5946 +fused_write32s_reset_ifused,997,5944 +fused_write32s_reset_ifused,998,5943 +fused_write32s_reset_ifused,999,5948 diff --git a/programming_examples/reconfiguration/benchmark_results.png b/programming_examples/reconfiguration/benchmark_results.png index e30f38b7118916983d198a11a86823f9a5505e52..2c96e5ab2c7994a27b8036ee3c3f23adf11d8863 100644 GIT binary patch literal 336117 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

Z8~-b=|7!md2;cJ!URP&N$P0wW(|+s8qJ;9h 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

D%KT*8jYJtyTAlF*BDiW1 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 z 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ℜ=K{Kvh zt%+xp@2CFV{zfpJBVNogES};4`ZX&Su@* zL0$=(Z@(LHhe1HW?ovIlVd84d+O;(O2tDQQ{?--jB)4X1+1|Ty5nLvWhZFnU_GN*4 ztPUp(*=Tq0jci}2&w!HrRF_z{rJsHs)u--&dXGJXO#lLNXk{M!Y)VS8@dXQPjp zJbKWjOP3XuFY@yPju#d#t?1LNOcStXg@tEl*Tk;M3T@QJf~ZD}*bapkbj6D!>O|9u zZ(6n5RcH!Cu(ZTR=K$c`$r+U_o0LW`r6AgJmG?u_;7=Cb;c2v%R+hfImw8;{vVD6A zJQ$WmLC2(rhjEue63wB4WpYHwUNMkbS{vIBY+mR3R~r-iIU$mVX9=`#R!ALF_TApV z*e;_(y1|)HYRR)DN?^+ZxCFAHn`eBLL)VXzN3mw@bMC^#!oqd#eC_EKGkH(4obtO8 zd!fa257As~=+=i1`YSh}`D4)7o&NqhoKcBy*<=2wOE&S|2GC0Tk@qwJz`{}92QUua!Cwvl+2PbLE9Lnz6lR8}Hx!aAO07uUrA0xpoH0%l5=nN6JDJBI;VZ2Z%&;r2b zMvgv3#1(`z1c;!E*eAUX03VGP{yj)WPXTLbtg!==5zn?*kzAp<@r8Ob>RLH1L*~Dz zg?RJY^!?o)41Z z7)RIok~7jY8Y^N>Yn5V{9_2G>f(BXHrx z!JonbGI@rC?*S0^3NloKN}&fRYJdCoZ5)X$1Ik|l`oBCkL}q@|qvlQ@TDYIw<25~% zugZ)89rr#wnGH%f1c(&xZ5q5~zXmFfIruRUlG`3+aF?1r0QqW%_7!&PrCG}%v>*}% zTH}<=7i`+HWhZrC32?Q!FbkIrDw=6^TaIDy!$(i8DhaI~K?-`P<(~`AZVIyk54O~s zI8xXaZSAlg92`>Q215QKu1f?zL_RAD9pE+5!2TTfGz$5D4!nHcqiXgtaj{}QRPbDvD4SRGxc*sRYJ%Dxo#t|^Kuc^D8?C6MtSkU(0UgqB zP&>m24rykTNWkR?ciFy7Dl%4LJ%zXz3g>9p_z1fRFp|qhed@*QAeX|_8k|e>9oB0e zYik26)Pg4UPF$QxOkDN;1H1P{Jy2x-7d*#7Oe66+e%6eBL1^o`P^G0&CRG-BSNoB! z&GVXVGeP016+3cweJS{%v)CYHdI?C$;7%sm8%)~OX|UGS2A;IZWQEU`Ia%m7Vt7)-qxgrO|H4kK?L6cYO9A|Fw+P8$+)i|-rq zjEOK~!-lOxPM$zSER+X)=4W^5=IPQuJbxFDEO92Dp1aW2{^q;yx-Gr%u+q$eFhgg+ zfQRPmq?yE2+S%7Im0FQL^-e?7zyBQAmN0AE0OzVonBaIp?!3lHSqsP!h)o5GV%Q}0 zLDIE&!09r~M*@fL`m@CX8GP+mL3u4K7(3zLH*a=g+T$#$%WX=^=y&c<&{`h$fFWy% zK;Pt0rUmI51n52Z6~CW`MzS&9O*`tx9S6{7Pqnfef~v^A<->}aYP`2 z?S%Dok|k~0LteRt$^$n#VOh%CXZEMhyJ#IfL6E7d(rX>P3Tlr zNz0BnxQtbI3&Yc`kNg7f5O_t}@c8;>p@)!=#`B;3>y^-*$K4b*^-Zq{6J%M5A;wSO z;PBJn<7bU)VD$C@^^fglgfQX`@=~d`3sCyIzR&vfn;@pnPbx;$nn2nC%-$;QRyOO@ zT@1Mr-AgdC!+MC9jIYFj_qN&AQ0rW|KQmHZ(uj+Oc&(c65Jr=$d&JCVYsfOTr|S>g zFnLMRqYBws4nyileo#W|M1pN6SbPoFI-qM>!Q45GEVEhUp|osAbT2D!(M z>@{{fi%UM4jq`NE@=K_P_3Tv?&6OLp$@FOU5(JK4{|Kl2|6Zj;}C zqLp<%FJ+G&he8c|IvFb4ub>d2TxY5J6_iU51lfNKr$KB{xRgL*=Gh0=F`hHN8^_#) zXSA3iqPOH%{GLAD3lkw}NE&IhB5IJXRK4fiwq))^Vhsa1sOgLPh;zX(%JX_xI~*R_ zMj~N}Nrhp@;gbrXmC`eG^}fDM+Vva5FeQDF&A3e?ndR%dnLo?n-^WC^njZai@I&)aGnF||eHB!QO+})o>n~%5e3{jRI-d(^3 z(;LQE8bmab+E_CtCdj06@zY3@{jt*G!Vc2-k9;U7Tv#;ex61PB5~wE5ni4TFgQ8>^ z!XOzmYvN|JJdMM)Upv$?vT{RH&3DS5L$~wtIRztVa9DmpOe#`zv0Tg5WQpHbFsK#JbfI{<#$W?=b2tfW&#UrZa@Gw^1Qt&)M} zYtoH+!BoJaW?h9-BT;W1iy$fa0YjYhWFHg$+^&2`8wYI((xrf=Mvy&+!VPiDBvD|; zXc%)X#zLiawI^DZxyB492c~VQITF0ase#{@;Y4rqsAjhIm9Yq2d~3R(4a|Q zw4@;x-q~$!$lLR^Z_NLCxD5F~-#98!a_N)qFLBM;0nEa+UH67e{awAL1si-NvK_Xy zU3Y?*mP({%&BG&Ku!8zvOcnOW50OByMK!WkpnK%wj8C*0t-)F!W3&y&vG+70Zn2Wk zRJ(Hf?eH9Wk;?0G7-0<}Ow5(67dGI|mIt27efkXE{B2FPMfv{RuOxdIT(XDO2L*t2 z?XbB`2NQ!1MUUB;mIU!{o;ppPV>1ETRfVxs{?)hN>Y~>*Dnfo^fa>2LnC1(q2&X#d z_Q4Ho%Zpb-yK4QNPC~FOj&8|0Y%WQpH~-guRFTzc6v=ZQo{#YaH11!c?{NP0iXvm> zUIy)VDJ!kJO&3N-{hy>X9_KpIYXB%!{5p`x8-q@wb%>H0h&^q5n+lDCG_q0-^N)Lk z<(KD+eaM#0AMVgP`>u z`Z{QW#%{0ckq#XjzTCea-aL*bNFB9jMn<9q5KAERqo|?vo;oDsW_0055T0q%i>oCT zO|nM7D=X~AP)qaAi?LC9!tPPND=g@%zuTuXwKLYvHnosUh_-f~)d{%LdrsBL8fk6( zzP_LQl{$g(;+AX75#ZySufOg{3n7|N3!w}8p!TUDEpTqwTf8KtnuE<&azLW}z`FEq z*ppo+4um5_tRO&1((R_}c`fJck&Q;a%paJpp`-!eu)bSsu!T>9nQ!X9F%vY+zpyiB z`~F{4BD>%>bDo`|-nJuCLDxxAhZCktocaye5(7%^Ru`QC(jO591 zI=AErQ-DP-V&MbIL_@^cTR44f-3TSJqp|TgPPVQDOfrI8wn7Hwq({Rxf7fd;i{FJ> z*iuWKRJ}r7&=uBIa)gp9gg*xb<>I2$AtCyskCdD@uR)Q4*B0NqMh&ZuWY;*_BLHtq zRw_RKzNc~%KEL14*1lKd_k;4C=8r~XbF4(yp_qaZBIOWKk9*Dt4>GAjIeWIxyr3=^ zaQYLibN?DtdwVg_2>P-+DxVN0aY*RY_WlBllm3)5NtK=$XaU2dHDe9DHJszVqciF~ zyZd88mG%~0Kd2eZ*OeAuxIJ|=zTM}KoA0YjDMe9{*;>p9MBX~Vl)!k5Q#_efM`0pS z;(*ERBJyr6U)=`=)MT0J2Sg_8uwt=~afPsa65U!Ob&9%VgN>2^G4}K~p^#(%Co2>t9`BbKba*k3 z+?J#W3JmTIKP+ai$+sKShed89p{*AyL z(MeonUP<13Dyx+M0CEPwiE=aNnogckms@V|hn1I>PoizaM6n{=OWZ+~-$8QH1U2_7 zC`3?`mgtjcijv(Qe4Nn2#=H}ucJpgSWD|$4=G=I~tkG4r&&?~7P&&ra7vmu6qT3fe zJ+?i*TIcZZqKm<=-cgz*seim0H4>eIfu!oRwFPFIg)bvc5b1~rOt_V!HWSbviIO6u zUnkOMyC8HW<|RyQ-h2b2;=R4A+cgwUM(~R9;(x}_Ova@8jBgx8A5Qc=g5`d0A8}g~ zG5S>2BX)cmET+avVaMiY=ES`JR4Z$_h!16+QDr%6Q2brGN3(ROIn}69J7J?ldU%Nc z=9xl@`b#iNQ0({gku0Hv#dxTLSc`E~U7MkQ7w0FuN*p1mqIZ!s@M&9b`?Wl&_f_F% z#FT{2PRN?FvxaJ2{i@~n-}gXP3CtBGkOYm*<9`fCP|cCv020LV1wIg=WiefRICe=B zs?*64Izl@>$E$81sxfdfI1>XTAdq>0>#s@ex7wupV8$i3XrIKB*(g9f`h@4VYTdf4oIL7g6x92H zd&ufoj~`yRN3>D@N5NX7H7&HpSiUVU7qosPt-It*s6Do^{L}n%`+?!DTeWgt;1x6D z5*V1*zD+ob#Q6j|?JYc#G`!-uUiDn+-#PgYvUDn}kfxNwhtpK6VHD}gxl*nrPp zXBGDkcZspnCBKV|NLOC7gb+AVulJ!%H0u>vKm3i126fufa2D4THGOh3t⋘#47kQ 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
Wr}L9~XQX~8g`gj$ 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⋙F~YF~_MQj$_blXy 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

l;%SyS^^m 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 b?Aqpcn{SPOckXK_@2Wf5U{dI}-);Io7kD!h diff --git a/programming_examples/reconfiguration/ablation/visualize_ablation.py b/programming_examples/reconfiguration/ablation/visualize_ablation.py deleted file mode 100755 index 13af8e7f90f..00000000000 --- a/programming_examples/reconfiguration/ablation/visualize_ablation.py +++ /dev/null @@ -1,214 +0,0 @@ -#!/usr/bin/env python3 -import sys -import csv -import matplotlib.pyplot as plt -import numpy as np -from pathlib import Path -import seaborn as sns - -# Set style and font - match visualize_results.py -plt.style.use('dark_background') - -# Configuration labels -CONFIG_LABELS = { - '0_write32s_reset_core_dma_switch_lock': 'Additional Reset of Everything\n(Core+DMA+Switch+Lock)', - '1_write32s_reset_core_dma_switch': 'Additional Core+DMA+Switch Reset', - '2_write32s_reset_core_dma': 'Additional Core+DMA Reset', - '3_write32s_reset_core': 'Additional Core Reset', - '4_write32s_reset_nothing': 'No Additional Reset', -} - -def read_csv_file(csv_file): - """Read benchmark results from CSV with format: variant,iteration,time_us""" - times = [] - - with open(csv_file, 'r') as f: - reader = csv.reader(f) - for row in reader: - if len(row) >= 3: - time_us = float(row[2]) - times.append(time_us) - - return np.array(times) - -def compute_statistics(times): - """Compute mean, median, std, min, max for timing data""" - return { - 'mean': np.mean(times), - 'median': np.median(times), - 'std': np.std(times), - 'min': np.min(times), - 'max': np.max(times), - 'q1': np.percentile(times, 25), - 'q3': np.percentile(times, 75), - 'times': times - } - -def plot_results(stats_dict, output_file): - """Create bar chart with box-and-whisker overlay for ablation study""" - fig, ax = plt.subplots(figsize=(14, 8)) - - # Sort by config number (0-4) - configs = sorted(stats_dict.keys(), key=lambda x: int(x.split('_')[0])) - labels = [CONFIG_LABELS[c] for c in configs] - means = [stats_dict[c]['mean'] for c in configs] - - # Color scheme - use seaborn palette (match visualize_results.py) - colors = sns.color_palette('flare', n_colors=len(configs)) - - # Create bar chart for means - x_pos = np.arange(len(configs)) - bars = ax.bar(x_pos, means, color=colors, alpha=1.0, label='Mean', width=0.6) - - # Overlay box-and-whisker plots - bp_data = [stats_dict[c]['times'] for c in configs] - bp = ax.boxplot(bp_data, positions=x_pos, widths=0.4, - flierprops=dict(marker='.', markersize=2)) - - ax.set_ylabel('Reconfiguration Time per Iteration (μs)', fontsize=12) - ax.set_xlabel('Reset Configuration', fontsize=12) - ax.set_title('AIE Reconfiguration Performance Ablation Study\n(Write32s Method)', - fontsize=14) - ax.set_xticks(x_pos) - ax.set_xticklabels(labels, fontsize=10) - ax.grid(axis='y', alpha=0.3) - - # Add mean value labels on bars - for i, (bar, mean) in enumerate(zip(bars, means)): - height = bar.get_height() - ax.text(bar.get_x() + bar.get_width()/2., height + 10, - f'{mean:.1f} μs', - ha='center', va='bottom', fontsize=10) - - # Add legend - from matplotlib.patches import Patch - legend_elements = [ - Patch(facecolor=colors[0], alpha=1.0, label='Mean (bar)'), - Patch(facecolor='white', edgecolor='black', label='Box: 25th-75th percentile'), - plt.Line2D([0], [0], color='black', linewidth=2, label='Median'), - plt.Line2D([0], [0], color='black', linewidth=1.5, label='Min/Max (whiskers)') - ] - ax.legend(handles=legend_elements, loc='upper right', fontsize=9) - - plt.tight_layout() - plt.savefig(output_file, dpi=300, bbox_inches='tight') - print(f"Plot saved to: {output_file}", file=sys.stderr) - -def print_statistics(stats_dict): - """Print detailed statistics to stderr""" - print("\n" + "="*90, file=sys.stderr) - print("ABLATION STUDY STATISTICS", file=sys.stderr) - print("="*90, file=sys.stderr) - print(file=sys.stderr) - - # Sort by config number - configs = sorted(stats_dict.keys(), key=lambda x: int(x.split('_')[0])) - - print(f"{'Configuration':<40} {'Mean':<10} {'Median':<10} {'Std Dev':<10} {'Min':<10} {'Max':<10}", file=sys.stderr) - print("-"*90, file=sys.stderr) - - for config in configs: - s = stats_dict[config] - label = CONFIG_LABELS[config] - print(f"{label:<40} {s['mean']:>8.2f} {s['median']:>8.2f} " - f"{s['std']:>8.2f} {s['min']:>8.2f} {s['max']:>8.2f}", file=sys.stderr) - - print(file=sys.stderr) - print("="*90, file=sys.stderr) - print("RELATIVE PERFORMANCE", file=sys.stderr) - print("="*90, file=sys.stderr) - print(file=sys.stderr) - - baseline = configs[0] - baseline_mean = stats_dict[baseline]['mean'] - print(f"{'Configuration':<40} {'Mean (μs)':<12} {'Relative to ' + CONFIG_LABELS[baseline][:20]:<30}", file=sys.stderr) - print("-"*90, file=sys.stderr) - - for config in configs: - mean = stats_dict[config]['mean'] - relative = mean / baseline_mean - label = CONFIG_LABELS[config] - print(f"{label:<40} {mean:>10.2f} {relative:>8.2f}x", file=sys.stderr) - - print(file=sys.stderr) - print("="*90, file=sys.stderr) - print("COMPARISON ANALYSIS", file=sys.stderr) - print("="*90, file=sys.stderr) - print(file=sys.stderr) - - fastest_config = min(configs, key=lambda c: stats_dict[c]['mean']) - fastest_mean = stats_dict[fastest_config]['mean'] - slowest_config = max(configs, key=lambda c: stats_dict[c]['mean']) - slowest_mean = stats_dict[slowest_config]['mean'] - - print(f"Fastest configuration: {CONFIG_LABELS[fastest_config]} ({fastest_mean:.2f} μs mean)", file=sys.stderr) - print(f"Slowest configuration: {CONFIG_LABELS[slowest_config]} ({slowest_mean:.2f} μs mean)", file=sys.stderr) - print(file=sys.stderr) - - speedup = slowest_mean / fastest_mean - improvement_pct = ((slowest_mean - fastest_mean) / slowest_mean) * 100 - print(f"Maximum speedup: {speedup:.2f}x", file=sys.stderr) - print(f" → {improvement_pct:.1f}% performance improvement from slowest to fastest", file=sys.stderr) - print(file=sys.stderr) - - # Analyze incremental improvements - print("Incremental Analysis (from most to least reset):", file=sys.stderr) - for i in range(len(configs) - 1): - curr = configs[i] - next_cfg = configs[i + 1] - curr_mean = stats_dict[curr]['mean'] - next_mean = stats_dict[next_cfg]['mean'] - - if next_mean < curr_mean: - speedup = curr_mean / next_mean - improvement = ((curr_mean - next_mean) / curr_mean) * 100 - print(f" {CONFIG_LABELS[curr][:30]} → {CONFIG_LABELS[next_cfg][:30]}", file=sys.stderr) - print(f" {speedup:.3f}x faster ({improvement:.1f}% improvement)", file=sys.stderr) - else: - slowdown = next_mean / curr_mean - degradation = ((next_mean - curr_mean) / curr_mean) * 100 - print(f" {CONFIG_LABELS[curr][:30]} → {CONFIG_LABELS[next_cfg][:30]}", file=sys.stderr) - print(f" {slowdown:.3f}x slower ({degradation:.1f}% degradation)", file=sys.stderr) - - print(file=sys.stderr) - print("="*90, file=sys.stderr) - -def main(): - ablation_dir = Path(".") - - # Find all CSV files - csv_files = sorted(ablation_dir.glob("*.csv")) - - if not csv_files: - print("Error: No CSV files found in current directory", file=sys.stderr) - sys.exit(1) - - stats_dict = {} - - for csv_file in csv_files: - config_name = csv_file.stem # e.g., "0_write32s_reset_core_dma_switch_lock" - - if config_name not in CONFIG_LABELS: - print(f"Warning: Unknown config {config_name}, skipping", file=sys.stderr) - continue - - times = read_csv_file(csv_file) - - if len(times) == 0: - print(f"Warning: No data in {csv_file}, skipping", file=sys.stderr) - continue - - stats_dict[config_name] = compute_statistics(times) - print(f"Loaded {len(times)} samples from {csv_file.name}", file=sys.stderr) - - if len(stats_dict) == 0: - print("Error: No valid data found", file=sys.stderr) - sys.exit(1) - - output_plot = "ablation_results.png" - plot_results(stats_dict, output_plot) - - print_statistics(stats_dict) - -if __name__ == "__main__": - main() diff --git a/programming_examples/reconfiguration/benchmark_results.csv b/programming_examples/reconfiguration/benchmark_results.csv deleted file mode 100644 index 611952e1184..00000000000 --- a/programming_examples/reconfiguration/benchmark_results.csv +++ /dev/null @@ -1 +0,0 @@ -variant,iteration,time_us diff --git a/programming_examples/reconfiguration/benchmark_results.png b/programming_examples/reconfiguration/benchmark_results.png deleted file mode 100644 index 2c96e5ab2c7994a27b8036ee3c3f23adf11d8863..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 336117 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

Z8~-b=|7!md2;cJ!URP&N$P0wW(|+s8qJ;9h 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

D%KT*8jYJtyTAlF*BDiW1 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 z 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ℜ=K{Kvh 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⋘#47kQ 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 -#include -#include -#include -#include - -template void eltwise_mul(T_in *a, T_in *b, T_out *c, int size) -{ - for (int i = 0; i < size; i++) { - c[i] = a[i] * b[i]; - } -} - -template void eltwise_vmul(T_in *a, T_in *b, T_out *c, int size) -{ - - event0(); - for (int i = 0; i < size; i += 16) { - auto A = aie::load_v<16>(a + i); - auto B = aie::load_v<16>(b + i); - auto C = aie::mul(A, B).template to_vector(); - aie::store_v(c + i, C); - } - event1(); -} - -extern "C" { - -void eltwise_mul_bf16_scalar(bfloat16 *a_in, bfloat16 *b_in, bfloat16 *c_out, int size) -{ - eltwise_mul(a_in, b_in, c_out, size); -} -void eltwise_mul_bf16_vector(bfloat16 *a_in, bfloat16 *b_in, bfloat16 *c_out, int size) -{ - eltwise_vmul(a_in, b_in, c_out, size); -} -} // extern "C" diff --git a/programming_examples/reconfiguration/kernels/mv.cc b/programming_examples/reconfiguration/kernels/mv.cc deleted file mode 100644 index db53093639e..00000000000 --- a/programming_examples/reconfiguration/kernels/mv.cc +++ /dev/null @@ -1,78 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved. -// SPDX-License-Identifier: Apache-2.0 - -#define NOCPP - -#include -#include -#include -#include - -#define REL_WRITE 0 -#define REL_READ 1 - -#include "aie_kernel_utils.h" - -#include - -void matvec_scalar(uint32_t m, uint32_t k, uint32_t row_offset, bfloat16 *a, bfloat16 *b, bfloat16 *c) -{ - for (uint32_t row = 0; row < m; row++) { - float acc = 0; - for (uint32_t i = 0; i < k; i++) { - acc += a[row * k + i] * b[i]; - } - c[row + row_offset * m] = static_cast(acc); - } -} - -template -void matvec_vectorized(uint32_t m, - uint32_t k, - uint32_t row_offset, - const bfloat16 *__restrict a, - const bfloat16 *__restrict b, - bfloat16 *__restrict c) -{ - ::aie::set_rounding(aie::rounding_mode::conv_even); - c += row_offset * m; - bfloat16 *c_end = c + m; - const bfloat16 *b_end = b + k; - for (; c < c_end; c++) { - aie::accum acc = aie::zeros(); - // The following two pragmas enable pipelining the zero-overhead loop, but they do assume that k is at least - // two. This assumption should hold for any useful use of this function; if k were one, this would be a simple - // scalar multiplication of a vector. - AIE_LOOP_MIN_ITERATION_COUNT(2) - for (const bfloat16 *__restrict b_cur = b; b_cur < b_end; b_cur += r, a += r) { - aie::vector a_vec = aie::load_v(a); - aie::vector b_vec = aie::load_v(b_cur); - acc = aie::mac(acc, a_vec, b_vec); - } - *c = static_cast(aie::reduce_add(acc.template to_vector())); - } -} - -extern "C" { - -void matvec_scalar_bf16_bf16(uint32_t m, - uint32_t k, - uint32_t row_offset, - bfloat16 *a_in, - bfloat16 *b_in, - bfloat16 *c_out) -{ - matvec_scalar(m, k, row_offset, a_in, b_in, c_out); -} - -void matvec_vectorized_bf16_bf16(uint32_t m, - uint32_t k, - uint32_t row_offset, - bfloat16 *a_in, - bfloat16 *b_in, - bfloat16 *c_out) -{ - matvec_vectorized<64>(m, k, row_offset, a_in, b_in, c_out); -} - -} // extern "C" \ No newline at end of file diff --git a/programming_examples/reconfiguration/kernels/silu.cc b/programming_examples/reconfiguration/kernels/silu.cc deleted file mode 100644 index 0d1e12caec1..00000000000 --- a/programming_examples/reconfiguration/kernels/silu.cc +++ /dev/null @@ -1,53 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved. -// SPDX-License-Identifier: Apache-2.0 - -#include "aie_kernel_utils.h" - -#include -#include - -using namespace aie; - -void silu_tanh_approx_bf16(bfloat16 *restrict input_vector, bfloat16 *restrict output_vector, const int32_t vector_size) -{ - event0(); - - int num_elems = vector_size; - auto it_in = aie::begin_restrict_vector<16>((bfloat16 *)input_vector); - auto it_out = aie::begin_restrict_vector<16>((bfloat16 *)output_vector); - - aie::vector input; - aie::vector output; - aie::vector register_0_5 = aie::broadcast(0.5f); - aie::vector register_1 = aie::broadcast(1.0f); - AIE_PREPARE_FOR_PIPELINING - AIE_LOOP_MIN_ITERATION_COUNT(64) - for (int i = 0; i < num_elems; i += 16) { - // Load input vector - input = *it_in++; - - // Compute tanh approximation - auto half_x = aie::mul(input, register_0_5); - auto tanh_half_x = aie::tanh(half_x.to_vector()); - auto tanh_half_x_approx = aie::add(tanh_half_x, register_1); - aie::vector sigmoid_approx = aie::mul(tanh_half_x_approx, register_0_5); - // Compute output: x * tanh_approx - auto mul_output = aie::mul(input, sigmoid_approx); - - // Store output vector - *it_out++ = mul_output.to_vector(); - } - - event1(); - - return; -} - -extern "C" { - -void silu_bf16(bfloat16 *restrict input, bfloat16 *restrict output, int input_size) -{ - silu_tanh_approx_bf16(input, output, input_size); -} - -} // extern "C" diff --git a/programming_examples/reconfiguration/operators/eltwise_mul.py b/programming_examples/reconfiguration/operators/eltwise_mul.py deleted file mode 100644 index 88ae1e318f6..00000000000 --- a/programming_examples/reconfiguration/operators/eltwise_mul.py +++ /dev/null @@ -1,206 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 - -from ml_dtypes import bfloat16 -from pathlib import Path -import numpy as np -import argparse -import sys - -from aie.iron import Kernel, ObjectFifo, Program, Runtime, Worker -from aie.iron.placers import SequentialPlacer -from aie.iron.device import NPU1, NPU2 -from aie.helpers.taplib.tap import TensorAccessPattern -from aie.iron.controlflow import range_ - - -def my_eltwise_mul(dev, num_elements, num_columns, num_channels, tile_size, trace_size): - per_tile_elements = 4096 if tile_size > 4096 else tile_size - n = per_tile_elements * num_columns - if num_elements % n != 0: - raise ValueError( - f"Number of elements ({num_elements}) must be a multiple of {n}." - ) - N_div_n = num_elements // n - chunk = num_elements // num_columns - dtype = bfloat16 - - # Define tensor types - tensor_ty = np.ndarray[(num_elements,), np.dtype[dtype]] - tile_ty = np.ndarray[(per_tile_elements,), np.dtype[dtype]] - - # AIE-array data movement with object fifos (one per column, not per channel) - of_in1s = [ObjectFifo(tile_ty, name=f"in1_{i}") for i in range(num_columns)] - of_in2s = [ObjectFifo(tile_ty, name=f"in2_{i}") for i in range(num_columns)] - of_outs = [ObjectFifo(tile_ty, name=f"out_{i}") for i in range(num_columns)] - - # AIE Core Function declaration - eltwise_mul_bf16_vector = Kernel( - "eltwise_mul_bf16_vector", "mul.o", [tile_ty, tile_ty, tile_ty, np.int32] - ) - - # Define a task that will run on a compute tile - def core_body(of_in1, of_in2, of_out, eltwise_mul): - # Number of sub-vector "tile" iterations - for _ in range_(N_div_n): - elem_in1 = of_in1.acquire(1) - elem_in2 = of_in2.acquire(1) - elem_out = of_out.acquire(1) - eltwise_mul(elem_in1, elem_in2, elem_out, per_tile_elements) - of_in1.release(1) - of_in2.release(1) - of_out.release(1) - - # Create a worker to run the task on a compute tile (one per column) - my_workers = [ - Worker( - core_body, - [ - of_in1s[i].cons(), - of_in2s[i].cons(), - of_outs[i].prod(), - eltwise_mul_bf16_vector, - ], - ) - for i in range(num_columns) - ] - - # Create a TensorAccessPattern for each column - # to describe the data movement - # The pattern chops the data in equal chunks - # and moves them in parallel across the columns - taps = [ - TensorAccessPattern( - (1, num_elements), - chunk * i, # Start offset for column i - [1, 1, 1, chunk], - [0, 0, 0, 1], - ) - for i in range(num_columns) - ] - - # Runtime operations to move data to/from the AIE-array - rt = Runtime() - with rt.sequence(tensor_ty, tensor_ty, tensor_ty) as (A, B, C): - rt.start(*my_workers) - - # Initialize a group for parallel drain tasks, with fill resources free'd when drains complete. - tg = rt.task_group() - - # Fill the input objectFIFOs with data - for i in range(num_columns): - rt.fill( - of_in1s[i].prod(), - A, - taps[i], - task_group=tg, - ) - rt.fill( - of_in2s[i].prod(), - B, - taps[i], - task_group=tg, - ) - # Drain the output objectFIFOs with data - for i in range(num_columns): - rt.drain( - of_outs[i].cons(), - C, - taps[i], - wait=True, # wait for the transfer to complete and data to be available - task_group=tg, - ) - rt.finish_task_group(tg) - - # Place program components (assign them resources on the device) and generate an MLIR module - return Program(dev, rt).resolve_program(SequentialPlacer()) - - -if __name__ == "__main__": - - def str_to_device(device: str): - if device == "npu": - return NPU1() - elif device == "npu2": - return NPU2() - else: - raise ValueError(f"Device name {device} is unknown.") - - p = argparse.ArgumentParser() - # Parse command line arguments - - # Device name is required to select the AIE device: npu or npu2 - p.add_argument( - "-d", - "--dev", - required=True, - dest="device", - help="AIE Device", - type=str_to_device, - ) - # Transfer size is required to define the size of the data to be transferred - # It must be a multiple of tile_size and divisible by the number of columns and channels - p.add_argument("-l", "--length", required=True, dest="length", help="Transfer size") - # Number of columns is required to define the number of columns to be used - # It must be less than or equal to 4 for npu and 8 for npu2 - p.add_argument( - "-co", "--columns", required=True, dest="cols", help="Number of columns" - ) - # Number of channels is required to define the number of channels to be used - # It must be 1 or 2 - p.add_argument( - "-ch", "--channels", required=True, dest="chans", help="Number of channels" - ) - # Tile size (elements per tile) - defaults to 1024 for backward compatibility - p.add_argument( - "-ts", - "--tile-size", - required=False, - dest="tile_size", - default="1024", - help="Tile size (elements per tile)", - ) - # Trace Size - p.add_argument( - "-t", "--trace-size", required=True, dest="trace_size", help="Trace size" - ) - p.add_argument( - "--output-file-path", - "-o", - type=str, - help="Output file path for the generated MLIR module", - ) - - opts = p.parse_args(sys.argv[1:]) - - length = int(opts.length) - columns = int(opts.cols) - dev = opts.device - - # Validate columns based on device type - if isinstance(dev, NPU1) and columns > 4: - raise ValueError("[ERROR] NPU device cannot allocate more than 4 columns") - elif isinstance(dev, NPU2) and columns > 8: - raise ValueError("[ERROR] NPU2 device cannot allocate more than 8 columns") - - channels = int(opts.chans) - if channels < 1 or channels > 2: - raise ValueError("Number of channels must be 1 or 2") - tile_size = int(opts.tile_size) - if length % (tile_size * columns) != 0: - print( - "transfer size (" - + str(length) - + ") must be a multiple of " - + str(tile_size * columns) - + " (tile_size * columns)" - ) - raise ValueError - trace_size = int(opts.trace_size) if opts.trace_size is not None else 0 - - module = my_eltwise_mul(dev, length, columns, channels, tile_size, trace_size) - - output_file_path = Path(opts.output_file_path) - - with open(output_file_path, "w") as f: - f.write(str(module)) diff --git a/programming_examples/reconfiguration/operators/matrix_vector_mul.py b/programming_examples/reconfiguration/operators/matrix_vector_mul.py deleted file mode 100644 index 9064e2a0c46..00000000000 --- a/programming_examples/reconfiguration/operators/matrix_vector_mul.py +++ /dev/null @@ -1,141 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 - -import numpy as np -from pathlib import Path -from ml_dtypes import bfloat16 -import argparse - -from aie.extras.context import mlir_mod_ctx -from aie.ir import StridedLayoutAttr, ShapedType -import aie.dialects.index as index -import aie.dialects.memref as memref -from aie.dialects.aie import * -from aie.dialects.aiex import * -from aie.helpers.dialects.ext.scf import _for as range_ -from aie.helpers.util import try_convert_np_type_to_mlir_type -from aie.iron import Kernel, ObjectFifo, Program, Runtime, Worker -from aie.iron.placers import SequentialPlacer -from aie.iron.device import NPU1, NPU2 - - -def my_matvec(dev, cols, M, K, m): - vectorized = True - dtype_in = np.dtype[bfloat16] - dtype_in_str = "bf16" - dtype_out = np.dtype[bfloat16] - dtype_out_str = "bf16" - - assert M % cols == 0 - - if dev == "npu": - dev_ty = NPU1() - else: - dev_ty = NPU2() - - L1_A_ty = np.ndarray[(m * K,), dtype_in] - L1_B_ty = np.ndarray[(K,), dtype_in] - L1_C_ty = np.ndarray[(M // cols,), dtype_out] - L3_A_ty = np.ndarray[(M * K,), dtype_in] - L3_B_ty = np.ndarray[(K,), dtype_in] - L3_C_ty = np.ndarray[(M,), dtype_out] - - func_type = "vectorized" if vectorized else "scalar" - matvec = Kernel( - f"matvec_{func_type}_{dtype_in_str}_{dtype_out_str}", - "mv.o", - [np.int32, np.int32, np.int32, L1_A_ty, L1_B_ty, L1_C_ty], - ) - - A_L3L1_fifos = [ObjectFifo(L1_A_ty, name=f"A_L3L1_{i}") for i in range(cols)] - B_L3L1_fifos = [ - ObjectFifo(L1_B_ty, name=f"B_L3L1_{i}", depth=1) for i in range(cols) - ] - C_L1L3_fifos = [ - ObjectFifo(L1_C_ty, name=f"C_L1L3_{i}", depth=1) for i in range(cols) - ] - - def core_body(A_L3L1_fifo, B_L3L1_fifo, C_L1L3_fifo, matvec): - one_idx = index.constant(1) - m_idx = index.constant(m) - for _ in range_(0xFFFFFFFF): - b = B_L3L1_fifo.acquire(1) - c = C_L1L3_fifo.acquire(1) - for i_idx in range_(M // m // cols): - a = A_L3L1_fifo.acquire(1) - i_i32 = index.casts(T.i32(), i_idx) - matvec(m, K, i_i32, a, b, c) - A_L3L1_fifo.release(1) - C_L1L3_fifo.release(1) - B_L3L1_fifo.release(1) - - workers = [ - Worker( - core_body, - [ - A_L3L1_fifos[i].cons(), - B_L3L1_fifos[i].cons(), - C_L1L3_fifos[i].prod(), - matvec, - ], - ) - for i in range(cols) - ] - - A_taps = [ - TensorAccessPattern( - (M, K), - col * (M // cols) * K, - [1, 1, 1, (M // cols) * K], - [0, 0, 0, 1], - ) - for col in range(cols) - ] - # Every column gets the whole of B, no TAP needed. - C_taps = [ - TensorAccessPattern( - (1, M), col * (M // cols), [1, 1, 1, (M // cols)], [0, 0, 0, 1] - ) - for col in range(cols) - ] - - rt = Runtime() - with rt.sequence(L3_A_ty, L3_B_ty, L3_C_ty) as (A, B, C): - rt.start(*workers) - tg = rt.task_group() - for i in range(cols): - rt.fill(A_L3L1_fifos[i].prod(), A, A_taps[i], task_group=tg) - rt.fill(B_L3L1_fifos[i].prod(), B, task_group=tg) - for i in range(cols): - rt.drain(C_L1L3_fifos[i].cons(), C, C_taps[i], task_group=tg, wait=True) - rt.finish_task_group(tg) - - return Program(dev_ty, rt).resolve_program(SequentialPlacer()) - - -def main(): - argparser = argparse.ArgumentParser( - prog="AIE Matrix Vector Multiplication MLIR Design", - ) - argparser.add_argument("--dev", type=str, choices=["npu", "npu2"], default="npu") - argparser.add_argument("-M", type=int) - argparser.add_argument("-K", type=int) - argparser.add_argument("-m", type=int) - argparser.add_argument("--cols", type=int) - argparser.add_argument( - "--output-file-path", - "-o", - type=str, - help="Output file path for the generated MLIR module", - ) - args = argparser.parse_args() - module = my_matvec(args.dev, args.cols, args.M, args.K, args.m) - - output_file_path = Path(args.output_file_path) - - with open(output_file_path, "w") as f: - f.write(str(module)) - - -if __name__ == "__main__": - main() diff --git a/programming_examples/reconfiguration/operators/silu.py b/programming_examples/reconfiguration/operators/silu.py deleted file mode 100644 index 5968943b17b..00000000000 --- a/programming_examples/reconfiguration/operators/silu.py +++ /dev/null @@ -1,212 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 - -from ml_dtypes import bfloat16 -from pathlib import Path -import numpy as np -import argparse -import sys - -from aie.iron import Kernel, ObjectFifo, Program, Runtime, Worker -from aie.iron.placers import SequentialPlacer -from aie.iron.device import Tile, NPU1, NPU2 -from aie.helpers.taplib.tap import TensorAccessPattern -from aie.iron.controlflow import range_ - - -def my_silu(dev, size, num_columns, num_channels, tile_size, trace_size): - xfr_dtype = bfloat16 - line_size = 4096 if tile_size > 4096 else tile_size - line_type = np.ndarray[(line_size,), np.dtype[xfr_dtype]] - transfer_type = np.ndarray[(size,), np.dtype[xfr_dtype]] - - # Calculate number of iterations per core - total_cores = num_columns * num_channels - per_core_elements = size // total_cores - N_div_n = per_core_elements // line_size - - # Chunk size sent per DMA channel - chunk = size // num_columns // num_channels - - # Dataflow with ObjectFifos - of_ins = [ - ObjectFifo(line_type, name=f"in{i}_{j}") - for i in range(num_columns) - for j in range(num_channels) - ] - of_outs = [ - ObjectFifo(line_type, name=f"out{i}_{j}") - for i in range(num_columns) - for j in range(num_channels) - ] - - # External, binary kernel definition - silu_fcn = Kernel( - "silu_bf16", - "silu.o", - [line_type, line_type, np.int32], - ) - - # Task for the core to perform - def core_fn(of_in, of_out, siluLine): - for _ in range_(N_div_n): - elemOut = of_out.acquire(1) - elemIn = of_in.acquire(1) - siluLine(elemIn, elemOut, line_size) - of_in.release(1) - of_out.release(1) - - # Create a worker to perform the task - my_workers = [ - Worker( - core_fn, - [ - of_ins[i * num_channels + j].cons(), - of_outs[i * num_channels + j].prod(), - silu_fcn, - ], - ) - for i in range(num_columns) - for j in range(num_channels) - ] - - # Create a TensorAccessPattern for each channel - # to describe the data movement - # The pattern chops the data in equal chunks - # and moves them in parallel across the columns - # and channels. - taps = [ - TensorAccessPattern( - (1, size), - chunk * i * num_channels + chunk * j, - [1, 1, 1, chunk], - [0, 0, 0, 1], - ) - for i in range(num_columns) - for j in range(num_channels) - ] - - # Runtime operations to move data to/from the AIE-array - rt = Runtime() - with rt.sequence(transfer_type, transfer_type) as ( - a_in, - b_out, - ): - rt.start(*my_workers) - - # Initialize a group for parallel drain tasks, with fill resources free'd when drains complete. - tg = rt.task_group() - - # Fill the input objectFIFOs with data - for i in range(num_columns): - for j in range(num_channels): - rt.fill( - of_ins[i * num_channels + j].prod(), - a_in, - taps[i * num_channels + j], - task_group=tg, - ) - # Drain the output objectFIFOs with data - for i in range(num_columns): - for j in range(num_channels): - rt.drain( - of_outs[i * num_channels + j].cons(), - b_out, - taps[i * num_channels + j], - wait=True, # wait for the transfer to complete and data to be available - task_group=tg, - ) - rt.finish_task_group(tg) - - # Place components (assign them resources on the device) and generate an MLIR module - return Program(dev, rt).resolve_program(SequentialPlacer()) - - -if __name__ == "__main__": - - def str_to_device(device: str): - if device == "npu": - return NPU1() - elif device == "npu2": - return NPU2() - else: - raise ValueError(f"Device name {device} is unknown.") - - p = argparse.ArgumentParser() - # Parse command line arguments - - # Device name is required to select the AIE device: npu or npu2 - p.add_argument( - "-d", - "--dev", - required=True, - dest="device", - help="AIE Device", - type=str_to_device, - ) - # Transfer size is required to define the size of the data to be transferred - # It must be a multiple of 1024 and divisible by the number of columns and 2 channels per column - p.add_argument("-l", "--length", required=True, dest="length", help="Transfer size") - # Number of columns is required to define the number of columns to be used - # It must be less than or equal to 4 for npu and 8 for npu2 - p.add_argument( - "-co", "--columns", required=True, dest="cols", help="Number of columns" - ) - # Number of channels is required to define the number of channels to be used - # It must be 1 or 2 - p.add_argument( - "-ch", "--channels", required=True, dest="chans", help="Number of channels" - ) - # Tile size (elements per tile) - defaults to 1024 for backward compatibility - p.add_argument( - "-ts", - "--tile-size", - required=False, - dest="tile_size", - default="1024", - help="Tile size (elements per tile)", - ) - # Trace Size - p.add_argument( - "-t", "--trace-size", required=True, dest="trace_size", help="Trace size" - ) - p.add_argument( - "--output-file-path", - "-o", - type=str, - help="Output file path for the generated MLIR module", - ) - - opts = p.parse_args(sys.argv[1:]) - - length = int(opts.length) - columns = int(opts.cols) - dev = opts.device # Now this is already a device object! - - # Validate columns based on device type - if isinstance(dev, NPU1) and columns > 4: - raise ValueError("[ERROR] NPU device cannot allocate more than 4 columns") - elif isinstance(dev, NPU2) and columns > 8: - raise ValueError("[ERROR] NPU2 device cannot allocate more than 8 columns") - - channels = int(opts.chans) - if channels < 1 or channels > 2: - raise ValueError("Number of channels must be 1 or 2") - tile_size = int(opts.tile_size) - if ((length % tile_size) % columns % channels) != 0: - print( - "transfer size (" - + str(length) - + ") must be a multiple of " - + str(tile_size) - + " and divisible by the number of columns and channels per column" - ) - raise ValueError - trace_size = opts.trace_size - - module = my_silu(dev, length, columns, channels, tile_size, trace_size) - - output_file_path = Path(opts.output_file_path) - - with open(output_file_path, "w") as f: - f.write(str(module)) diff --git a/programming_examples/reconfiguration/run_benchmarks.sh b/programming_examples/reconfiguration/run_benchmarks.sh deleted file mode 100755 index 7a163a8385b..00000000000 --- a/programming_examples/reconfiguration/run_benchmarks.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash - -OUTPUT_CSV="benchmark_results.csv" - -# Write CSV header -echo "variant,iteration,time_us" > "$OUTPUT_CSV" - -# Array of base variants and their build directories -declare -A VARIANTS -VARIANTS["separate_xclbins"]="build" -VARIANTS["runlist"]="build" -VARIANTS["fused_transactions_loadpdi"]="build" -VARIANTS["fused_write32s_reset_always"]="build_reset_always" -VARIANTS["fused_write32s_reset_ifused"]="build_reset_ifused" -VARIANTS["fused_write32s_reset_ifchanged"]="build_reset_ifchanged" -VARIANTS["fused_write32s_reset_ifchangedfinegrained"]="build_reset_ifchangedfinegrained" -VARIANTS["fused_write32s_reset_never"]="build_reset_never" - -for variant in "${!VARIANTS[@]}"; do - build_dir="${VARIANTS[$variant]}" - - echo "Running benchmark for $variant..." >&2 - - # Determine the directory based on variant name - if [[ $variant == fused_write32s_* ]]; then - base_dir="swiglu/fused_transactions_write32s" - else - base_dir="swiglu/$variant" - fi - - pushd "$base_dir" > /dev/null - - if [ ! -f "$build_dir/test" ]; then - echo "Error: $build_dir/test not found in $variant. Please run 'make' first." >&2 - popd > /dev/null - continue - fi - - cd "$build_dir" - # Redirect stdout to CSV, stderr stays on terminal - ./test 1>> "../../../$OUTPUT_CSV" - - if [ $? -eq 0 ]; then - echo " ✓ $variant completed successfully" >&2 - else - echo " ✗ $variant failed" >&2 - fi - - popd > /dev/null -done - -echo "" >&2 -echo "Benchmark results saved to: $OUTPUT_CSV" >&2 -echo "Total data points: $(( $(wc -l < "$OUTPUT_CSV") - 1 ))" >&2 diff --git a/programming_examples/reconfiguration/swiglu/README.md b/programming_examples/reconfiguration/swiglu/README.md deleted file mode 100644 index 3d5773e083e..00000000000 --- a/programming_examples/reconfiguration/swiglu/README.md +++ /dev/null @@ -1,96 +0,0 @@ -# SwiGLU Reconfiguration Variants - -This directory contains three implementations of the SwiGLU operator, each demonstrating different NPU execution patterns: - -1. **separate_xclbins** - Each kernel compiled to a separate xclbin, executed sequentially -2. **runlist** - All kernels combined into a single xclbin, executed via runlist -3. **fused_transactions** - All kernels compiled into a single ELF file with fused transactions - -## Directory Structure - -``` -swiglu/ -├── separate_xclbins/ -│ ├── Makefile -│ └── test.cpp -├── runlist/ -│ ├── Makefile -│ └── test.cpp -└── fused_transactions/ - ├── Makefile - ├── test.cpp - └── combine_mlir.py -``` - -## Building - -Each variant can be built independently: - -```bash -cd separate_xclbins && make -cd runlist && make -cd fused_transactions && make -``` - -## Running Individual Tests - -```bash -cd separate_xclbins && make test -cd runlist && make test -cd fused_transactions && make test -``` - -## Running Benchmarks - -From the parent `reconfiguration` directory: - -```bash -./run_benchmarks.sh -``` - -This will: -- Run all three variants -- Collect timing data (100 iterations each) -- Save results to `benchmark_results.csv` - -## Visualizing Results - -```bash -python3 visualize_results.py -``` - -This will: -- Read `benchmark_results.csv` -- Generate a bar chart (`benchmark_results.png`) -- Print performance statistics and comparisons to stdout - -## Configuration - -Key parameters can be adjusted at the top of each `Makefile` and `test.cpp`: - -### Makefile -- `KERNEL_NAMES` - Names of the kernels -- Tool paths (PEANO_CLANG, AIECC, etc.) - -### test.cpp -- `EMBEDDING_DIM` (default: 2048) -- `HIDDEN_DIM` (default: 8192) -- `NUM_ITERATIONS` (default: 100) - -## SwiGLU Operation Sequence - -The SwiGLU operator executes the following sequence: - -1. **swiglu_gemv_1**: Matrix-vector multiply (weights_1 × input → left) -2. **swiglu_gemv_1**: Matrix-vector multiply (weights_2 × input → right) -3. **swiglu_silu**: SiLU activation (left → left_swished) -4. **swiglu_eltwise_mul**: Element-wise multiply (left_swished × right → intermediate) -5. **swiglu_gemv_2**: Matrix-vector multiply (weights_3 × intermediate → output) - -## Clean - -```bash -cd separate_xclbins && make clean -cd runlist && make clean -cd fused_transactions && make clean -``` diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/Makefile b/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/Makefile deleted file mode 100644 index e4696f5a81e..00000000000 --- a/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/Makefile +++ /dev/null @@ -1,58 +0,0 @@ -MLIR_FILES = build/swiglu_gemv_1.mlir build/swiglu_silu.mlir build/swiglu_eltwise_mul.mlir build/swiglu_gemv_2.mlir -COMBINED_MLIR = build/aie.mlir -ELF_FILE = build/aie.elf - -AIECC = aiecc.py -PEANO_CLANG = $(PEANO_INSTALL_DIR)/bin/clang++ -PEANO_PATH = $(PEANO_INSTALL_DIR) - -KERNEL_DIR = ../../kernels -OPERATOR_DIR = ../../operators -AIE_KERNELS_DIR = /scratch/roesti/mlir-aie/aie_kernels -MLIR_AIE_DIR = $(shell python3 -c "from aie.utils.config import root_path; print(root_path())") - -CLANG_FLAGS = -O2 -std=c++20 --target=aie2p-none-unknown-elf -Wno-parentheses -Wno-attributes -Wno-macro-redefined -Wno-empty-body -Wno-missing-template-arg-list-after-template-kw -I$(AIE_KERNELS_DIR) -I$(MLIR_AIE_DIR)/include -HOST_FLAGS = -std=c++23 -Wall -I/opt/xilinx/xrt/include -I/scratch/roesti/mlir-aie/runtime_lib/test_lib -L/opt/xilinx/xrt/lib -lxrt_core -lxrt_coreutil -lrt -lstdc++ - -.PHONY: all clean test - -all: build/test - -build/mv.o: $(KERNEL_DIR)/mv.cc | build - $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ - -build/mul.o: $(KERNEL_DIR)/mul.cc | build - $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ - -build/silu.o: $(KERNEL_DIR)/silu.cc | build - $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ - -build/swiglu_gemv_1.mlir: $(OPERATOR_DIR)/matrix_vector_mul.py | build - python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from matrix_vector_mul import my_matvec; from aie.iron.device import NPU2; mlir_code = my_matvec(NPU2(), 8, 8192, 2048, 1); print(str(mlir_code))' > $@ - -build/swiglu_gemv_2.mlir: $(OPERATOR_DIR)/matrix_vector_mul.py | build - python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from matrix_vector_mul import my_matvec; from aie.iron.device import NPU2; mlir_code = my_matvec(NPU2(), 8, 2048, 8192, 1); print(str(mlir_code))' > $@ - -build/swiglu_silu.mlir: $(OPERATOR_DIR)/silu.py | build - python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from silu import my_silu; from aie.iron.device import NPU2; mlir_code = my_silu(NPU2(), 8192, 8, 2, 512, 0); print(str(mlir_code))' > $@ - -build/swiglu_eltwise_mul.mlir: $(OPERATOR_DIR)/eltwise_mul.py | build - python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from eltwise_mul import my_eltwise_mul; from aie.iron.device import NPU2; mlir_code = my_eltwise_mul(NPU2(), 8192, 8, 2, 1024, 0); print(str(mlir_code))' > $@ - -$(COMBINED_MLIR): $(MLIR_FILES) combine_mlir.py - python3 combine_mlir.py $(MLIR_FILES) $(COMBINED_MLIR) - -$(ELF_FILE): $(COMBINED_MLIR) build/mv.o build/mul.o build/silu.o - cd build && $(AIECC) -v --generate-full-elf --no-xchesscc --no-xbridge aie.mlir -o aie.elf - -build/test: test.cpp $(ELF_FILE) - g++-13 $< -o $@ $(HOST_FLAGS) - -build: - mkdir -p build - -test: build/test - cd build && ./test - -clean: - rm -rf build aie.mlir.prj diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/combine_mlir.py b/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/combine_mlir.py deleted file mode 100644 index 24e4446f4f1..00000000000 --- a/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/combine_mlir.py +++ /dev/null @@ -1,170 +0,0 @@ -#!/usr/bin/env python3 -import sys -import re - -# Configuration: buffer layout -# Each entry: (buffer_name, size_expr) -BUFFER_CONFIG = [ - ("input", "embedding_dim"), - ("weights_1", "embedding_dim * hidden_dim"), - ("weights_2", "embedding_dim * hidden_dim"), - ("weights_3", "hidden_dim * embedding_dim"), - ("left", "hidden_dim"), - ("left_swished", "hidden_dim"), - ("right", "hidden_dim"), - ("intermediate", "hidden_dim"), - ("output", "embedding_dim"), -] - -# Configuration: operations to execute -# Each entry: (device_name, buffer_args) -# NOTE: Consecutive operations on the same device will be grouped into a single -# aiex.configure block to minimize reconfiguration overhead. -OPERATIONS_CONFIG = [ - ("gemv_1", ["weights_1", "input", "left"]), - ("gemv_1", ["weights_2", "input", "right"]), # Grouped with previous gemv_1 - ("silu", ["left", "left_swished"]), - ("eltwise_mul", ["left_swished", "right", "intermediate"]), - ("gemv_2", ["weights_3", "intermediate", "output"]), -] - -# Map device names to their indices (for referencing the @device) -DEVICE_INDEX_MAP = { - "gemv_1": 0, - "silu": 1, - "eltwise_mul": 2, - "gemv_2": 3, -} - -def extract_device_content(mlir_file, device_name): - with open(mlir_file, 'r') as f: - content = f.read() - - # Find the start of the aie.device - device_start = content.find('aie.device(npu2) {') - if device_start == -1: - raise ValueError(f"No aie.device found in {mlir_file}") - - # Find matching closing brace by counting braces - brace_count = 0 - i = device_start + len('aie.device(npu2) ') - start_content = i + 1 # Start after the opening brace - - for idx in range(i, len(content)): - if content[idx] == '{': - brace_count += 1 - elif content[idx] == '}': - brace_count -= 1 - if brace_count == 0: - # Found the matching closing brace - device_content = content[start_content:idx].strip() - return f" aie.device(npu2) @{device_name} {{\n{device_content}\n }}\n" - - raise ValueError(f"Could not find matching closing brace in {mlir_file}") - -def calculate_buffer_offsets(embedding_dim, hidden_dim): - """Calculate buffer offsets based on configuration.""" - offsets = {} - current_offset = 0 - - for buffer_name, size_expr in BUFFER_CONFIG: - size = eval(size_expr, {"embedding_dim": embedding_dim, "hidden_dim": hidden_dim}) - offsets[buffer_name] = { - "start": current_offset, - "size": size, - "end": current_offset + size, - } - current_offset += size - - offsets["total"] = current_offset - return offsets - -def create_main_device(buffer_offsets): - """Generate the main device with runtime sequence. - Optimizes by grouping consecutive operations on the same device. - """ - lines = [] - lines.append(" aie.device(npu2) @main {") - lines.append("") - lines.append(f" aie.runtime_sequence @sequence(%arg : memref<{buffer_offsets['total']}xbf16>) {{") - lines.append("") - lines.append(" %c3_i32 = arith.constant 3 : i32") - lines.append("") - - # Group consecutive operations by device to minimize reconfigurations - i = 0 - while i < len(OPERATIONS_CONFIG): - device_name, buffer_args = OPERATIONS_CONFIG[i] - device_ref_name = list(DEVICE_INDEX_MAP.keys())[DEVICE_INDEX_MAP[device_name]] - - # Collect all consecutive operations for the same device - device_operations = [(buffer_args, i)] - j = i + 1 - while j < len(OPERATIONS_CONFIG) and OPERATIONS_CONFIG[j][0] == device_name: - device_operations.append((OPERATIONS_CONFIG[j][1], j)) - j += 1 - - # Generate a single aiex.configure block for all operations on this device - lines.append(f" aiex.configure @{device_ref_name} {{") - - # Track which buffers we've already declared in this configure block - declared_buffers = set() - - for op_buffer_args, op_idx in device_operations: - # Generate memref.subview and memref.reinterpret_cast declarations for buffers not yet declared - for buf_name in op_buffer_args: - if buf_name not in declared_buffers: - buf_info = buffer_offsets[buf_name] - # Generate subview with strided layout including offset - lines.append(f" %{buf_name}_subview = memref.subview %arg[{buf_info['start']}] [{buf_info['size']}] [1] : memref<{buffer_offsets['total']}xbf16> to memref<{buf_info['size']}xbf16, strided<[1], offset: {buf_info['start']}>>") - # Use reinterpret_cast to convert to plain memref - lines.append(f" %{buf_name} = memref.reinterpret_cast %{buf_name}_subview to offset: [0], sizes: [{buf_info['size']}], strides: [1] : memref<{buf_info['size']}xbf16, strided<[1], offset: {buf_info['start']}>> to memref<{buf_info['size']}xbf16>") - declared_buffers.add(buf_name) - - # Generate aiex.run call with plain memref types - buffer_args_str = ", ".join([f"%{b}" for b in op_buffer_args]) - buffer_types_str = ", ".join([f"memref<{buffer_offsets[b]['size']}xbf16>" for b in op_buffer_args]) - lines.append(f" aiex.run @sequence ({buffer_args_str}) : ({buffer_types_str})") - - lines.append(" }") - lines.append("") - - # Move to the next ungrouped device - i = j - - lines.append(" }") - lines.append("") - lines.append(" }") - - return "\n".join(lines) + "\n" - -def main(): - if len(sys.argv) != 6: - print("Usage: combine_mlir.py ") - sys.exit(1) - - embedding_dim = 2048 - hidden_dim = 8192 - - # Calculate buffer offsets from configuration - buffer_offsets = calculate_buffer_offsets(embedding_dim, hidden_dim) - - # Get unique device names from operations config - device_names = list(DEVICE_INDEX_MAP.keys()) - - output = "module {\n\n" - output += create_main_device(buffer_offsets) - output += "\n" - - # Extract device content for each unique device - for i, mlir_file in enumerate(sys.argv[1:5]): - output += extract_device_content(mlir_file, device_names[i]) - output += "\n" - - output += "}\n" - - with open(sys.argv[5], 'w') as f: - f.write(output) - -if __name__ == "__main__": - main() diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/test.cpp b/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/test.cpp deleted file mode 100644 index db3406d1bda..00000000000 --- a/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/test.cpp +++ /dev/null @@ -1,258 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -constexpr int EMBEDDING_DIM = 2048; -constexpr int HIDDEN_DIM = 8192; -constexpr int NUM_ITERATIONS = 1000; -constexpr int NUM_TEST_CASES = 2; - -using dtype = std::bfloat16_t; - -struct BufferInfo { - std::string name; - size_t size; -}; - -std::vector buffers_config = { - {"input", EMBEDDING_DIM}, - {"weights_1", EMBEDDING_DIM * HIDDEN_DIM}, - {"weights_2", EMBEDDING_DIM * HIDDEN_DIM}, - {"weights_3", HIDDEN_DIM * EMBEDDING_DIM}, - {"left", HIDDEN_DIM}, - {"left_swished", HIDDEN_DIM}, - {"right", HIDDEN_DIM}, - {"intermediate", HIDDEN_DIM}, - {"output", EMBEDDING_DIM}, -}; - -std::vector load_bfloat16(const std::string &filename) { - std::ifstream file(filename, std::ios::binary); - if (!file) { - return {}; - } - file.seekg(0, std::ios::end); - size_t size = file.tellg(); - file.seekg(0, std::ios::beg); - std::vector raw_data(size / sizeof(uint16_t)); - file.read(reinterpret_cast(raw_data.data()), size); - - std::vector data(raw_data.size()); - std::memcpy(data.data(), raw_data.data(), size); - return data; -} - -bool almost_equal(dtype a, dtype b, float rtol = 1e-1, float atol = 1e-2) { - float fa = static_cast(a); - float fb = static_cast(b); - return std::abs(fa - fb) <= (atol + rtol * std::abs(fb)); -} - -struct Mismatch { - size_t index; - dtype got; - dtype expected; - float error; -}; - -bool verify_output(const dtype *output, const std::vector &reference, - size_t size, const std::string &test_name) { - std::vector mismatches; - - for (size_t i = 0; i < size && i < reference.size(); i++) { - if (!almost_equal(output[i], reference[i])) { - float error = std::abs(static_cast(output[i]) - static_cast(reference[i])); - mismatches.push_back({i, output[i], reference[i], error}); - } - } - - if (mismatches.empty()) { - std::cerr << test_name << " PASSED: all outputs match reference" << std::endl; - return true; - } else { - std::cerr << test_name << " FAILED: " << mismatches.size() << " mismatches" << std::endl; - - // Sort by error to find top 5 diverging values - std::sort(mismatches.begin(), mismatches.end(), - [](const Mismatch &a, const Mismatch &b) { return a.error > b.error; }); - - std::cerr << "Top 5 diverging values:" << std::endl; - for (size_t i = 0; i < std::min(size_t(5), mismatches.size()); i++) { - const auto &m = mismatches[i]; - std::cerr << " [" << m.index << "] got " << static_cast(m.got) - << ", expected " << static_cast(m.expected) - << ", error " << m.error << std::endl; - } - return false; - } -} - -int main(int argc, const char *argv[]) { - unsigned int device_index = 0; - auto device = xrt::device(device_index); - - std::string kernelName = "main:sequence"; - xrt::elf ctx_elf{"aie.elf"}; - xrt::hw_context context = xrt::hw_context(device, ctx_elf); - auto kernel = xrt::ext::kernel(context, kernelName); - - size_t total_size = 0; - for (const auto &binfo : buffers_config) { - total_size += binfo.size; - } - - xrt::bo bo_inout = xrt::ext::bo{device, total_size * sizeof(dtype)}; - dtype *buf = bo_inout.map(); - - std::map buffer_ptrs; - size_t offset = 0; - for (const auto &binfo : buffers_config) { - buffer_ptrs[binfo.name] = buf + offset; - offset += binfo.size; - } - - auto run = xrt::run(kernel); - run.set_arg(0, bo_inout); - - // Run verification on multiple test cases - bool all_tests_passed = true; - - for (int test_case = 0; test_case < NUM_TEST_CASES; test_case++) { - std::cerr << "\n=== Test Case " << test_case << " ===" << std::endl; - - // Load inputs for this test case - auto input_data = load_bfloat16("../../input_" + std::to_string(test_case) + ".bin"); - auto weights_1_data = load_bfloat16("../../weights_1_" + std::to_string(test_case) + ".bin"); - auto weights_2_data = load_bfloat16("../../weights_2_" + std::to_string(test_case) + ".bin"); - auto weights_3_data = load_bfloat16("../../weights_3_" + std::to_string(test_case) + ".bin"); - auto reference = load_bfloat16("../../reference_output_" + std::to_string(test_case) + ".bin"); - - if (input_data.empty() || weights_1_data.empty() || weights_2_data.empty() || - weights_3_data.empty() || reference.empty()) { - std::cerr << "Warning: test case " << test_case << " data not found, skipping" << std::endl; - continue; - } - - // Copy input data to buffers - std::memcpy(buffer_ptrs["input"], input_data.data(), - std::min(input_data.size(), buffers_config[0].size) * sizeof(dtype)); - std::memcpy(buffer_ptrs["weights_1"], weights_1_data.data(), - std::min(weights_1_data.size(), buffers_config[1].size) * sizeof(dtype)); - std::memcpy(buffer_ptrs["weights_2"], weights_2_data.data(), - std::min(weights_2_data.size(), buffers_config[2].size) * sizeof(dtype)); - std::memcpy(buffer_ptrs["weights_3"], weights_3_data.data(), - std::min(weights_3_data.size(), buffers_config[3].size) * sizeof(dtype)); - - bo_inout.sync(XCL_BO_SYNC_BO_TO_DEVICE); - - // Run kernel - run.start(); - run.wait2(); - - bo_inout.sync(XCL_BO_SYNC_BO_FROM_DEVICE); - - // Load reference data for intermediates - auto reference_left = load_bfloat16("../../reference_left_" + std::to_string(test_case) + ".bin"); - auto reference_right = load_bfloat16("../../reference_right_" + std::to_string(test_case) + ".bin"); - auto reference_left_swished = load_bfloat16("../../reference_left_swished_" + std::to_string(test_case) + ".bin"); - auto reference_intermediate = load_bfloat16("../../reference_intermediate_" + std::to_string(test_case) + ".bin"); - - // Verify all intermediate buffers - bool passed = true; - - if (!reference_left.empty()) { - dtype *left_ptr = buffer_ptrs["left"]; - passed = verify_output(left_ptr, reference_left, HIDDEN_DIM, - "Test case " + std::to_string(test_case) + " - left") && passed; - } - - if (!reference_right.empty()) { - dtype *right_ptr = buffer_ptrs["right"]; - passed = verify_output(right_ptr, reference_right, HIDDEN_DIM, - "Test case " + std::to_string(test_case) + " - right") && passed; - } - - if (!reference_left_swished.empty()) { - dtype *left_swished_ptr = buffer_ptrs["left_swished"]; - passed = verify_output(left_swished_ptr, reference_left_swished, HIDDEN_DIM, - "Test case " + std::to_string(test_case) + " - left_swished") && passed; - } - - if (!reference_intermediate.empty()) { - dtype *intermediate_ptr = buffer_ptrs["intermediate"]; - passed = verify_output(intermediate_ptr, reference_intermediate, HIDDEN_DIM, - "Test case " + std::to_string(test_case) + " - intermediate") && passed; - } - - if (!reference.empty()) { - dtype *output_verify = buffer_ptrs["output"]; - passed = verify_output(output_verify, reference, EMBEDDING_DIM, - "Test case " + std::to_string(test_case) + " - output") && passed; - } - - all_tests_passed = all_tests_passed && passed; - } - - if (!all_tests_passed) { - std::cerr << "\nSome verification tests failed!" << std::endl; - } else { - std::cerr << "\nAll verification tests passed!" << std::endl; - } - - // For benchmarking, use the first test case - auto input_data = load_bfloat16("../../input_0.bin"); - auto weights_1_data = load_bfloat16("../../weights_1_0.bin"); - auto weights_2_data = load_bfloat16("../../weights_2_0.bin"); - auto weights_3_data = load_bfloat16("../../weights_3_0.bin"); - - if (!input_data.empty() && !weights_1_data.empty() && - !weights_2_data.empty() && !weights_3_data.empty()) { - std::memcpy(buffer_ptrs["input"], input_data.data(), - std::min(input_data.size(), buffers_config[0].size) * sizeof(dtype)); - std::memcpy(buffer_ptrs["weights_1"], weights_1_data.data(), - std::min(weights_1_data.size(), buffers_config[1].size) * sizeof(dtype)); - std::memcpy(buffer_ptrs["weights_2"], weights_2_data.data(), - std::min(weights_2_data.size(), buffers_config[2].size) * sizeof(dtype)); - std::memcpy(buffer_ptrs["weights_3"], weights_3_data.data(), - std::min(weights_3_data.size(), buffers_config[3].size) * sizeof(dtype)); - bo_inout.sync(XCL_BO_SYNC_BO_TO_DEVICE); - } - - std::cerr << "Running timed iterations..." << std::endl; - std::vector iteration_times; - - for (int iter = 0; iter < NUM_ITERATIONS; iter++) { - auto iter_start = std::chrono::high_resolution_clock::now(); - run.start(); - run.wait2(); - auto iter_end = std::chrono::high_resolution_clock::now(); - double iter_time = std::chrono::duration_cast(iter_end - iter_start).count(); - iteration_times.push_back(iter_time); - } - - bo_inout.sync(XCL_BO_SYNC_BO_FROM_DEVICE); - - // Output CSV format: variant,iteration,time_us - for (int i = 0; i < NUM_ITERATIONS; i++) { - std::cout << "fused_transactions_loadpdi," << i << "," << iteration_times[i] << std::endl; - } - - return 0; -} diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/Makefile b/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/Makefile deleted file mode 100644 index 74ec1a7012c..00000000000 --- a/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/Makefile +++ /dev/null @@ -1,94 +0,0 @@ -MLIR_FILES = build/swiglu_gemv_1.mlir build/swiglu_silu.mlir build/swiglu_eltwise_mul.mlir build/swiglu_gemv_2.mlir -COMBINED_MLIR = build/aie.mlir -ELF_FILE = build/aie.elf - -AIECC = aiecc.py -PEANO_CLANG = $(PEANO_INSTALL_DIR)/bin/clang++ -PEANO_PATH = $(PEANO_INSTALL_DIR) - -KERNEL_DIR = ../../kernels -OPERATOR_DIR = ../../operators -AIE_KERNELS_DIR = /scratch/roesti/mlir-aie/aie_kernels -MLIR_AIE_DIR = $(shell python3 -c "from aie.utils.config import root_path; print(root_path())") - -CLANG_FLAGS = -O2 -std=c++20 --target=aie2p-none-unknown-elf -Wno-parentheses -Wno-attributes -Wno-macro-redefined -Wno-empty-body -Wno-missing-template-arg-list-after-template-kw -I$(AIE_KERNELS_DIR) -I$(MLIR_AIE_DIR)/include -HOST_FLAGS = -std=c++23 -Wall -I/opt/xilinx/xrt/include -I/scratch/roesti/mlir-aie/runtime_lib/test_lib -L/opt/xilinx/xrt/lib -lxrt_core -lxrt_coreutil -lrt -lstdc++ - -VARIANT_NAME?=fused_transactions_write32s - -.PHONY: all clean test all_reset_modes build_reset_always build_reset_ifused build_reset_ifchanged build_reset_ifchangedfinegrained build_reset_never - -all: build/test - -build/mv.o: $(KERNEL_DIR)/mv.cc | build - $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ - -build/mul.o: $(KERNEL_DIR)/mul.cc | build - $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ - -build/silu.o: $(KERNEL_DIR)/silu.cc | build - $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ - -$(BUILD_DIR)/mv.o: $(KERNEL_DIR)/mv.cc | $(BUILD_DIR) - $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ - -$(BUILD_DIR)/mul.o: $(KERNEL_DIR)/mul.cc | $(BUILD_DIR) - $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ - -$(BUILD_DIR)/silu.o: $(KERNEL_DIR)/silu.cc | $(BUILD_DIR) - $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ - -build/swiglu_gemv_1.mlir: $(OPERATOR_DIR)/matrix_vector_mul.py | build - python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from matrix_vector_mul import my_matvec; from aie.iron.device import NPU2; mlir_code = my_matvec(NPU2(), 8, 8192, 2048, 1); print(str(mlir_code))' > $@ - -build/swiglu_gemv_2.mlir: $(OPERATOR_DIR)/matrix_vector_mul.py | build - python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from matrix_vector_mul import my_matvec; from aie.iron.device import NPU2; mlir_code = my_matvec(NPU2(), 8, 2048, 8192, 1); print(str(mlir_code))' > $@ - -build/swiglu_silu.mlir: $(OPERATOR_DIR)/silu.py | build - python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from silu import my_silu; from aie.iron.device import NPU2; mlir_code = my_silu(NPU2(), 8192, 8, 2, 512, 0); print(str(mlir_code))' > $@ - -build/swiglu_eltwise_mul.mlir: $(OPERATOR_DIR)/eltwise_mul.py | build - python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from eltwise_mul import my_eltwise_mul; from aie.iron.device import NPU2; mlir_code = my_eltwise_mul(NPU2(), 8192, 8, 2, 1024, 0); print(str(mlir_code))' > $@ - -$(COMBINED_MLIR): $(MLIR_FILES) combine_mlir.py - python3 combine_mlir.py $(MLIR_FILES) $(COMBINED_MLIR) - -RESET_MODE?=always -BUILD_DIR?=build - -$(BUILD_DIR)/aie.elf: $(COMBINED_MLIR) $(BUILD_DIR)/mv.o $(BUILD_DIR)/mul.o $(BUILD_DIR)/silu.o | $(BUILD_DIR) - cp $(COMBINED_MLIR) $(BUILD_DIR)/aie.mlir - cd $(BUILD_DIR) && $(AIECC) -v --no-coalesce-write32s --generate-full-elf --expand-load-pdis --reset-mode=$(RESET_MODE) --reset-tiles=core,mem --no-xchesscc --no-xbridge aie.mlir -o aie.elf - -$(BUILD_DIR)/test: test.cpp $(BUILD_DIR)/aie.elf - g++-13 $< -o $@ $(HOST_FLAGS) -DVARIANT_NAME=\"$(VARIANT_NAME)\" - -$(BUILD_DIR): - mkdir -p $(BUILD_DIR) - -build: - mkdir -p build - -# Build all reset mode variants -all_reset_modes: _build_reset_always _build_reset_ifused _build_reset_ifchanged _build_reset_ifchangedfinegrained _build_reset_never - -_build_reset_always: - $(MAKE) BUILD_DIR=build_reset_always RESET_MODE=always VARIANT_NAME=fused_write32s_reset_always build_reset_always/test - -_build_reset_ifused: - $(MAKE) BUILD_DIR=build_reset_ifused RESET_MODE=ifused VARIANT_NAME=fused_write32s_reset_ifused build_reset_ifused/test - -_build_reset_ifchanged: - $(MAKE) BUILD_DIR=build_reset_ifchanged RESET_MODE=ifchanged VARIANT_NAME=fused_write32s_reset_ifchanged build_reset_ifchanged/test - -_build_reset_ifchangedfinegrained: - $(MAKE) BUILD_DIR=build_reset_ifchangedfinegrained RESET_MODE=ifchangedfinegrained VARIANT_NAME=fused_write32s_reset_ifchangedfinegrained build_reset_ifchangedfinegrained/test - -_build_reset_never: - $(MAKE) BUILD_DIR=build_reset_never RESET_MODE=never VARIANT_NAME=fused_write32s_reset_never build_reset_never/test - -test: $(BUILD_DIR)/test - cd $(BUILD_DIR) && ./test - -clean: - rm -rf build build_reset_* aie.mlir.prj diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/combine_mlir.py b/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/combine_mlir.py deleted file mode 100644 index 24e4446f4f1..00000000000 --- a/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/combine_mlir.py +++ /dev/null @@ -1,170 +0,0 @@ -#!/usr/bin/env python3 -import sys -import re - -# Configuration: buffer layout -# Each entry: (buffer_name, size_expr) -BUFFER_CONFIG = [ - ("input", "embedding_dim"), - ("weights_1", "embedding_dim * hidden_dim"), - ("weights_2", "embedding_dim * hidden_dim"), - ("weights_3", "hidden_dim * embedding_dim"), - ("left", "hidden_dim"), - ("left_swished", "hidden_dim"), - ("right", "hidden_dim"), - ("intermediate", "hidden_dim"), - ("output", "embedding_dim"), -] - -# Configuration: operations to execute -# Each entry: (device_name, buffer_args) -# NOTE: Consecutive operations on the same device will be grouped into a single -# aiex.configure block to minimize reconfiguration overhead. -OPERATIONS_CONFIG = [ - ("gemv_1", ["weights_1", "input", "left"]), - ("gemv_1", ["weights_2", "input", "right"]), # Grouped with previous gemv_1 - ("silu", ["left", "left_swished"]), - ("eltwise_mul", ["left_swished", "right", "intermediate"]), - ("gemv_2", ["weights_3", "intermediate", "output"]), -] - -# Map device names to their indices (for referencing the @device) -DEVICE_INDEX_MAP = { - "gemv_1": 0, - "silu": 1, - "eltwise_mul": 2, - "gemv_2": 3, -} - -def extract_device_content(mlir_file, device_name): - with open(mlir_file, 'r') as f: - content = f.read() - - # Find the start of the aie.device - device_start = content.find('aie.device(npu2) {') - if device_start == -1: - raise ValueError(f"No aie.device found in {mlir_file}") - - # Find matching closing brace by counting braces - brace_count = 0 - i = device_start + len('aie.device(npu2) ') - start_content = i + 1 # Start after the opening brace - - for idx in range(i, len(content)): - if content[idx] == '{': - brace_count += 1 - elif content[idx] == '}': - brace_count -= 1 - if brace_count == 0: - # Found the matching closing brace - device_content = content[start_content:idx].strip() - return f" aie.device(npu2) @{device_name} {{\n{device_content}\n }}\n" - - raise ValueError(f"Could not find matching closing brace in {mlir_file}") - -def calculate_buffer_offsets(embedding_dim, hidden_dim): - """Calculate buffer offsets based on configuration.""" - offsets = {} - current_offset = 0 - - for buffer_name, size_expr in BUFFER_CONFIG: - size = eval(size_expr, {"embedding_dim": embedding_dim, "hidden_dim": hidden_dim}) - offsets[buffer_name] = { - "start": current_offset, - "size": size, - "end": current_offset + size, - } - current_offset += size - - offsets["total"] = current_offset - return offsets - -def create_main_device(buffer_offsets): - """Generate the main device with runtime sequence. - Optimizes by grouping consecutive operations on the same device. - """ - lines = [] - lines.append(" aie.device(npu2) @main {") - lines.append("") - lines.append(f" aie.runtime_sequence @sequence(%arg : memref<{buffer_offsets['total']}xbf16>) {{") - lines.append("") - lines.append(" %c3_i32 = arith.constant 3 : i32") - lines.append("") - - # Group consecutive operations by device to minimize reconfigurations - i = 0 - while i < len(OPERATIONS_CONFIG): - device_name, buffer_args = OPERATIONS_CONFIG[i] - device_ref_name = list(DEVICE_INDEX_MAP.keys())[DEVICE_INDEX_MAP[device_name]] - - # Collect all consecutive operations for the same device - device_operations = [(buffer_args, i)] - j = i + 1 - while j < len(OPERATIONS_CONFIG) and OPERATIONS_CONFIG[j][0] == device_name: - device_operations.append((OPERATIONS_CONFIG[j][1], j)) - j += 1 - - # Generate a single aiex.configure block for all operations on this device - lines.append(f" aiex.configure @{device_ref_name} {{") - - # Track which buffers we've already declared in this configure block - declared_buffers = set() - - for op_buffer_args, op_idx in device_operations: - # Generate memref.subview and memref.reinterpret_cast declarations for buffers not yet declared - for buf_name in op_buffer_args: - if buf_name not in declared_buffers: - buf_info = buffer_offsets[buf_name] - # Generate subview with strided layout including offset - lines.append(f" %{buf_name}_subview = memref.subview %arg[{buf_info['start']}] [{buf_info['size']}] [1] : memref<{buffer_offsets['total']}xbf16> to memref<{buf_info['size']}xbf16, strided<[1], offset: {buf_info['start']}>>") - # Use reinterpret_cast to convert to plain memref - lines.append(f" %{buf_name} = memref.reinterpret_cast %{buf_name}_subview to offset: [0], sizes: [{buf_info['size']}], strides: [1] : memref<{buf_info['size']}xbf16, strided<[1], offset: {buf_info['start']}>> to memref<{buf_info['size']}xbf16>") - declared_buffers.add(buf_name) - - # Generate aiex.run call with plain memref types - buffer_args_str = ", ".join([f"%{b}" for b in op_buffer_args]) - buffer_types_str = ", ".join([f"memref<{buffer_offsets[b]['size']}xbf16>" for b in op_buffer_args]) - lines.append(f" aiex.run @sequence ({buffer_args_str}) : ({buffer_types_str})") - - lines.append(" }") - lines.append("") - - # Move to the next ungrouped device - i = j - - lines.append(" }") - lines.append("") - lines.append(" }") - - return "\n".join(lines) + "\n" - -def main(): - if len(sys.argv) != 6: - print("Usage: combine_mlir.py ") - sys.exit(1) - - embedding_dim = 2048 - hidden_dim = 8192 - - # Calculate buffer offsets from configuration - buffer_offsets = calculate_buffer_offsets(embedding_dim, hidden_dim) - - # Get unique device names from operations config - device_names = list(DEVICE_INDEX_MAP.keys()) - - output = "module {\n\n" - output += create_main_device(buffer_offsets) - output += "\n" - - # Extract device content for each unique device - for i, mlir_file in enumerate(sys.argv[1:5]): - output += extract_device_content(mlir_file, device_names[i]) - output += "\n" - - output += "}\n" - - with open(sys.argv[5], 'w') as f: - f.write(output) - -if __name__ == "__main__": - main() diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/test.cpp b/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/test.cpp deleted file mode 100644 index 2ae886c594d..00000000000 --- a/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/test.cpp +++ /dev/null @@ -1,262 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#ifndef VARIANT_NAME -#define VARIANT_NAME "fused_transactions_write32s" -#endif - -constexpr int EMBEDDING_DIM = 2048; -constexpr int HIDDEN_DIM = 8192; -constexpr int NUM_ITERATIONS = 1000; -constexpr int NUM_TEST_CASES = 2; - -using dtype = std::bfloat16_t; - -struct BufferInfo { - std::string name; - size_t size; -}; - -std::vector buffers_config = { - {"input", EMBEDDING_DIM}, - {"weights_1", EMBEDDING_DIM * HIDDEN_DIM}, - {"weights_2", EMBEDDING_DIM * HIDDEN_DIM}, - {"weights_3", HIDDEN_DIM * EMBEDDING_DIM}, - {"left", HIDDEN_DIM}, - {"left_swished", HIDDEN_DIM}, - {"right", HIDDEN_DIM}, - {"intermediate", HIDDEN_DIM}, - {"output", EMBEDDING_DIM}, -}; - -std::vector load_bfloat16(const std::string &filename) { - std::ifstream file(filename, std::ios::binary); - if (!file) { - return {}; - } - file.seekg(0, std::ios::end); - size_t size = file.tellg(); - file.seekg(0, std::ios::beg); - std::vector raw_data(size / sizeof(uint16_t)); - file.read(reinterpret_cast(raw_data.data()), size); - - std::vector data(raw_data.size()); - std::memcpy(data.data(), raw_data.data(), size); - return data; -} - -bool almost_equal(dtype a, dtype b, float rtol = 1e-1, float atol = 1e-2) { - float fa = static_cast(a); - float fb = static_cast(b); - return std::abs(fa - fb) <= (atol + rtol * std::abs(fb)); -} - -struct Mismatch { - size_t index; - dtype got; - dtype expected; - float error; -}; - -bool verify_output(const dtype *output, const std::vector &reference, - size_t size, const std::string &test_name) { - std::vector mismatches; - - for (size_t i = 0; i < size && i < reference.size(); i++) { - if (!almost_equal(output[i], reference[i])) { - float error = std::abs(static_cast(output[i]) - static_cast(reference[i])); - mismatches.push_back({i, output[i], reference[i], error}); - } - } - - if (mismatches.empty()) { - std::cerr << test_name << " PASSED: all outputs match reference" << std::endl; - return true; - } else { - std::cerr << test_name << " FAILED: " << mismatches.size() << " mismatches" << std::endl; - - // Sort by error to find top 5 diverging values - std::sort(mismatches.begin(), mismatches.end(), - [](const Mismatch &a, const Mismatch &b) { return a.error > b.error; }); - - std::cerr << "Top 5 diverging values:" << std::endl; - for (size_t i = 0; i < std::min(size_t(5), mismatches.size()); i++) { - const auto &m = mismatches[i]; - std::cerr << " [" << m.index << "] got " << static_cast(m.got) - << ", expected " << static_cast(m.expected) - << ", error " << m.error << std::endl; - } - return false; - } -} - -int main(int argc, const char *argv[]) { - unsigned int device_index = 0; - auto device = xrt::device(device_index); - - std::string kernelName = "main:sequence"; - xrt::elf ctx_elf{"aie.elf"}; - xrt::hw_context context = xrt::hw_context(device, ctx_elf); - auto kernel = xrt::ext::kernel(context, kernelName); - - size_t total_size = 0; - for (const auto &binfo : buffers_config) { - total_size += binfo.size; - } - - xrt::bo bo_inout = xrt::ext::bo{device, total_size * sizeof(dtype)}; - dtype *buf = bo_inout.map(); - - std::map buffer_ptrs; - size_t offset = 0; - for (const auto &binfo : buffers_config) { - buffer_ptrs[binfo.name] = buf + offset; - offset += binfo.size; - } - - auto run = xrt::run(kernel); - run.set_arg(0, bo_inout); - - // Run verification on multiple test cases - bool all_tests_passed = true; - - for (int test_case = 0; test_case < NUM_TEST_CASES; test_case++) { - std::cerr << "\n=== Test Case " << test_case << " ===" << std::endl; - - // Load inputs for this test case - auto input_data = load_bfloat16("../../input_" + std::to_string(test_case) + ".bin"); - auto weights_1_data = load_bfloat16("../../weights_1_" + std::to_string(test_case) + ".bin"); - auto weights_2_data = load_bfloat16("../../weights_2_" + std::to_string(test_case) + ".bin"); - auto weights_3_data = load_bfloat16("../../weights_3_" + std::to_string(test_case) + ".bin"); - auto reference = load_bfloat16("../../reference_output_" + std::to_string(test_case) + ".bin"); - - if (input_data.empty() || weights_1_data.empty() || weights_2_data.empty() || - weights_3_data.empty() || reference.empty()) { - std::cerr << "Warning: test case " << test_case << " data not found, skipping" << std::endl; - continue; - } - - // Copy input data to buffers - std::memcpy(buffer_ptrs["input"], input_data.data(), - std::min(input_data.size(), buffers_config[0].size) * sizeof(dtype)); - std::memcpy(buffer_ptrs["weights_1"], weights_1_data.data(), - std::min(weights_1_data.size(), buffers_config[1].size) * sizeof(dtype)); - std::memcpy(buffer_ptrs["weights_2"], weights_2_data.data(), - std::min(weights_2_data.size(), buffers_config[2].size) * sizeof(dtype)); - std::memcpy(buffer_ptrs["weights_3"], weights_3_data.data(), - std::min(weights_3_data.size(), buffers_config[3].size) * sizeof(dtype)); - - bo_inout.sync(XCL_BO_SYNC_BO_TO_DEVICE); - - // Run kernel - run.start(); - run.wait2(); - - bo_inout.sync(XCL_BO_SYNC_BO_FROM_DEVICE); - - // Load reference data for intermediates - auto reference_left = load_bfloat16("../../reference_left_" + std::to_string(test_case) + ".bin"); - auto reference_right = load_bfloat16("../../reference_right_" + std::to_string(test_case) + ".bin"); - auto reference_left_swished = load_bfloat16("../../reference_left_swished_" + std::to_string(test_case) + ".bin"); - auto reference_intermediate = load_bfloat16("../../reference_intermediate_" + std::to_string(test_case) + ".bin"); - - // Verify all intermediate buffers - bool passed = true; - - if (!reference_left.empty()) { - dtype *left_ptr = buffer_ptrs["left"]; - passed = verify_output(left_ptr, reference_left, HIDDEN_DIM, - "Test case " + std::to_string(test_case) + " - left") && passed; - } - - if (!reference_right.empty()) { - dtype *right_ptr = buffer_ptrs["right"]; - passed = verify_output(right_ptr, reference_right, HIDDEN_DIM, - "Test case " + std::to_string(test_case) + " - right") && passed; - } - - if (!reference_left_swished.empty()) { - dtype *left_swished_ptr = buffer_ptrs["left_swished"]; - passed = verify_output(left_swished_ptr, reference_left_swished, HIDDEN_DIM, - "Test case " + std::to_string(test_case) + " - left_swished") && passed; - } - - if (!reference_intermediate.empty()) { - dtype *intermediate_ptr = buffer_ptrs["intermediate"]; - passed = verify_output(intermediate_ptr, reference_intermediate, HIDDEN_DIM, - "Test case " + std::to_string(test_case) + " - intermediate") && passed; - } - - if (!reference.empty()) { - dtype *output_verify = buffer_ptrs["output"]; - passed = verify_output(output_verify, reference, EMBEDDING_DIM, - "Test case " + std::to_string(test_case) + " - output") && passed; - } - - all_tests_passed = all_tests_passed && passed; - } - - if (!all_tests_passed) { - std::cerr << "\nSome verification tests failed!" << std::endl; - } else { - std::cerr << "\nAll verification tests passed!" << std::endl; - } - - // For benchmarking, use the first test case - auto input_data = load_bfloat16("../../input_0.bin"); - auto weights_1_data = load_bfloat16("../../weights_1_0.bin"); - auto weights_2_data = load_bfloat16("../../weights_2_0.bin"); - auto weights_3_data = load_bfloat16("../../weights_3_0.bin"); - - if (!input_data.empty() && !weights_1_data.empty() && - !weights_2_data.empty() && !weights_3_data.empty()) { - std::memcpy(buffer_ptrs["input"], input_data.data(), - std::min(input_data.size(), buffers_config[0].size) * sizeof(dtype)); - std::memcpy(buffer_ptrs["weights_1"], weights_1_data.data(), - std::min(weights_1_data.size(), buffers_config[1].size) * sizeof(dtype)); - std::memcpy(buffer_ptrs["weights_2"], weights_2_data.data(), - std::min(weights_2_data.size(), buffers_config[2].size) * sizeof(dtype)); - std::memcpy(buffer_ptrs["weights_3"], weights_3_data.data(), - std::min(weights_3_data.size(), buffers_config[3].size) * sizeof(dtype)); - bo_inout.sync(XCL_BO_SYNC_BO_TO_DEVICE); - } - - std::cerr << "Running timed iterations..." << std::endl; - std::vector iteration_times; - - for (int iter = 0; iter < NUM_ITERATIONS; iter++) { - auto iter_start = std::chrono::high_resolution_clock::now(); - run.start(); - run.wait2(); - auto iter_end = std::chrono::high_resolution_clock::now(); - double iter_time = std::chrono::duration_cast(iter_end - iter_start).count(); - iteration_times.push_back(iter_time); - } - - bo_inout.sync(XCL_BO_SYNC_BO_FROM_DEVICE); - - // Output CSV format: variant,iteration,time_us - for (int i = 0; i < NUM_ITERATIONS; i++) { - std::cout << VARIANT_NAME << "," << i << "," << iteration_times[i] << std::endl; - } - - return 0; -} diff --git a/programming_examples/reconfiguration/swiglu/generate_reference.py b/programming_examples/reconfiguration/swiglu/generate_reference.py deleted file mode 100755 index dbef9d58fff..00000000000 --- a/programming_examples/reconfiguration/swiglu/generate_reference.py +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env python3 -import numpy as np -from ml_dtypes import bfloat16 -import struct - -EMBEDDING_DIM = 2048 -HIDDEN_DIM = 8192 -NUM_TEST_CASES = 2 - -def silu(x): - return x / (1.0 + np.exp(-x)) - -def swiglu_reference(input_data, weights_1, weights_2, weights_3): - left = np.dot(input_data, weights_1.T) - right = np.dot(input_data, weights_2.T) - - left_swished = silu(left) - - intermediate = left_swished * right - - output = np.dot(intermediate, weights_3.T) - - # Return all intermediate results - return { - 'left': left.astype(bfloat16), - 'right': right.astype(bfloat16), - 'left_swished': left_swished.astype(bfloat16), - 'intermediate': intermediate.astype(bfloat16), - 'output': output.astype(bfloat16) - } - -def generate_random_inputs(): - """Generate random inputs for testing""" - np.random.seed(42) # Fixed seed for reproducibility - - inputs = [] - weights = [] - - for i in range(NUM_TEST_CASES): - # Generate random input and weights with reasonable ranges - input_data = (np.random.rand(EMBEDDING_DIM).astype(np.float32)).astype(bfloat16) - w1 = (np.random.randn(HIDDEN_DIM, EMBEDDING_DIM).astype(np.float32) * 0.2).astype(bfloat16) - w2 = (np.random.randn(HIDDEN_DIM, EMBEDDING_DIM).astype(np.float32) * 0.2).astype(bfloat16) - w3 = (np.random.randn(EMBEDDING_DIM, HIDDEN_DIM).astype(np.float32) * 0.2).astype(bfloat16) - - inputs.append(input_data) - weights.append((w1, w2, w3)) - - return inputs, weights - -def save_reference(): - inputs, weights = generate_random_inputs() - - for test_idx in range(NUM_TEST_CASES): - input_data = inputs[test_idx] - w1, w2, w3 = weights[test_idx] - - # Save inputs - with open(f'input_{test_idx}.bin', 'wb') as f: - input_data.tofile(f) - - with open(f'weights_1_{test_idx}.bin', 'wb') as f: - w1.tofile(f) - - with open(f'weights_2_{test_idx}.bin', 'wb') as f: - w2.tofile(f) - - with open(f'weights_3_{test_idx}.bin', 'wb') as f: - w3.tofile(f) - - # Compute and save all reference outputs (including intermediates) - results = swiglu_reference(input_data, w1, w2, w3) - - with open(f'reference_left_{test_idx}.bin', 'wb') as f: - results['left'].tofile(f) - - with open(f'reference_right_{test_idx}.bin', 'wb') as f: - results['right'].tofile(f) - - with open(f'reference_left_swished_{test_idx}.bin', 'wb') as f: - results['left_swished'].tofile(f) - - with open(f'reference_intermediate_{test_idx}.bin', 'wb') as f: - results['intermediate'].tofile(f) - - with open(f'reference_output_{test_idx}.bin', 'wb') as f: - results['output'].tofile(f) - - print(f"\nTest case {test_idx}:") - print(f" Input shape: {input_data.shape}, dtype: {input_data.dtype}") - print(f" Weights_1 shape: {w1.shape}, dtype: {w1.dtype}") - print(f" Weights_2 shape: {w2.shape}, dtype: {w2.dtype}") - print(f" Weights_3 shape: {w3.shape}, dtype: {w3.dtype}") - print(f" Left shape: {results['left'].shape}, dtype: {results['left'].dtype}") - print(f" Right shape: {results['right'].shape}, dtype: {results['right'].dtype}") - print(f" Left_swished shape: {results['left_swished'].shape}, dtype: {results['left_swished'].dtype}") - print(f" Intermediate shape: {results['intermediate'].shape}, dtype: {results['intermediate'].dtype}") - print(f" Output shape: {results['output'].shape}, dtype: {results['output'].dtype}") - print(f" Output first 5 values: {results['output'][:5]}") - print(f" Output last 5 values: {results['output'][-5:]}") - -if __name__ == "__main__": - save_reference() diff --git a/programming_examples/reconfiguration/swiglu/runlist/Makefile b/programming_examples/reconfiguration/swiglu/runlist/Makefile deleted file mode 100644 index 319ad29d7ae..00000000000 --- a/programming_examples/reconfiguration/swiglu/runlist/Makefile +++ /dev/null @@ -1,74 +0,0 @@ -KERNEL_NAMES = swiglu_gemv_1 swiglu_silu swiglu_eltwise_mul swiglu_gemv_2 -MLIR_FILES = $(addprefix build/,$(addsuffix .mlir,$(KERNEL_NAMES))) -FINAL_XCLBIN = build/swiglu_combined.xclbin - -PEANO_CLANG = $(PEANO_INSTALL_DIR)/bin/clang++ -AIECC = aiecc.py -PEANO_PATH = $(PEANO_INSTALL_DIR) - -KERNEL_DIR = ../../kernels -OPERATOR_DIR = ../../operators -AIE_KERNELS_DIR = /scratch/roesti/mlir-aie/aie_kernels -MLIR_AIE_DIR = $(shell python3 -c "from aie.utils.config import root_path; print(root_path())") - -CLANG_FLAGS = -O2 -std=c++20 --target=aie2p-none-unknown-elf -Wno-parentheses -Wno-attributes -Wno-macro-redefined -Wno-empty-body -Wno-missing-template-arg-list-after-template-kw -I$(AIE_KERNELS_DIR) -I$(MLIR_AIE_DIR)/include -AIECC_FLAGS = --no-compile-host --no-xchesscc --no-xbridge --peano $(PEANO_PATH) -HOST_FLAGS = -std=c++23 -Wall -I/opt/xilinx/xrt/include -I/scratch/roesti/mlir-aie/runtime_lib/test_lib -L/opt/xilinx/xrt/lib -lxrt_core -lxrt_coreutil -lrt -lstdc++ - -.PHONY: all clean test - -all: build/test - -build/mv.o: $(KERNEL_DIR)/mv.cc | build - $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ - -build/mul.o: $(KERNEL_DIR)/mul.cc | build - $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ - -build/silu.o: $(KERNEL_DIR)/silu.cc | build - $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ - -build/swiglu_gemv_1.mlir: $(OPERATOR_DIR)/matrix_vector_mul.py | build - python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from matrix_vector_mul import my_matvec; from aie.iron.device import NPU2; mlir_code = my_matvec(NPU2(), 8, 8192, 2048, 1); print(str(mlir_code))' > $@ - -build/swiglu_gemv_2.mlir: $(OPERATOR_DIR)/matrix_vector_mul.py | build - python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from matrix_vector_mul import my_matvec; from aie.iron.device import NPU2; mlir_code = my_matvec(NPU2(), 8, 2048, 8192, 1); print(str(mlir_code))' > $@ - -build/swiglu_silu.mlir: $(OPERATOR_DIR)/silu.py | build - python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from silu import my_silu; from aie.iron.device import NPU2; mlir_code = my_silu(NPU2(), 8192, 8, 2, 512, 0); print(str(mlir_code))' > $@ - -build/swiglu_eltwise_mul.mlir: $(OPERATOR_DIR)/eltwise_mul.py | build - python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from eltwise_mul import my_eltwise_mul; from aie.iron.device import NPU2; mlir_code = my_eltwise_mul(NPU2(), 8192, 8, 2, 1024, 0); print(str(mlir_code))' > $@ - -build/swiglu_gemv_1.xclbin: build/swiglu_gemv_1.mlir build/mv.o - cd build && $(AIECC) $(AIECC_FLAGS) --xclbin-instance-name=swiglu_gemv_1 --xclbin-kernel-id=0x901 --aie-generate-xclbin --xclbin-name=swiglu_gemv_1.xclbin --xclbin-kernel-name=swiglu_gemv_1 --aie-generate-npu --npu-insts-name=swiglu_gemv_1.bin swiglu_gemv_1.mlir - -build/swiglu_silu.bin: build/swiglu_silu.mlir build/silu.o - cd build && $(AIECC) $(AIECC_FLAGS) --no-compile --aie-generate-npu --npu-insts-name=swiglu_silu.bin swiglu_silu.mlir - -build/swiglu_eltwise_mul.bin: build/swiglu_eltwise_mul.mlir build/mul.o - cd build && $(AIECC) $(AIECC_FLAGS) --no-compile --aie-generate-npu --npu-insts-name=swiglu_eltwise_mul.bin swiglu_eltwise_mul.mlir - -build/swiglu_gemv_2.bin: build/swiglu_gemv_2.mlir build/mv.o - cd build && $(AIECC) $(AIECC_FLAGS) --no-compile --aie-generate-npu --npu-insts-name=swiglu_gemv_2.bin swiglu_gemv_2.mlir - -build/swiglu_silu.xclbin: build/swiglu_silu.mlir build/swiglu_gemv_1.xclbin build/swiglu_silu.bin - cd build && $(AIECC) $(AIECC_FLAGS) --xclbin-instance-name=swiglu_silu --xclbin-kernel-id=0x902 --aie-generate-xclbin --xclbin-name=swiglu_silu.xclbin --xclbin-kernel-name=swiglu_silu --xclbin-input=swiglu_gemv_1.xclbin swiglu_silu.mlir - -build/swiglu_eltwise_mul.xclbin: build/swiglu_eltwise_mul.mlir build/swiglu_silu.xclbin build/swiglu_eltwise_mul.bin - cd build && $(AIECC) $(AIECC_FLAGS) --xclbin-instance-name=swiglu_eltwise_mul --xclbin-kernel-id=0x903 --aie-generate-xclbin --xclbin-name=swiglu_eltwise_mul.xclbin --xclbin-kernel-name=swiglu_eltwise_mul --xclbin-input=swiglu_silu.xclbin swiglu_eltwise_mul.mlir - -build/swiglu_combined.xclbin: build/swiglu_gemv_2.mlir build/swiglu_eltwise_mul.xclbin build/swiglu_gemv_2.bin - cd build && $(AIECC) $(AIECC_FLAGS) --xclbin-instance-name=swiglu_gemv_2 --xclbin-kernel-id=0x904 --aie-generate-xclbin --xclbin-name=swiglu_combined.xclbin --xclbin-kernel-name=swiglu_gemv_2 --xclbin-input=swiglu_eltwise_mul.xclbin swiglu_gemv_2.mlir - -build/test: test.cpp $(FINAL_XCLBIN) - g++-13 $< -o $@ $(HOST_FLAGS) - -build: - mkdir -p build - -test: build/test - cd build && ./test - -clean: - rm -rf build aie.mlir.prj diff --git a/programming_examples/reconfiguration/swiglu/runlist/test.cpp b/programming_examples/reconfiguration/swiglu/runlist/test.cpp deleted file mode 100644 index d90768354b8..00000000000 --- a/programming_examples/reconfiguration/swiglu/runlist/test.cpp +++ /dev/null @@ -1,388 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "xrt/experimental/xrt_kernel.h" -#include "xrt/xrt_bo.h" -#include "xrt/xrt_device.h" -#include "xrt/xrt_kernel.h" - -constexpr int EMBEDDING_DIM = 2048; -constexpr int HIDDEN_DIM = 8192; -constexpr int NUM_ITERATIONS = 1000; -constexpr int NUM_TEST_CASES = 2; - -using dtype = std::bfloat16_t; - -struct KernelInfo { - std::string name; - std::string instr_file; -}; - -struct BufferInfo { - std::string name; - size_t size; -}; - -struct Operation { - int kernel_idx; - std::vector buffer_names; -}; - -std::string combined_xclbin = "swiglu_combined.xclbin"; - -std::vector kernels_config = { - {"swiglu_gemv_1", "swiglu_gemv_1.bin"}, - {"swiglu_silu", "swiglu_silu.bin"}, - {"swiglu_eltwise_mul", "swiglu_eltwise_mul.bin"}, - {"swiglu_gemv_2", "swiglu_gemv_2.bin"}, -}; - -std::vector buffers_config = { - {"input", EMBEDDING_DIM * sizeof(dtype)}, - {"weights_1", EMBEDDING_DIM * HIDDEN_DIM * sizeof(dtype)}, - {"weights_2", EMBEDDING_DIM * HIDDEN_DIM * sizeof(dtype)}, - {"weights_3", HIDDEN_DIM * EMBEDDING_DIM * sizeof(dtype)}, - {"left", HIDDEN_DIM * sizeof(dtype)}, - {"left_swished", HIDDEN_DIM * sizeof(dtype)}, - {"right", HIDDEN_DIM * sizeof(dtype)}, - {"intermediate", HIDDEN_DIM * sizeof(dtype)}, - {"output", EMBEDDING_DIM * sizeof(dtype)}, -}; - -std::vector runlist_config = { - {0, {"weights_1", "input", "left"}}, - {0, {"weights_2", "input", "right"}}, - {1, {"left", "left_swished"}}, - {2, {"left_swished", "right", "intermediate"}}, - {3, {"weights_3", "intermediate", "output"}}, -}; - -std::vector load_bfloat16(const std::string &filename) { - std::ifstream file(filename, std::ios::binary); - if (!file) { - return {}; - } - file.seekg(0, std::ios::end); - size_t size = file.tellg(); - file.seekg(0, std::ios::beg); - std::vector raw_data(size / sizeof(uint16_t)); - file.read(reinterpret_cast(raw_data.data()), size); - - std::vector data(raw_data.size()); - std::memcpy(data.data(), raw_data.data(), size); - return data; -} - -bool almost_equal(dtype a, dtype b, float rtol = 1e-2, float atol = 1e-3) { - float fa = static_cast(a); - float fb = static_cast(b); - return std::abs(fa - fb) <= (atol + rtol * std::abs(fb)); -} - -struct Mismatch { - size_t index; - dtype got; - dtype expected; - float error; -}; - -bool verify_output(const dtype *output, const std::vector &reference, - size_t size, const std::string &test_name) { - std::vector mismatches; - - for (size_t i = 0; i < size && i < reference.size(); i++) { - if (!almost_equal(output[i], reference[i])) { - float error = std::abs(static_cast(output[i]) - static_cast(reference[i])); - mismatches.push_back({i, output[i], reference[i], error}); - } - } - - if (mismatches.empty()) { - std::cerr << test_name << " PASSED: all outputs match reference" << std::endl; - return true; - } else { - std::cerr << test_name << " FAILED: " << mismatches.size() << " mismatches" << std::endl; - - // Sort by error to find top 5 diverging values - std::sort(mismatches.begin(), mismatches.end(), - [](const Mismatch &a, const Mismatch &b) { return a.error > b.error; }); - - std::cerr << "Top 5 diverging values:" << std::endl; - for (size_t i = 0; i < std::min(size_t(5), mismatches.size()); i++) { - const auto &m = mismatches[i]; - std::cerr << " [" << m.index << "] got " << static_cast(m.got) - << ", expected " << static_cast(m.expected) - << ", error " << m.error << std::endl; - } - return false; - } -} - -std::vector load_reference(const std::string &filename) { - std::ifstream file(filename, std::ios::binary); - if (!file) { - return {}; - } - file.seekg(0, std::ios::end); - size_t size = file.tellg(); - file.seekg(0, std::ios::beg); - std::vector data(size / sizeof(uint16_t)); - file.read(reinterpret_cast(data.data()), size); - return data; -} - -std::vector load_instr_binary(const std::string &filename) { - std::ifstream file(filename, std::ios::binary); - file.seekg(0, std::ios::end); - size_t size = file.tellg(); - file.seekg(0, std::ios::beg); - std::vector data(size / sizeof(uint32_t)); - file.read(reinterpret_cast(data.data()), size); - return data; -} - -int main(int argc, const char *argv[]) { - unsigned int device_index = 0; - auto device = xrt::device(device_index); - - auto xclbin = xrt::xclbin(combined_xclbin); - device.register_xclbin(xclbin); - xrt::hw_context context(device, xclbin.get_uuid()); - - std::vector kernels; - for (const auto &kinfo : kernels_config) { - kernels.push_back(xrt::kernel(context, kinfo.name)); - } - - std::map buffers; - for (const auto &binfo : buffers_config) { - int group_id = (binfo.name == "weights_1" || binfo.name == "weights_2" || binfo.name == "input") ? 3 : 4; - int kernel_idx = (binfo.name == "weights_3") ? 3 : - (binfo.name == "left_swished") ? 1 : - (binfo.name == "intermediate") ? 2 : 0; - buffers[binfo.name] = xrt::bo(device, binfo.size, XRT_BO_FLAGS_HOST_ONLY, - kernels[kernel_idx].group_id(group_id)); - } - - std::vector bo_instrs; - std::vector> instr_data; - for (size_t i = 0; i < kernels_config.size(); i++) { - instr_data.push_back(load_instr_binary(kernels_config[i].instr_file)); - bo_instrs.push_back(xrt::bo(device, instr_data[i].size() * sizeof(uint32_t), - XCL_BO_FLAGS_CACHEABLE, kernels[i].group_id(1))); - void *buf = bo_instrs[i].map(); - memcpy(buf, instr_data[i].data(), instr_data[i].size() * sizeof(uint32_t)); - bo_instrs[i].sync(XCL_BO_SYNC_BO_TO_DEVICE); - } - - unsigned int opcode = 3; - - // Run verification on multiple test cases - bool all_tests_passed = true; - - for (int test_case = 0; test_case < NUM_TEST_CASES; test_case++) { - std::cerr << "\n=== Test Case " << test_case << " ===" << std::endl; - - // Load inputs for this test case - auto input_data = load_bfloat16("../../input_" + std::to_string(test_case) + ".bin"); - auto weights_1_data = load_bfloat16("../../weights_1_" + std::to_string(test_case) + ".bin"); - auto weights_2_data = load_bfloat16("../../weights_2_" + std::to_string(test_case) + ".bin"); - auto weights_3_data = load_bfloat16("../../weights_3_" + std::to_string(test_case) + ".bin"); - auto reference = load_bfloat16("../../reference_output_" + std::to_string(test_case) + ".bin"); - - if (input_data.empty() || weights_1_data.empty() || weights_2_data.empty() || - weights_3_data.empty() || reference.empty()) { - std::cerr << "Warning: test case " << test_case << " data not found, skipping" << std::endl; - continue; - } - - // Copy input data to buffers - dtype *input_ptr = buffers["input"].map(); - dtype *weights_1_ptr = buffers["weights_1"].map(); - dtype *weights_2_ptr = buffers["weights_2"].map(); - dtype *weights_3_ptr = buffers["weights_3"].map(); - - std::memcpy(input_ptr, input_data.data(), - std::min(input_data.size(), size_t(EMBEDDING_DIM)) * sizeof(dtype)); - std::memcpy(weights_1_ptr, weights_1_data.data(), - std::min(weights_1_data.size(), size_t(EMBEDDING_DIM * HIDDEN_DIM)) * sizeof(dtype)); - std::memcpy(weights_2_ptr, weights_2_data.data(), - std::min(weights_2_data.size(), size_t(EMBEDDING_DIM * HIDDEN_DIM)) * sizeof(dtype)); - std::memcpy(weights_3_ptr, weights_3_data.data(), - std::min(weights_3_data.size(), size_t(HIDDEN_DIM * EMBEDDING_DIM)) * sizeof(dtype)); - - // Zero-initialize output buffer - dtype *output_ptr = buffers["output"].map(); - std::memset(output_ptr, 0, EMBEDDING_DIM * sizeof(dtype)); - - buffers["input"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["weights_1"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["weights_2"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["weights_3"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["left"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["left_swished"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["right"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["intermediate"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["output"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - - // Run kernel - xrt::runlist runlist_verify = xrt::runlist(context); - for (const auto &op : runlist_config) { - int kidx = op.kernel_idx; - if (op.buffer_names.size() == 3) { - auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), - buffers[op.buffer_names[0]], - buffers[op.buffer_names[1]], - buffers[op.buffer_names[2]]); - runlist_verify.add(run); - } else if (op.buffer_names.size() == 2) { - auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), - buffers[op.buffer_names[0]], - buffers[op.buffer_names[1]]); - runlist_verify.add(run); - } - } - runlist_verify.execute(); - runlist_verify.wait(); - - // Sync all buffers from device to verify intermediates - buffers["left"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); - buffers["right"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); - buffers["left_swished"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); - buffers["intermediate"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); - buffers["output"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); - - // Load reference data for intermediates - auto reference_left = load_bfloat16("../../reference_left_" + std::to_string(test_case) + ".bin"); - auto reference_right = load_bfloat16("../../reference_right_" + std::to_string(test_case) + ".bin"); - auto reference_left_swished = load_bfloat16("../../reference_left_swished_" + std::to_string(test_case) + ".bin"); - auto reference_intermediate = load_bfloat16("../../reference_intermediate_" + std::to_string(test_case) + ".bin"); - - // Verify all intermediate buffers - bool passed = true; - - if (!reference_left.empty()) { - dtype *left_ptr = buffers["left"].map(); - passed = verify_output(left_ptr, reference_left, HIDDEN_DIM, - "Test case " + std::to_string(test_case) + " - left") && passed; - } - - if (!reference_right.empty()) { - dtype *right_ptr = buffers["right"].map(); - passed = verify_output(right_ptr, reference_right, HIDDEN_DIM, - "Test case " + std::to_string(test_case) + " - right") && passed; - } - - if (!reference_left_swished.empty()) { - dtype *left_swished_ptr = buffers["left_swished"].map(); - passed = verify_output(left_swished_ptr, reference_left_swished, HIDDEN_DIM, - "Test case " + std::to_string(test_case) + " - left_swished") && passed; - } - - if (!reference_intermediate.empty()) { - dtype *intermediate_ptr = buffers["intermediate"].map(); - passed = verify_output(intermediate_ptr, reference_intermediate, HIDDEN_DIM, - "Test case " + std::to_string(test_case) + " - intermediate") && passed; - } - - if (!reference.empty()) { - dtype *output_verify = buffers["output"].map(); - passed = verify_output(output_verify, reference, EMBEDDING_DIM, - "Test case " + std::to_string(test_case) + " - output") && passed; - } - - all_tests_passed = all_tests_passed && passed; - } - - if (!all_tests_passed) { - std::cerr << "\nSome verification tests failed!" << std::endl; - } else { - std::cerr << "\nAll verification tests passed!" << std::endl; - } - - // For benchmarking, use the first test case - auto input_data = load_bfloat16("../../input_0.bin"); - auto weights_1_data = load_bfloat16("../../weights_1_0.bin"); - auto weights_2_data = load_bfloat16("../../weights_2_0.bin"); - auto weights_3_data = load_bfloat16("../../weights_3_0.bin"); - - if (!input_data.empty() && !weights_1_data.empty() && - !weights_2_data.empty() && !weights_3_data.empty()) { - dtype *input_ptr = buffers["input"].map(); - dtype *weights_1_ptr = buffers["weights_1"].map(); - dtype *weights_2_ptr = buffers["weights_2"].map(); - dtype *weights_3_ptr = buffers["weights_3"].map(); - - std::memcpy(input_ptr, input_data.data(), - std::min(input_data.size(), size_t(EMBEDDING_DIM)) * sizeof(dtype)); - std::memcpy(weights_1_ptr, weights_1_data.data(), - std::min(weights_1_data.size(), size_t(EMBEDDING_DIM * HIDDEN_DIM)) * sizeof(dtype)); - std::memcpy(weights_2_ptr, weights_2_data.data(), - std::min(weights_2_data.size(), size_t(EMBEDDING_DIM * HIDDEN_DIM)) * sizeof(dtype)); - std::memcpy(weights_3_ptr, weights_3_data.data(), - std::min(weights_3_data.size(), size_t(HIDDEN_DIM * EMBEDDING_DIM)) * sizeof(dtype)); - - // Zero-initialize output buffer - dtype *output_ptr = buffers["output"].map(); - std::memset(output_ptr, 0, EMBEDDING_DIM * sizeof(dtype)); - - buffers["input"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["weights_1"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["weights_2"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["weights_3"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["left"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["left_swished"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["right"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["intermediate"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["output"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - } - - xrt::runlist runlist = xrt::runlist(context); - for (const auto &op : runlist_config) { - int kidx = op.kernel_idx; - if (op.buffer_names.size() == 3) { - auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), - buffers[op.buffer_names[0]], - buffers[op.buffer_names[1]], - buffers[op.buffer_names[2]]); - runlist.add(run); - } else if (op.buffer_names.size() == 2) { - auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), - buffers[op.buffer_names[0]], - buffers[op.buffer_names[1]]); - runlist.add(run); - } - } - - std::cerr << "Running timed iterations..." << std::endl; - std::vector iteration_times; - - for (int iter = 0; iter < NUM_ITERATIONS; iter++) { - auto iter_start = std::chrono::high_resolution_clock::now(); - runlist.execute(); - runlist.wait(); - auto iter_end = std::chrono::high_resolution_clock::now(); - double iter_time = std::chrono::duration_cast(iter_end - iter_start).count(); - iteration_times.push_back(iter_time); - } - - buffers["output"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); - - // Output CSV format: variant,iteration,time_us - for (int i = 0; i < NUM_ITERATIONS; i++) { - std::cout << "runlist," << i << "," << iteration_times[i] << std::endl; - } - - return 0; -} diff --git a/programming_examples/reconfiguration/swiglu/separate_xclbins/Makefile b/programming_examples/reconfiguration/swiglu/separate_xclbins/Makefile deleted file mode 100644 index 4cef156e7e3..00000000000 --- a/programming_examples/reconfiguration/swiglu/separate_xclbins/Makefile +++ /dev/null @@ -1,66 +0,0 @@ -KERNEL_NAMES = swiglu_gemv_1 swiglu_silu swiglu_eltwise_mul swiglu_gemv_2 -MLIR_FILES = $(addprefix build/,$(addsuffix .mlir,$(KERNEL_NAMES))) -XCLBIN_FILES = $(addprefix build/,$(addsuffix .xclbin,$(KERNEL_NAMES))) -BIN_FILES = $(addprefix build/,$(addsuffix .bin,$(KERNEL_NAMES))) - -PEANO_CLANG = $(PEANO_INSTALL_DIR)/bin/clang++ -AIECC = aiecc.py -PEANO_PATH = $(PEANO_INSTALL_DIR) - -KERNEL_DIR = ../../kernels -OPERATOR_DIR = ../../operators -AIE_KERNELS_DIR = /scratch/roesti/mlir-aie/aie_kernels -MLIR_AIE_DIR = $(shell python3 -c "from aie.utils.config import root_path; print(root_path())") - -CLANG_FLAGS = -O2 -std=c++20 --target=aie2p-none-unknown-elf -Wno-parentheses -Wno-attributes -Wno-macro-redefined -Wno-empty-body -Wno-missing-template-arg-list-after-template-kw -I$(AIE_KERNELS_DIR) -I$(MLIR_AIE_DIR)/include -AIECC_FLAGS = --no-compile-host --no-xchesscc --no-xbridge --peano $(PEANO_PATH) -HOST_FLAGS = -std=c++23 -Wall -I/opt/xilinx/xrt/include -I/scratch/roesti/mlir-aie/runtime_lib/test_lib -L/opt/xilinx/xrt/lib -lxrt_core -lxrt_coreutil -lrt -lstdc++ - -.PHONY: all clean test - -all: build/test - -build/mv.o: $(KERNEL_DIR)/mv.cc | build - $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ - -build/mul.o: $(KERNEL_DIR)/mul.cc | build - $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ - -build/silu.o: $(KERNEL_DIR)/silu.cc | build - $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ - -build/swiglu_gemv_1.mlir: $(OPERATOR_DIR)/matrix_vector_mul.py | build - python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from matrix_vector_mul import my_matvec; from aie.iron.device import NPU2; mlir_code = my_matvec(NPU2(), 8, 8192, 2048, 1); print(str(mlir_code))' > $@ - -build/swiglu_gemv_2.mlir: $(OPERATOR_DIR)/matrix_vector_mul.py | build - python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from matrix_vector_mul import my_matvec; from aie.iron.device import NPU2; mlir_code = my_matvec(NPU2(), 8, 2048, 8192, 1); print(str(mlir_code))' > $@ - -build/swiglu_silu.mlir: $(OPERATOR_DIR)/silu.py | build - python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from silu import my_silu; from aie.iron.device import NPU2; mlir_code = my_silu(NPU2(), 8192, 8, 2, 512, 0); print(str(mlir_code))' > $@ - -build/swiglu_eltwise_mul.mlir: $(OPERATOR_DIR)/eltwise_mul.py | build - python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from eltwise_mul import my_eltwise_mul; from aie.iron.device import NPU2; mlir_code = my_eltwise_mul(NPU2(), 8192, 8, 2, 1024, 0); print(str(mlir_code))' > $@ - -build/swiglu_gemv_1.xclbin: build/swiglu_gemv_1.mlir build/mv.o - cd build && $(AIECC) $(AIECC_FLAGS) --xclbin-instance-name=swiglu_gemv_1 --xclbin-kernel-id=0x901 --aie-generate-xclbin --xclbin-name=swiglu_gemv_1.xclbin --xclbin-kernel-name=swiglu_gemv_1 --aie-generate-npu --npu-insts-name=swiglu_gemv_1.bin swiglu_gemv_1.mlir - -build/swiglu_silu.xclbin: build/swiglu_silu.mlir build/silu.o - cd build && $(AIECC) $(AIECC_FLAGS) --xclbin-instance-name=swiglu_silu --xclbin-kernel-id=0x902 --aie-generate-xclbin --xclbin-name=swiglu_silu.xclbin --xclbin-kernel-name=swiglu_silu --aie-generate-npu --npu-insts-name=swiglu_silu.bin swiglu_silu.mlir - -build/swiglu_eltwise_mul.xclbin: build/swiglu_eltwise_mul.mlir build/mul.o - cd build && $(AIECC) $(AIECC_FLAGS) --xclbin-instance-name=swiglu_eltwise_mul --xclbin-kernel-id=0x903 --aie-generate-xclbin --xclbin-name=swiglu_eltwise_mul.xclbin --xclbin-kernel-name=swiglu_eltwise_mul --aie-generate-npu --npu-insts-name=swiglu_eltwise_mul.bin swiglu_eltwise_mul.mlir - -build/swiglu_gemv_2.xclbin: build/swiglu_gemv_2.mlir build/mv.o - cd build && $(AIECC) $(AIECC_FLAGS) --xclbin-instance-name=swiglu_gemv_2 --xclbin-kernel-id=0x904 --aie-generate-xclbin --xclbin-name=swiglu_gemv_2.xclbin --xclbin-kernel-name=swiglu_gemv_2 --aie-generate-npu --npu-insts-name=swiglu_gemv_2.bin swiglu_gemv_2.mlir - -build/test: test.cpp $(XCLBIN_FILES) - g++-13 $< -o $@ $(HOST_FLAGS) - -build: - mkdir -p build - -test: build/test - cd build && ./test - -clean: - rm -rf build aie.mlir.prj diff --git a/programming_examples/reconfiguration/swiglu/separate_xclbins/test.cpp b/programming_examples/reconfiguration/swiglu/separate_xclbins/test.cpp deleted file mode 100644 index 50de042d607..00000000000 --- a/programming_examples/reconfiguration/swiglu/separate_xclbins/test.cpp +++ /dev/null @@ -1,386 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "xrt/xrt_bo.h" -#include "xrt/xrt_device.h" -#include "xrt/xrt_kernel.h" - -constexpr int EMBEDDING_DIM = 2048; -constexpr int HIDDEN_DIM = 8192; -constexpr int NUM_ITERATIONS = 1000; -constexpr int NUM_TEST_CASES = 2; - -using dtype = std::bfloat16_t; - -struct KernelInfo { - std::string name; - std::string xclbin_file; - std::string instr_file; - uint32_t kernel_id; -}; - -struct BufferInfo { - std::string name; - size_t size; -}; - -struct Operation { - int kernel_idx; - std::vector buffer_names; -}; - -std::vector kernels_config = { - {"swiglu_gemv_1", "swiglu_gemv_1.xclbin", "swiglu_gemv_1.bin", 0x901}, - {"swiglu_silu", "swiglu_silu.xclbin", "swiglu_silu.bin", 0x902}, - {"swiglu_eltwise_mul", "swiglu_eltwise_mul.xclbin", "swiglu_eltwise_mul.bin", 0x903}, - {"swiglu_gemv_2", "swiglu_gemv_2.xclbin", "swiglu_gemv_2.bin", 0x904}, -}; - -std::vector buffers_config = { - {"input", EMBEDDING_DIM * sizeof(dtype)}, - {"weights_1", EMBEDDING_DIM * HIDDEN_DIM * sizeof(dtype)}, - {"weights_2", EMBEDDING_DIM * HIDDEN_DIM * sizeof(dtype)}, - {"weights_3", HIDDEN_DIM * EMBEDDING_DIM * sizeof(dtype)}, - {"left", HIDDEN_DIM * sizeof(dtype)}, - {"left_swished", HIDDEN_DIM * sizeof(dtype)}, - {"right", HIDDEN_DIM * sizeof(dtype)}, - {"intermediate", HIDDEN_DIM * sizeof(dtype)}, - {"output", EMBEDDING_DIM * sizeof(dtype)}, -}; - -std::vector runlist_config = { - {0, {"weights_1", "input", "left"}}, - {0, {"weights_2", "input", "right"}}, - {1, {"left", "left_swished"}}, - {2, {"left_swished", "right", "intermediate"}}, - {3, {"weights_3", "intermediate", "output"}}, -}; - -std::vector load_bfloat16(const std::string &filename) { - std::ifstream file(filename, std::ios::binary); - if (!file) { - return {}; - } - file.seekg(0, std::ios::end); - size_t size = file.tellg(); - file.seekg(0, std::ios::beg); - std::vector raw_data(size / sizeof(uint16_t)); - file.read(reinterpret_cast(raw_data.data()), size); - - std::vector data(raw_data.size()); - std::memcpy(data.data(), raw_data.data(), size); - return data; -} - -bool almost_equal(dtype a, dtype b, float rtol = 1e-1, float atol = 1e-2) { - float fa = static_cast(a); - float fb = static_cast(b); - return std::abs(fa - fb) <= (atol + rtol * std::abs(fb)); -} - -struct Mismatch { - size_t index; - dtype got; - dtype expected; - float error; -}; - -bool verify_output(const dtype *output, const std::vector &reference, - size_t size, const std::string &test_name) { - std::vector mismatches; - - for (size_t i = 0; i < size && i < reference.size(); i++) { - if (!almost_equal(output[i], reference[i])) { - float error = std::abs(static_cast(output[i]) - static_cast(reference[i])); - mismatches.push_back({i, output[i], reference[i], error}); - } - } - - if (mismatches.empty()) { - std::cerr << test_name << " PASSED: all outputs match reference" << std::endl; - return true; - } else { - std::cerr << test_name << " FAILED: " << mismatches.size() << " mismatches" << std::endl; - - // Sort by error to find top 5 diverging values - std::sort(mismatches.begin(), mismatches.end(), - [](const Mismatch &a, const Mismatch &b) { return a.error > b.error; }); - - std::cerr << "Top 5 diverging values:" << std::endl; - for (size_t i = 0; i < std::min(size_t(5), mismatches.size()); i++) { - const auto &m = mismatches[i]; - std::cerr << " [" << m.index << "] got " << static_cast(m.got) - << ", expected " << static_cast(m.expected) - << ", error " << m.error << std::endl; - } - return false; - } -} - -std::vector load_instr_binary(const std::string &filename) { - std::ifstream file(filename, std::ios::binary); - file.seekg(0, std::ios::end); - size_t size = file.tellg(); - file.seekg(0, std::ios::beg); - std::vector data(size / sizeof(uint32_t)); - file.read(reinterpret_cast(data.data()), size); - return data; -} - -int main(int argc, const char *argv[]) { - unsigned int device_index = 0; - auto device = xrt::device(device_index); - - std::vector xclbins; - std::vector contexts; - std::vector kernels; - - for (const auto &kernel_info : kernels_config) { - xclbins.push_back(xrt::xclbin(kernel_info.xclbin_file)); - device.register_xclbin(xclbins.back()); - contexts.push_back(xrt::hw_context(device, xclbins.back().get_uuid())); - kernels.push_back(xrt::kernel(contexts.back(), kernel_info.name)); - } - - std::map buffers; - for (const auto &buf_info : buffers_config) { - int kernel_idx = 0; - int arg_idx = 3; - for (const auto &op : runlist_config) { - for (size_t i = 0; i < op.buffer_names.size(); i++) { - if (op.buffer_names[i] == buf_info.name) { - kernel_idx = op.kernel_idx; - arg_idx = 3 + i; - goto found; - } - } - } - found: - buffers[buf_info.name] = xrt::bo(device, buf_info.size, - XRT_BO_FLAGS_HOST_ONLY, - kernels[kernel_idx].group_id(arg_idx)); - } - - std::vector bo_instrs; - std::vector> instr_data; - for (size_t i = 0; i < kernels_config.size(); i++) { - instr_data.push_back(load_instr_binary(kernels_config[i].instr_file)); - bo_instrs.push_back(xrt::bo(device, instr_data[i].size() * sizeof(uint32_t), - XCL_BO_FLAGS_CACHEABLE, kernels[i].group_id(1))); - void *buf = bo_instrs[i].map(); - memcpy(buf, instr_data[i].data(), instr_data[i].size() * sizeof(uint32_t)); - bo_instrs[i].sync(XCL_BO_SYNC_BO_TO_DEVICE); - } - - unsigned int opcode = 3; - - // Run verification on multiple test cases - bool all_tests_passed = true; - - for (int test_case = 0; test_case < NUM_TEST_CASES; test_case++) { - std::cerr << "\n=== Test Case " << test_case << " ===" << std::endl; - - // Load inputs for this test case - auto input_data = load_bfloat16("../../input_" + std::to_string(test_case) + ".bin"); - auto weights_1_data = load_bfloat16("../../weights_1_" + std::to_string(test_case) + ".bin"); - auto weights_2_data = load_bfloat16("../../weights_2_" + std::to_string(test_case) + ".bin"); - auto weights_3_data = load_bfloat16("../../weights_3_" + std::to_string(test_case) + ".bin"); - auto reference = load_bfloat16("../../reference_output_" + std::to_string(test_case) + ".bin"); - - if (input_data.empty() || weights_1_data.empty() || weights_2_data.empty() || - weights_3_data.empty() || reference.empty()) { - std::cerr << "Warning: test case " << test_case << " data not found, skipping" << std::endl; - continue; - } - - // Copy input data to buffers - dtype *input_ptr = buffers["input"].map(); - dtype *weights_1_ptr = buffers["weights_1"].map(); - dtype *weights_2_ptr = buffers["weights_2"].map(); - dtype *weights_3_ptr = buffers["weights_3"].map(); - - std::memcpy(input_ptr, input_data.data(), - std::min(input_data.size(), size_t(EMBEDDING_DIM)) * sizeof(dtype)); - std::memcpy(weights_1_ptr, weights_1_data.data(), - std::min(weights_1_data.size(), size_t(EMBEDDING_DIM * HIDDEN_DIM)) * sizeof(dtype)); - std::memcpy(weights_2_ptr, weights_2_data.data(), - std::min(weights_2_data.size(), size_t(EMBEDDING_DIM * HIDDEN_DIM)) * sizeof(dtype)); - std::memcpy(weights_3_ptr, weights_3_data.data(), - std::min(weights_3_data.size(), size_t(HIDDEN_DIM * EMBEDDING_DIM)) * sizeof(dtype)); - - // Zero-initialize output buffer - dtype *output_ptr = buffers["output"].map(); - std::memset(output_ptr, 0, EMBEDDING_DIM * sizeof(dtype)); - - // Initialize left_swished with indices and right with alternating pattern - buffers["input"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["weights_1"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["weights_2"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["weights_3"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["left"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["left_swished"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["right"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["intermediate"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["output"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - - - // Run kernel - for (const auto &op : runlist_config) { - int kidx = op.kernel_idx; - std::vector op_buffers; - for (const auto &bname : op.buffer_names) { - op_buffers.push_back(&buffers[bname]); - } - - if (op_buffers.size() == 3) { - auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), - *op_buffers[0], *op_buffers[1], *op_buffers[2]); - run.wait2(); - } else if (op_buffers.size() == 2) { - auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), - *op_buffers[0], *op_buffers[1]); - run.wait2(); - } - } - - // Sync all buffers from device to verify intermediates - buffers["left"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); - buffers["right"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); - buffers["left_swished"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); - buffers["intermediate"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); - buffers["output"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); - - // Load reference data for intermediates - auto reference_left = load_bfloat16("../../reference_left_" + std::to_string(test_case) + ".bin"); - auto reference_right = load_bfloat16("../../reference_right_" + std::to_string(test_case) + ".bin"); - auto reference_left_swished = load_bfloat16("../../reference_left_swished_" + std::to_string(test_case) + ".bin"); - auto reference_intermediate = load_bfloat16("../../reference_intermediate_" + std::to_string(test_case) + ".bin"); - - // Verify all intermediate buffers - bool passed = true; - - if (!reference_left.empty()) { - dtype *left_ptr = buffers["left"].map(); - passed = verify_output(left_ptr, reference_left, HIDDEN_DIM, - "Test case " + std::to_string(test_case) + " - left") && passed; - } - - if (!reference_right.empty()) { - dtype *right_ptr = buffers["right"].map(); - passed = verify_output(right_ptr, reference_right, HIDDEN_DIM, - "Test case " + std::to_string(test_case) + " - right") && passed; - } - - if (!reference_left_swished.empty()) { - dtype *left_swished_ptr = buffers["left_swished"].map(); - passed = verify_output(left_swished_ptr, reference_left_swished, HIDDEN_DIM, - "Test case " + std::to_string(test_case) + " - left_swished") && passed; - } - - if (!reference_intermediate.empty()) { - dtype *intermediate_ptr = buffers["intermediate"].map(); - passed = verify_output(intermediate_ptr, reference_intermediate, HIDDEN_DIM, - "Test case " + std::to_string(test_case) + " - intermediate") && passed; - } - - if (!reference.empty()) { - dtype *output_verify = buffers["output"].map(); - passed = verify_output(output_verify, reference, EMBEDDING_DIM, - "Test case " + std::to_string(test_case) + " - output") && passed; - } - - all_tests_passed = all_tests_passed && passed; - } - - if (!all_tests_passed) { - std::cerr << "\nSome verification tests failed!" << std::endl; - } else { - std::cerr << "\nAll verification tests passed!" << std::endl; - } - - // For benchmarking, use the first test case - auto input_data = load_bfloat16("../../input_0.bin"); - auto weights_1_data = load_bfloat16("../../weights_1_0.bin"); - auto weights_2_data = load_bfloat16("../../weights_2_0.bin"); - auto weights_3_data = load_bfloat16("../../weights_3_0.bin"); - - if (!input_data.empty() && !weights_1_data.empty() && - !weights_2_data.empty() && !weights_3_data.empty()) { - dtype *input_ptr = buffers["input"].map(); - dtype *weights_1_ptr = buffers["weights_1"].map(); - dtype *weights_2_ptr = buffers["weights_2"].map(); - dtype *weights_3_ptr = buffers["weights_3"].map(); - - std::memcpy(input_ptr, input_data.data(), - std::min(input_data.size(), size_t(EMBEDDING_DIM)) * sizeof(dtype)); - std::memcpy(weights_1_ptr, weights_1_data.data(), - std::min(weights_1_data.size(), size_t(EMBEDDING_DIM * HIDDEN_DIM)) * sizeof(dtype)); - std::memcpy(weights_2_ptr, weights_2_data.data(), - std::min(weights_2_data.size(), size_t(EMBEDDING_DIM * HIDDEN_DIM)) * sizeof(dtype)); - std::memcpy(weights_3_ptr, weights_3_data.data(), - std::min(weights_3_data.size(), size_t(HIDDEN_DIM * EMBEDDING_DIM)) * sizeof(dtype)); - - // Zero-initialize output buffer - dtype *output_ptr = buffers["output"].map(); - std::memset(output_ptr, 0, EMBEDDING_DIM * sizeof(dtype)); - - buffers["input"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["weights_1"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["weights_2"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["weights_3"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["left"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["left_swished"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["right"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["intermediate"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - buffers["output"].sync(XCL_BO_SYNC_BO_TO_DEVICE); - } - - std::cerr << "Running timed iterations..." << std::endl; - std::vector iteration_times; - - for (int iter = 0; iter < NUM_ITERATIONS; iter++) { - auto iter_start = std::chrono::high_resolution_clock::now(); - - for (const auto &op : runlist_config) { - int kidx = op.kernel_idx; - std::vector op_buffers; - for (const auto &bname : op.buffer_names) { - op_buffers.push_back(&buffers[bname]); - } - - if (op_buffers.size() == 3) { - auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), - *op_buffers[0], *op_buffers[1], *op_buffers[2]); - run.wait2(); - } else if (op_buffers.size() == 2) { - auto run = kernels[kidx](opcode, bo_instrs[kidx], instr_data[kidx].size(), - *op_buffers[0], *op_buffers[1]); - run.wait2(); - } - } - - auto iter_end = std::chrono::high_resolution_clock::now(); - double iter_time = std::chrono::duration_cast(iter_end - iter_start).count(); - iteration_times.push_back(iter_time); - } - - buffers["output"].sync(XCL_BO_SYNC_BO_FROM_DEVICE); - - // Output CSV format: variant,iteration,time_us - for (int i = 0; i < NUM_ITERATIONS; i++) { - std::cout << "separate_xclbins," << i << "," << iteration_times[i] << std::endl; - } - - return 0; -} diff --git a/programming_examples/reconfiguration/visualize_results.py b/programming_examples/reconfiguration/visualize_results.py deleted file mode 100755 index fc08b1bf437..00000000000 --- a/programming_examples/reconfiguration/visualize_results.py +++ /dev/null @@ -1,236 +0,0 @@ -#!/usr/bin/env python3 -import sys -import csv -import matplotlib.pyplot as plt -import numpy as np -from pathlib import Path -import seaborn as sns - -# Set style and font -# sns.set_theme(style='whitegrid') -# plt.rcParams['font.family'] = 'serif' -# plt.rcParams['font.serif'] = ['Times'] -# plt.rcParams['mathtext.fontset'] = 'custom' -# plt.rcParams['mathtext.rm'] = 'Times' -plt.style.use('dark_background') - -def read_benchmark_results(csv_file): - """Read benchmark results from CSV with format: variant,iteration,time_us""" - data = {} - - with open(csv_file, 'r') as f: - reader = csv.DictReader(f) # DictReader automatically handles headers - for row in reader: - variant = row['variant'] - time_us = float(row['time_us']) - - if variant not in data: - data[variant] = [] - data[variant].append(time_us) - - return data - -def compute_statistics(data): - """Compute mean, median, std, min, max for each variant""" - stats = {} - for variant, times in data.items(): - times_array = np.array(times) - stats[variant] = { - 'mean': np.mean(times_array), - 'median': np.median(times_array), - 'std': np.std(times_array), - 'min': np.min(times_array), - 'max': np.max(times_array), - 'q1': np.percentile(times_array, 25), - 'q3': np.percentile(times_array, 75), - 'times': times_array - } - return stats - -def sort_variants(variants): - """Sort variants in the desired order for presentation""" - # Define the desired order - order = [ - 'separate_xclbins', - 'runlist', - 'fused_transactions_loadpdi', - 'fused_write32s_reset_always', - 'fused_write32s_reset_ifused', - 'fused_write32s_reset_ifchanged', - 'fused_write32s_reset_ifchangedfinegrained', - 'fused_write32s_reset_never' - ] - - # Sort variants according to the order, putting any unknown variants at the end - sorted_variants = [] - for v in order: - if v in variants: - sorted_variants.append(v) - - # Add any variants not in the order list - for v in variants: - if v not in sorted_variants: - sorted_variants.append(v) - - return sorted_variants - -def plot_results(stats, output_file, all_variants=None, variants_to_show=None): - """Create bar chart with box-and-whisker overlay - - Args: - stats: Dictionary of statistics for all variants - output_file: Output filename - all_variants: Ordered list of all variants (for consistent positioning) - variants_to_show: List of variants to show (None = all) - """ - fig, ax = plt.subplots(figsize=(12, 7)) - - if all_variants is None: - all_variants = list(stats.keys()) - - total_variants = len(all_variants) - - # Determine which variants to display - if variants_to_show is None: - variants_to_show = all_variants - else: - # Filter to only include variants that exist in stats - variants_to_show = [v for v in variants_to_show if v in stats] - - num_shown = len(variants_to_show) - means = [stats[v]['mean'] for v in variants_to_show] - - # Color scheme - use seaborn palette for ALL variants (consistent colors) - all_colors = sns.color_palette('flare', n_colors=total_variants) - color_map = {v: all_colors[i] for i, v in enumerate(all_variants)} - colors = [color_map[v] for v in variants_to_show] - - # Create bar chart for means - use full width for x-axis - x_pos = np.arange(total_variants) - shown_positions = [all_variants.index(v) for v in variants_to_show] - - bars = ax.bar(shown_positions, means, color=colors, label='Mean', width=0.6) - - # Overlay box-and-whisker plots - bp_data = [stats[v]['times'] for v in variants_to_show] - bp = ax.boxplot(bp_data, positions=shown_positions, widths=0.4, - medianprops=dict(color='white'), - flierprops=dict(marker='.')) - - ax.set_ylabel('Time per Iteration (μs)', fontsize=12) - ax.set_title('SwiGLU Performance Comparison\n(4 Reconfigurations, Embedding Dim=2048, Hidden Dim=8192)', - fontsize=14) - ax.set_xticks(x_pos) - ax.set_xticklabels(all_variants, rotation=45, ha='right') - ax.set_xlim(-0.5, total_variants - 0.5) - ax.grid(axis='y', alpha=0.3) - - # Add mean value labels on bars - for i, (pos, mean) in enumerate(zip(shown_positions, means)): - ax.text(pos, mean + max(means) * 0.02, - f'{mean:.0f} μs', - ha='center', va='bottom', fontsize=10) - - # Add legend - ax.legend(loc='upper right', fontsize=9) - - plt.tight_layout() - plt.savefig(output_file, dpi=300, bbox_inches='tight') - print(f"Plot saved to: {output_file}", file=sys.stderr) - -def print_statistics(stats, all_variants=None): - """Print detailed statistics to stderr""" - if all_variants is None: - all_variants = list(stats.keys()) - - print("\n" + "="*70, file=sys.stderr) - print("PERFORMANCE STATISTICS", file=sys.stderr) - print("="*70, file=sys.stderr) - print(file=sys.stderr) - - print(f"{'Variant':<40} {'Mean':<10} {'Median':<10} {'Std Dev':<10} {'Min':<10} {'Max':<10}", file=sys.stderr) - print("-"*100, file=sys.stderr) - - for variant in all_variants: - if variant in stats: - s = stats[variant] - print(f"{variant:<40} {s['mean']:>8.2f} {s['median']:>8.2f} " - f"{s['std']:>8.2f} {s['min']:>8.2f} {s['max']:>8.2f}", file=sys.stderr) - - print(file=sys.stderr) - print("="*70, file=sys.stderr) - print("RELATIVE PERFORMANCE", file=sys.stderr) - print("="*70, file=sys.stderr) - print(file=sys.stderr) - - baseline_variant = all_variants[0] if all_variants[0] in stats else list(stats.keys())[0] - baseline_mean = stats[baseline_variant]['mean'] - print(f"{'Variant':<40} {'Mean (μs)':<12} {'Relative to ' + baseline_variant:<20}", file=sys.stderr) - print("-"*100, file=sys.stderr) - - for variant in all_variants: - if variant in stats: - mean = stats[variant]['mean'] - relative = mean / baseline_mean - print(f"{variant:<40} {mean:>10.2f} {relative:>8.2f}x", file=sys.stderr) - - print(file=sys.stderr) - print("="*70, file=sys.stderr) - print("COMPARISON ANALYSIS", file=sys.stderr) - print("="*70, file=sys.stderr) - print(file=sys.stderr) - - variants_in_stats = [v for v in all_variants if v in stats] - fastest_variant = min(variants_in_stats, key=lambda v: stats[v]['mean']) - fastest_mean = stats[fastest_variant]['mean'] - - print(f"Fastest variant: {fastest_variant} ({fastest_mean:.2f} μs mean)", file=sys.stderr) - print(file=sys.stderr) - - for variant in variants_in_stats: - if variant != fastest_variant: - mean = stats[variant]['mean'] - speedup = mean / fastest_mean - improvement_pct = ((mean - fastest_mean) / mean) * 100 - print(f"{fastest_variant} is {speedup:.2f}x faster than {variant}", file=sys.stderr) - print(f" → {improvement_pct:.1f}% performance improvement", file=sys.stderr) - print(file=sys.stderr) - - print("="*70, file=sys.stderr) - -def main(): - if len(sys.argv) < 2: - csv_file = "benchmark_results.csv" - else: - csv_file = sys.argv[1] - - if not Path(csv_file).exists(): - print(f"Error: {csv_file} not found", file=sys.stderr) - print("Please run the benchmark script first: ./run_benchmarks.sh", file=sys.stderr) - sys.exit(1) - - data = read_benchmark_results(csv_file) - - if len(data) == 0: - print("Error: No data found in CSV file", file=sys.stderr) - sys.exit(1) - - stats = compute_statistics(data) - all_variants = sort_variants(list(stats.keys())) - - # Generate full plot - output_plot = "benchmark_results.png" - plot_results(stats, output_plot, all_variants=all_variants) - - # Generate incremental plots for presentation - print("\nGenerating incremental plots...", file=sys.stderr) - for i in range(1, len(all_variants) + 1): - variants_subset = all_variants[:i] - incremental_output = f"benchmark_results_{i-1}.png" - plot_results(stats, incremental_output, all_variants=all_variants, variants_to_show=variants_subset) - print(f" Created {incremental_output} with {i} variant(s)", file=sys.stderr) - - print_statistics(stats, all_variants) - -if __name__ == "__main__": - main() From e61e2ffbb3efda7bfa22831901dcf00d929aff0a Mon Sep 17 00:00:00 2001 From: andrej Date: Thu, 18 Dec 2025 16:50:16 -0700 Subject: [PATCH 37/40] remove leftovers --- test/npu-xrt/reconfigure/Makefile | 29 ------ test/npu-xrt/reconfigure/aie.mlir | 132 ------------------------- test/npu-xrt/reconfigure/end_goal.mlir | 74 -------------- test/npu-xrt/reconfigure/run.lit | 8 -- test/npu-xrt/reconfigure/test.cpp | 93 ----------------- 5 files changed, 336 deletions(-) delete mode 100644 test/npu-xrt/reconfigure/Makefile delete mode 100644 test/npu-xrt/reconfigure/aie.mlir delete mode 100644 test/npu-xrt/reconfigure/end_goal.mlir delete mode 100644 test/npu-xrt/reconfigure/run.lit delete mode 100644 test/npu-xrt/reconfigure/test.cpp diff --git a/test/npu-xrt/reconfigure/Makefile b/test/npu-xrt/reconfigure/Makefile deleted file mode 100644 index 53ed9565a30..00000000000 --- a/test/npu-xrt/reconfigure/Makefile +++ /dev/null @@ -1,29 +0,0 @@ - -aie.elf: aie.mlir - aiecc.py -v --generate-full-elf --no-xchesscc --no-xbridge aie.mlir - -test: test.cpp - clang -o test test.cpp -std=c++17 -lstdc++ -I/opt/xilinx/xrt/include -L/opt/xilinx/xrt/lib -lxrt_core -lxrt_coreutil - -.PHONY: baboo -baboo: - aie-opt \ - --pass-pipeline="builtin.module(aie-materialize-runtime-sequences,aie.device(aie-materialize-bd-chains,aie-substitute-shim-dma-allocations,aie-assign-runtime-sequence-bd-ids,aie-dma-tasks-to-npu,aie-dma-to-npu,aie-lower-set-lock))" \ - broken-aie.mlir.prj/pipeline_outputs/04_aie-assign-runtime-sequence-bd-ids.mlir \ - -o npu_insts.mlir - -.PHONY: babee -babee: - aie-translate --aie-npu-to-binary npu_insts.mlir --aie-device-name main --aie-sequence-name sequence -o main_sequence.bin - -.PHONY: babony -babony: - aiebu-asm -t aie2_config -j /scratch/roesti/mlir-aie/test/npu-xrt/reconfigure/config.json -o aie.elf - -.PHONY: run -run: test aie.elf - ./test - -.PHONY: clean -clean: - rm -rf test aie.mlir.prj aie.elf \ No newline at end of file diff --git a/test/npu-xrt/reconfigure/aie.mlir b/test/npu-xrt/reconfigure/aie.mlir deleted file mode 100644 index 2be159877c2..00000000000 --- a/test/npu-xrt/reconfigure/aie.mlir +++ /dev/null @@ -1,132 +0,0 @@ -// (c) Copyright 2025 Advanced Micro Devices, Inc. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -module { - - aie.device(npu2) @main { - - aiex.runtime_sequence @sequence(%arg : memref<512xi32>) { - - %c3_i32 = arith.constant 3 : i32 - - aiex.configure @add_two { - %arg1_subview = memref.subview %arg[0] [4] [1] : memref<512xi32> to memref<4xi32, strided<[1]>> - %arg1 = memref.cast %arg1_subview : memref<4xi32, strided<[1]>> to memref<4xi32> - aiex.run @sequence (%arg1) : (memref<4xi32>) - %arg2_subview = memref.subview %arg[12] [4] [1] : memref<512xi32> to memref<4xi32, strided<[1]>> - %arg2 = memref.cast %arg2_subview : memref<4xi32, strided<[1]>> to memref<4xi32> - aiex.run @sequence (%arg2) : (memref<4xi32>) - } - - aiex.configure @add_three { - %arg1_subview = memref.subview %arg[4] [4] [1] : memref<512xi32> to memref<4xi32, strided<[1]>> - %arg1 = memref.cast %arg1_subview : memref<4xi32, strided<[1]>> to memref<4xi32> - aiex.run @sequence (%arg1) : (memref<4xi32>) - %arg2_subview = memref.subview %arg[12] [4] [1] : memref<512xi32> to memref<4xi32, strided<[1]>> - %arg2 = memref.cast %arg2_subview : memref<4xi32, strided<[1]>> to memref<4xi32> - aiex.run @sequence (%arg2) : (memref<4xi32>) - } - - } - - } - - aie.device(npu2) @add_two { - - %t00 = aie.tile(0, 0) - %t02 = aie.tile(0, 2) - - aie.objectfifo @objfifo_in (%t00, {%t02}, 1 : i32) : !aie.objectfifo> - aie.objectfifo @objfifo_out(%t02, {%t00}, 1 : i32) : !aie.objectfifo> - - aie.core(%t02) { - %c0 = arith.constant 0 : index - %c1 = arith.constant 1 : index - %c2 = arith.constant 2 : index - %c2_i32 = arith.constant 2 : i32 - %c8 = arith.constant 8 : index - %c4 = arith.constant 4 : index - %c_intmax = arith.constant 0xFFFFFE : index - - scf.for %niter = %c0 to %c_intmax step %c1 { - %subview_in = aie.objectfifo.acquire @objfifo_in (Consume, 1) : !aie.objectfifosubview> - %subview_out = aie.objectfifo.acquire @objfifo_out(Produce, 1) : !aie.objectfifosubview> - %elem_in = aie.objectfifo.subview.access %subview_in [0] : !aie.objectfifosubview> -> memref<4xi32> - %elem_out = aie.objectfifo.subview.access %subview_out[0] : !aie.objectfifosubview> -> memref<4xi32> - scf.for %i = %c0 to %c4 step %c1 { - %0 = memref.load %elem_in[%i] : memref<4xi32> - %1 = arith.addi %0, %c2_i32 : i32 - memref.store %1, %elem_out[%i] : memref<4xi32> - } - aie.objectfifo.release @objfifo_in (Consume, 1) - aie.objectfifo.release @objfifo_out(Produce, 1) - } - aie.end - } - - aiex.runtime_sequence @sequence(%a : memref<4xi32>) { - - %t_in = aiex.dma_configure_task_for @objfifo_in { - aie.dma_bd(%a : memref<4xi32>, 0, 4) - aie.end - } - %t_out = aiex.dma_configure_task_for @objfifo_out { - aie.dma_bd(%a: memref<4xi32>, 0, 4) - aie.end - } {issue_token = true} - aiex.dma_start_task(%t_in) - aiex.dma_start_task(%t_out) - aiex.dma_await_task(%t_out) - } - - } - - aie.device(npu2) @add_three { - - %t00 = aie.tile(0, 0) - %t02 = aie.tile(0, 2) - - aie.objectfifo @objfifo_in (%t00, {%t02}, 1 : i32) : !aie.objectfifo> - aie.objectfifo @objfifo_out(%t02, {%t00}, 1 : i32) : !aie.objectfifo> - - aie.core(%t02) { - %c0 = arith.constant 0 : index - %c1 = arith.constant 1 : index - %c2 = arith.constant 2 : index - %c3_i32 = arith.constant 3 : i32 - %c8 = arith.constant 8 : index - %c4 = arith.constant 4 : index - %c_intmax = arith.constant 0xFFFFFE : index - - scf.for %niter = %c0 to %c_intmax step %c1 { - %subview_in = aie.objectfifo.acquire @objfifo_in (Consume, 1) : !aie.objectfifosubview> - %subview_out = aie.objectfifo.acquire @objfifo_out(Produce, 1) : !aie.objectfifosubview> - %elem_in = aie.objectfifo.subview.access %subview_in [0] : !aie.objectfifosubview> -> memref<4xi32> - %elem_out = aie.objectfifo.subview.access %subview_out[0] : !aie.objectfifosubview> -> memref<4xi32> - scf.for %i = %c0 to %c4 step %c1 { - %0 = memref.load %elem_in[%i] : memref<4xi32> - %1 = arith.addi %0, %c3_i32 : i32 - memref.store %1, %elem_out[%i] : memref<4xi32> - } - aie.objectfifo.release @objfifo_in (Consume, 1) - aie.objectfifo.release @objfifo_out(Produce, 1) - } - aie.end - } - - aiex.runtime_sequence @sequence(%a : memref<4xi32>) { - - %t_in = aiex.dma_configure_task_for @objfifo_in { - aie.dma_bd(%a : memref<4xi32>, 0, 4) - aie.end - } - %t_out = aiex.dma_configure_task_for @objfifo_out { - aie.dma_bd(%a: memref<4xi32>, 0, 4) - aie.end - } {issue_token = true} - aiex.dma_start_task(%t_in) - aiex.dma_start_task(%t_out) - aiex.dma_await_task(%t_out) - } - - } -} diff --git a/test/npu-xrt/reconfigure/end_goal.mlir b/test/npu-xrt/reconfigure/end_goal.mlir deleted file mode 100644 index 21e297ab2b4..00000000000 --- a/test/npu-xrt/reconfigure/end_goal.mlir +++ /dev/null @@ -1,74 +0,0 @@ -// (c) Copyright 2025 Advanced Micro Devices, Inc. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -module { - aie.device(npu2) @main { - - aiex.runtime_sequence @sequence(%a : memref<512xi32>) { - - %c2_i32 = arith.constant 2 : i32 - %c3_i32 = arith.constant 3 : i32 - - aiex.configure @add_n(%c2_i32) { - %arg = aiex.arg_slice %a[0..4] : memref<512xi32> -> memref<4xi32> - aiex.run @sequence (%arg) : (memref<4xi32>) - } - - aiex.configure @add_n(%c3_i32) { - %arg = aiex.arg_slice %a[4..8] : memref<512xi32> -> memref<4xi32> - aiex.run @sequence (%arg) : (memref<4xi32>) - } - - } - - } - - aie.device(npu2) @add_n(%c_n_i32 : i32) { - - %t00 = aie.tile(0, 0) - %t02 = aie.tile(0, 2) - - aie.objectfifo @objfifo_in (%t00, {%t02}, 1 : i32) : !aie.objectfifo> - aie.objectfifo @objfifo_out(%t02, {%t00}, 1 : i32) : !aie.objectfifo> - - aie.core(%t02) { - %c0 = arith.constant 0 : index - %c1 = arith.constant 1 : index - %c2 = arith.constant 2 : index - %c8 = arith.constant 8 : index - %c4 = arith.constant 4 : index - %c_intmax = arith.constant 0xFFFFFE : index - - scf.for %niter = %c0 to %c_intmax step %c1 { - %subview_in = aie.objectfifo.acquire @objfifo_in (Consume, 1) : !aie.objectfifosubview> - %subview_out = aie.objectfifo.acquire @objfifo_out(Produce, 1) : !aie.objectfifosubview> - %elem_in = aie.objectfifo.subview.access %subview_in [0] : !aie.objectfifosubview> -> memref<4xi32> - %elem_out = aie.objectfifo.subview.access %subview_out[0] : !aie.objectfifosubview> -> memref<4xi32> - scf.for %i = %c0 to %c4 step %c1 { - %0 = memref.load %elem_in[%i] : memref<4xi32> - %1 = arith.addi %0, %c_n_i32 : i32 - memref.store %1, %elem_out[%i] : memref<4xi32> - } - aie.objectfifo.release @objfifo_in (Consume, 1) - aie.objectfifo.release @objfifo_out(Produce, 1) - } - aie.end - } - - aiex.runtime_sequence @sequence(%a : memref<512xi32>) { - - %t_in = aiex.dma_configure_task_for @objfifo_in { - aie.dma_bd(%a : memref<512xi32>, 0, 512) - aie.end - } - %t_out = aiex.dma_configure_task_for @objfifo_out { - aie.dma_bd(%a: memref<512xi32>, 0, 512) - aie.end - } {issue_token = true} - aiex.dma_start_task(%t_in) - aiex.dma_start_task(%t_out) - aiex.dma_await_task(%t_out) - } - - } - -} diff --git a/test/npu-xrt/reconfigure/run.lit b/test/npu-xrt/reconfigure/run.lit deleted file mode 100644 index 4bd3f0372b4..00000000000 --- a/test/npu-xrt/reconfigure/run.lit +++ /dev/null @@ -1,8 +0,0 @@ -// (c) Copyright 2025 Advanced Micro Devices, Inc. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -// REQUIRES: ryzen_ai_npu2, peano -// -// RUN: %PYTHON aiecc.py -v --generate-full-elf --no-xchesscc --no-xbridge %S/aie.mlir -// RUN: clang -o test %S/test_elf.cpp -std=c++17 -lstdc++ %xrt_flags -// RUN: ./test diff --git a/test/npu-xrt/reconfigure/test.cpp b/test/npu-xrt/reconfigure/test.cpp deleted file mode 100644 index ae4c70fe131..00000000000 --- a/test/npu-xrt/reconfigure/test.cpp +++ /dev/null @@ -1,93 +0,0 @@ -// (c) Copyright 2025 Advanced Micro Devices, Inc. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#define DTYPE int32_t - -constexpr size_t DATA_COUNT = 16; -constexpr size_t BUF_SIZE = DATA_COUNT * sizeof(DTYPE); - -int main(int argc, const char *argv[]) { - // Set up input data - srand(1726250518); - std::vector vec_in(DATA_COUNT); - for (int i = 0; i < vec_in.size(); i++) { - vec_in[i] = DTYPE(i); - } - - // Set up XRT - unsigned int device_index = 0; - auto device = xrt::device(device_index); - // The name format here is : from the config.json - std::string kernelName = "main:sequence"; - xrt::elf ctx_elf{"aie.elf"}; - xrt::hw_context context = xrt::hw_context(device, ctx_elf); - auto kernel = xrt::ext::kernel(context, kernelName); - xrt::bo bo_inout = xrt::ext::bo{device, BUF_SIZE}; - - // Set up kernel run - char *buf_inout = bo_inout.map(); - memcpy(buf_inout, vec_in.data(), BUF_SIZE); - bo_inout.sync(XCL_BO_SYNC_BO_TO_DEVICE); - auto run = xrt::run(kernel); - run.set_arg(0, bo_inout); - - // Run - auto t_start = std::chrono::high_resolution_clock::now(); - run.start(); - run.wait2(); - auto t_stop = std::chrono::high_resolution_clock::now(); - bo_inout.sync(XCL_BO_SYNC_BO_FROM_DEVICE); - - // Validate output - std::vector vec_out(DATA_COUNT); - std::vector vec_ref(DATA_COUNT); - memcpy(vec_out.data(), buf_inout, BUF_SIZE); - for (int i = 0; i < 4; i++) { - vec_ref[i] = vec_in[i] + 2; - } - for (int i = 4; i < 8; i++) { - vec_ref[i] = vec_in[i] + 3; - } - for (int i = 8; i < 12; i++) { - vec_ref[i] = vec_in[i]; - } - for (int i = 12; i < 16; i++) { - vec_ref[i] = vec_in[i] + 2 + 3; - } - bool outputs_correct = (vec_out == vec_ref); - - // Report results - float time = - std::chrono::duration_cast(t_stop - t_start) - .count(); - std::cout << "Elapsed time for all kernel executions: " << std::fixed - << std::setprecision(0) << std::setw(8) << time << " μs" - << std::endl; - if (outputs_correct) { - std::cout << "PASS!" << std::endl; - } else { - for (int i = 0; i < DATA_COUNT; i++) { - std::cout << "in: " << std::setw(12) << vec_in[i] << ", " - << "out: " << std::setw(12) << vec_out[i] - << ", ref: " << std::setw(12) << vec_ref[i] << std::endl; - } - std::cout << "Fail." << std::endl; - } - - return (outputs_correct ? 0 : 1); -} From 7baa4e8ec1143a9088f00978c45eb641aadd5700 Mon Sep 17 00:00:00 2001 From: andrej Date: Thu, 18 Dec 2025 16:51:15 -0700 Subject: [PATCH 38/40] revert accidentally committed changes --- third_party/bootgen | 2 +- utils/build-mlir-aie-from-wheels.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/third_party/bootgen b/third_party/bootgen index 4f023ac2ca2..17caad52af4 160000 --- a/third_party/bootgen +++ b/third_party/bootgen @@ -1 +1 @@ -Subproject commit 4f023ac2ca2ea452740194045fcecf1671f5b2c0 +Subproject commit 17caad52af4fb191312cbcda51b14e14aede6822 diff --git a/utils/build-mlir-aie-from-wheels.sh b/utils/build-mlir-aie-from-wheels.sh index 691db8d3fbe..aedb11d80b0 100755 --- a/utils/build-mlir-aie-from-wheels.sh +++ b/utils/build-mlir-aie-from-wheels.sh @@ -68,7 +68,7 @@ CMAKE_CONFIGS="\ -DCMAKE_MODULE_PATH=${CMAKEMODULES_DIR}/modulesXilinx \ -DLLVM_EXTERNAL_LIT=$(which lit) \ -DCMAKE_INSTALL_PREFIX="../${INSTALL_DIR}" \ - -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ + -DCMAKE_BUILD_TYPE=Release \ -DLLVM_ENABLE_ASSERTIONS=ON \ -DAIE_ENABLE_BINDINGS_PYTHON=ON \ -DLLVM_ENABLE_RTTI=$LLVM_ENABLE_RTTI \ From 8d06d68815f68924f0568e0756e4feea69333a71 Mon Sep 17 00:00:00 2001 From: andrej Date: Thu, 18 Dec 2025 16:51:59 -0700 Subject: [PATCH 39/40] format --- .../AIEToConfiguration/AIEToConfiguration.h | 41 ++- include/aie/Dialect/AIEX/AIEUtils.h | 10 +- include/aie/Targets/AIERT.h | 8 +- .../AIEToConfiguration/AIEToConfiguration.cpp | 217 ++++++++------- lib/Dialect/AIE/IR/AIEDialect.cpp | 65 ++--- lib/Dialect/AIEX/IR/AIEXDialect.cpp | 26 +- .../AIEX/Transforms/AIEDMATasksToNPU.cpp | 28 +- lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp | 17 +- .../AIEX/Transforms/AIEExpandLoadPdi.cpp | 77 +++--- .../AIEMaterializeRuntimeSequences.cpp | 253 ++++++++++-------- lib/Dialect/AIEX/Utils/AIEUtils.cpp | 47 ++-- lib/Targets/AIERT.cpp | 83 +++--- python/compiler/aiecc/cl_arguments.py | 10 +- python/compiler/aiecc/main.py | 32 ++- 14 files changed, 503 insertions(+), 411 deletions(-) diff --git a/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h b/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h index 8696e04ace6..ce58a4cfa72 100644 --- a/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h +++ b/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h @@ -19,7 +19,6 @@ namespace xilinx::AIE { class DeviceOp; - // -------------------------------------------------------------------------- // Device configuration // -------------------------------------------------------------------------- @@ -34,15 +33,14 @@ std::optional convertTransactionBinaryToMLIR(mlir::MLIRContext *ctx, std::vector &binary); -// Generate transaction binary and insert configuration operations at a specific point -mlir::LogicalResult -generateAndInsertConfigOps(xilinx::AIE::DeviceOp device, - mlir::Operation *insertionPoint, - llvm::StringRef clElfDir = ""); - +// Generate transaction binary and insert configuration operations at a specific +// point +mlir::LogicalResult generateAndInsertConfigOps(xilinx::AIE::DeviceOp device, + mlir::Operation *insertionPoint, + llvm::StringRef clElfDir = ""); // -------------------------------------------------------------------------- -// Device reset +// Device reset // -------------------------------------------------------------------------- // Enum for specifying which tile types to reset @@ -60,10 +58,10 @@ inline bool hasFlag(ResetTileType value, ResetTileType flag) { // Enum for specifying when to reset enum class ResetMode { - Never, // Never perform reset - IfUsed, // Reset only if the tile is used in the device - IfUsedFineGrained, // Reset only individual locks/connections that are used - IfChanged, // Reset only if the tile configuration changed from previous + Never, // Never perform reset + IfUsed, // Reset only if the tile is used in the device + IfUsedFineGrained, // Reset only individual locks/connections that are used + IfChanged, // Reset only if the tile configuration changed from previous IfChangedFineGrained, // Reset only individual locks/connections that changed Always // Reset all tiles of the specified type }; @@ -72,20 +70,17 @@ enum class ResetMode { struct ResetConfig { ResetTileType tileType; ResetMode mode; - - ResetConfig(ResetTileType tt = ResetTileType::None, ResetMode m = ResetMode::Never) - : tileType(tt), mode(m) {} + + ResetConfig(ResetTileType tt = ResetTileType::None, + ResetMode m = ResetMode::Never) + : tileType(tt), mode(m) {} }; // Insert reset operations -mlir::LogicalResult -generateAndInsertResetOps(xilinx::AIE::DeviceOp device, - mlir::Operation *insertionPoint, - ResetConfig dmaConfig, - ResetConfig switchConfig, - ResetConfig lockConfig, - ResetConfig coreConfig, - xilinx::AIE::DeviceOp previousDevice); +mlir::LogicalResult generateAndInsertResetOps( + xilinx::AIE::DeviceOp device, mlir::Operation *insertionPoint, + ResetConfig dmaConfig, ResetConfig switchConfig, ResetConfig lockConfig, + ResetConfig coreConfig, xilinx::AIE::DeviceOp previousDevice); } // namespace xilinx::AIE diff --git a/include/aie/Dialect/AIEX/AIEUtils.h b/include/aie/Dialect/AIEX/AIEUtils.h index 25b1343f531..c3eddbbb4dc 100644 --- a/include/aie/Dialect/AIEX/AIEUtils.h +++ b/include/aie/Dialect/AIEX/AIEUtils.h @@ -21,20 +21,20 @@ memref::GlobalOp getOrCreateDataMemref(OpBuilder &builder, AIE::DeviceOp dev, mlir::Location loc, ArrayRef words); -// Result of tracing through subview/cast operations to a block argument for traceSubviewToBlockArgument function. +// Result of tracing through subview/cast operations to a block argument for +// traceSubviewToBlockArgument function. struct SubviewTraceResult { BlockArgument rootArg; int64_t offsetInBytes; }; -// Trace through memref.subview, memref.cast, and memref.reinterpret_cast +// Trace through memref.subview, memref.cast, and memref.reinterpret_cast // operations until the referenced SSA value is a block argument. -// +// // Returns the root block argument and cumulative byte offset, or std::nullopt // if the chain doesn't lead to a block argument or contains unsupported ops. -// +// // This function supports checks that all subviews remain static and contiguous. std::optional traceSubviewToBlockArgument(Value value); - } } // namespace xilinx \ No newline at end of file diff --git a/include/aie/Targets/AIERT.h b/include/aie/Targets/AIERT.h index c3d94efe219..4f4cdf9f5cd 100644 --- a/include/aie/Targets/AIERT.h +++ b/include/aie/Targets/AIERT.h @@ -52,9 +52,11 @@ struct AIERTControl { mlir::LogicalResult resetCoreUnreset(int col, int row); mlir::LogicalResult resetSwitch(int col, int row); mlir::LogicalResult resetLock(int col, int row, int lockId); - mlir::LogicalResult resetSwitchConnection(int col, int row, - WireBundle sourceBundle, int sourceChannel, - WireBundle destBundle, int destChannel); + mlir::LogicalResult resetSwitchConnection(int col, int row, + WireBundle sourceBundle, + int sourceChannel, + WireBundle destBundle, + int destChannel); mlir::LogicalResult resetPerfCounters(int col, int row); private: diff --git a/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp b/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp index 2f55f3e3ddd..b2574e5c083 100644 --- a/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp +++ b/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp @@ -629,10 +629,11 @@ enum OutputType { ControlPacket, }; -static LogicalResult convertTransactionOpsToMLIR( - OpBuilder builder, AIE::DeviceOp device, OutputType outputType, - std::vector &operations, - Operation *insertionPoint = nullptr) { +static LogicalResult +convertTransactionOpsToMLIR(OpBuilder builder, AIE::DeviceOp device, + OutputType outputType, + std::vector &operations, + Operation *insertionPoint = nullptr) { auto loc = builder.getUnknownLoc(); @@ -667,8 +668,8 @@ static LogicalResult convertTransactionOpsToMLIR( } else { // search for aiex.configure ops in runtime sequences by walking the device // and collect them in a vector. If there are none, create a new runtime - // sequence. Otherwise assume the insertion point is the first aiex.configure - // op. + // sequence. Otherwise assume the insertion point is the first + // aiex.configure op. device.walk([&](AIEX::ConfigureOp op) { configureOps.push_back(op); }); if (configureOps.empty()) { @@ -928,35 +929,39 @@ static bool areDMAsEquivalent(Operation *dma1, Operation *dma2) { static LogicalResult resetCores(DeviceOp device, DeviceOp previousDevice, ResetConfig coreConfig, AIERTControl &ctl) { const AIETargetModel &targetModel = device.getTargetModel(); - - if (coreConfig.mode == ResetMode::Never || !hasFlag(coreConfig.tileType, ResetTileType::CoreTile)) + + if (coreConfig.mode == ResetMode::Never || + !hasFlag(coreConfig.tileType, ResetTileType::CoreTile)) return success(); - + int numCols = targetModel.columns(); int numRows = targetModel.rows(); - + for (int col = 0; col < numCols; col++) { for (int row = 0; row < numRows; row++) { if (!targetModel.isCoreTile(col, row)) continue; - + bool shouldReset = false; - + if (coreConfig.mode == ResetMode::Always) { shouldReset = true; - } else if (coreConfig.mode == ResetMode::IfUsed || coreConfig.mode == ResetMode::IfUsedFineGrained) { + } else if (coreConfig.mode == ResetMode::IfUsed || + coreConfig.mode == ResetMode::IfUsedFineGrained) { shouldReset = device.lookupCore(col, row) != nullptr; - } else if (coreConfig.mode == ResetMode::IfChanged || coreConfig.mode == ResetMode::IfChangedFineGrained) { + } else if (coreConfig.mode == ResetMode::IfChanged || + coreConfig.mode == ResetMode::IfChangedFineGrained) { auto currentCore = device.lookupCore(col, row); - auto prevCore = previousDevice ? previousDevice.lookupCore(col, row) : nullptr; + auto prevCore = + previousDevice ? previousDevice.lookupCore(col, row) : nullptr; shouldReset = currentCore && !currentCore.isEquivalent(prevCore); } - + if (shouldReset && failed(ctl.resetCore(col, row))) return failure(); } } - + return success(); } @@ -964,77 +969,88 @@ static LogicalResult resetCores(DeviceOp device, DeviceOp previousDevice, static LogicalResult resetDMAs(DeviceOp device, DeviceOp previousDevice, ResetConfig dmaConfig, AIERTControl &ctl) { const AIETargetModel &targetModel = device.getTargetModel(); - + if (dmaConfig.mode == ResetMode::Never) return success(); - + int numCols = targetModel.columns(); int numRows = targetModel.rows(); - + for (int col = 0; col < numCols; col++) { for (int row = 0; row < numRows; row++) { - if ((targetModel.isMemTile(col, row) && !hasFlag(dmaConfig.tileType, ResetTileType::MemTile)) - || (targetModel.isCoreTile(col, row) && !hasFlag(dmaConfig.tileType, ResetTileType::CoreTile)) - || (targetModel.isShimNOCTile(col, row) && !hasFlag(dmaConfig.tileType, ResetTileType::ShimNOC))) { + if ((targetModel.isMemTile(col, row) && + !hasFlag(dmaConfig.tileType, ResetTileType::MemTile)) || + (targetModel.isCoreTile(col, row) && + !hasFlag(dmaConfig.tileType, ResetTileType::CoreTile)) || + (targetModel.isShimNOCTile(col, row) && + !hasFlag(dmaConfig.tileType, ResetTileType::ShimNOC))) { continue; } - + bool shouldReset = false; - + if (dmaConfig.mode == ResetMode::Always) { shouldReset = true; - } else if (dmaConfig.mode == ResetMode::IfUsed || dmaConfig.mode == ResetMode::IfUsedFineGrained) { + } else if (dmaConfig.mode == ResetMode::IfUsed || + dmaConfig.mode == ResetMode::IfUsedFineGrained) { shouldReset = nullptr != device.lookupDMA(col, row); - } else if (dmaConfig.mode == ResetMode::IfChanged || dmaConfig.mode == ResetMode::IfChangedFineGrained) { + } else if (dmaConfig.mode == ResetMode::IfChanged || + dmaConfig.mode == ResetMode::IfChangedFineGrained) { Operation *currentDMA = device.lookupDMA(col, row); - Operation *prevDMA = previousDevice ? previousDevice.lookupDMA(col, row) : nullptr; + Operation *prevDMA = + previousDevice ? previousDevice.lookupDMA(col, row) : nullptr; shouldReset = currentDMA && !areDMAsEquivalent(currentDMA, prevDMA); } - + if (shouldReset && failed(ctl.resetDMA(col, row, false))) return failure(); } } - + return success(); } // Reset switches based on the provided configuration static LogicalResult resetSwitches(DeviceOp device, DeviceOp previousDevice, - ResetConfig switchConfig, AIERTControl &ctl) { + ResetConfig switchConfig, + AIERTControl &ctl) { const AIETargetModel &targetModel = device.getTargetModel(); - + if (switchConfig.mode == ResetMode::Never) return success(); - + int numCols = targetModel.columns(); int numRows = targetModel.rows(); - + for (int col = 0; col < numCols; col++) { for (int row = 0; row < numRows; row++) { - if ((targetModel.isMemTile(col, row) && !hasFlag(switchConfig.tileType, ResetTileType::MemTile)) - || (targetModel.isCoreTile(col, row) && !hasFlag(switchConfig.tileType, ResetTileType::CoreTile)) - || (targetModel.isShimNOCTile(col, row) && !hasFlag(switchConfig.tileType, ResetTileType::ShimNOC))) { + if ((targetModel.isMemTile(col, row) && + !hasFlag(switchConfig.tileType, ResetTileType::MemTile)) || + (targetModel.isCoreTile(col, row) && + !hasFlag(switchConfig.tileType, ResetTileType::CoreTile)) || + (targetModel.isShimNOCTile(col, row) && + !hasFlag(switchConfig.tileType, ResetTileType::ShimNOC))) { continue; } - + bool shouldReset = false; - + if (switchConfig.mode == ResetMode::Always) { shouldReset = true; } else if (switchConfig.mode == ResetMode::IfUsed) { shouldReset = nullptr != device.lookupSwitchbox(col, row); } else if (switchConfig.mode == ResetMode::IfChanged) { SwitchboxOp currentSB = device.lookupSwitchbox(col, row); - SwitchboxOp prevSB = previousDevice ? previousDevice.lookupSwitchbox(col, row) : nullptr; + SwitchboxOp prevSB = + previousDevice ? previousDevice.lookupSwitchbox(col, row) : nullptr; shouldReset = currentSB && !currentSB.isEquivalent(prevSB); } - + if (shouldReset && failed(ctl.resetSwitch(col, row))) return failure(); } } - + return success(); } @@ -1042,29 +1058,32 @@ static LogicalResult resetSwitches(DeviceOp device, DeviceOp previousDevice, static LogicalResult resetLocks(DeviceOp device, DeviceOp previousDevice, ResetConfig lockConfig, AIERTControl &ctl) { const AIETargetModel &targetModel = device.getTargetModel(); - + if (lockConfig.mode == ResetMode::Never) return success(); - + int numCols = targetModel.columns(); int numRows = targetModel.rows(); - + for (int col = 0; col < numCols; col++) { for (int row = 0; row < numRows; row++) { - if ((targetModel.isMemTile(col, row) && !hasFlag(lockConfig.tileType, ResetTileType::MemTile)) - || (targetModel.isCoreTile(col, row) && !hasFlag(lockConfig.tileType, ResetTileType::CoreTile))) { + if ((targetModel.isMemTile(col, row) && + !hasFlag(lockConfig.tileType, ResetTileType::MemTile)) || + (targetModel.isCoreTile(col, row) && + !hasFlag(lockConfig.tileType, ResetTileType::CoreTile))) { continue; } - + if (lockConfig.mode == ResetMode::Always) { - // Reset all locks on this tile; + // Reset all locks on this tile; int numLocks = targetModel.getNumLocks(col, row); for (int lockID = 0; lockID < numLocks; lockID++) { if (failed(ctl.resetLock(col, row, lockID))) return failure(); } } else { - // treat "ifUsed" and "ifChanged" as the same -- if a tile defined some locks, it probably also toggled them, so we should reset them + // treat "ifUsed" and "ifChanged" as the same -- if a tile defined some + // locks, it probably also toggled them, so we should reset them for (auto lockOp : device.getOps()) { auto tileOp = lockOp.getTileOp(); if (tileOp.getCol() == col && tileOp.getRow() == row) { @@ -1078,33 +1097,39 @@ static LogicalResult resetLocks(DeviceOp device, DeviceOp previousDevice, } } } - + return success(); } // Reset fine-grained switch connections based on the provided configuration -static LogicalResult resetSwitchConnectionsFineGrained(DeviceOp device, DeviceOp previousDevice, - ResetConfig switchConfig, AIERTControl &ctl) { +static LogicalResult resetSwitchConnectionsFineGrained(DeviceOp device, + DeviceOp previousDevice, + ResetConfig switchConfig, + AIERTControl &ctl) { const AIETargetModel &targetModel = device.getTargetModel(); - - if (switchConfig.mode != ResetMode::IfUsedFineGrained && + + if (switchConfig.mode != ResetMode::IfUsedFineGrained && switchConfig.mode != ResetMode::IfChangedFineGrained) return success(); - + int numCols = targetModel.columns(); int numRows = targetModel.rows(); - + for (int col = 0; col < numCols; col++) { for (int row = 0; row < numRows; row++) { - if ((targetModel.isMemTile(col, row) && !hasFlag(switchConfig.tileType, ResetTileType::MemTile)) - || (targetModel.isCoreTile(col, row) && !hasFlag(switchConfig.tileType, ResetTileType::CoreTile)) - || (targetModel.isShimNOCTile(col, row) && !hasFlag(switchConfig.tileType, ResetTileType::ShimNOC))) { + if ((targetModel.isMemTile(col, row) && + !hasFlag(switchConfig.tileType, ResetTileType::MemTile)) || + (targetModel.isCoreTile(col, row) && + !hasFlag(switchConfig.tileType, ResetTileType::CoreTile)) || + (targetModel.isShimNOCTile(col, row) && + !hasFlag(switchConfig.tileType, ResetTileType::ShimNOC))) { continue; } - + auto currentSB = device.lookupSwitchbox(col, row); - if (!currentSB) continue; - + if (!currentSB) + continue; + // Collect unique sources and active connections DenseSet> uniqueSources; DenseSet> activeConns; @@ -1117,43 +1142,52 @@ static LogicalResult resetSwitchConnectionsFineGrained(DeviceOp device, DeviceOp activeConns.insert({srcBundle, srcChan, dstBundle, dstChan}); } DenseSet> prevConnsSet; - auto prevSB = previousDevice ? previousDevice.lookupSwitchbox(col, row) : nullptr; + auto prevSB = + previousDevice ? previousDevice.lookupSwitchbox(col, row) : nullptr; if (prevSB) { for (auto connectOp : prevSB.getOps()) { - prevConnsSet.insert({connectOp.getSourceBundle(), connectOp.getSourceChannel(), - connectOp.getDestBundle(), connectOp.getDestChannel()}); + prevConnsSet.insert( + {connectOp.getSourceBundle(), connectOp.getSourceChannel(), + connectOp.getDestBundle(), connectOp.getDestChannel()}); } } - + // Get all possible destinations llvm::SmallVector> possibleDests; - for (auto bundle : {WireBundle::Core, WireBundle::DMA, WireBundle::FIFO, - WireBundle::South, WireBundle::West, WireBundle::North, - WireBundle::East, WireBundle::PLIO, WireBundle::NOC, - WireBundle::Trace, WireBundle::TileControl}) { - uint32_t numDestChans = targetModel.getNumDestSwitchboxConnections(col, row, bundle); + for (auto bundle : + {WireBundle::Core, WireBundle::DMA, WireBundle::FIFO, + WireBundle::South, WireBundle::West, WireBundle::North, + WireBundle::East, WireBundle::PLIO, WireBundle::NOC, + WireBundle::Trace, WireBundle::TileControl}) { + uint32_t numDestChans = + targetModel.getNumDestSwitchboxConnections(col, row, bundle); if (numDestChans > 0) { possibleDests.push_back(std::make_pair(bundle, numDestChans)); } } - + // Iterate over all sources of connections in the current device for (auto [srcBundle, srcChan] : uniqueSources) { // Iterate over all legal destinations from this source for (auto [altDstBundle, numDestChans] : possibleDests) { - for (uint32_t altDstChan = 0; altDstChan < numDestChans; altDstChan++) { - if (!targetModel.isLegalTileConnection(col, row, srcBundle, srcChan, altDstBundle, altDstChan)) { + for (uint32_t altDstChan = 0; altDstChan < numDestChans; + altDstChan++) { + if (!targetModel.isLegalTileConnection(col, row, srcBundle, srcChan, + altDstBundle, altDstChan)) { continue; } // Skip if this is an active connection in the new configuration - if (activeConns.contains({srcBundle, srcChan, altDstBundle, altDstChan})) { + if (activeConns.contains( + {srcBundle, srcChan, altDstBundle, altDstChan})) { continue; } - + if (switchConfig.mode == ResetMode::IfUsedFineGrained || - prevConnsSet.contains({srcBundle, srcChan, altDstBundle, altDstChan})) { + prevConnsSet.contains( + {srcBundle, srcChan, altDstBundle, altDstChan})) { // Reset any legal destination that's not the active one - if (failed(ctl.resetSwitchConnection(col, row, srcBundle, srcChan, altDstBundle, altDstChan))) { + if (failed(ctl.resetSwitchConnection(col, row, srcBundle, srcChan, + altDstBundle, altDstChan))) { return failure(); } } @@ -1162,19 +1196,15 @@ static LogicalResult resetSwitchConnectionsFineGrained(DeviceOp device, DeviceOp } } } - + return success(); } // Generate reset operations for all tiles used in the device -mlir::LogicalResult -xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, - mlir::Operation *insertionPoint, - ResetConfig dmaConfig, - ResetConfig switchConfig, - ResetConfig lockConfig, - ResetConfig coreConfig, - xilinx::AIE::DeviceOp previousDevice) { +mlir::LogicalResult xilinx::AIE::generateAndInsertResetOps( + xilinx::AIE::DeviceOp device, mlir::Operation *insertionPoint, + ResetConfig dmaConfig, ResetConfig switchConfig, ResetConfig lockConfig, + ResetConfig coreConfig, xilinx::AIE::DeviceOp previousDevice) { const AIETargetModel &targetModel = device.getTargetModel(); if (!targetModel.hasProperty(AIETargetModel::IsNPU)) @@ -1191,16 +1221,17 @@ xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, if (failed(resetCores(device, previousDevice, coreConfig, ctl))) return failure(); - + if (failed(resetDMAs(device, previousDevice, dmaConfig, ctl))) return failure(); - + if (failed(resetSwitches(device, previousDevice, switchConfig, ctl))) return failure(); - - if (failed(resetSwitchConnectionsFineGrained(device, previousDevice, switchConfig, ctl))) + + if (failed(resetSwitchConnectionsFineGrained(device, previousDevice, + switchConfig, ctl))) return failure(); - + if (failed(resetLocks(device, previousDevice, lockConfig, ctl))) return failure(); diff --git a/lib/Dialect/AIE/IR/AIEDialect.cpp b/lib/Dialect/AIE/IR/AIEDialect.cpp index f25c23c1111..1c5b215a0b9 100644 --- a/lib/Dialect/AIE/IR/AIEDialect.cpp +++ b/lib/Dialect/AIE/IR/AIEDialect.cpp @@ -1109,9 +1109,9 @@ CoreOp DeviceOp::lookupCore(int col, int row) { return nullptr; } -Operation* DeviceOp::lookupDMA(int col, int row) { +Operation *DeviceOp::lookupDMA(int col, int row) { const AIETargetModel &targetModel = getTargetModel(); - + // Use target model to determine which type of DMA op to look for if (targetModel.isMemTile(col, row)) { for (auto mem : getOps()) { @@ -1341,49 +1341,49 @@ int ShimMuxOp::rowIndex() { return getTileOp().rowIndex(); } static bool areDMAsEquivalent(Operation *dma1, Operation *dma2) { if (!dma1 || !dma2) return dma1 == dma2; - + // Compare their contained operations // This is a structural comparison including attributes auto ®ion1 = dma1->getRegion(0); auto ®ion2 = dma2->getRegion(0); - + if (region1.empty() != region2.empty()) return false; - + if (region1.empty()) return true; - + auto &block1 = region1.front(); auto &block2 = region2.front(); - + auto ops1 = block1.without_terminator(); auto ops2 = block2.without_terminator(); - + auto it1 = ops1.begin(); auto it2 = ops2.begin(); - + while (it1 != ops1.end() && it2 != ops2.end()) { // Check operation names match if (it1->getName() != it2->getName()) return false; - + // Check all attributes match auto attrs1 = it1->getAttrs(); auto attrs2 = it2->getAttrs(); - + if (attrs1.size() != attrs2.size()) return false; - + for (auto attr1 : attrs1) { auto attr2 = it2->getAttr(attr1.getName()); if (!attr2 || attr1.getValue() != attr2) return false; } - + ++it1; ++it2; } - + return it1 == ops1.end() && it2 == ops2.end(); } @@ -1472,14 +1472,14 @@ bool CoreOp::isEmpty() { bool CoreOp::isEquivalent(CoreOp other) { if (!other) return false; - + // Compare program memory ELF auto elf1 = getElfFileAttr(); auto elf2 = other.getElfFileAttr(); - + if (elf1 && elf2) return elf1 == elf2; - + return !elf1 && !elf2; } @@ -2232,31 +2232,33 @@ int SwitchboxOp::rowIndex() { return getTileOp().rowIndex(); } bool SwitchboxOp::isEquivalent(SwitchboxOp other) { if (!other) return false; - + // Compare all connection ops auto conns1 = getOps(); auto conns2 = other.getOps(); - + llvm::SmallVector vec1(conns1.begin(), conns1.end()); llvm::SmallVector vec2(conns2.begin(), conns2.end()); - + if (vec1.size() != vec2.size()) return false; - + // Sort by source/dest to make comparison order-independent auto connComparator = [](ConnectOp a, ConnectOp b) { if (a.getSourceBundle() != b.getSourceBundle()) - return static_cast(a.getSourceBundle()) < static_cast(b.getSourceBundle()); + return static_cast(a.getSourceBundle()) < + static_cast(b.getSourceBundle()); if (a.getSourceChannel() != b.getSourceChannel()) return a.getSourceChannel() < b.getSourceChannel(); if (a.getDestBundle() != b.getDestBundle()) - return static_cast(a.getDestBundle()) < static_cast(b.getDestBundle()); + return static_cast(a.getDestBundle()) < + static_cast(b.getDestBundle()); return a.getDestChannel() < b.getDestChannel(); }; - + llvm::sort(vec1, connComparator); llvm::sort(vec2, connComparator); - + for (size_t i = 0; i < vec1.size(); ++i) { if (vec1[i].getSourceBundle() != vec2[i].getSourceBundle() || vec1[i].getSourceChannel() != vec2[i].getSourceChannel() || @@ -2264,7 +2266,7 @@ bool SwitchboxOp::isEquivalent(SwitchboxOp other) { vec1[i].getDestChannel() != vec2[i].getDestChannel()) return false; } - + return true; } @@ -2641,14 +2643,15 @@ LogicalResult RuntimeSequenceOp::verifyBeforeMaterialization() { for (NamedAttribute namedAttr : op->getAttrs()) { Attribute attr = namedAttr.getValue(); auto walkResult = attr.walk([&](SymbolRefAttr symbolRef) { - Operation *symbolDefOp = SymbolTable::lookupNearestSymbolFrom(*this, symbolRef); - if (symbolDefOp && - !llvm::isa(symbolDefOp) && + Operation *symbolDefOp = + SymbolTable::lookupNearestSymbolFrom(*this, symbolRef); + if (symbolDefOp && !llvm::isa(symbolDefOp) && !llvm::isa(symbolDefOp) && !llvm::isa(symbolDefOp)) { - op->emitOpError() << "references symbol '" + op->emitOpError() << "references symbol '" << symbolRef.getRootReference().getValue() - << "' which must be either a ShimDMAAllocationOp, DeviceOp or RuntimeSequenceOp, but got: " + << "' which must be either a ShimDMAAllocationOp, " + "DeviceOp or RuntimeSequenceOp, but got: " << symbolDefOp->getName().getStringRef(); return WalkResult::interrupt(); } diff --git a/lib/Dialect/AIEX/IR/AIEXDialect.cpp b/lib/Dialect/AIEX/IR/AIEXDialect.cpp index 07c403a87cc..ef2a92ecf0e 100644 --- a/lib/Dialect/AIEX/IR/AIEXDialect.cpp +++ b/lib/Dialect/AIEX/IR/AIEXDialect.cpp @@ -50,7 +50,7 @@ void AIEXDialect::initialize() { } // namespace xilinx::AIEX #define GET_OP_CLASSES -#include "aie/Dialect/AIEX/IR/AIEX.cpp.inc"/* Return the correct values to write to the hardware registers to configure +#include "aie/Dialect/AIEX/IR/AIEX.cpp.inc" /* Return the correct values to write to the hardware registers to configure strides and wraps given the input user-facing strides and wraps. In the IR, we express strides in units of element data type, but the hardware @@ -983,42 +983,42 @@ LogicalResult AIEX::RunOp::verify() { return emitOpError() << "cannot find callee device for runtime sequence '" << getRuntimeSequenceSymbol() << "'"; } - + AIE::RuntimeSequenceOp calleeRuntimeSequence = getCalleeRuntimeSequenceOp(); if (!calleeRuntimeSequence) { return emitOpError() << "cannot find runtime sequence '" << getRuntimeSequenceSymbol() << "'"; } - + // Validate argument types match the callee's parameters Block &calleeBody = calleeRuntimeSequence.getBody().front(); ValueRange values = getArgs(); - + if (calleeBody.getNumArguments() != values.size()) { return emitOpError() << "argument count mismatch"; } - + for (unsigned i = 0, n = calleeBody.getNumArguments(); i < n; i++) { BlockArgument arg = calleeBody.getArgument(i); Value val = values[i]; - + // For memref types, check compatibility (same shape and element type) auto argType = dyn_cast(arg.getType()); auto valType = dyn_cast(val.getType()); - + if (argType && valType) { if (argType.getShape() != valType.getShape() || argType.getElementType() != valType.getElementType()) { - return emitOpError() << "argument " << i << " type mismatch: " - << "expected " << argType - << " but got " << valType; + return emitOpError() + << "argument " << i << " type mismatch: " << "expected " + << argType << " but got " << valType; } } else if (arg.getType() != val.getType()) { - return emitOpError() << "argument " << i << " type mismatch: " - << "expected " << arg.getType() + return emitOpError() << "argument " << i + << " type mismatch: " << "expected " << arg.getType() << " but got " << val.getType(); } } - + return success(); } diff --git a/lib/Dialect/AIEX/Transforms/AIEDMATasksToNPU.cpp b/lib/Dialect/AIEX/Transforms/AIEDMATasksToNPU.cpp index 096a72a850a..5d669cee39c 100644 --- a/lib/Dialect/AIEX/Transforms/AIEDMATasksToNPU.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEDMATasksToNPU.cpp @@ -12,13 +12,13 @@ #include #include "aie/Dialect/AIE/IR/AIEDialect.h" +#include "aie/Dialect/AIEX/AIEUtils.h" #include "aie/Dialect/AIEX/IR/AIEXDialect.h" #include "aie/Dialect/AIEX/Transforms/AIEXPasses.h" -#include "aie/Dialect/AIEX/AIEUtils.h" +#include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" -#include "mlir/Dialect/MemRef/IR/MemRef.h" #include "llvm/ADT/TypeSwitch.h" using namespace mlir; @@ -186,13 +186,14 @@ struct AIEDMATasksToNPUPass : AIEDMATasksToNPUBase { uint64_t register_addr = target_model.getDmaBdAddress(tile.getCol(), tile.getRow(), bd_id) + target_model.getDmaBdAddressOffset(tile.getCol(), tile.getRow()); - - // A buffer descriptor can refer to a statically allocated aie.buffer, or to a - // DDR buffer which will be passed as a runtime arguument (block argument). - // Try to find the root block argument, either directly or through subviews/casts. + + // A buffer descriptor can refer to a statically allocated aie.buffer, or to + // a DDR buffer which will be passed as a runtime arguument (block + // argument). Try to find the root block argument, either directly or + // through subviews/casts. mlir::BlockArgument buf_arg = nullptr; int64_t offset = 0; - + if (auto directArg = llvm::dyn_cast(buf)) { buf_arg = directArg; offset = 0; @@ -200,7 +201,7 @@ struct AIEDMATasksToNPUPass : AIEDMATasksToNPUBase { buf_arg = traceResult->rootArg; offset = traceResult->offsetInBytes; } - + if (buf_arg) { if (!target_model.isShimNOCTile(tile.getCol(), tile.getRow())) { return bd_op->emitOpError("DDR memory (runtime input arguments) can " @@ -210,9 +211,9 @@ struct AIEDMATasksToNPUPass : AIEDMATasksToNPUBase { unsigned arg_idx = buf_arg.getArgNumber(); offset += bd_op.getOffsetInBytes(); NpuAddressPatchOp::create(builder, bd_op.getLoc(), - /*addr*/ register_addr, - /*arg_idx*/ arg_idx, - /*arg_plus*/ offset); + /*addr*/ register_addr, + /*arg_idx*/ arg_idx, + /*arg_plus*/ offset); } else if (AIE::BufferOp buffer = llvm::dyn_cast(buf.getDefiningOp())) { uint64_t buf_addr; @@ -226,7 +227,10 @@ struct AIEDMATasksToNPUPass : AIEDMATasksToNPUBase { NpuWrite32Op::create(builder, bd_op.getLoc(), register_addr, buf_addr, nullptr, nullptr, nullptr); } else { - return bd_op->emitOpError("Buffer argument must be a constant aie.buffer, a runtime sequence input argument, or a (chain of) subview(s) or cast(s) of a block argument with constant offsets and strides equal to one."); + return bd_op->emitOpError( + "Buffer argument must be a constant aie.buffer, a runtime sequence " + "input argument, or a (chain of) subview(s) or cast(s) of a block " + "argument with constant offsets and strides equal to one."); } return success(); } diff --git a/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp b/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp index 3eb2fb64976..ce091b331a5 100644 --- a/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp @@ -14,9 +14,9 @@ #include "aie/Dialect/AIEX/IR/AIEXDialect.h" #include "aie/Dialect/AIEX/Transforms/AIEXPasses.h" +#include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" -#include "mlir/Dialect/MemRef/IR/MemRef.h" #include #include @@ -293,18 +293,21 @@ struct DmaToNpuPattern : OpConversionPattern { "time of lowering."); return failure(); } - + mlir::Value rootMemref = memref; int64_t subviewOffset = 0; - - // Trace through memref.subview and memref.reinterpret_cast chain, if any, to find root block argument + + // Trace through memref.subview and memref.reinterpret_cast chain, if any, + // to find root block argument auto traceResult = traceSubviewToBlockArgument(memref); if (!traceResult) { - return op->emitOpError("memref must be a block argument or subview/cast/reinterpret_cast of a block argument with static offsets, sizes, and strides"); + return op->emitOpError( + "memref must be a block argument or subview/cast/reinterpret_cast of " + "a block argument with static offsets, sizes, and strides"); } rootMemref = traceResult->rootArg; subviewOffset = traceResult->offsetInBytes; - + // Find the argument index of the root memref Block &entryBB = seq_op.getBody().front(); int arg_idx = -1; @@ -316,7 +319,7 @@ struct DmaToNpuPattern : OpConversionPattern { } if (arg_idx < 0) return failure(); - + offset += subviewOffset; // bd_id diff --git a/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp b/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp index d415a896317..d14ab0ad954 100644 --- a/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp @@ -50,11 +50,11 @@ namespace { static ResetTileType parseTileTypes(llvm::StringRef str) { if (str.empty()) return ResetTileType::None; - + unsigned result = 0; llvm::SmallVector tokens; str.split(tokens, ',', -1, false); - + for (auto token : tokens) { token = token.trim(); if (token == "shim" || token == "shimnoc") @@ -66,7 +66,7 @@ static ResetTileType parseTileTypes(llvm::StringRef str) { else if (token == "all") return ResetTileType::All; } - + return static_cast(result); } @@ -81,7 +81,8 @@ static ResetMode parseResetMode(llvm::StringRef str) { return ResetMode::IfUsedFineGrained; else if (trimmed == "ifchanged" || trimmed == "if-changed") return ResetMode::IfChanged; - else if (trimmed == "ifchangedfinegrained" || trimmed == "if-changed-fine-grained") + else if (trimmed == "ifchangedfinegrained" || + trimmed == "if-changed-fine-grained") return ResetMode::IfChangedFineGrained; else if (trimmed == "always" || trimmed == "all") return ResetMode::Always; @@ -95,10 +96,12 @@ struct ExpandLoadPdiPattern : public OpRewritePattern { const ResetConfig lockConfig; const ResetConfig coreConfig; mutable AIE::DeviceOp previousDevice; - - ExpandLoadPdiPattern(MLIRContext *context, ResetConfig dma, ResetConfig sw, ResetConfig lock, ResetConfig core) - : OpRewritePattern(context), - dmaConfig(dma), switchConfig(sw), lockConfig(lock), coreConfig(core), previousDevice(nullptr) {} + + ExpandLoadPdiPattern(MLIRContext *context, ResetConfig dma, ResetConfig sw, + ResetConfig lock, ResetConfig core) + : OpRewritePattern(context), dmaConfig(dma), + switchConfig(sw), lockConfig(lock), coreConfig(core), + previousDevice(nullptr) {} LogicalResult matchAndRewrite(NpuLoadPdiOp loadPdiOp, PatternRewriter &rewriter) const override { @@ -125,32 +128,34 @@ struct ExpandLoadPdiPattern : public OpRewritePattern { // Determine if this is the first load_pdi (no previous device) bool isFirstLoadPdi = !previousDevice; - - // For first load_pdi with no reset modes requiring comparison, skip empty device - bool needsEmptyDevice = !isFirstLoadPdi || - dmaConfig.mode != ResetMode::Never || - switchConfig.mode != ResetMode::Never || - lockConfig.mode != ResetMode::Never; + + // For first load_pdi with no reset modes requiring comparison, skip empty + // device + bool needsEmptyDevice = !isFirstLoadPdi || + dmaConfig.mode != ResetMode::Never || + switchConfig.mode != ResetMode::Never || + lockConfig.mode != ResetMode::Never; AIE::DeviceOp emptyDevice; if (needsEmptyDevice) { - // Create a unique empty device for this reset to avoid PDI address caching + // Create a unique empty device for this reset to avoid PDI address + // caching OpBuilder::InsertionGuard guard(rewriter); rewriter.setInsertionPointToStart(moduleOp.getBody()); - + // Find a unique name for the empty device std::string emptyName; int emptyIndex = 0; do { emptyName = "empty_" + std::to_string(emptyIndex++); } while (moduleOp.lookupSymbol(emptyName)); - + auto deviceType = referencedDevice.getDevice(); auto loc = rewriter.getUnknownLoc(); - emptyDevice = AIE::DeviceOp::create( - rewriter, loc, deviceType, rewriter.getStringAttr(emptyName)); + emptyDevice = AIE::DeviceOp::create(rewriter, loc, deviceType, + rewriter.getStringAttr(emptyName)); emptyDevice.getRegion().emplaceBlock(); - + Block *deviceBlock = &emptyDevice.getRegion().front(); rewriter.setInsertionPointToEnd(deviceBlock); AIE::EndOp::create(rewriter, loc); @@ -161,7 +166,8 @@ struct ExpandLoadPdiPattern : public OpRewritePattern { NpuLoadPdiOp newLoadPdi; if (needsEmptyDevice) { newLoadPdi = NpuLoadPdiOp::create( - rewriter, loadPdiOp.getLoc(), FlatSymbolRefAttr::get(emptyDevice.getSymNameAttr()), + rewriter, loadPdiOp.getLoc(), + FlatSymbolRefAttr::get(emptyDevice.getSymNameAttr()), loadPdiOp.getIdAttr(), loadPdiOp.getSizeAttr(), loadPdiOp.getAddressAttr()); } else { @@ -173,14 +179,13 @@ struct ExpandLoadPdiPattern : public OpRewritePattern { } // Generate and insert reset operations (skip for first load_pdi) - if (!isFirstLoadPdi && - (dmaConfig.mode != ResetMode::Never || - switchConfig.mode != ResetMode::Never || - lockConfig.mode != ResetMode::Never || - coreConfig.mode != ResetMode::Never)) { + if (!isFirstLoadPdi && (dmaConfig.mode != ResetMode::Never || + switchConfig.mode != ResetMode::Never || + lockConfig.mode != ResetMode::Never || + coreConfig.mode != ResetMode::Never)) { if (failed(xilinx::AIE::generateAndInsertResetOps( - referencedDevice, newLoadPdi.getOperation(), - dmaConfig, switchConfig, lockConfig, coreConfig, previousDevice))) { + referencedDevice, newLoadPdi.getOperation(), dmaConfig, + switchConfig, lockConfig, coreConfig, previousDevice))) { loadPdiOp.emitError("Failed to generate reset operations"); return failure(); } @@ -195,8 +200,8 @@ struct ExpandLoadPdiPattern : public OpRewritePattern { nextOp = nextOp->getNextNode(); } - if (failed(xilinx::AIE::generateAndInsertConfigOps( - referencedDevice, lastResetOp, ""))) { + if (failed(xilinx::AIE::generateAndInsertConfigOps(referencedDevice, + lastResetOp, ""))) { loadPdiOp.emitError("Failed to generate configuration operations"); return failure(); } @@ -214,7 +219,8 @@ struct ExpandLoadPdiPattern : public OpRewritePattern { struct AIEExpandLoadPdiPass : public AIEExpandLoadPdiBase { void getDependentDialects(DialectRegistry ®istry) const override { - registry.insert(); + registry + .insert(); } void runOnOperation() override { @@ -224,21 +230,22 @@ struct AIEExpandLoadPdiPass ResetTileType dmaTiles = parseTileTypes(resetDmasTiles); ResetMode dmaMode = parseResetMode(resetDmasMode); ResetConfig dmaConfig(dmaTiles, dmaMode); - + ResetTileType switchTiles = parseTileTypes(resetSwitchesTiles); ResetMode switchMode = parseResetMode(resetSwitchesMode); ResetConfig switchConfig(switchTiles, switchMode); - + ResetTileType lockTiles = parseTileTypes(resetLocksTiles); ResetMode lockMode = parseResetMode(resetLocksMode); ResetConfig lockConfig(lockTiles, lockMode); - + ResetTileType coreTiles = parseTileTypes(resetCoresTiles); ResetMode coreMode = parseResetMode(resetCoresMode); ResetConfig coreConfig(coreTiles, coreMode); RewritePatternSet patterns(&getContext()); - patterns.add(&getContext(), dmaConfig, switchConfig, lockConfig, coreConfig); + patterns.add(&getContext(), dmaConfig, switchConfig, + lockConfig, coreConfig); if (failed(applyPatternsGreedily(module, std::move(patterns)))) { signalPassFailure(); diff --git a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp index 1f063c7a9d2..bb15f4c4591 100644 --- a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp @@ -1,4 +1,5 @@ -//===- AIEMaterializeRuntimeSequence.cpp -------------------------*- C++ -*-===// +//===- AIEMaterializeRuntimeSequence.cpp -------------------------*- C++ +//-*-===// // // This file is licensed under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -8,21 +9,21 @@ // //===----------------------------------------------------------------------===// +#include "aie/Conversion/AIEToConfiguration/AIEToConfiguration.h" #include "aie/Dialect/AIE/IR/AIEDialect.h" +#include "aie/Dialect/AIEX/AIEUtils.h" #include "aie/Dialect/AIEX/IR/AIEXDialect.h" #include "aie/Dialect/AIEX/Transforms/AIEXPasses.h" -#include "aie/Dialect/AIEX/AIEUtils.h" #include "aie/Targets/AIERT.h" -#include "aie/Conversion/AIEToConfiguration/AIEToConfiguration.h" -#include "mlir/Pass/Pass.h" -#include "mlir/IR/PatternMatch.h" +#include "mlir/Dialect/Arith/IR/Arith.h" +#include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/IR/IRMapping.h" +#include "mlir/IR/PatternMatch.h" +#include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" #include "mlir/Transforms/WalkPatternRewriteDriver.h" -#include "mlir/Dialect/Arith/IR/Arith.h" -#include "mlir/Dialect/MemRef/IR/MemRef.h" #define DEBUG_TYPE "aie-materialize-runtime-sequence" @@ -39,35 +40,38 @@ struct RuntimeCallGraphCyclicityAnalysis { // Call graph is cyclic bool isCyclic = false; - RuntimeCallGraphCyclicityAnalysis(Operation *op, AnalysisManager &am) - : analysisManager(am) - { - AIE::RuntimeSequenceOp runtimeSequenceOp = llvm::dyn_cast(op); + RuntimeCallGraphCyclicityAnalysis(Operation *op, AnalysisManager &am) + : analysisManager(am) { + AIE::RuntimeSequenceOp runtimeSequenceOp = + llvm::dyn_cast(op); if (!runtimeSequenceOp) { - op->emitError("RuntimeCallGraphCyclicityAnalysis can only be called on aiex.runtime_sequence operations."); + op->emitError("RuntimeCallGraphCyclicityAnalysis can only be called on " + "aiex.runtime_sequence operations."); return; } - + // Use DFS with a stack to detect cycles // A cycle exists if we encounter a sequence already on the current path llvm::DenseSet callStack; llvm::DenseSet visited; - - std::function hasCycle = [&](AIE::RuntimeSequenceOp seq) -> bool { + + std::function hasCycle = + [&](AIE::RuntimeSequenceOp seq) -> bool { if (callStack.contains(seq)) { - return true; // Found a cycle + return true; // Found a cycle } if (visited.contains(seq)) { - return false; // Already checked this sequence + return false; // Already checked this sequence } - + callStack.insert(seq); visited.insert(seq); - + // Check all sequences called by this one bool foundCycle = false; seq.walk([&](RunOp runOp) { - if (AIE::RuntimeSequenceOp callee = runOp.getCalleeRuntimeSequenceOp()) { + if (AIE::RuntimeSequenceOp callee = + runOp.getCalleeRuntimeSequenceOp()) { if (hasCycle(callee)) { foundCycle = true; return WalkResult::interrupt(); @@ -75,11 +79,11 @@ struct RuntimeCallGraphCyclicityAnalysis { } return WalkResult::advance(); }); - + callStack.erase(seq); return foundCycle; }; - + if (hasCycle(runtimeSequenceOp)) { isCyclic = true; isValid = true; @@ -92,16 +96,17 @@ struct RuntimeCallGraphCyclicityAnalysis { // Turn aie.configure @device into aie.run %.. @configure // TODO: add check that liveness of two aie.configures do not overlap -// (i.e., when we configure A, then configure B, cannot call runtime sequence of A after configuring B) +// (i.e., when we configure A, then configure B, cannot call runtime sequence of +// A after configuring B) // TODO: add code to remove repeated @configure ops struct InsertLoadPdiForConfigurePattern : RewritePattern { - InsertLoadPdiForConfigurePattern(MLIRContext *context, PatternBenefit benefit = 1) + InsertLoadPdiForConfigurePattern(MLIRContext *context, + PatternBenefit benefit = 1) : RewritePattern(ConfigureOp::getOperationName(), benefit, context) {} - LogicalResult - matchAndRewrite(Operation *op, - PatternRewriter &rewriter) const override { + LogicalResult matchAndRewrite(Operation *op, + PatternRewriter &rewriter) const override { ConfigureOp configureOp = llvm::dyn_cast(op); if (!configureOp) { return failure(); @@ -127,30 +132,29 @@ struct InsertLoadPdiForConfigurePattern : RewritePattern { } rewriter.setInsertionPointToStart(configureBlock); AIEX::NpuLoadPdiOp::create( - rewriter, - configureOp.getLoc(), - FlatSymbolRefAttr::get(referencedDevice.getSymNameAttr())); + rewriter, configureOp.getLoc(), + FlatSymbolRefAttr::get(referencedDevice.getSymNameAttr())); return success(); } }; -// Collects all external SSA values referenced by an operation (and its nested +// Collects all external SSA values referenced by an operation (and its nested // operations). // 1. Collects SSA values from the operation's operands. // 2. Recursively walks through all operations in the operation's regions. // 3. For each nested operation, collects SSA values from its operands. // 4. Skips values that are already in argMap or defined within the operation. // 5. For memref.subview operations, traces to the root block argument -static void collectReferencedSSAValues(Operation *op, - const IRMapping &argMap, - llvm::SetVector &referencedValues) { +static void +collectReferencedSSAValues(Operation *op, const IRMapping &argMap, + llvm::SetVector &referencedValues) { auto processValue = [&](Value operand) { if (argMap.contains(operand)) { return; } - + // If this is a subview, trace to the root block argument if (auto traceResult = traceSubviewToBlockArgument(operand)) { // Check if the root argument is already mapped @@ -159,7 +163,7 @@ static void collectReferencedSSAValues(Operation *op, } return; } - + // Not a subview chain leading to block arg, add as-is referencedValues.insert(operand); }; @@ -168,7 +172,7 @@ static void collectReferencedSSAValues(Operation *op, for (Value operand : op->getOperands()) { processValue(operand); } - + // Recursively collect SSA values from nested operations in all regions. for (Region ®ion : op->getRegions()) { region.walk([&](Operation *nestedOp) { @@ -176,7 +180,7 @@ static void collectReferencedSSAValues(Operation *op, if (argMap.contains(operand)) { return; } - + // Check if defined within the parent operation Operation *defOp = operand.getDefiningOp(); if (defOp && op->isProperAncestor(defOp)) { @@ -192,14 +196,13 @@ static void collectReferencedSSAValues(Operation *op, // Copies SSA value definitions into the caller device. // Currently, only `aie.tile` operations are supported. // Updates argMap to map old values to new/existing values. -static LogicalResult copyReferencedSSAValues( - PatternRewriter &rewriter, - const llvm::SetVector &referencedValues, - AIE::DeviceOp callerDevice, - IRMapping &argMap, - mlir::OpBuilder::InsertPoint &clonedSSAInsertionPoint, - Operation *errorReportOp) { - +static LogicalResult +copyReferencedSSAValues(PatternRewriter &rewriter, + const llvm::SetVector &referencedValues, + AIE::DeviceOp callerDevice, IRMapping &argMap, + mlir::OpBuilder::InsertPoint &clonedSSAInsertionPoint, + Operation *errorReportOp) { + for (Value referencedValue : referencedValues) { Operation *definingOp = referencedValue.getDefiningOp(); if (!definingOp) { @@ -210,8 +213,9 @@ static LogicalResult copyReferencedSSAValues( if (auto tileOp = llvm::dyn_cast(definingOp)) { int col = tileOp.getCol(); int row = tileOp.getRow(); - - // Check if a tile with matching col/row already exists in the caller device + + // Check if a tile with matching col/row already exists in the caller + // device AIE::TileOp existingTile = nullptr; for (AIE::TileOp tile : callerDevice.getOps()) { if (tile.getCol() == col && tile.getRow() == row) { @@ -223,7 +227,8 @@ static LogicalResult copyReferencedSSAValues( if (existingTile) { // Verify that all attributes match if (tileOp->getAttrDictionary() != existingTile->getAttrDictionary()) { - // Filter out result type attributes and symbol attributes for comparison + // Filter out result type attributes and symbol attributes for + // comparison auto filterAttrs = [](DictionaryAttr dict) -> DictionaryAttr { SmallVector filteredAttrs; for (auto namedAttr : dict) { @@ -234,14 +239,16 @@ static LogicalResult copyReferencedSSAValues( } return DictionaryAttr::get(dict.getContext(), filteredAttrs); }; - + DictionaryAttr tileAttrs = filterAttrs(tileOp->getAttrDictionary()); - DictionaryAttr existingAttrs = filterAttrs(existingTile->getAttrDictionary()); - + DictionaryAttr existingAttrs = + filterAttrs(existingTile->getAttrDictionary()); + if (tileAttrs != existingAttrs) { return errorReportOp->emitError() << "aie.tile(" << col << ", " << row - << ") already exists in the device with different attributes"; + << ") already exists in the device with different " + "attributes"; } } @@ -249,7 +256,7 @@ static LogicalResult copyReferencedSSAValues( rewriter.restoreInsertionPoint(clonedSSAInsertionPoint); if (!existingTile->isBeforeInBlock(&*rewriter.getInsertionPoint())) { rewriter.moveOpBefore(existingTile, - clonedSSAInsertionPoint.getBlock(), + clonedSSAInsertionPoint.getBlock(), clonedSSAInsertionPoint.getPoint()); rewriter.setInsertionPointAfter(existingTile); } @@ -269,7 +276,7 @@ static LogicalResult copyReferencedSSAValues( << ". Currently only aie.tile operations are supported."; } } - + return success(); } @@ -279,9 +286,7 @@ static LogicalResult copyReferencedSSAValues( // symbols will be renamed to have a unique name. // Also copies in SSA values referenced by the inlined symbol definitions. static LogicalResult inlineReferencedSymbolDefinitions( - PatternRewriter &rewriter, - Operation *op, - Operation *lookupFrom, + PatternRewriter &rewriter, Operation *op, Operation *lookupFrom, IRMapping argMap, llvm::DenseMap &previouslyInlinedSymbolMap, AIE::DeviceOp callerDevice, @@ -289,47 +294,47 @@ static LogicalResult inlineReferencedSymbolDefinitions( MLIRContext *ctx = op->getContext(); for (NamedAttribute namedAttr : op->getAttrs()) { Attribute attr = namedAttr.getValue(); - auto newAttr = attr.replace( - [&](SymbolRefAttr oldSymbolRef) { - SymbolRefAttr newSymbolRef; - if (!previouslyInlinedSymbolMap.count(oldSymbolRef)) { - llvm::StringRef oldName = oldSymbolRef.getRootReference().getValue(); - std::string uniqueName = oldName.str(); - unsigned uniquingCounter = 0; - while (SymbolTable::lookupNearestSymbolFrom(op, StringAttr::get(ctx, uniqueName))) { - uniqueName = oldName.str() + "_" + std::to_string(uniquingCounter); - uniquingCounter++; - } - newSymbolRef = SymbolRefAttr::get(ctx, uniqueName); - previouslyInlinedSymbolMap[oldSymbolRef] = newSymbolRef; + auto newAttr = attr.replace([&](SymbolRefAttr oldSymbolRef) { + SymbolRefAttr newSymbolRef; + if (!previouslyInlinedSymbolMap.count(oldSymbolRef)) { + llvm::StringRef oldName = oldSymbolRef.getRootReference().getValue(); + std::string uniqueName = oldName.str(); + unsigned uniquingCounter = 0; + while (SymbolTable::lookupNearestSymbolFrom( + op, StringAttr::get(ctx, uniqueName))) { + uniqueName = oldName.str() + "_" + std::to_string(uniquingCounter); + uniquingCounter++; + } + newSymbolRef = SymbolRefAttr::get(ctx, uniqueName); + previouslyInlinedSymbolMap[oldSymbolRef] = newSymbolRef; + + // Add the new symbol definition + Operation *symbolDefOp = + SymbolTable::lookupNearestSymbolFrom(lookupFrom, oldSymbolRef); + if (!symbolDefOp) { + return std::make_pair(newSymbolRef, WalkResult::interrupt()); + } - // Add the new symbol definition - Operation *symbolDefOp = SymbolTable::lookupNearestSymbolFrom(lookupFrom, oldSymbolRef); - if (!symbolDefOp) { - return std::make_pair(newSymbolRef, WalkResult::interrupt()); - } - - // Collect SSA values referenced by the symbol definition operation - llvm::SetVector symbolReferencedValues; - collectReferencedSSAValues(symbolDefOp, argMap, symbolReferencedValues); - - // Copy SSA values referenced by the symbol definition - if (failed(copyReferencedSSAValues(rewriter, symbolReferencedValues, - callerDevice, argMap, - clonedDefOpsInsertionPoint, op))) { - return std::make_pair(newSymbolRef, WalkResult::interrupt()); - } - - Operation *clonedSymbolDefOp = rewriter.clone(*symbolDefOp, argMap); - clonedSymbolDefOp->setAttr(SymbolTable::getSymbolAttrName(), - StringAttr::get(ctx, uniqueName)); - } else { - newSymbolRef = previouslyInlinedSymbolMap[oldSymbolRef]; + // Collect SSA values referenced by the symbol definition operation + llvm::SetVector symbolReferencedValues; + collectReferencedSSAValues(symbolDefOp, argMap, symbolReferencedValues); + + // Copy SSA values referenced by the symbol definition + if (failed(copyReferencedSSAValues(rewriter, symbolReferencedValues, + callerDevice, argMap, + clonedDefOpsInsertionPoint, op))) { + return std::make_pair(newSymbolRef, WalkResult::interrupt()); } - return std::make_pair(newSymbolRef, WalkResult::advance()); + Operation *clonedSymbolDefOp = rewriter.clone(*symbolDefOp, argMap); + clonedSymbolDefOp->setAttr(SymbolTable::getSymbolAttrName(), + StringAttr::get(ctx, uniqueName)); + } else { + newSymbolRef = previouslyInlinedSymbolMap[oldSymbolRef]; } - ); + + return std::make_pair(newSymbolRef, WalkResult::advance()); + }); if (!newAttr) { return failure(); } @@ -341,8 +346,7 @@ static LogicalResult inlineReferencedSymbolDefinitions( struct InlineRuntimeCallsPattern : RewritePattern { InlineRuntimeCallsPattern(MLIRContext *ctx) - : RewritePattern(RunOp::getOperationName(), PatternBenefit(1), - ctx) {} + : RewritePattern(RunOp::getOperationName(), PatternBenefit(1), ctx) {} LogicalResult matchAndRewrite(Operation *op, PatternRewriter &rewriter) const override { @@ -352,7 +356,8 @@ struct InlineRuntimeCallsPattern : RewritePattern { return failure(); } AIE::DeviceOp calleeDevice = runOp.getCalleeDeviceOp(); - AIE::RuntimeSequenceOp calleeRuntimeSequence = runOp.getCalleeRuntimeSequenceOp(); + AIE::RuntimeSequenceOp calleeRuntimeSequence = + runOp.getCalleeRuntimeSequenceOp(); if (!calleeDevice || !calleeRuntimeSequence) { return failure(); } @@ -380,12 +385,13 @@ struct InlineRuntimeCallsPattern : RewritePattern { Value val = values[i]; argMap.map(arg, val); } - + // The callee body may reference SSA values and symbols that are defined // in the callee device (outside the callee runtime sequence). We will // inline a supported set of these and error otherwise. - // Collect SSA values referenced in the callee not defined by the callee and and not in the argMap. + // Collect SSA values referenced in the callee not defined by the callee and + // and not in the argMap. llvm::SetVector referencedValues; for (Operation &op : calleeBody.getOps()) { collectReferencedSSAValues(&op, argMap, referencedValues); @@ -402,14 +408,15 @@ struct InlineRuntimeCallsPattern : RewritePattern { mlir::Block &callerDeviceBodyFirstBlock = callerDeviceBody.front(); mlir::OpBuilder::InsertPoint clonedDefOpsInsertPoint( &callerDeviceBodyFirstBlock, callerDeviceBodyFirstBlock.begin()); - if (failed(copyReferencedSSAValues(rewriter, referencedValues, - callerDevice, argMap, - clonedDefOpsInsertPoint, runOp))) { + if (failed(copyReferencedSSAValues(rewriter, referencedValues, callerDevice, + argMap, clonedDefOpsInsertPoint, + runOp))) { return failure(); } // Now, also inline symbol definitions referenced in the callee body; - // this may pull in additional SSA values referenced by the symbol definitions. + // this may pull in additional SSA values referenced by the symbol + // definitions. rewriter.setInsertionPoint(runOp); mlir::OpBuilder::InsertPoint clonedOpInsertionPoint = rewriter.saveInsertionPoint(); @@ -421,7 +428,7 @@ struct InlineRuntimeCallsPattern : RewritePattern { if (failed(inlineReferencedSymbolDefinitions( rewriter, clonedOp, calleeRuntimeSequence.getOperation(), argMap, - previouslyInlinedSymbolMap, callerDevice, + previouslyInlinedSymbolMap, callerDevice, clonedDefOpsInsertPoint))) { return failure(); } @@ -443,21 +450,26 @@ struct AIEMaterializeRuntimeSequencesPass for (AIE::DeviceOp deviceOp : moduleOp.getOps()) { // Verify all runtime sequences before materialization - for (AIE::RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { + for (AIE::RuntimeSequenceOp runtimeSequenceOp : + deviceOp.getOps()) { if (failed(runtimeSequenceOp.verifyBeforeMaterialization())) { return signalPassFailure(); } } // Check for cycles in runtime sequence calls - for (AIE::RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { - AnalysisManager am = getAnalysisManager().nest(deviceOp).nest(runtimeSequenceOp); - RuntimeCallGraphCyclicityAnalysis cyclicity = am.getAnalysis(); + for (AIE::RuntimeSequenceOp runtimeSequenceOp : + deviceOp.getOps()) { + AnalysisManager am = + getAnalysisManager().nest(deviceOp).nest(runtimeSequenceOp); + RuntimeCallGraphCyclicityAnalysis cyclicity = + am.getAnalysis(); if (!cyclicity.isValid) { return signalPassFailure(); } if (cyclicity.isCyclic) { - runtimeSequenceOp.emitError("Runtime sequence call graph contains a cycle"); + runtimeSequenceOp.emitError( + "Runtime sequence call graph contains a cycle"); return signalPassFailure(); } } @@ -473,12 +485,14 @@ struct AIEMaterializeRuntimeSequencesPass RewritePatternSet patterns_0(ctx); patterns_0.insert(ctx); - if (failed(applyPatternsGreedily(deviceOp, std::move(patterns_0), rewriter_config))) { + if (failed(applyPatternsGreedily(deviceOp, std::move(patterns_0), + rewriter_config))) { return signalPassFailure(); } // Insert LoadPDI ops for each aiex.configure op - for (AIE::RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { + for (AIE::RuntimeSequenceOp runtimeSequenceOp : + deviceOp.getOps()) { RewritePatternSet patterns_1(ctx); patterns_1.insert(ctx); walkAndApplyPatterns(runtimeSequenceOp, std::move(patterns_1)); @@ -486,36 +500,37 @@ struct AIEMaterializeRuntimeSequencesPass // Flatten the IR: hoist all operations inside aiex.configure to be direct // children of the runtime sequence, preserving order - for (AIE::RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { + for (AIE::RuntimeSequenceOp runtimeSequenceOp : + deviceOp.getOps()) { SmallVector configureOps; - for (ConfigureOp configureOp : runtimeSequenceOp.getOps()) { + for (ConfigureOp configureOp : + runtimeSequenceOp.getOps()) { configureOps.push_back(configureOp); } - + IRRewriter rewriter(ctx); for (ConfigureOp configureOp : configureOps) { Block &configureBlock = configureOp.getBody().front(); - + // Collect all operations in the configure block SmallVector opsToHoist; for (Operation &op : configureBlock) { opsToHoist.push_back(&op); } - + // Hoist operations to be right before the configure op rewriter.setInsertionPoint(configureOp); for (Operation *op : opsToHoist) { op->moveBefore(configureOp); } - + // Erase the now-empty configure op rewriter.eraseOp(configureOp); } } } // end for each device - } }; diff --git a/lib/Dialect/AIEX/Utils/AIEUtils.cpp b/lib/Dialect/AIEX/Utils/AIEUtils.cpp index 02483421299..1a2676ec468 100644 --- a/lib/Dialect/AIEX/Utils/AIEUtils.cpp +++ b/lib/Dialect/AIEX/Utils/AIEUtils.cpp @@ -15,95 +15,98 @@ using namespace xilinx; static unsigned cachedId = 0; -std::optional +std::optional AIEX::traceSubviewToBlockArgument(Value value) { int64_t offsetInBytes = 0; Value current = value; - + // Walk through the chain of operations until we reach a block argument while (current) { // Check if we've reached a block argument if (auto blockArg = dyn_cast(current)) { return SubviewTraceResult{blockArg, offsetInBytes}; } - + Operation *defOp = current.getDefiningOp(); if (!defOp) { return std::nullopt; } - + // Handle memref.cast (just pass through) if (auto castOp = dyn_cast(defOp)) { current = castOp.getSource(); continue; } - + // Handle memref.reinterpret_cast (validate and pass through) if (auto reinterpretOp = dyn_cast(defOp)) { - auto sourceType = dyn_cast(reinterpretOp.getSource().getType()); + auto sourceType = + dyn_cast(reinterpretOp.getSource().getType()); if (!sourceType) { return std::nullopt; } - + // Validate that source is contiguous (all strides must be 1) if (auto strided = dyn_cast(sourceType.getLayout())) { for (int64_t stride : strided.getStrides()) { if (stride != 1) { - return std::nullopt; // Non-contiguous memory, cannot safely reinterpret + return std::nullopt; // Non-contiguous memory, cannot safely + // reinterpret } } } - + current = reinterpretOp.getSource(); continue; } - + // Handle memref.subview (accumulate offset and validate) if (auto subviewOp = dyn_cast(defOp)) { // Verify static offsets, sizes, strides - if (!subviewOp.getStaticOffsets().empty() && + if (!subviewOp.getStaticOffsets().empty() && subviewOp.getStaticOffsets()[0] == ShapedType::kDynamic) { return std::nullopt; } - if (!subviewOp.getStaticSizes().empty() && + if (!subviewOp.getStaticSizes().empty() && subviewOp.getStaticSizes()[0] == ShapedType::kDynamic) { return std::nullopt; } - if (!subviewOp.getStaticStrides().empty() && + if (!subviewOp.getStaticStrides().empty() && subviewOp.getStaticStrides()[0] == ShapedType::kDynamic) { return std::nullopt; } - + // Only support rank-1 subviews - if (subviewOp.getSourceType().getRank() != 1 || + if (subviewOp.getSourceType().getRank() != 1 || subviewOp.getType().getRank() != 1) { return std::nullopt; } - + // Only support stride of 1 (contiguous) - if (!subviewOp.getStaticStrides().empty() && + if (!subviewOp.getStaticStrides().empty() && subviewOp.getStaticStrides()[0] != 1) { return std::nullopt; } - + // Calculate and accumulate offset in bytes auto sourceType = subviewOp.getSourceType(); - unsigned elemSizeInBits = sourceType.getElementType().getIntOrFloatBitWidth(); + unsigned elemSizeInBits = + sourceType.getElementType().getIntOrFloatBitWidth(); if (elemSizeInBits % 8 != 0) { return std::nullopt; } unsigned elemSizeInBytes = elemSizeInBits / 8; int64_t offsetInElements = subviewOp.getStaticOffsets()[0]; offsetInBytes += offsetInElements * elemSizeInBytes; - + current = subviewOp.getSource(); continue; } - + // Encountered an unsupported operation return std::nullopt; } - + return std::nullopt; } diff --git a/lib/Targets/AIERT.cpp b/lib/Targets/AIERT.cpp index b8a8875141d..32b53b096ad 100644 --- a/lib/Targets/AIERT.cpp +++ b/lib/Targets/AIERT.cpp @@ -853,9 +853,12 @@ LogicalResult xilinx::AIE::AIERTControl::resetPartition() { LogicalResult xilinx::AIE::AIERTControl::resetDMA(int col, int row, bool on) { auto tileLoc = XAie_TileLoc(col, row); XAie_DmaDesc dmaTileBd; - TRY_XAIE_API_LOGICAL_RESULT(XAie_DmaDescInit, &aiert->devInst, &dmaTileBd, tileLoc); + TRY_XAIE_API_LOGICAL_RESULT(XAie_DmaDescInit, &aiert->devInst, &dmaTileBd, + tileLoc); TRY_XAIE_API_LOGICAL_RESULT(XAie_DmaDisableBd, &dmaTileBd); - TRY_XAIE_API_LOGICAL_RESULT(XAie_DmaChannelResetAll, &aiert->devInst, tileLoc, on ? XAie_DmaChReset::DMA_CHANNEL_UNRESET : XAie_DmaChReset::DMA_CHANNEL_RESET); + TRY_XAIE_API_LOGICAL_RESULT(XAie_DmaChannelResetAll, &aiert->devInst, tileLoc, + on ? XAie_DmaChReset::DMA_CHANNEL_UNRESET + : XAie_DmaChReset::DMA_CHANNEL_RESET); return success(); } @@ -871,14 +874,20 @@ LogicalResult xilinx::AIE::AIERTControl::resetSwitch(int col, int row) { // Reset all combinations of input/output routing in the switchbox for (auto endpoint_a : WIRE_BUNDLE_TO_STRM_SW_PORT_TYPE) { for (auto endpoint_b : WIRE_BUNDLE_TO_STRM_SW_PORT_TYPE) { - unsigned n_a_connections = targetModel.getNumSourceSwitchboxConnections(col, row, endpoint_a.first); - unsigned n_b_connections = targetModel.getNumDestSwitchboxConnections(col, row, endpoint_b.first); + unsigned n_a_connections = targetModel.getNumSourceSwitchboxConnections( + col, row, endpoint_a.first); + unsigned n_b_connections = targetModel.getNumDestSwitchboxConnections( + col, row, endpoint_b.first); for (unsigned a_index = 0; a_index < n_a_connections; a_index++) { for (unsigned b_index = 0; b_index < n_b_connections; b_index++) { - if (!targetModel.isLegalTileConnection(col, row, endpoint_a.first, a_index, endpoint_b.first, b_index)) { + if (!targetModel.isLegalTileConnection(col, row, endpoint_a.first, + a_index, endpoint_b.first, + b_index)) { continue; } - TRY_XAIE_API_FATAL_ERROR(XAie_StrmConnCctDisable, &aiert->devInst, tileLoc, endpoint_a.second, a_index, endpoint_b.second, b_index); + TRY_XAIE_API_FATAL_ERROR(XAie_StrmConnCctDisable, &aiert->devInst, + tileLoc, endpoint_a.second, a_index, + endpoint_b.second, b_index); } } } @@ -893,46 +902,55 @@ LogicalResult xilinx::AIE::AIERTControl::resetCoreUnreset(int col, int row) { return success(); } -LogicalResult xilinx::AIE::AIERTControl::resetLock(int col, int row, int lockId) { +LogicalResult xilinx::AIE::AIERTControl::resetLock(int col, int row, + int lockId) { auto tileLoc = XAie_TileLoc(col, row); // Reset a single lock to value 0 XAie_Lock lock; lock.LockId = lockId; lock.LockVal = 0; - TRY_XAIE_API_LOGICAL_RESULT(XAie_LockSetValue, &aiert->devInst, tileLoc, lock); + TRY_XAIE_API_LOGICAL_RESULT(XAie_LockSetValue, &aiert->devInst, tileLoc, + lock); return success(); } -LogicalResult xilinx::AIE::AIERTControl::resetSwitchConnection(int col, int row, - WireBundle sourceBundle, - int sourceChannel, - WireBundle destBundle, - int destChannel) { +LogicalResult xilinx::AIE::AIERTControl::resetSwitchConnection( + int col, int row, WireBundle sourceBundle, int sourceChannel, + WireBundle destBundle, int destChannel) { auto tileLoc = XAie_TileLoc(col, row); - + // Helper lambda to map WireBundle to StrmSwPortType auto mapBundle = [](WireBundle bundle) -> StrmSwPortType { switch (bundle) { - case WireBundle::Core: return CORE; - case WireBundle::DMA: return DMA; - case WireBundle::FIFO: return FIFO; - case WireBundle::South: return SOUTH; - case WireBundle::West: return WEST; - case WireBundle::North: return NORTH; - case WireBundle::East: return EAST; - case WireBundle::Trace: return TRACE; - default: return SOUTH; + case WireBundle::Core: + return CORE; + case WireBundle::DMA: + return DMA; + case WireBundle::FIFO: + return FIFO; + case WireBundle::South: + return SOUTH; + case WireBundle::West: + return WEST; + case WireBundle::North: + return NORTH; + case WireBundle::East: + return EAST; + case WireBundle::Trace: + return TRACE; + default: + return SOUTH; } }; - + StrmSwPortType sourcePortType = mapBundle(sourceBundle); StrmSwPortType destPortType = mapBundle(destBundle); - + // Disconnect the specific connection from source to destination TRY_XAIE_API_LOGICAL_RESULT(XAie_StrmConnCctDisable, &aiert->devInst, tileLoc, - sourcePortType, sourceChannel, - destPortType, destChannel); - + sourcePortType, sourceChannel, destPortType, + destChannel); + return success(); } @@ -942,15 +960,18 @@ LogicalResult xilinx::AIE::AIERTControl::resetPerfCounters(int col, int row) { // Try core module counters (if applicable) for (int counterId = 0; counterId < 4; counterId++) { // Ignore errors as not all tiles have all counter types - (void)XAie_PerfCounterReset(&aiert->devInst, tileLoc, XAIE_CORE_MOD, counterId); + (void)XAie_PerfCounterReset(&aiert->devInst, tileLoc, XAIE_CORE_MOD, + counterId); } // Try mem module counters for (int counterId = 0; counterId < 4; counterId++) { - (void)XAie_PerfCounterReset(&aiert->devInst, tileLoc, XAIE_MEM_MOD, counterId); + (void)XAie_PerfCounterReset(&aiert->devInst, tileLoc, XAIE_MEM_MOD, + counterId); } // Try PL module counters (for shim tiles) for (int counterId = 0; counterId < 4; counterId++) { - (void)XAie_PerfCounterReset(&aiert->devInst, tileLoc, XAIE_PL_MOD, counterId); + (void)XAie_PerfCounterReset(&aiert->devInst, tileLoc, XAIE_PL_MOD, + counterId); } return success(); } diff --git a/python/compiler/aiecc/cl_arguments.py b/python/compiler/aiecc/cl_arguments.py index 64f316f3087..78cd37adffb 100644 --- a/python/compiler/aiecc/cl_arguments.py +++ b/python/compiler/aiecc/cl_arguments.py @@ -456,28 +456,28 @@ def parse_args(args=None): ) opts = parser.parse_args(args) - + # Set defaults for specific reset options if not specified if opts.reset_dmas_tiles is None: opts.reset_dmas_tiles = opts.reset_tiles if opts.reset_dmas_mode is None: opts.reset_dmas_mode = opts.reset_mode - + if opts.reset_switches_tiles is None: opts.reset_switches_tiles = opts.reset_tiles if opts.reset_switches_mode is None: opts.reset_switches_mode = opts.reset_mode - + if opts.reset_locks_tiles is None: opts.reset_locks_tiles = opts.reset_tiles if opts.reset_locks_mode is None: opts.reset_locks_mode = opts.reset_mode - + if opts.reset_cores_tiles is None: opts.reset_cores_tiles = opts.reset_tiles if opts.reset_cores_mode is None: opts.reset_cores_mode = opts.reset_mode - + return opts diff --git a/python/compiler/aiecc/main.py b/python/compiler/aiecc/main.py index f9dc115faca..5cb191e4253 100644 --- a/python/compiler/aiecc/main.py +++ b/python/compiler/aiecc/main.py @@ -147,6 +147,7 @@ def _create_aie_lower_to_llvm_pipeline( AIE_LOWER_TO_LLVM = _create_aie_lower_to_llvm_pipeline + # pipeline to lower and legalize runtime sequence for NPU def _create_npu_lowering_pipeline( expand_load_pdis=False, @@ -157,8 +158,7 @@ def _create_npu_lowering_pipeline( reset_locks_tiles="", reset_locks_mode="never", ): - device_pipeline_1 = ( - ) + device_pipeline_1 = () pipeline = ( Pipeline() .add_pass("aie-materialize-runtime-sequences") @@ -1007,7 +1007,9 @@ async def generate_full_elf_config_json( for other_device_name, other_pdi_id in device_to_id_mapping.items(): pdi_filename = self.pdi_file_name(other_device_name) - kernel_entry["PDIs"].append({"id": other_pdi_id, "PDI_file": pdi_filename}) + kernel_entry["PDIs"].append( + {"id": other_pdi_id, "PDI_file": pdi_filename} + ) for seq_op, seq_name in sequences: insts_filename = self.npu_insts_file_name(device_name, seq_name) @@ -1743,25 +1745,31 @@ async def run_flow(self): npu_insts_file, self.opts.verbose, ) - + # If expand_load_pdis is enabled, the pass may have created new devices # (e.g., @empty), so we need to regenerate the device list from the transformed module if opts.expand_load_pdis: devices = generate_devices_list(npu_insts_module) - input_physical_with_expanded = self.prepend_tmp("input_physical_with_expanded.mlir") - await write_file_async(str(npu_insts_module), input_physical_with_expanded) + input_physical_with_expanded = self.prepend_tmp( + "input_physical_with_expanded.mlir" + ) + await write_file_async( + str(npu_insts_module), input_physical_with_expanded + ) # Update both input_physical and input_physical_with_elfs to point to the file with expanded devices input_physical = input_physical_with_expanded input_physical_with_elfs = input_physical_with_expanded - + if opts.generate_full_elf: device_to_id_mapping = create_device_id_mapping(devices) - assign_load_pdi_ids( - npu_insts_module, device_to_id_mapping + assign_load_pdi_ids(npu_insts_module, device_to_id_mapping) + transformed_mlir_path = self.prepend_tmp( + "npu_insts_with_pid_ids.mlir" ) - transformed_mlir_path = self.prepend_tmp("npu_insts_with_pid_ids.mlir") - await write_file_async(str(npu_insts_module), transformed_mlir_path) - + await write_file_async( + str(npu_insts_module), transformed_mlir_path + ) + self.progress_bar.update(task3, advance=1) # 4.) Generate compilation artifacts for each device From 3110ee145ee4f47f0135ed53990c17de0fdc2a84 Mon Sep 17 00:00:00 2001 From: andrej Date: Fri, 19 Dec 2025 15:46:27 -0700 Subject: [PATCH 40/40] Add coalesce-write32s pass This reverts commit fbc6132271d958832152f26c36bc397c1ac68dd1. --- include/aie/Dialect/AIE/IR/AIETargetModel.h | 67 +++ .../aie/Dialect/AIEX/Transforms/AIEXPasses.h | 2 + .../aie/Dialect/AIEX/Transforms/AIEXPasses.td | 34 ++ .../AIEX/Transforms/AIECoalesceWrite32s.cpp | 433 ++++++++++++++++++ lib/Dialect/AIEX/Transforms/CMakeLists.txt | 1 + python/compiler/aiecc/cl_arguments.py | 15 + python/compiler/aiecc/main.py | 9 + 7 files changed, 561 insertions(+) create mode 100644 lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp diff --git a/include/aie/Dialect/AIE/IR/AIETargetModel.h b/include/aie/Dialect/AIE/IR/AIETargetModel.h index 201d7da658b..72ea0d2cd12 100644 --- a/include/aie/Dialect/AIE/IR/AIETargetModel.h +++ b/include/aie/Dialect/AIE/IR/AIETargetModel.h @@ -325,6 +325,28 @@ class AIETargetModel { // Returns true if the target model supports the given block format. virtual bool isSupportedBlockFormat(std::string const &format) const; + + /// Check if a register at the given address is a "special register" that + /// should not be reordered. Special registers are those that trigger + /// side-effects like device reset, start processing, etc. + /// \param absoluteAddress The full 32-bit address (including tile col/row) + /// \return true if this is a special register that must not be reordered + virtual bool isSpecialRegister(uint32_t absoluteAddress) const { + return false; // Default: no special registers + } + + /// Check if a register at the given tile and offset is a "special register" + /// \param col The column of the tile + /// \param row The row of the tile + /// \param offset The offset within the tile's address space + /// \return true if this is a special register that must not be reordered + virtual bool isSpecialRegister(int col, int row, uint32_t offset) const { + uint32_t absoluteAddress = + ((col & 0xff) << getColumnShift()) | + ((row & 0xff) << getRowShift()) | + (offset & 0xfffff); + return isSpecialRegister(absoluteAddress); + } }; class AIE1TargetModel : public AIETargetModel { @@ -711,6 +733,51 @@ class BaseNPU2TargetModel : public AIE2TargetModel { bool isSupportedBlockFormat(std::string const &format) const override; + /// Check if a register is a special register that should not be reordered + /// for AIE2P (NPU2) devices + bool isSpecialRegister(uint32_t absoluteAddress) const override { + // Extract tile coordinates from absolute address + // Address format: (col << 25) | (row << 20) | offset + int col = (absoluteAddress >> getColumnShift()) & 0xff; + int row = (absoluteAddress >> getRowShift()) & 0x1f; + uint32_t offset = absoluteAddress & 0xfffff; + return isSpecialRegister(col, row, offset); + } + + bool isSpecialRegister(int col, int row, uint32_t offset) const override { + if (isCoreTile(col, row)) { + // Core tile special registers + return offset == 0x32000 || // Core_Control + offset == 0x36070 || // Memory_Control + offset == 0x60000 || // Module_Clock_Control + offset == 0x60010 || // Module_Reset_Control + offset == 0x60020 || // Tile_Control + offset == 0x1DE04 || offset == 0x1DE0C || + offset == 0x1DE14 || offset == 0x1DE1C; + } else if (isShimNOCTile(col, row)) { + // Shim tile special registers + return (offset >= 0x15000 && offset <= 0x15010) || + offset == 0x1D204 || offset == 0x1D20C || + offset == 0x1D214 || offset == 0x1D21C || + offset == 0x1D200 || offset == 0x1D208 || + offset == 0x1D210 || offset == 0x1D218 || + offset == 0x1F000 || offset == 0x1F004 || + offset == 0x40000; + } else if (isMemTile(col, row)) { + // Memory tile special registers + return offset == 0x94008 || offset == 0x96048 || + offset == 0xA0604 || offset == 0xA060C || + offset == 0xA0614 || offset == 0xA061C || + offset == 0xA0624 || offset == 0xA062C || + offset == 0xA0634 || offset == 0xA063C || + offset == 0xA0644 || offset == 0xA064C || + offset == 0xA0654 || offset == 0xA065C || + offset == 0xFFF00 || offset == 0xFFF10 || + offset == 0xFFF20; + } + return false; + } + static bool classof(const AIETargetModel *model) { return model->getKind() >= TK_AIE2_NPU2 && model->getKind() < TK_AIE2_NPU2_Last; diff --git a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h index 730123f3052..005b58d2c0d 100644 --- a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h +++ b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h @@ -54,6 +54,8 @@ std::unique_ptr> createAIELegalizeControlPacketPass(); std::unique_ptr> createAIEExpandLoadPdiPass(); +std::unique_ptr> +createAIECoalesceWrite32sPass(); /// Generate the code for registering passes. #define GEN_PASS_REGISTRATION diff --git a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td index 23ff70f5c55..aa872ca6818 100644 --- a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td +++ b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td @@ -321,4 +321,38 @@ def AIEExpandLoadPdi : Pass<"aie-expand-load-pdi", "mlir::ModuleOp"> { ]; } +def AIECoalesceWrite32s : Pass<"aie-coalesce-write32s", "AIE::DeviceOp"> { + let summary = "Coalesce consecutive write32 operations into blockwrite operations"; + let description = [{ + This pass optimizes sequences of consecutive npu.write32 operations by + coalescing them into npu.blockwrite operations when their addresses are + contiguous (4-byte increments). + + The pass can reorder non-special register writes within slices bounded by + special register writes. Special registers (e.g., control registers) act + as barriers and cannot be reordered. + + For each sequence of N consecutive write32 operations at addresses + [addr, addr+4, addr+8, ...], the pass: + 1. Eliminates duplicate writes (keeps only the last value for each address) + 2. Reorders writes by address within safe boundaries + 3. Creates a memref.global with the values + 4. Replaces the write32 sequence with a single npu.blockwrite + + This reduces instruction count and can improve performance. + }]; + + let options = [ + Option<"minWritesToCoalesce", "min-writes-to-coalesce", "unsigned", + /*default=*/"2", + "Minimum number of contiguous writes required to coalesce into a blockwrite"> + ]; + + let constructor = "xilinx::AIEX::createAIECoalesceWrite32sPass()"; + let dependentDialects = [ + "mlir::memref::MemRefDialect", + "xilinx::AIE::AIEDialect", + "xilinx::AIEX::AIEXDialect", + ]; +} #endif diff --git a/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp b/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp new file mode 100644 index 00000000000..7621aafeaef --- /dev/null +++ b/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp @@ -0,0 +1,433 @@ +//===- AIECoalesceWrite32s.cpp ----------------------------------*- C++ -*-===// +// +// This file is licensed under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// (c) Copyright 2025 Advanced Micro Devices Inc. +// +//===----------------------------------------------------------------------===// +// +// This pass coalesces consecutive npu.write32 operations into npu.blockwrite +// operations when their addresses are contiguous (4-byte increments). +// +// The pass can reorder non-special register writes within slices. Special +// register writes act as barriers and cannot be reordered. Duplicate writes +// to the same address are eliminated (keeping the last value). +// +// Masked writes (npu.maskwrite32) are handled as follows: +// - If a maskwrite is done to an address after a previous write32/blockwrite, +// the maskwrite supersedes the earlier write (earlier write is removed) +// - If a write32/blockwrite is done after a maskwrite to the same address, +// the later write supersedes the maskwrite (maskwrite is removed) +// - Maskwrite operations cannot be coalesced into blockwrites and act as +// barriers for coalescing (similar to special register writes) +// +// A configurable threshold controls the minimum number of contiguous writes +// required for coalescing into a blockwrite. +// +//===----------------------------------------------------------------------===// + +#include "aie/Dialect/AIE/IR/AIEDialect.h" +#include "aie/Dialect/AIEX/IR/AIEXDialect.h" +#include "aie/Dialect/AIEX/Transforms/AIEXPasses.h" + +#include "mlir/Dialect/MemRef/IR/MemRef.h" +#include "mlir/IR/Builders.h" +#include "mlir/IR/PatternMatch.h" +#include "mlir/Pass/Pass.h" +#include "mlir/Transforms/GreedyPatternRewriteDriver.h" + +#include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/SmallVector.h" + +#define DEBUG_TYPE "aie-coalesce-write32s" + +using namespace mlir; +using namespace xilinx; +using namespace xilinx::AIEX; +using namespace xilinx::AIE; + +namespace { + +// Represents a single 32-bit write to memory +struct WriteWord { + uint32_t address; + uint32_t value; + std::optional mask; // If present, this is a masked write + Operation *op; // The original operation that created this write + + bool operator<(const WriteWord &other) const { + return address < other.address; + } + + bool isMaskWrite() const { return mask.has_value(); } +}; + +// Represents a slice of execution between special register barriers +// All writes within a slice can be reordered +struct WriteSlice { + SmallVector writes; // All writes in this slice (can be reordered) + SmallVector specialOps; // Special register writes (cannot be reordered) + SmallVector otherOps; // Non-write operations that create barriers + + bool isEmpty() const { + return writes.empty() && specialOps.empty() && otherOps.empty(); + } +}; + +struct AIECoalesceWrite32sPass + : public AIECoalesceWrite32sBase { + + void runOnOperation() override { + AIE::DeviceOp deviceOp = getOperation(); + + // Collect all runtime sequences in the device + SmallVector runtimeSeqs; + deviceOp.walk([&](RuntimeSequenceOp seqOp) { + runtimeSeqs.push_back(seqOp); + }); + + // Process each runtime sequence + for (auto seqOp : runtimeSeqs) { + coalesceWrite32sInSequence(seqOp); + } + } + +private: + void coalesceWrite32sInSequence(RuntimeSequenceOp seqOp) { + OpBuilder builder(seqOp.getContext()); + + // Get the device and target model + auto deviceOp = seqOp->getParentOfType(); + if (!deviceOp) return; + + const auto &tm = deviceOp.getTargetModel(); + + // Walk through the sequence and partition into slices + for (Block &block : seqOp.getBody()) { + SmallVector slices; + WriteSlice currentSlice; + + for (Operation &op : block) { + // Skip get_global operations - they don't create barriers + if (isa(&op)) { + continue; + } + + bool isSpecialWrite = false; + + // Check if this is a write32 operation + if (auto write32Op = dyn_cast(&op)) { + // Only handle writes with absolute addresses (no buffer/col/row) + if (!write32Op.getBuffer() && !write32Op.getColumn() && + !write32Op.getRow()) { + uint32_t addr = write32Op.getAddress(); + isSpecialWrite = tm.isSpecialRegister(addr); + + if (isSpecialWrite) { + currentSlice.specialOps.push_back(&op); + } else { + WriteWord word{addr, write32Op.getValue(), std::nullopt, &op}; + currentSlice.writes.push_back(word); + } + } else { + // Symbolic write creates a barrier + if (!currentSlice.isEmpty()) { + slices.push_back(std::move(currentSlice)); + currentSlice = WriteSlice(); + } + currentSlice.otherOps.push_back(&op); + } + } + // Check if this is a maskwrite operation + else if (auto maskWriteOp = dyn_cast(&op)) { + // Only handle writes with absolute addresses (no buffer/col/row) + if (!maskWriteOp.getBuffer() && !maskWriteOp.getColumn() && + !maskWriteOp.getRow()) { + uint32_t addr = maskWriteOp.getAddress(); + isSpecialWrite = tm.isSpecialRegister(addr); + + if (isSpecialWrite) { + currentSlice.specialOps.push_back(&op); + } else { + WriteWord word{addr, maskWriteOp.getValue(), maskWriteOp.getMask(), &op}; + currentSlice.writes.push_back(word); + } + } else { + // Symbolic write creates a barrier + if (!currentSlice.isEmpty()) { + slices.push_back(std::move(currentSlice)); + currentSlice = WriteSlice(); + } + currentSlice.otherOps.push_back(&op); + } + } + // Check if this is a blockwrite operation + else if (auto blockWriteOp = dyn_cast(&op)) { + // Only handle writes with absolute addresses + if (!blockWriteOp.getBuffer() && !blockWriteOp.getColumn() && + !blockWriteOp.getRow()) { + auto addr = blockWriteOp.getAbsoluteAddress(); + auto dataWords = blockWriteOp.getDataWords(); + + if (addr && dataWords) { + uint32_t baseAddr = *addr; + + // Check if any word writes to a special register + int64_t numWords = dataWords.size(); + for (int64_t i = 0; i < numWords; ++i) { + if (tm.isSpecialRegister(baseAddr + i * 4)) { + isSpecialWrite = true; + break; + } + } + + if (isSpecialWrite) { + currentSlice.specialOps.push_back(&op); + } else { + // Add each word in the blockwrite as a separate WriteWord + int64_t idx = 0; + for (auto val : dataWords.getValues()) { + WriteWord word{ + static_cast(baseAddr + idx * 4), + static_cast(val.getZExtValue()), + std::nullopt, // blockwrites don't have masks + &op + }; + currentSlice.writes.push_back(word); + ++idx; + } + } + } else { + // Invalid blockwrite creates a barrier + if (!currentSlice.isEmpty()) { + slices.push_back(std::move(currentSlice)); + currentSlice = WriteSlice(); + } + currentSlice.otherOps.push_back(&op); + } + } else { + // Symbolic write creates a barrier + if (!currentSlice.isEmpty()) { + slices.push_back(std::move(currentSlice)); + currentSlice = WriteSlice(); + } + currentSlice.otherOps.push_back(&op); + } + } + // Any other operation creates a barrier + else { + if (!currentSlice.isEmpty()) { + slices.push_back(std::move(currentSlice)); + currentSlice = WriteSlice(); + } + currentSlice.otherOps.push_back(&op); + } + + // Special register writes create slice boundaries + if (isSpecialWrite) { + slices.push_back(std::move(currentSlice)); + currentSlice = WriteSlice(); + } + } + + // Don't forget the last slice + if (!currentSlice.isEmpty()) { + slices.push_back(std::move(currentSlice)); + } + + // Now process each slice: sort writes and coalesce + for (auto &slice : slices) { + processSlice(builder, slice, deviceOp); + } + } + } + + void processSlice(OpBuilder &builder, WriteSlice &slice, + AIE::DeviceOp deviceOp) { + // Non-write operations (barriers) are kept in their original positions + // Nothing to do here - they're already in the IR + + // If there are no writes to coalesce, nothing to do + if (slice.writes.empty()) { + return; + } + + // Eliminate duplicate writes - keep only the last write to each address + // Map from address to the index of the last write to that address + DenseMap lastWriteIndex; + DenseSet supersededOps; // Operations that are superseded by later writes + + for (size_t i = 0; i < slice.writes.size(); ++i) { + uint32_t addr = slice.writes[i].address; + + // If there was a previous write to this address, mark it as superseded + if (lastWriteIndex.count(addr)) { + supersededOps.insert(slice.writes[lastWriteIndex[addr]].op); + } + + lastWriteIndex[addr] = i; + } + + // Filter writes to keep only the last write to each address + SmallVector uniqueWrites; + for (size_t i = 0; i < slice.writes.size(); ++i) { + if (lastWriteIndex[slice.writes[i].address] == i) { + uniqueWrites.push_back(slice.writes[i]); + } + } + + // Update slice.writes with unique writes + slice.writes = std::move(uniqueWrites); + + // Sort writes by address to enable coalescing + llvm::sort(slice.writes); + + // Separate mask writes from regular writes + // Mask writes act as barriers for coalescing + DenseSet maskWriteAddresses; + for (auto &write : slice.writes) { + if (write.isMaskWrite()) { + maskWriteAddresses.insert(write.address); + } + } + + // Find contiguous sequences of non-masked writes and coalesce them + // Masked writes cannot be coalesced and act as barriers + SmallVector> sequences; + SmallVector currentSeq; + + for (auto &write : slice.writes) { + // Mask writes cannot be part of coalesced sequences + if (write.isMaskWrite()) { + // Save current sequence if it meets threshold + if (currentSeq.size() >= minWritesToCoalesce) { + sequences.push_back(currentSeq); + } + currentSeq.clear(); + continue; + } + + if (currentSeq.empty()) { + currentSeq.push_back(write); + } else if (write.address == currentSeq.back().address + 4 && + !maskWriteAddresses.count(write.address)) { + // Contiguous with previous write and not a mask write address + currentSeq.push_back(write); + } else { + // Not contiguous, start new sequence + // Only save sequences that meet the minimum threshold + if (currentSeq.size() >= minWritesToCoalesce) { + sequences.push_back(currentSeq); + } + currentSeq.clear(); + currentSeq.push_back(write); + } + } + + // Don't forget the last sequence (also check threshold) + if (currentSeq.size() >= minWritesToCoalesce) { + sequences.push_back(currentSeq); + } + + // Track which operations to erase + DenseSet toErase = supersededOps; // Start with superseded ops + + // Create blockwrites for each sequence + for (auto &seq : sequences) { + createBlockWrite(builder, seq, deviceOp); + + // Mark operations for erasure + for (auto &write : seq) { + toErase.insert(write.op); + } + } + + // For writes that couldn't be coalesced, keep them as write32 ops + for (auto &write : slice.writes) { + if (!toErase.contains(write.op)) { + // This write wasn't coalesced - keep it but possibly reorder + // The write is already in the IR, we just need to move it if needed + } + } + + // Special register writes stay in their original positions + // Nothing to do here - they're already in the IR + + // Erase operations that were coalesced or superseded + for (auto *op : toErase) { + op->erase(); + } + } + + void createBlockWrite(OpBuilder &builder, + const SmallVector &sequence, + AIE::DeviceOp deviceOp) { + if (sequence.empty()) return; + + MLIRContext *ctx = builder.getContext(); + uint32_t startAddr = sequence[0].address; + + // Generate a unique name for the global memref + static unsigned globalCounter = 0; + std::string globalName = "coalesced_write32_" + + std::to_string(startAddr) + "_" + + std::to_string(globalCounter++); + + // Collect values + SmallVector values; + for (auto &write : sequence) { + values.push_back(static_cast(write.value)); + } + + // Create memref type + auto i32Type = IntegerType::get(ctx, 32); + auto memrefType = MemRefType::get({static_cast(values.size())}, + i32Type); + + // Create DenseIntElementsAttr for initial values + auto tensorType = RankedTensorType::get({static_cast(values.size())}, + i32Type); + auto valuesAttr = DenseElementsAttr::get( + tensorType, ArrayRef(values)); + + // Get location from first operation + Location loc = sequence[0].op->getLoc(); + + // Insert the global at the beginning of the device + builder.setInsertionPointToStart(deviceOp.getBody()); + memref::GlobalOp::create( + builder, + loc, + globalName, + /*sym_visibility=*/builder.getStringAttr("private"), + /*type=*/memrefType, + /*initial_value=*/valuesAttr, + /*constant=*/true, + /*alignment=*/nullptr); + + // Create a GetGlobalOp and BlockWriteOp at the position of the first write + builder.setInsertionPoint(sequence[0].op); + auto getGlobalOp = memref::GetGlobalOp::create( + builder, loc, memrefType, globalName); + + NpuBlockWriteOp::create( + builder, + loc, + startAddr, + getGlobalOp.getResult(), + nullptr, // buffer + nullptr, // column + nullptr // row + ); + } +}; + +} // namespace + +namespace xilinx::AIEX { +std::unique_ptr> createAIECoalesceWrite32sPass() { + return std::make_unique(); +} +} // namespace xilinx::AIEX diff --git a/lib/Dialect/AIEX/Transforms/CMakeLists.txt b/lib/Dialect/AIEX/Transforms/CMakeLists.txt index 5818ea8478d..4679734f2e2 100644 --- a/lib/Dialect/AIEX/Transforms/CMakeLists.txt +++ b/lib/Dialect/AIEX/Transforms/CMakeLists.txt @@ -24,6 +24,7 @@ add_mlir_dialect_library(AIEXTransforms AIETransformBfpTypes.cpp AIETxnToControlPacket.cpp AIEExpandLoadPdi.cpp + AIECoalesceWrite32s.cpp ADDITIONAL_HEADER_DIRS ${AIE_BINARY_DIR}/include diff --git a/python/compiler/aiecc/cl_arguments.py b/python/compiler/aiecc/cl_arguments.py index 78cd37adffb..7ebbbce84ff 100644 --- a/python/compiler/aiecc/cl_arguments.py +++ b/python/compiler/aiecc/cl_arguments.py @@ -454,6 +454,21 @@ def parse_args(args=None): action="store_true", help="Expand load_pdi operations into explicit device reset and configuration sequences", ) + parser.add_argument( + "--no-coalesce-write32s", + dest="coalesce_write32s", + default=True, + action="store_const", + const=False, + help="Do not coalesce write32 operations into blockwrites in the NPU instruction sequence", + ) + parser.add_argument( + "--min-writes-to-coalesce", + dest="min_writes_to_coalesce", + default=2, + type=int, + help="Minimum number of consecutive write32 operations required to coalesce into a blockwrite (default: 2)", + ) opts = parser.parse_args(args) diff --git a/python/compiler/aiecc/main.py b/python/compiler/aiecc/main.py index 5cb191e4253..2bfd76408b6 100644 --- a/python/compiler/aiecc/main.py +++ b/python/compiler/aiecc/main.py @@ -157,6 +157,8 @@ def _create_npu_lowering_pipeline( reset_switches_mode="never", reset_locks_tiles="", reset_locks_mode="never", + coalesce_write32s=True, + min_writes_to_coalesce=2, ): device_pipeline_1 = () pipeline = ( @@ -183,6 +185,11 @@ def _create_npu_lowering_pipeline( reset_locks_tiles=reset_locks_tiles, reset_locks_mode=reset_locks_mode, ) + if coalesce_write32s: + pipeline = pipeline.Nested( + "aie.device", + Pipeline().add_pass("aie-coalesce-write32s", min_writes_to_coalesce=min_writes_to_coalesce), + ) return pipeline @@ -1733,6 +1740,8 @@ async def run_flow(self): reset_switches_mode=opts.reset_switches_mode, reset_locks_tiles=opts.reset_locks_tiles, reset_locks_mode=opts.reset_locks_mode, + coalesce_write32s=opts.coalesce_write32s, + min_writes_to_coalesce=opts.min_writes_to_coalesce ) pass_pipeline = npu_pipeline.materialize(module=True) npu_insts_file = self.prepend_tmp(f"npu_insts.mlir")

ia@BVA9O6FgP|IMo59T^Lk9>=MlLWb>05N zW3``zO$hSP#Z+(S&OhL2w1e8ez7NvjE%*j3hz?*3Rp5YFBf%73bzwV@ zcqI%;sY0Ye{$5;Myr~AaW&aX9@q5@q^3JG~IA9>y0H$SiKs&g|>aKyDoGa$;=?9tq z`)gXC%iY7_I}o5(faNs^B4TktL4ij*FBjKNu)C8dCdN)swA}~IwvUlaoIHoOvq=JVC=-Lr=RiUUiL+Z=syH+(CmLRH9?A*yFA+&1M zcJlvFP!Runr19ie;{Tcp+_*xsH~;v<56?k=jmM4pEc~;ZjOU@HH!EM{oyp7nJmENw z{Zf~F@RI&;qFSW8!*F*zrYmVu@-WDi6R_$*K(JDP*lmz9_8}Bb(I1}8T5(5aF4Sks zIMU2tsE!Ty*zMni$n*aWA4n%+#w$dfQ#9xUhbEw)uxmTg4T#-nyy&pjX)N#;=$ zwCZx5v!J3C4~49bkG=1TpFH8Uyas`qSnZUqq_GFXYWjno1gLJEZ**`&8+o`jclk)NfjLXQ>PFCs)-)0QpSLzrjCxIeqLF>ekjgS zRZ|-TE20CDfHDH*Tl$-4elzo@*B$Skm^=M277D2Nc{WhAo8yOkN*{z4gm9wz3(}az#276>=Y;3KRls*i91sD$2 z18pk1BQ*uEJv8A>=?$~~=YO6c7y{y-dGgIU@R$-Xq;!jf%-5$D^_+j_Uk2`&C1wWw zOxW-X7Z zICjk+a~8=-g7iGXvB_L3xwSe@TaEtt`RyIRZhd-uv3|@jR}~wtYr?%j zUtiA2)EH%is6#!Ci9q^)7tZ~7$6=uDHcWdPrsyiep!Hu7owvI2+ni5|FZRmGRiKhJ z09^AZdLtyxOgPzyWp5$<%r>AA8c6u$$1N-@Bpe2!K8=stV9MB&g61Y=-?HZ?UJa?UZxaiArP z9BTj{^)da|Gf=*z4&107>z1ZS(!jg&X!vW^4ipnnQO+`7ai-~jo!~?WvxiJcsGE4B<(TOi43H`1$DrtG=C+$?egWz2;_vSIYwS&+oxbC z-Cn4A?}A@lm$MJ5IaoS!AXvp?&$tIN0S1CDcEF+fbEZ|;+3s9#n<|0ofDVTn$hT{s}3BM2NKa^d|t z(UO>|Yw-1!Qoh9uVfLRtg92Xm|+=?W~rae>Y)-Yr=PTB$r2M+G~&I_ zeSH159U?FfW|G!z$`}Zm-!h^Zq?nEre-Opn=e@{C01#H8vKI~F2AjktK|uv@*2x?U z;LvMb0q?5d$On=KuI(s^-!8KVyEH zD<~Mty)Qd|92qgitr`Vo*-Zc?1oX^MjEk7)X@Az&U!a_7K_Fs!M|ws^G{jk0fA~Rp z*RG332M^j{0|FiPK9Y0&`cG=vXFg9Dm6l0u9d__hzz$XD#lW}b5cw{mKienpZP}uW zT4^=Xd~Xkr-vBMn`u_W3h=KpE{q+Nln#T*BE*4E6ajTXnd}H6hfXJZ9p+mgD8}QgF zQO`((YxA!$$HYIrt@eF~k}Zp+a?xvH3Eu`8{bWY;4`i@G9MFB&)nyJ+S^e2%KF`4O zi$vYHh=Yfl+w{R7b4DR}X$|2n$#*~k5`idS1)R==v~S5qjjwNmkIUrlNs5H4Y~jOQ z1HFV6)gm6nDge@=SjFPvFNXF-0acFph^VBXxE)Uc;YU&-{0?p#FN0%(VVk5qur&=s^?~p%{3y zV+>;Ev49~RBXtrIB(L@stNrwK))B(RTv`wk&ikAIOeGfiCmBCX#SF*t2hgp7k%bbD zLvaX}2eCh5LFJ-vGCd8aNWB4UnV0b5Q&dtCwhaQD8}YGtd-7eBGPjI_Z*QLv`YXy` zv}LRCPqM0TcmqJ){1kt{%al?g0 zy11~wY0ATI-_1pSB>v;lbs;-1xUrW4u!`H3m7Y#Y=N#*ec4jPA|9S(aJ1~Ra7;j{x zKdz9}TDEK%BNs_BVXcBE6$vW7KNyy|wpoa!B>Vx*B6wW~b_ zuV(Y|SXw*gBiI%{Po^h~<@$`HCR%Mbo}Y%b^}W**BPNs>QRId^h0~Y&t6Skxe2(yG z<>pVQ2vFrYI#FzvBZYHALGJvuj+pz6Djn*Mj9@P>uj)vpmG58WWZg5>Sc+JM))nA^ zgB^(mIhhDYBGE*W2U4g1#7OJP3zsgLVP>#XhJ?w*5ufBS~9Zx>lORtJo5%{ z2TIyku+?Bg=O@ozutKB&pfxYUAmcGA9(q`YbQYgJed>E}XJg}oB~V{q-_+fGoS*lp z;Kq$=XmAXnTFHjuir%+x--_6FX;BhP$r=R_fBs3RN9(fAcke>yELw8}p`*Q`;=im) zD%0V`gw^vDv+qk9LR94UmRMJ2iPx`R-(ItJucBhOW0uL%i@V%8qmlQPD=zcNsnD~+ zeL*4RHUMuKz{MWu9mV~MhBMcVR0`g76?2|r4?p!)sk8q2+Vy0ZyH!IK_DjLS+S>Z; z!C?#)mN1P+p~b#sNdzK;2r)!uEg9~ImtMqpfY)szO>f^C^^*)<)_Z?HzZjUNqnN19 zI)6TmN|jH%2DI$et5>!!zplMWH#0GrD9=pW_eWiof+V$H*8)I^H_UrgWmh7YR-3Jf z+JQnZG_a2a>FS_lGcsgiYz+ILFp7+yx--9h%wA>q3Nh7z{#qJpEN}Vb>C-CwErQqs zV|XT%s@y0#{jc@5a&o=B>+Fn07F|=7hDz}ERsrq1kJzp)UH>2=hwd2Donhyg!U=9V ztmA;%!K_>c(qAdi^+96r3JB;sqpMZ>sSjS}aDOdaUG%(-9`G@TToEH`M^GVR#w$v4 z@&-Rc9^KT_bK+`cMFqm`yW3lx(47L#{@p?(F`6jnxYe6|`q&%sF{Ny)7oxML=}lmR zVYS)X-oVC7Ww$$R--+#p@X3|4_3hg`&=d@lw<^*PLHMKjzkaa~1IB^smi~`1M9Hl1 z$}$ergQGuVUU3z61#2M0*5lD+5k`bvC}_ z(zCQB2r962W1m<|0V91+1&`2JZGuNPwU&eJMrjIj;{xp3RE7*^#_Oa_>{7e^H>JT9 zAdd(uR#a1?iHzRT#zwH$;o^a&413f9)XganMQe}(xisWYphUzDU^}#kvp++A1zm|q zTuLag*-EoZ3sy41WWCJmdeAIUfe0{8#sSTk`v6-3Pl^XTsq=W&tXZb@=@t%9)t2u^ zHh#3<)EuVr2HLHICh+)tjWEdry!^F|qOfPHp(*J=F#hAhP`$4ZJXI=tbLn_PxfPm0yFL#!LdcF zicVTDyblz*0{$-H=heHSFt^-Rw}xsQS6Hpi&5KEZv7qtFjC2_6I>1QZZT!~7^%x#m zM|tR_Xkj>CT)gV`?dPzz*navc1Vgu+=GHt5l8VJrmc^aCZ(l~p4Q_vlnmitQWa#c| z#mHJ<44?GpzQrSWmgXDx>+WkSH1G^d-}P@qxDC%IjYg$#ok(7Idkrk+_n9rzp?J1k z50P4mIfA7e_rV;|Y6iBSi07|sxaG`5wql?}I3hajF>)IE*{4(p&4SFmwyY-%8GKxS zSKy5s5r~}lgoK_AoZua98~|(bC~$3j)HpKs>ui1h0{6J`Xc6|K;Gw$FvPLX~Dt}hI z*;1bf1MqHY^C3JQ@n8aAA?5sN;V95K1L8zSW#l#7!7zAsGfW!FLmJ*6*k7$_X!`NP zn}WK>2FTUbTV^>nzkwp~H4HlVrU6a9o?+NF+Da1HR2(3j5#g&J>ky38ZSYlU@7;v6 zNWiSL?TOOP)Pr`a^P%C~JvhaQ5B1xz4CLn4A71~C5Y&&gD?!p& z7{zCBfCwtAHo)!_s&)#w$7x@`1_dw_5(v;bcmBKv(nwI=Xwv`@bH&C32%k#4BomXD zHip=vltrNe+1KB%2Ihhyf;PlpZMgLNod(<2FWZSy~Pp<#wx9v=> z=n9-FT-UF%F$h!eu)+axMW+F z1%)Yj;uqAkmIxbEB_Dju#?DUBtas7i*O6V)%H52%bngp!tFwEzU zh92jQkJg;1GYsyLl~qBsvTF6}5}U@VD)o4S9360Ugle2)?*hIN)V>?`!~(@OWOkbp z{SojW>c+SPpH*9MyF>b7kx0{X!^IR~cOrZQ&Q^1K$0hJpv|mTpeECeGUe9tA5)vXa z6Rjn@Y16*(v0+UZ$A5}zk4J#54(5Niz;_geE&@CYc1J;^tmO5`WU`^c@j4yYD&+{9uBj;uL4G?SZNL?%WSa^U8i^TW{h~GU&k=v^4fwK5 zBz>GXUhuZ`ROUTQ3W~EsIZ1VzAs8YDcXuMlD97_CV&2@57XR&Y2Q9_6Y>7pvPCGRh ztRJe(!AaW|Jv1XkwJnEp}3%D|Pn+pNF13DWFpU?XvCK5jn#0<0PEDu7U&1Uf$X zdaVWXMKMO#-F?6k?>P(}t&UPzU1o-atP=BkaMn3k|=xsnPJN)*WK4*jK@Z4ln*j5%Tr+adyBkymjBKC5;K6W7qx8KBYSi1^EHYA zQRI4enho|eZYz_uCf@~nLuf3~+cW?>kcn!5m1>1LPSBmLkhmT8nXhZAdEc)+7KBaZ1#J` zC5y9=E;3&sZ)2acp9FWy!+NB>)KeWiw%rlakA40|KqaE46+1nxKYg@-nNtLsF5K$? z2fVQWaucBn{p9Un2VxLdGjdS`RrfuYgWo(X=cB{(UI6l^vq18LOLPwcH~0{hn(Y0=#P#c$W?6Mj(zE^&Ncs`0!yW#n?EY-yaXG z!btxT7R1qTsA2)Zx;2U&8Z&F|V(+49Shz0+{7^J&JjZg^K+Csmg~H~BF!Tg(oBs?% zHx^@R=>K%-ApZKA6<1aBdA#wn_B-^FsKQ)_>!e_RM0^C5U{jft#oIrk_m`EGC8}qH zn4<&|iwAhLBJ45l=q++eS2#*I>sCZt2I%xFjm_N^F~)rrX7KgDUebW39=Qej=h0V zA_)k->83*E3D6sZxSW9!JD>o-C5zIID)J*6tistQ)7z!_Ay@!_2E5!#niH*-2YF~V${*Xgg;Kr)f zdZ+$UjxDxvI5%!k*uQ-YSJwIZuk$+Dr;<^*4u!XQ!8D8eg}=5z9g++9J%oZ8b_fW; z)`~?+hGbeaheVEIu#PgJ(gdVW<@E|&KuMaGFaSW*JIG)eFTIFmz=1kMiAW0!)pKMv zRGB0+>km!SAxIifJ;zpiYCB4|i-}8|y@NDv2Zd+{mI4v1!t|r|Hg8&%c!ktwLscmg z!7jHfGJjC2?&&kGy1H&C*j#_|e5sYyHLSK+Db;h!(K6zQrRGEJK-=90!%BE8{`ljM zHlm7yV75!m)>Z^WFDR@I9=otg1w`1}=pEbZM0W@>j6(6EVGm@fa@$*16vi z0bC8D@7==ik@2Z5&6@+N!cA}QFqrY@qg8hSx_9DiEl*C9$(4t;Z{I%95u2#<4(6Z( zn4_)s7?nf{06rC4-Q9T_tzrj|V`#s_{-SKVc5I8dcr?OuN*X0>yP^OBv^Yx4ay?NI zChGtkseb?}{wR0Ifgi^Js82}m>_e0;HC3bKjQpA>TD-$AFXFjzDjreLTJRXEHlvt+ zb=k%>WsdtFuDb_Vo2aS~(Au1{34jAOHhX5xg}F-xAY%}X`VTB_6tu{A#!(5hFN7J6 z0fHP+X6H%H`Nw4&!j@{@%v0JrvXkmnT!=Y#!s7}L`qA^oOD+NQ7}*Le9TK(R16GbG zNi9OY9FbBaWEFQuPDkFx4~&wJU@R#t)lJIh4T7EeE;ld;sE4E2Y^E2fxST2;2o{7+ zJ|mnIcu777sJxw+d>}CNicm|yCg^YYjX+UsJwzmVFb#=Vu^q_kRN;tRbA-acJVC95 zQ8f(wj~~T@aH%cWmZh_YgE)cD307m4CuXG;pK->_Alyf(Nzk7UXn_r#ULAE?vI8r&8 z)@V33ingb>udmjfvLnnp$HLN8f{F=SI7sWBVJJ#=Ag5*kz-WSJqar@_9-zT99>uJ7 zR9;7sSIHX&Ev^BVqRVH~)G@q^!4Co!#v`kW`Uq7#vU=8I1yCuCLP_h9v07~6b`S`v zvA%$_&%zR*RYwTB!sggDJUpF{eWKE{YfcYhqnju4P?p@jV+T72N6cqP7*ql?9mHzk z6BSK8v_xwb`B-b#Cy3QV4?Ote+sAly0^Y8MSBjy412?z%IycVm!!|D-rG3~)T(Xa^ zt*k*IunM+(VIq@w7LX;K@GI54fmBw9?_FYMh&SFtzmU`8M7@l=J4dJ=>AUaeB^4r4 z@CLIuU%Qz8}uy~5s%~K0zk~B~>B%*0GdNoyh z4lcb2GW*^fv?xf+c=qQ;i!f==-g#K03b!^Ca46yXfa%>E+X`5)qc%B|FgYl2se?t+ z*V|jZ`kJKb{Abnq48YJ~HD0<&1n~o|K7&UfIP5~@RP-##C z-%DfxcTVv;U|{qun*v$ps}S?7DYsm*wWYVB-o^d%|4Bs1>aIq4!=~-|?|A4pLBhlS zBZ!3`ycNKmwl5z#`kLguM9lhSk^|1 z5W&D5thL1w6ZBJnxRsoGT$)v@A`w}L?glf)zGx9h+t!G#cVG!K=$^u@-8$|{FbYMM z*me47?BE{?(zpuy!1wIQlatD8@a@uX5Z{WNcqN&Uu9s_Lj2(;ew(wvkvdRdtVaKKi zO)Gv`v`DQ3J$7)@g0)^;hK7wsi55UykS(3|6w2#aDSFg<$3&JQ0$zwx>6l4^2CWbv zR^Bo)g=cUPlukhxdRVf0wo*mA13TpQJ9LAjIu0Kn2bI82%JDvKmHD%&#mReBPAy6E z`AyfMk9U*ru#Ho~jC_Z;7jB}}453JYpBk0C@z2<-sjpbPUqX6H6oDcod5rN0%uB?cLgJuK)vP4F@^d8WHl5m>D1HvpBtpE3BM^WL6tyA%_cyj3N-C`z4ux`>4hs znhQM*^W4p^p=z_P0Ol`sucD@fOy0R5XZIZ#Orj0O_2R&k+GjOsdcbV8!-$px z$~WieL5PU+j6u*yiw4MFvDglLEncth%2~|5Utq*nxle-@3JUc#m@lWX|A4>s$YEdj zcry@N2umE=di?ltiYNx)`@oXmkpf8Waz?^5wv5Lkg*E~hRskxSEFk)kdhK93W0`d z(^hKiKvPi~=65x~*i)%WejIvNe;~ndv#`;qM3y2?mrsiT_Wkki%V>MqgU#Lsuqm|= zF;6wt!27#H@U$kbyRUK>SI)6ru&UDDkhMT1&Ud0$9BX9 z@<62|E|G#TAn9r_)I_aTPdA%FOQ0|yZUs18Se76dAh~LX9jVr-lW842_?IS9F9%SE zM6uZ`(*cvB;-m{h&mi_V;0Hx?KVRbF0~-?Os&V8<6w=+U8~z8D60}Whiq4*gV1N;Y zA3>T~nsdS~in3s^6Le4HXn2AX7K5U9JACr}AYLd4eve7S8od;HDp6X-Hkmqi(2tyANs?+)X$hC?_wh#ePznDdk#lcy9#IIixBtrtY)pzL$wT6dI~FByJ!bysNl5&UMKMjguiCJx)So_w9Zs@1yZ zl~kFX(f#f;peL2}Fb@q8_JH;Z!NQccGIZ)K*f0`^1mod7B~T)x891vl`A(R{-1>=J z;Ey8j$DvroZZ-j4iG2UuUw--Nr~T-iU>mg;2EKrK@#|3AWe)`hp?SzLgn0%y5#nui zj#U6b3q^U|zRs2xnsxQL3&{$s>x;?2>A~U z^fczlC*;5)ptJv?={DW1W6dI9TfGBei;*#RvA`2Mz3#FFXs+Q)$usHB)3DfPvRulc zDk85RWFv*KdCMiLTBNYz4^+WE)_;z#q+2s}hwumIOHRGecOMN|-dmP{mXEEs;e`o; zn+Rv3tg3yZ-#rB9=wJA_pkNugTxGh|LU;YR`nTWy60yVF$yx3T=FJm7D?G+Xgv3Mk?cHO+yf`X+V(dT!C2=_&)Ss5A2z^#dp0!imMR-1o~ zFIbW`-N;X_xVX4DJ=VWE%MtRSUN-fx+duN~@Lc-r7%}}^C%;#ttK|vDa-Q3A(deSX zYb zCAh`ZLIA#~EqDVpH9ZYTZjeZL?-0BhAilLNOSyye{oVwylVhXu1m57KF2dHOv7R8s z=J)T9U4@EQBns3^#7`j5h&YA%#s&8@Edg*seWOo+xFge@f^AHtS&p%fAKNgKQS-J{ zapzQO=n^Y~%vZh_tu1b%+rT^oA`p=q5)z`?>Z6N&#Aj<`lRCD-=K?zQFSlZ6Q3_Xq z>)?YYxp3hEnOy!bc60L zQ;<`@&NlXVhhRRAfPVxcDmX-!UkSp1a76UTks(V?y%`ZBQxtj1`C3wp3Rs;%>#;3O zzOx0G>Yxeg*8~^Oe>#=K@^a2{)R0FkCf^I=Z|;`{7zgyUM;tY%<0DTIIO&AofS@t6 zPXKdU?d$A*w`{G-JM($_{xcZpgyYU%o&yL+x_Ybu5%)pa|H z0Z`nVTsSs5T4!vC-cl41h;9gC9QCx};e)mbOGF-~>n=g%*NH~$xBlQo(I6zR5M0+f zJO*fK2Ub!?V_shBlVfN?B4D4u9t2SYgQ8+u4qI>CQN`C;PmCUbo&>(>TejmP6HuS= z8_fmF73hraro{CiRdt%yBI4c{&Hz^<2h%mAJ%^SKdJiMtHvH@&7Z1-t zZJhGXd7me;O8Yev^r8`eKH>mpKoiuz-MI(Hz!!40I%A>ZTYu0I1TpHjKF(33^3Sdd zhh7f**#Bf8T|WW>dVFU}c8s~X5?$)RmHYjp*ymZu&-j=0*v{zKP; z{H^ykc;=?apio8iU9%v z@=Cl%lWIC`Xc#Kgn5jQ(d zOs%}yhZ-tLt*xz*C}$HL8`SmdlS%O)4$BLu6u7K1ingJZ*6GNvic3pNIaY!>2?|@9 z{RGUFe8Dl4A7;6ij_aVXQ#uxaQY%uL)K@NVQMsU^FcyJ*;f>bmWok_9#DXBNu|wHZ ze9}pcd14O~b7KLbUS38np!Ch`OQ5&b0W%8X3ooiT92*Y(8C`b6ELOm^U;hv=m+YLJ z5`mkrmABr)W#4!~jMOLx%9~Jp%;(q!){(Kpg2%9YM+6yOLQB${QLGe1^CGNRA|)dr zQSJ3a6H5ZjNGA-PkO~2rm7d&t0h1hf?}p$X2|-_gmcdUb$P@dDu_zNQ^2QR;N&E!X z5Re2^xO#N6r%VtUMqP!_(yeFc8O>?Cw9mdi9sU^D=ResR0M2L z_FQA&7%wR$wfEjWG)M8h$~$u=xutbQu%p!OE{(rey`G@ul3ap{G21rJJm_=9Ug2AB zk!SEDv=PeC&)5x)i-I$NqWhgI+}Y5(3aVtC$Pj^Jm3o#-+R*Ic(@vz8D4hg>Q)4in z_l}g`+3+$J<|1PF1tfW{mCmw5CCpFK{%-UM>=5qaPzaCce7+S8)5+ z*kilJEf{-(G6IkfG)=@UY_=8^1MwW(typ3a0lX=;yMkg1fv(It6fk{~n^60P2WNqo z@(OClcBpy%r#&L z$LiBnbnly!ck@BH845d{2vdX^Uhe)7ykJs<;+!n6ov2N^UEk2qf2IG!2W0?(U74EQ z^>aIfW2f_pgf-MojAyRkywd5zSrQj$s)wg;$3xvT2qJJuelOH}eM>KxiW9Q{<=mpG zG^~&Jz=E_o)veLv!{67G4bx=W_WZW}=-kXV6lD;Az7c+;z(Qb-;|=ZlvK$Z!s~-om@C<>oGE(F51O2cGyU62=(R*Xtw= zJqb{Rw5@M1{%0ytFO}am{V~1k{q08J7xAPP*m6cqtvmLkrk0l{Ew z_`f|Dv}xaU)H>FpfCi49r_h;YoFI~*817q0#!FH0bL=bywB{ksb4{&5kD`Lb^uvnD zOi8?U(wdcp^Uu$}u&65zt|_&`Pb?wlh-P>X4!6_J9@g(Up5!1NT?bJTa2MhaqRo~h zVzAc~s61&J2n*F2o0!XgG8pKE3O#hRW!^jaW;>OrVeCq*Rs{n-qKXhTn2dBpL?Rzf_RrOZPXDtpHpoA`<{w$w;-oJS*m?Dp81@Eu?kDDx^^IBju@G$Pl4rg z2k?sS7;^1c!_y<-^AafGy!c4uZ!3bIw|l=D+Ghsu5iRCy8+ z4%Dta#@xRwA<8}x`+LB8uR#!HnzQ~*@%Eg6w>b}*B)J7lvf(w+^Sgyw-bP{4i`TSU zDgzN9lx{jV<>uj8BDQIG(apKP=wA2sW;3(UJ#E%fbF)$HsjKIfv~xj=^$lv&7os}J zKeVV03>Y0XJscvd`8)561y{XzRDRYv6uqyZTvlCH@$@$`3(omi@M(L#U*N-1%-Xa1 z8zm{o=30;A*+=X~%INVK3*))xD!24zOVPUv2PyhEIHSOs~WEln6p!~oSwJ;&j% z;2O(Z$GJcLNC3gBQ}2ExX&Zpbq?!OyOmk09B3K|#N=pUHJ`q4qHv&u6Jo7%jih|5d zpS}-6CCKc<>%T^FZ86t`sL`9^54zRog`!o3TnKdvLXAIxK97JO4XM=8UIi9hXD!$g zgwrG8yFcVS(tOizgRv`c3hGrcJM+x04I>38YZ<^a7+xaoKMN=)K?`_eYVj8n6D!LL z2Bac2K2Qnx?9DhAo*IAlrwK=g?%JZF=-QrRP@iG;rz)5s^;DyX3}JG-GgSZq%ETj| zUzqdQ)=t>}v!Yqq@TZJznry>cXCv(GEGrn1_YcOY9mPVT@RG`^DCBF+{k8|vJ;;O< z5nv1Sj!v$WC_NaKmZY4uGJhE$4ig3A3ovvuUlrA%QL!Lm+xx~mLnHyDqX8OSGlCgJ z9c=&smD7$l5Mh+R9v-0rC=`$rKE$X+DmP6$(WnNSPf7_u3abGW3{b#>+kpl<;&F@) zy{9gI-`oKNaFGlC!3F@6=xV4b?{`iN4R#RKb!XtZj|F zuX2ni>iZ#NbGcWBh}56+M`N?}V!H(+4V#P0P1VIw&Pojq>~0g`_xaef&BJ5gr(rIa z9ID+?HQvP%*yCEYt~YN~;)cK3V%J>-&`JdT%jhulHJCep{-%Z_elNkf5jj|RW!2;6 z;qeow(sN7$bW|HfkJh+1El~ zAi;U^YqxraB%JmXb?SiZmn42^Eg0FqW6iG}$_Cfa*K!0nCX_l9%>sb0rwxy1Y&(y= zUEGrD?BparY{oXc@z?=`@NsxVv0wx-a`EKakSV2=Os}Jla-%r`QmExX&EpP!V~7Yp zVo@KSA+?24O`dxDJUYSl+zY|QDDX?n1g&A*@ID71S5)QNkTYNR6E^E83WNy1ZaW!n zo9rcEU$G*A+C))$5S0?o06ES9vhE@PW1U)CbKk6ylFF$Sj|dOH^|oF~Zf%)!v7_+h z@_v2vp3{gWRY&oeOoV^^QnJFkZEf$*UoJs{Tc!v~(H+KbIgVJ9U_#pVNR*FAStS07 zN(qIB=w(PnV*b`ZF}x3(uO09z;^jR-{^!C=8t0I%H>2?(u9(!U4H-2k!r4Hap)vp& zP3%-(C1NMn>|`M)9CKgRCa?iTPk%ZESoV(ASSz_dUteFNGW1h!DBw{Fy4OBz zvH(Hoefzka73r$i!3*Wn0=lBY`6UMU!I;A?H&k*{A!&<+~&o>tY9mPtW?PFZ?5^UJ7{Z|hjsM)WlifJ-Pm zjE&E&ThXA*A&y7MctRC2KFN#;{B-~jq->^>jto*A4csWIIROx(${`xU5l>l<4wxdt z-wDP6ckW`xamC^iBr^AoH%Jh14Q(@|GK34GcEWKqMMfk8#k_F;ctZ^06U25h;AB;! zYe@bedMK$owFBRX?4!y9Rce&f_flCMFRX6}A4LMyZ$~=C=qUzP;8HAPr=o+ERgI^K zFt|Kogwi5r{%|{33FS=m)rkQCudl<5k_b4PX8ZJA8s(7Rg9B8;{t~q80-&NDk-3P0_k};cgS@u%KC6; z3>e=yrSJqanj;+DCx|(5WgqJeC0n)zK3klj6kO6%^0comGJBXmfi^B0Yxo%f;N9=r zdqW_(5G%0MN^Sn@AKI5MN3l?&;4PP%iRf+<6;o}=SQy>>HOtnU7>BX-e1G`UH4jVK z4R@CZ7HS;8Fo1UK5(HflH!%7HINP(j31&kpZ=nbeE(s@@2S$joT7oh6uoPU@h{-MI8&Ag5 zsN0kne4va#AS*QA9y{$+P-7Z#z3m~1qe+Vlx9O0Y0jUn6*cW{QwMMF)C`^fIDUaxn zgv9sl1EUbaPt+aX+3o;vkYlUUsmpGImVlj)08m5m>N*!@`zf3IKtXU#H#FOiU&X~m$v|2_?Gho?zd;y3Mq#pKwL<5V(?V}Cjf(L;8P-& zO;05I0i53kLy{Di5D09Rdi@a-Kq>(UCc+q*L8*iiSkyy&OwJHNA21X6QW~IY$B!eU zMRCU2RCtP0>hlD5i}Su6wBkCE)uC97Hq&_zpQBCYHcHKP#_#ceDsEGU3^PW?hSWh_ zPoE*Igfi#`_AVq;0*w}+d#x*g6BA}^MXZt>)P$D6bDP(!SyM*s{-AH^=6$jS27uMu z-(~0va=Dt`^ZLHbH7vaBCMF{d{=?hEzG3OJ?2B6yyk(_&$E$eNP5+3kxSGHmIUpbu zh08NDg#99~tAJ)0;=>^VMcF9h=MR<6#lnuIVHFy*Ql+j0Edfb9_ z$g;<#S*0ZJviSSI)LLhWD4Cuf* z0Q3m`w)J>pu0Azmp=_zcFg5TYAq|xGs&#%{f;1I{2g!FEHf#_vuU&^$gL3tx*5>AL zgcYb=JIizvI}!K3a-1&%bzM2CAi^ZLoq?Rnf!L#rzahKr}M2B23sHE0l#oQR*O65lc?d-8+|)X|9uARGW~ zr=mc~&CNcZpND^-ZWoYlZxOwHq2Ux&L3ttj=pRzR(g>h7tr<+YdzTA}PEA>c#vWsb z@-fNC=`oN=B?K9esPVEMiM9Z~L=DB}b*;sfKX5mXSc(jrQ3fswL7Eg&N%0?wMmeP2 z)RrO>fM2->OZurwpuF|2no!Z6oTj#^^}@n3|1Ml>=fl9g@8FHd98e1n?ma*7Q*1qN zbbH{@5a|nu!x7YWNIQa2cOkH%^$02=*4C_)s{qiDq83)<%+w$9EO;Bn(MCxQAC^Qo zO>}=!AHj{H9y?$L-lk6{L-ctBWq?J&I%kdw&^GW3xzNodt7>F)huR3huSYr=7m&cl zeAFyYVz)2pYL5E&xG%ljmuvo#Lf=|f9*oxO0Joe4)<{Lb_98niiMKX)`_rKR?e zz!@>PE4OMs^9qACS}Zn%+`4?PaE|)x`Uf4rF zkcD&R&aH&@4k%juC`3X5n-4TW*w$(+#pQu3@E#Y|*C34r1ZX}(COe3L_l1Zp3ISxy z6b>S`1Py5`o@1iOv^CEB`l3|iZr-Iwu<%YC- zxqa9j4a!ptHx4el>1n)_EtKt2K}zP)Ye5}tA}*`+PxWXl;~Uv#&LXo>Rak||_xGoq z^Z&C%mb3=3`5~5aTuQ%;Bx>VOB31231qOl%bq+=A=5@|-guPoknAv;`iwwfZX@!W? z5yxtueMb@>L|$T+04PGDY8wJS)&`U52E3GsV|^f%5oCe~T7GYr$}C4zYEq78wy!aB zg5aW{UOJR{n{5mhdhu-6h1ya8gFfo z2M!Ps3-iHrLfBD5f>&}3H!vsG2$&`GN&iA>_QUrRBjTTCzknr^&3?pgy*pHjV2A1@ zFH%O9coDgm+=Hk)%qmut{vmg?_|+VQ0yA@$kZ2^}K!xC~QjNU`jfqSd-Gfv|gES|{ zys5Il`FM{kW2F6aYnw>I{Kamt+Vc9lI=C-Cu*rIDjUHpjT;r0SMHuC9A`XX`vj<#7 zp{yf*GyMvYhnB6BtWNsL+emXvu4X|PZsqBZzY_%QLka&NaNt4s8_F;vDhCOrcZ|^g zU)u%w~J~ zmfwTaw-VQX*l(LnhdMAh_6#M|rU*(x2vb@&jF>3~Xech*n=z?Bw3w%65NUS1A=go%bBu-E-|slwlIq> zUNmUkfph3nX-ofOa@DweF7ptTV4wIS2TkEQ81qb}9K?R9PZB^Dp=Acc8A+!Oc5@B# z9P%(o7!f$=Bg7|vfb*(`?*cvd}OB-N-FaO8EgMU4TQ<+O8=)>a8qK=r2O7) zq(Q3Cg-M0T#x|v1J$Go@$U)sU&3-|9UyuFk{IjFr9SoqcN^4ACPmdIbTDI_@o`u=dB1pgugi^w4NhYq9ExjI)5m6GrE7e8w6K{DCsoLNQL=g9Z z489ZlpvBFChR{&0BG+6Nt~#+RJkD@*?lE@1FsyhzI26^Br>)&KjEDUjytJYGZ^^PkE*6G4?3?K@-~$0Spj}_=5tr4Mjim^05vntB@Rkbn^~UGECP2 zz!3|h!5y>`Kn}_QFV?T7JDqfmiu_2G!1)lcG@sJCL%)jUlPRscC?^thQy;kQ%8m2~ z9YjPAr?6p?(jWc=<7OfNbWuYour2Na2RbfZ%5x~Vo>UYL5x582-2&Z3Y7Iew8|oWb zf6M7fTVz0`*%ORh%~Pk+k$XX8Nf(INK8ov5OF*sI2gKI&bTKNoqP9f&G#)T#Af>1D z3Sk50v0Q>F1Y7(7T&g~{PC)hq24hRY4Ptc++$sdG4*^S1Cb&+oru7JUcZLhrmUsXL zLWXw~aihE9v>jD01PNy9s9mJIMMf~_wC)PA3cyfcqL>0MH}>F|JO`JBC!xAI`S;2H zOKXr|<)vp+OLo8EBoq4Yx6EG%d6B>6B)i;5N#dVZ{_p=5hEAHzl(PEgO|yGHeBiBi z0&Qf=v{q~W3Z`hlKkwlTL%Yx4%INvIdQ3qg=I_-taC-okyDNqk6H6*oElM3QAR2%| zE9nghI@l`Vemx-lM9NPcvG)89)*8$8kO*A3sJR@0D?H=IVX>hRb5|Al}@U5bZu0d0TSB zDEsaw&$u|ZZzgx3OYCKI3z8fe#b`d~puTmuEGQnS*bT2C7*CV$? z1iG%5FI!koEsk_K@wokoVltL&Rg(wH4;mW&`*>00>LIMtPui@)7y2D(9=wnTLl+wcroDHybeTwz>Mm#ARIWwHJ^x|#9*@~WCu_O0`1|IFT z?6s~5oNMTX^74?0iLqIG!@FX^#@OE-9&qoDocwZV_WKCcLiOUJJHo};ho^UPQgzXs zjqINoop<#tc9^MLi8Buj5KEbtLcjl2cEh~z$5sn=S%f{}igH+f#>_lftLorT<*4%q zYvVPMI%E1Vj!}>6TNME5c`ppi?|~cuy`rQ^MW3W1K;>iRnEz;sCuwvvKDItumlgB5 z;)u3hfE(wDLx` z&lAyDarKwtv|)w5BURFhK`V+CWi>j=7s+X57)0-O-y*?m-r!Yj8tAEdlX?l&Df1xY z?5i3_6DA)84yU|uzHlwt=>;t1pWXC8)j8QTThNkq(DD<)TU+gEH3H>aT1*{}4X5@Z zZ}OtNV>dO&b&js@+T`y#1QdCq>~!Vj#``yS*iN0L>%%v*91H9>Xjv34=8n`VTQ?6C zL{uXbY;}K`dJFRpUib0-8+`5R_v*H8Q%1Mg8+#z}e|l4uu7 zTkAH!`itg5cyy}bQ*S_x&Gcraqq)45=zVD$`0*H4NqD^9HYc~3n)u&%mY5iu9OfIT z-!|Is#x9Xzbm?y`Mdd$PRgz3Pi|mIa50LyN>Gc!dOk!KdJEs>k^F+ffEDPqd_A~zu z+_e~&2N+IZU=X!F2&8wKo&uF#yMCJ)kdS|?A>IboNq=Dj7U__SwKVEE4-tcs>8v|{F42P#RY1^B8 zft>vP3F!%br@tnzl!muf1&r|S5ep0FY@RA|NVD_XVRu<2PU!>s779Z zDXBj(n?dN{k*Ocw~JrsYuE2SO9158ul!fI=RxQsAWaS$1mf0>1dg&sXJ8d1 zvOs;6RLykgGXSpA+}<7y{yIrdA|Urdj}~DoYoiq;~QOKe@7ME5$#CaMLKbt(Md-%@&W@MXwv~x$N<+c9>DRQ zOecp%@a)2XY`olP{2vFBW>*KahcZnBGUH_zf0Kn4&U5Hi$)&cS>SIlOGF%AOHZW>J z*MQMMd;-Qv7+GFe=Q9cP7*Z%$;4A=NtJ8`)OY)q-}Lb@ zc9oKpG}rkIxH}nnq3tm+Lt>aioxc2D=HFw|A^OpZbi@@yaQc^16OLduHESCBGs^T? zYVR7C7#;qv@e=vQ_-g0~yDo1= z+;=FiDpQrselp~&b!kSUI*HpF*`yA*(dkqzmhO8Qq1eDY^#Wy0$ zWzOU99u8x|9y348!eXw0XHE$eO$qSqNyn|xK6777fCR&upe@-}2PBjT{HafrJWygWQ^6Vi%*M6wMulRDO^z6MffrN|KO zb2-=z@jy>?A9Gy1P5euc8JaDpS}13Hi%YB$_RJW{xY#p#B<m!*5De!%C>{>1d$(T=swP{SZ-{&+_7V(P-A ziDFao$;WDweuw;nCiMnPcL~mT5_;ST#W)iZw+8hl6)inT_h!6f@`tEz1O9;&X8d0B zJgf5qic6ulcC2Fy3TpEx?VItQsUMmWQ8F7xg9!r-G;zHs8xmg)GbUeuPPXe&*>}VE zbAF=F#=9_=Zo>%lq{=&+t8mlVdwZGrf6f6-C-FQJ@Z_0U}ORB1s3%MP= z9NGoh&w8sa@{!y5lZ=cwt60GI-v>3W6te9;EB@ERE~%%jDU7(G@vgCqgieEz+2=bu zfBf>)y7Xjk&yG?+^$`>9nkPPI1U&ipQ!otUpI z=)onsb0_D?{BL@buQ|u%FPia<`R=Y;lk8C7D9nRiIj+i+>oSPa>p}T8XiJ`P$X}Jp zXAgnY#1R?fa1`Y;iB+qhMz93S_1bXmaL%ltnO0;XwCy{`pMOSy^$J*lj{pQ?!Zh4P zZ?B_RS49~BdG^klGz!aq_qsu_Q+k@+J{>&gHD;($i^4NmboQ>IfSv#+=3( zH&U5bW@W7-CYAip%%GLm0sjszs^RV3Gp^J{!iQ}dKArkS?Jqw}i$_ge!1w?24>m*p z^y_!uepv)V-`6*ovHs=jiOW})bSUKB^Y6N15TiY!A=IEhxPsLr24z(a@LMjUwuy(1 zZOL&t6x87!nuE6NVb~S zoUT9{hIa3zZJ&OFW=p`53b#M?PA2AJG3n$xtNQFYzL()GvXlW zjVd~A-*jw%M06V-zfc^xTAKU)4jKt{@tI)3I0$GZ{R$its>EO_xuF~PF_`%&OK0ST zE{7x9PSpOg?X=U*Z0ETKei0T}WZkw}C$g{)`8~Oc;?ZjFDXTx@BK(4}{lO<&KVQ7* zI@4A`iSK8+_``#rF>$^*KCSWoOuO=<2JFgecd=D+a<5jbSE%$w>B9U~ws^`Yf|+7n zJFu}+>Slb2h_KA^+D^2T?A*yEyYT0qArN#ZVi3YEi+=XV`YRFCyIYJI-w`sx3*!i$ zcOL@-$)Dbv7z!soo9T%-!)t$ z+BhUnG!P-Ma{+XiPtf32`OX=~eD1_%v;PF5)}Md&h%kjMJoWnQEe87H4kg&`e1zz5 zWBkk~*RO(G0WJ8ZZ*62fAF1qK?(_e!_uWxZool~iOk!e3M69TY4OD`lq6k>9U;zt= zf`UR6K?MN;VQ9vfAVut*5>V+y0jUFMC>8|ieTblm;;2d%ydApXb+}JuO2=E6?C!pLMG~GNMx{jePKg3c9?4;TBczPumT*FyJPmR&h=AO zfi-NB=Ec|CZcK(3M_+#qeiM0w9*~L8(|zFQ4r%E^C2yntkJl6&KED3xHUlAW<7~kD zeAjF;wDV`7q0L5A!R-;%vo*)@Tm&g5F9TLP2rtQ;g>**AvM*1+${)HJIT}B|9@@Ik z|6!+GTr*~y5w>EVG0yMSwqZ)VtYpUKA|?BJuF6^mu?y^ned{@mY+(GI6EO!8*~@pw z<}iN8e)%Ho{bFJ;Xn7zGA$zWR_tTT`zuJMksL;-I{mO|>J8jpVA_bS;E}TrVAD9J1 zxq(t>2GvPRv3J(#Du<;LRK81SAu5h;jU{8lEtWS$%Q z<#%FRvCF|RW{iSXOsoLq=sO(3$nKjB8Pj-ZTf8vTC!5+M=uyA%`%|a%>0Y>T_FWp? z%qfD1zyw;$Gg8bYc_{48OU8d;WpG#hg}eWGHy3Xc?Q1}5svBSdoDGWo`koeA>2P68 z5fd}JnGKPkVmPC|TGjrqv)J3+9kZyG7G-cX=lYJvXrlc%6_@}L_~iR-&#+E(5;p!cF~SZOg@@+fL@a@70Vl#!Y`YikjzO)P)c-ume&I?N_q+G9q{GOYWJ zMRBF7nin-RGGTM2_wwl-US|N;4#`@1cLr?>J0FQEm^Ur0em#{^rC8rC?YC+(Aqn{6 ziR@H5#kpxw!8Y9(9d)Z~vN5{`J~d@}cXAsUwg1bN66^Lyr!8wZX!|=C7U+QR>0~r%Em~nuYu@1>78V8}o;z-B4n?zv z*E9ZDhL*(2m}QV0IJV&8aVF~V`WS!U<@MoG<>5Xun!{BYKgcQ$L-htIGS}HK`Gnb! zxr}$$?Iw{Q{JrRpD_%o~P@l$>mjxG%v34Vf=Si%H4TivCpI()ZULVk^lO~tw#4lhF=V`!C;^M z>Dx{WR?l0*JmB4O$1BAk^C0ny|9<(urV#yNADO{?=UJ1+{z>-y`3c=d{%6#~|0$P& zjWl2>)U@6R8Bk5oDpG=ru@VT?<{`{3+HD#&cp*XOJYc-hxOq=ZtWA(Upqkd#Vkvo& zc|w;{qu7b08#J4u9fD5uZ~PAPU=|6V2!Zv;NsDD@!$)M%IqC-?m~J}>d+cJ8C=Dn# z$NV0Mw5bA|1G{motOUrX0FP5hL_}_cwu#@LQk+k>Ism1MuCA^_6R9;(5`m^`b7H4sptYmwTc&Xe7=|4gLe@^H^v%ZRW&7 z*eV9h&l4KAH>yUsc?f2hYv}m??lcSK-s%Q5Nl4qYPxqkcg&xoHw!_;S4*B6>VaBN3 zs4~ofM)YG^6PLs8eXs56ftosSHD_|umVdpt_x?kFW?6IAhunfAGdHy=foMBiiYW+&bGipWj2bo2cv2z!|*338S<%i0;bM z+1JK9-dV3_XegCXV`p&ra%!Jz8C7H_VMDPG-341}y{A#HF*nvGZ~0vLReCk{>B5@p z%WV!>)S#s6YSc^DH;vxBC`pF*ODdI{@nwbv^)wz%RdQ2xYoO;M4_tRyWw1j2U*xCg zlD1t69Mjx~iElo1!*Q?N-7TH!r&v9kA3XkKShg(`DLD|20n&l|*(ysyuh}|M+vVdW zTCdfPuz)IHaPNxRaF?K303GHv{xX_g(^Qu7Dlmnyu~`vcyuRefE{hsS)Vnh0s%>vl z@g8(DD#ttTmzS=4Zq#qx`)Z7LQqK?DtYM^fYT{yaL8yFpb z^v!*6Bm1K43pMAyiJXg!>1YAcLoe(`(_m49lzD<^%&XP$DBoc&SGLz?>(QFzB~3%Lys$3tN112l+)_mSuxjM zyp|h)D@7R8ctod&iP3`08tCT@v|4lEea!|0@G8~RwfnhIV_*N;F{+mn)L#88ZeGoX z4YVN=j{ZlEg3vU3xH<~p5%6t2maE7(`HSzNEWqxz9bG&!6V8&ga{G=QpDxYqGa{+#^CFS3sb_oVfniBnxUiF>7NcSDRBx07ZA0Yr&nvlF`VhRe&uHomhfur2gtU=yQL!=QD zlizaE(K^xD2hjQhdmBDx!^M>Yhsu=VBTp~Rc4%shE$eX7 z_BGQx(Nww+YVXnj`)@~1JfC2JeVERg1k+PBSK^N9z7u1)efzOtqg&;b%hx0wzh(uT z>h&ACEunB}zwc<4(rlM}JbO3QU~F99H0{HE#nv>z@#ppN&@SX8r1!N{_oUSJS>*bw zt6!=t8Tg4zR->W_RNR|*%yfx;=TRUrqgr=5KfKv*9dEEPykDm~P?)5MhtrJB=S{DS->)V>gnPoQOl*a4#_X8zoUv8dWfFo<4H4I#B^<(l(P93xvhH z6q^ifeVK>$qSL4S?=qzOYRAA z5$@&R^sWfL&t6gt0|Rn`B~o-v@W5`o7@9JxX73)s99BR`myOJ-mWKyBrUOi!>{DyQ zYTOn7D7|Qi+r3O&0(7tqM-daVpR;**>5bb|uW3O@UEQq6z>FYHA>rvS#_!G<0JrY&m_j{YsD79orC=F8ZJJUVBz2r#n$ZNDGtPqS!n0$FYnYk zOXwiZfBW*C2K#xlrgv|IXk9Idk6f<$EJ>s4S+Nr?HU5?W_I$~^KJ2Td`q4f1yphew zY+OK<;*Z?$!KdaeU@|Ya(S(3$FtMMTVv#r#l(7U3kaIGcA6*(3!}oc8@xe{44cI;` ze||cGhvN%_V^fzWv;tJ6vD!h)iN_Cc9Z|q3ppB(2-zJ|1mNy;y znb(mgkd_9hre2&V@Nw-m*=tvEa7miMEt7N0=UDbVndOrSPQ^Ys;fotJN4z`*FLxd0 z9(u`WTF>M(zDjL;#km==H)(Mz9%WZYu=+GHF`S@QsC06m7kDr&*$*=Cl0WRxaDOZ% z&BeR1NS4v8yK_m)1NF!TdL{C&E!ZqdP%9i_B0hfUrJY7tWZsD`3= zIvrcokq{z{6WJ3g_BR~bNvPNrL(av*WM)y*l_0cEw=7M;D~FI}nV7|qBdW&zRNN%=rM!K+<2>w}Tu zb)*WEOlEz?0(zk_>!S`si9O&HFH58Z0@14gc5@OAeT(D%Am6%N2Y3TnX2HG_pvpPn zEd=T%i4)LdBz8_1F)RL16Z5ub?p}?Xnz%cZvB!Xn7LjU%w%_B+$;wLCwfun644~uU z$n?1{ZZB87C{xk00`$Mnh((Dr7NvF7iQogg6KKS!@;FB=8b~!M49hnDR(wNmt9`m> zZC|Us!u||5<=zj!2ifzuA|L@=L+-6*@>1;P`v4NETfSK2EyR$+QqV=J_pSUta48xjR+C=>L*4)wao~e7_a~j zq$GhX1w4SFUcajoeJmL)c|Y3Sphu=`{E`;I2OWmF3R4styiTu5oA(;Cu9omP1Swew0mJ;F`W zAH_pFH=X(bJZLqZ9R~okPaDScsx%ca+NHzmp$L!^YkMQ_x}4a4G0R^&@!7@j0-Qq& zv4psDauIp+Fr!{o3&FfyFDzZev8{XlK3Zh~2uWw7?c2rhblarV88?;1PC!AkZ8{Qr z4il*3PO!zN)*U^R0+JqyXQt{^T3X&c;m4;JDTj+@&I^trz&&-JC6bQYa40WrJ;k`` zE^i#y6ur9F>V3#kISh&3Z8{xE}D?Db3)nHy)1*>A(jC5WA(Lfi#xKo0C3 zCa<4dAWH6kLh#h#y!OE`njf%9Od|ZOql&VND=axsweWf0>VUgrLX zs1N{tk2!ya03C4KlW{Qlz#X_A>pchvASQZ=(|byEH70ewSmVQJV=@dQo_^c;%jjv7 zMP(rJ)AmxGS+s zcupNb)4hqQO6$s!pU|_Bap#(6-`ujFf@Ru%pWgoi#GSs9#h&htHF$L#cyt!J;HR@- z!X079*tl7pQUn&O(eKQLssNnyi0XBz(~7C-qqkK732!GMhBX0IMDPr4I#g#PoBR)D zY;W~J)B6rXjKLe*AuS!9GMX2KQRv4-x`hkf%*{p$`<)&LWr$XSw4IPd6onO_2rmqhjMf6mS+{n2&r6GvzifY^M;g#gnk_U+HpJx-2R32R-s_qz z7<-n9J$k(6#pXE1*~3!Oz-a;@vIHJpi7Fo2jZ%QNj@)EKv;3Xrfr|sZy%Y&ZPoa5m zG`sn>PoA-ulyvBHk~i{0xLug;Jw9NnNn!&@k1P={__x0gE!V6%^<}jP!*#h)ikhph zy_80<{jHLLmN2r3v6I*SBrqD_8{wP;)oKenIsrG z2Tj11MhGxhj7HWY+9Yh;bR1ktW_}WF$emIU{#cJ4)D!T!=EX#0umr&|nxY$v|D`<4 zbwqsJ$Nrv(l=BA@8KkG%A!6}pA0#*%c-dIsbhx>MN_Z1-pQ1z0nK~=PRM_Jrg-6+) z+IZaKYi+NYS2Gt^OqBui2T+8KeyhqXNN>H?roK zAa6!(UYg~*w4U-kCmEC?3%go$RKQ;6(w%c{&(o zo>T2CCvE0!sFrC$@F&(tX{(Jo-wHpu9xaKrIZ64T)#H$YlN4Zxw-?+U z^`X_re;;)pCFQpzsp#&kAEmn|Sn?Rl*KMCJU}A)jW@0my0#u5h$N8}rBn_l(KFVl^ z>*S2OH!awg9JksQvtjyEr}Ugt>v^ZDFsQ}QKnWM}JkhE?5M!j0Vz|i9t0%Yy`tQRD zjc~j)-QWM{Cpc=iX=qSqhoWH`!4Jkq86W88jllE+mXNcGwRJ8$i9X?qo?%ke0Zt3W zdEu5ONFgwC&Y-@*h59ZKSjw-@uf_i0?!NoJ@jCkOH%bP8VO&Yzx>PZ>uA(#N92lN? z^BvfkIC!BZB3vZ5F(S7oJ~zNPx5Y(0RhGPPGlnjR#n&zVo)R(NL~e%YKe85SNbX(vqg;?Ybm;HSr39z$ zkEynBy(vbjBPcADk4<;+-|6=dn~kY3bkbM>^*N;Pic&hMQcMguV_w{#Cr8a8IJiqA zictY=m}aYUD1MCcA8sdWh1_cfdOA9pIA47CI5Qv9HK-2}{4Py}W3?lc+BeR0MkP0f zRW~SYttSjUmnH!G3x z=ahER!HSt##t^tA@!8;?=)k&sxw-Nkf~ybo0{?rFvegou84<>sBoI8tzZyA@a->0vK=2b%@>Mbq1;B2OV^Ts?tM0_ix zxnvP?MLW!*IQtKehUI`FH^Jank{G-L(uAUq-Jnw2t#tyaP?)HbPLKnLoJG?8;*j#9 zesBSymyLYp5!OrvQ>PT(=WF-Oa6r$Ywg&CZ@kPhMW~B;ic<0bsy=l?DD6@#uQJBhC zIdaT(DJlU-mPSl|^~D)I9NI)oCQ(!C_-#y9vnm#(!b4hYl(mzLb>zug@`BCMo75O(4y|w_~KH!usY#bT7~@yCkTXNg+9M zF5{5}ET>)!Wl8gG+e-JWMeHOT@|YbwFmXb*cYaWh-aWc zR2`l}rap;whO07n=hqNrxmA+N0_6Dx1GGrP5kv6VKie+Tj*s(NwB6uuN5(LJ!@5xH zHh_+xa=~sRP4)A_*UF#$2DqMsu!ZUB=)8`^6y+CRZDo|3ta!P`3@&to?WK5j3vy>L zfAm-Us48}l``{JvHcLxG$FB2tei=;pYCH+C$|qlq7TBsalso#_KPsd=cX!9gyg4Ez zFyf#yAs_g{eX{{u82Kyfk)KCK0%;MfiWXU7kaX&a9!_+3cX{Xco7-G5W)r6s(aLx( z67Yd7=-B<)ABTsc2+Ip6z7R1@p#&<|BgNqy;SaFmAeppd-r$1ChWhw4y!3UL zi|YLsQbC2*RGVA{t6YT~2sWYTH^ECzo6Ej1|9fU5rz-#O`~u@i9$t@{8_Er2e0zhb zT1KUtXo)28a3qVvj9&4k((L9T1!=}*ztF+nv=31yRuu=YVf~|Q*)=o8{@Ve@ckS0x zI{Rt8b`@Sriz^E7iKI1AaoUr6{_;srF#ye({A!faK zuMJH6A~k-fb{1N<5r6vvOtmXN;LwDdmjxc-4FB^hV9i@W_5++Xtu`=4kZ1(d*$8DZ z#y2(Z#UBQPip)06i|+0xA*dU%oZ%8;6^GzO!HbkfC;j-t;}}05vX4rGe18a?@Juu` zfSLU5&r^v?$3%h}3b5hI%o?XS0)K(PZ<5Pm#{eM%k()bi(;6QJ62VgWWCrj@$g>VEff_(&zP#C;;>i{9uO{wi#zZc3ODl)Q>zC^m-`*_6(Ygr_q zN$atb89)^ISBA2|aarFnyD3;8VwOm@=nuT29zbfZg#i2u9SbSU=kj7_!7zZj0F(`= z*=^GuV19l0Z<=3shSkRC)$$rQzhj(YZZ#!%r@yjgJj(GY0K_m8`r*r2jQ_sM7e@d_ zzxIWF@r6ypRT{(>#`ZyNrFW5e@%x%;er%o{{yLZuOP^-O`gL0~f8%~03df3BY{vT^ux(ZV8@*R$;$ts#Q3E#O;A5i0pf!FK}?L!oY(W1-(Y~}v5Fv*!AOJM=Iw)? zOF*djzp0p*9F8p*5jzoMT8}^K2{xOIG=LM2dKhov%Q%Ux`zhE^0i5_x9aQgP8~4^nwq9h^xXXs8!mlB#M!lx5qa zF)lw)nNPFJQUUn2VO&WjTyc{DedT|tH$MCoo2)X>U!^IcXfa z@c340EOD}`TKzt1StjOz*oT?|3a=*y9iAC^9Fq@*djU34(ME+OISGv)_s!oBmUCht&q*eNGO^|ffsbNwRk(sW;wXcOw4aI`K zkVpe++p2poXvGTy&=v!(j)JZ0nMf4w1YeC8?a~fBe=HM)<9}qV$lnPr10wokpM=+> zD%ee8pmw6YNythvWSe}FnqxIZ#C{>fpYs)a-D@0*rl&ij_r%U2BUm}IBU&qvOfUs7 zZ%CUj$_5mT!+gN7UAIlmMZPh8f-bhCuN@kORQj7 z17+J}fgdDQ4oy8@S4m6L!$Bl&ZY1#_^g?^IO|7=jv@FY33XS4xpKgp&sNnwqqYPt%CG@mOOR4N zzMtm!8FIqXt6mzGG?hRsJIKPZbe&lF=AyWlvy?Q64y=ddys5+ZJ}ajAUJ z3Y7sakRo~^rS)woq@5niS(7&0uA417F?e71G1?k6Si6!72C_YDQDHSML*nB;ZZ)DihZCP2p=mSA2&;_qqL zYg=|jLvivtGCbd~s9kliEDts%LEf!g3?Sc|q3KaXSO9rLkJQBCNa{)-5Tpqs^jIsQ%rKC30P*FM%&z;0Z1?GpNdpasA+Es1u?IR`Iw4Xd}9ZZk^ARP!U zQY08Ps}NOuqh9AuRYSW~hXq*NJ=Uu-jdgevw8c0^*;**xhnJ=VoZ`Un zc=vpZU^rPg2@bOTg)eQ_JHijYb4g+?y1gTjdx~Oz=?v5M_azB+r37g!w}ARjFsEjQ z+?re7o~kLZ9+*j0%;5lt$Rr%Ub_*Z5Wa|w!|vxQ!XBn|=b^(25Hl}ff_iKYJ$kddcNv4`tM zE;-^@`cm|(8@~9}BqA%Wg%aNw!fqnb$Vl$QW7m2@^Os2qKru1W_(I4j5Un9J%=RZ; zaS;wpzBNDVU29Cp*Nw(aL^Q!Piw9LTYAS3fW8>tIseX^Npr^US>=Q?w;DUyy4htmz zN2&5@w|r#2nuh3>v^$y_t99m8>&CD$qHZXdtjE2ZXFjE}bJ4$^Z~f9y3q}8y+a>h+ zOPh^%e|$tjhM{;T`5Ztsm_V#mkie@ta1+V7nPq96@wD;Ul^dzLm*PnNRuIvjm-qM> zb#{OO<}K{YS2x5Otub>yZr{_~-0iobD2i}+49hi6Fo)`RW~{@0`#ZOqrYC;G@;I%& z;j3bcs(V{S>tIHD1FJaF{IqK@G~{QYT4u5K=T~4t+#|yV$f zqA9|+bzhp312-8s;HcIFY=@=#HYts(H}8pS_YHRa(0)v2HMpJ z#BqQ>kA(KvH^qwQi(11!fm`8MNeBta7zk_1h6UX&+1{S5TMOG*KJS9ssO5k2+n~$y zhGR;Rw+EP{eYu`$$5IpsAeX}J{h|MT8wm|iRyodoEx|4xhMLAW3M%$Q-~5XGH#=d= zU5L#e{7#;WEO;g^7$8`O)Fk@6n>hBK7|@j1C9RSDHBiMg)dW*ML-~PUAwV2_u88(& z;#R>CwEJNbJsQjg1~jnD5+KeyvWf`CxOT1eW`_$V5he}b#?YBaR6IG6XnH!VVIlU> zs)PMC-!->bEM}d)kbwJmUCBukBd&d3dsX`P7Nv!`BCZpJ!DGv<~cR)^!E@| zKB`1`tY}C<#ZM;oBtGUGAMuUEIU(}b%NGma2AqSMRPV?a3sQ6e3OQ57DL0~*tW%zg zlIM}0dYzfsdo2MuRS2>mAc_nQycDYW+F;)aFEzY0XX~@7BE&v)p_-fQ-<@lUB|9Oh zfp!*4=OzOy^v!QL1HcznPFS#eTf+^ku5siuT^}SXewrtKV01{Dmy%7T|ElmJldQVAo9qeviQ~?nYNL4hX(r-CJk6 zrX)}xW)oYSKie*Ql4&M&N>pTHOOd96_Z=QEmrWi#3M7D6b8qw)WxOx#_H@+4cwUx7 zV|@rR%mQ7ygI7rnl+){3)6c?(KZAP0>UI!$Ije_Fiz~91g1HJ6o}w|>2Y#!#SlbzS zr0kQ(KmHvHv9kOmyuW;w6k*FzQgCiGs2AK4*Ku60>@og zXE2~m!1&^FDPBAd-hFASqi0TTXNtVhWHNvOR_C{a$d&(%OrifZg7yEdmHVH&@vrsq zf0H-$&)WFc{bT*eyc?K6!u8#7WZzX`eR}61Ztk;@(x(^CKNE0%`~xeuua;~Xzi@^D7sucdimX)9jDICn!0J`ud6P<+PM74{5sZ?8DmdRxnRZ{b*pxIpVPVg zL)v4UI$c;s(eZiu4QXl^w;EOT=0Nv?{Higm?+3qzUk^@H_-YVtI%CM-_0Jka2X7pl zFebzNj4al;K{)h(&Sk7>Im*ENhdqF4WF3Yd1p%}uz>$C{K3%VKLw~E3)8sj$$)+PWZhZvOIQmgNJvmznG{CcY$m=pNDUK_FZlaU5B9aw zzwPw#DIFfe1?iY3E26_F!wE=Ben?p`+Yj(4iDpUu_^f&-EX$<9C-)KQQwxM-L_h=# zH@rexnqt;4Otqq^owcpTI+j6OOr1v|47(xzAVV-Y(GKjEmkvZD4vft-6B&%8ge-t? zNtQne1s?26vLtFrY<}=uc2v_kjj2d;AxlCw{`Lgo3a|7y>4OtA!5rc?04i6fK=z9X z+1@bhWDzMvh0X2Tx4qayG9EpX{5-=hzyl)ev0y~2g3{2zQ+QP`DmV`?LYY)sp_YD?|XEi$&=SyC(u;O8?(RPfd8Y4M;`0zUP ztX_!qq(X8m+6hh7=lH0k@h6kO+}p?3gsGwJAvF$xp1Q5{q{xFIQgg#wvK!OHD%;5% zK^0*a%=r`Jj|`~HIe+b%Bw#KtxD&FWbCz{-MUh4|xY+>?Aku8YJw?$OSd_Xv;6jA4 zktvpLwYxi2$x_4qf6fREfD zf(Zw&N;U!SxT5Ho{AKCgFXFbn!XvA@ZIgEv@F(xSJ)na&4$oPhwB?D2&e+K(K{_-n zWQmpNls$%LL-Kd8JXS{kf@O@jw2V`AXn@X<2oPpFJ&WDEA}T+T2uY5RdnNJ+z8IcQ zdK~nd6Ug2sJF>~S5+TuOs2mRJ9|MzG04vt;d~e*vW0aM8ZBnT)4uP-oFz#N|Pe3jt z$)9$aX|a^AfB$(B<0=VKI&8-TlY$#qNu+cyGzUr&{vj8D+GK*#Po}|?D~HnfvOavN z>In0GUQ>(YTFOl@$4IBtoQO9`Pyhzqxg!$~KG##xPm(oyY5br!wHa&d{6h=e2c^R= zXJBxh-(i1R3IvwW;=Ub*P`~@teL!xt4AMIaHzmhVV=9EO*jg-`*aH?(qrkXjSg z-<A-0ubCH@&OI87htLln2JhH8&VE|$u&$x4Sye)z)_#!t0WkQ#HuB7^X8QY zm7-D39Lhe(H-{)8iM{#PZbM{fdpUCOp+d9v4BGkVOC*n z&_iIRli%xZ_XjeibgT~>z@g&sjuamV)V=atcR9D(_GuXY);j_^DODc&;=}oI>PVRL@Q!N0t(vgOH_f7>=pnYZzP@>5sf&z~E zqsbOl=S4auV_^iDs=9mzx_quL zw>fkao!2o-`Y_|My$fZ!JWeRD5QuiNMi730V zxTFPwTx_dFr6dYmuPWp>U3-Yvzf;QST=+&XY@OdVt?LzTb|o4{E-FzP<2gALeisA) zdeV!B>G-@ljjl#8kI>262Ipk6SgB{1Kyoa3rxM>>HK-$tKHP9|b2falUw+UcH3Mf^ zjh(?PUIdn4Png4P!Y;Ix1c>omctCp5V1|9j#rafNN@OFQYPyXyZ59m1?^1ki*H`l2 zW3=j7N`LV~9L-^Ly@9+aGhn-P)C8B3w+ow{UUx4-Bg0J=u*S(SBCJYg%$+-z%-EC^ zu_GQoM>epVC!;BA1~1*UT|#KlCS#8d{Xn6Nk|c7~CotzqCx)7xh4U*d*HriWW)7n0 zMIuYRw2xOr227l++wocxy-HPs6%vzju;UiyIniJ6_-2BC_jL@T?!T=i{eVSa_+-EO;lBLb&?|PmLwRFv!bvcELL)073EEb zbQ=JDr%JJ!AeWxNbfvZi*oK+ z3m<%-q9HU?vM=I+1Bzsr7=~#Exq9|GPzzxl=lWhiwpY}zPeG&vQxF378dF}Z7PBrg zLkquOfmkTgrfG&_4AFd~Bl#cpC)WpR(LlVep_P+&U7q}Yl=!) zgim}$Uw|hgg0x_v`YYUkaH0uwzus@ed~Mbc@JU=ob@hPIwG4%(&|x4>qKT4 zU>+C4z@99k+*`t+vv~%n*~rF-lSlV%AJP*&Nm@(fb938*ry1P2Jb-J$LUWYiTjMrt z?Wu*Yk0{7Mj5CPj((?eOY=Vlj4X{xTuCbmtoq8C|y#c?Nn(4C^&t|+<-#^LE_rc>? zhfR1#{GQlDS|q0pGi4Vr^_+soB}zUB}Ovf(&S z94N6jA&4YRrc(md&GIEHXS3LAGbex6_;qe4vpy671$b+8T5!Rhih0Vj@F>NbcEW|< zg=26WMwe@skjEAXw>v?_7o^Cbi%+-?m0%s=PFSYvH8OFc7?X++2XrwPa@V`Q&d`jG zyYX8bl0NT6s^56Os*`Rer4>-WLU{)$K`2Vi9o6MM=id~hDKxAN8pCzCuzL8NwqKp| zZGbGJ{o6m?>0^8nHmYEAdc#LfS6fNSgWdjAor5AW`S8c1&`O*T#?aE=KmO`*W{;CG z6mb*>K;?B38?BY^!>FhX!}l-igVT)@)iHIg)X={M-bNy9D1li_jP5ucBxIB#hZW7( zju#Mkjq1}<0fI+oze#S57Yw>T58@A4Ks_7eemOILoq910Qr&rUW&xkpiqOU(Mnx?p z3g|>)cp!o%Z=dXWA1vN`WudVnBNj!l6mc$bc9{$m>Gezsi#6CKCcjc zTAc0b)vMz>hwkSw>oy6DQ=3P27z$U}8ILZXwq;VQ78p{sPiBa%;rmc-Dq#4ihEO9@ z>Qtf!si~z9Oc+-=``X@d=xZeWgcO^BzWM3lsOO7P7Eo$qTqU8XwEoxgDn#ua$sHwH zpFV$145kJiQBfmGzC|_z#IoSMrCqOhFO1Nks)8o7TUaFH!GAhGbFiPS%sZY}oTK zEWD}=yAve})`4oWqIa^T0xwk^Z4Y-j7e68_PK~_(bip`x?=|9o&e2+*v*r3&s8kvR z%J!gO*JJ5PBRvcQyQZSg!0-Ze0h#o8=@*eEp3?0opduBo2RoGz8Y>LPA=gAvqbr)O zacQ$zn#@HeE88@JF1*H&Bd4yeP8`x3HH5~6?f4-o4&&}}AkUJkDMOEyNOn`?1No5D z0-0j8ehYwV5GA8zUVPX`k^Y3}Bd%{JrW;4RIOVj^QHwyPdg#kD3us#)76MWt^F-D&Yh8oSM#ic;u(S z$u5tHz~d-tU?l`uX1plC6tt-#``RzLidqJ2NEdG1nu0au3D$+DP(M&axIYaCDakWAgnqZ^F0X*87`o!#p~!atL6ExtY+6iaMJmG0G-ZJ zHX_YBd6h=(55$9$u{}Rmj>7Vs-GmFGDM4!d5(PVM8lDE-i%Ff4t$G)s$C$;n}rT zPohH;nzkjh$>0`meQV9qnPSA)vSgnK}u6e~ec z!x2O{n+b>xgV|cXizpjS#p3P*jI;_9VdsEqu!VAY=6QNau?W$fE(GQMQJL6m&s$xciO30xY&@+(Iq> z*Ll(yx4w-Q%t&FD+v!t`E|$gmF93rxOu2aVXQ3~xsf&1jq$2rP{w}*jJ-{T zfk3f_B~VHi72Xubft_U@k;bdzXA%|y z!ktLbj;XNQ?zujeb@9rrmd_>AZm08M%`=9j?%*$cwPQ%R5Sd36j5S7W{gzd-fl-lc z)InuIaqv`a%C=Y{6@SaErSzBeUR)ZoiqF_tS>tR0e(5cb5S#@Tk$EhkX4h8nA*)_6 zxq@*;kSx&KDrjtmAg&%enkHt^S6%w}4%Y(cGOOwph?@H&_Apn7zp)e348sFFGdLnr(_{XjSD8%xfzC8?-r_gM z;iWB)Kce?Ahc$W} z{_LD*T`WqrJ#s)5MbeSd1yqI6;NgcGhK&Ad&~L|yX3GBBZKxKuuiozOWdiLOZ`ZsQ zQ-9%shZ~gl$2S+QsG7x^di(eIV_p=jQbq2D_k<#qeT4c zc9wG28|J!Zv6Lq=KM8Bq|GVtrzX^%?Z*m#LrLO8GR~E|YbEJpCo16}OlXRzFQ5uXR7gQlJ{^$SrU>n= zT!zTF>!^5nl@INfRKJnbSCpCnIs=gYmR~;#r00^ze4GHr@TS0Ouxcm+k2cw>D z130ta;Dq*%dNo7PbqG1i?6LE;2@}`_A4CSkXkk4tV^^=(*fCd7*>y>3hvmoK)_1j%7 zmPI#Hnfg?-uh_y1q$NeoK9P!Vo->b4jAd)vn2>f|r~&4xM_C3|ir!-5ji7dkl777z5-9 zT;e#2Hb+^Z!yytb($e`zdNT9s_TZk1lX;ey7t$i4pxtnn_$DTyxhcOB6WGAm`|3+h zn2=41ZxF7F1i55Dr&eP}6J_!OW->5~rZ;Ch-mu~x3YI1E`Aw@4lH7Yy6S3p*if_5g)c} ztzm2^0V}^^4@<-YP&LOpxX|7e>{A^9O_3M`G!7b$h#h3DyW8>ty&urQ%OKZc0lMmj zYHMU7`?jc*3?51BBOkRse-l`5#L87N5V_>yQwfX|{4Q)_aiWDnRDpFm@cgL90^N>? zu$js3BHtD=$S&xU^cN=n?RV8m2EAIMn}Hhq@W87juA*MktcLmp6 zYUg5{CgE(Eh5|UTJ>Z+r3Dq0?fu-pK|BFCOq}h08P1p(!6-RgU7xIJ}$Sw|qJ|>h; zSXJ-G+O&?aQ05+}qp_dI>bw%|G#j?8+q-T-&Tz(*%I=4Tfc@92ssmq*quA>3;^2-X z&U@V+-!~=UP0U*)LDfjP3T+Ws)hdylpdyzW0*4r$PmtX)4*FrQo~vBYd^I6x)yGRn z%&rWMP`q1vLnk_nJAWr2&s^nR8od-}3q~tR@XO81I};2a!v3)Mwg0RkvR4h#T|WJr z{peM1%p1DxSFn!HXj2&$U~Su%H^gn|x!M)Y@&IKXlp>^>b@|dIaY3!CD|s(ME2(ye zg(t5=fR8lLxI{sewg|G=;YSRq2PbAVEK#H=DmZ>4? zkgCuPqQ8CF-`~GQjMaI>fg}2xTl-6UkNU7;YL8U3yW{_`ew>l+LYG<2vwh!eKbkf5 z@JEB!sP+-YfUWaTq`gJyirBI*=(w=LSpMd|vU~$VNK)OMKa_Ni;9=&NMp@pTH_t0qyXj^E;L>{@AE0+yT~% zwJr@Toz|bGsm3Bd|NN;WSN~gdFWEU3%Ccy4Sd(rFv#W6v(VhS?j^IxyS6M~IP}*6O zk_H6ZGs#T1PIBMn0`{h11(PwUyP&&Jh@s*^s94(64*G`v`4qv`=AZ`_yq^ZZY_rVD z?}X;|1!)7dU$eHw_97)dYm;5`6I|P>UwZR~gjDApqZtBIH`2fCy->THbv&cZ;Mcw^ zyfP0;RT4ff{Luia82Zq(9fd)vBuB=(dGqH#eYX!h*k%L!cQ0oKwYO9S50o`LA93eO z>&~8PZij4N-p9rgTjoaS0XsnhMY7UNC_Lsn<}|T}T#uwPX%li0ejR5EqCs(mk>db1 z-{;i{pjqO&32y|2P*NCvul0-d(6<``IFW7Va~8)bTK)O%6<(z%IlS@&*x?=voQ(l3 zkvoUes*87#;KM79CB?ps4Nq1&Ccz)|j{&7GQgX76NTCBhtsL;GVY&bUsLcknQ*TE! zfUN%jiksc9gtCrH;f0hHya&8j3^7bRKucS+-f5eh!`hkq1-8_xF_5$<___4FCvrRN zAwDFr3FJZ&cC=ERLP~++WSq*nqYE+BAPb?V{`wdPo=GR3H8x2*Oj*%!$SY(6D%;b_ z9b5}I;IvizpHd~#s!*FNF@XzTyYPGdk;i8Urrgo>F5qLuXqJeXiU%9 zd)JWkEtNf}W5SQS4&I7!_6RSawa>wAu6LhxZet1VpCnD(NyP|?v-~7*qXgQ=t2NxV z2}GEdgkLD4i%HrQX$K|Fu9NqmN0f5zC@5Y5Sf9c>H#LaP;h&rlKITGbI(}r(=6!j? zeoOTNRD&l$rxQ%ARf5u;$Yuf)HP{^J3l*SkC{D(+Aa#74{EI7gG$0iZe@7GLKa;A; zESho$MI^FolR>Qq`Ljhwk{1nxGK(jQxn;BS!NK+O<-5Qx{;0)`6eCVEeCusx1seJ? z*Z0JZ^*l!)!6rbuC0e_Y(JDpCN22^NJ{ZfNBtPUeBL=@XjZC)0EntS`p~`L&2!VZ< z^ToJQt_QZLxily%*qkf6uaweKIjNP zi1nt8y6;DyO4y7O^mxzm^R-8WTsa7@niU{k%J80uO{V{)F}QG1R6I6P@^HaPEeqT3 zdB^^%kc ziNu;ChCdO?G`W$lNMuQNA7Yy*dY)Y}c(eInmWI6n7yMM8M`gBXz!Q8OPVYAxdC*fN zE=a|$*&RmnOrWEZ*n7AQYJ~LAbHvb0KjQ8v7nG_z!pJDdii>aoQTQ!(r(wCw-AHX_ z%!X&69Hx?Ah_dHOxJ@9-%A4fh9SoeqJR6-J{)1jHw(|eZO7MRZ5aplC_-w`fySN1Y zc_{xpluviy{J*P_<)0<`&l3G-iT=k>_Wvc$v;VJOShvawDYw40pm~g;Ng#xVWK+QL zXmTcHarmGem|YnTNmM~P62_oCf_iZob)yIfAesoiye(glK&#NdLXeq4a2tt>sWl|! zBbgfby=2fpBgnJyC)pgOBT@?v1x84&D$yepYODaYt#c#4B-&+(3q}`^*7BKCKd=Jw zN7Z9O$U!t1R?))Z*I%?13DYM*m9ZB(JW;?EWMlDyDF~b*s0T`$J+IP8h)qL}sH-Gd z6=5{n{lU3pa|GNe0OAeL2&v;CpAJc?6mV&zcU$i)ZQja+Jnm9w(w|T434!P4G7$ob zx$=W$Q1z!{M6^&u7pz)@(3s^@sMr|Qj&19mNe+R~<%(Gm3FMrE-Zm9B0b+&XOhL4H zki;tO!x{M>iw8Gr+a>@h%tY&SyF3M|vk5*cKW>E8<*qpa3Qm+FMJc`LP$l;zpEwJc zILo!K%=NCXDl#`HZ!O$9npAI;ZLuo_7(gIoRHAW&PD6g`U40@ty=GHr}n z*9>yJiRQBHN^cAc4+Kzur4v}x+B)_Adi6qcBDn~z#RuCFPs9MF&LKy@3+wQ1Y$t^0%W}d6wEt*(QrkUM7wAKh-jjM!x^!9`RIdW=< zaEfGHL>p96iG?D$X{F>xAU>jrT}eXxzG)P#qu)Y`X5832kJXlZ3H-NgpphIT?1Y*> zrP7gfD zgBy477Fpc@aMZ)X!a?rce{6>Gs5rIN>XmnmYt-Xh@lN*=bM=L|XK+n7g0w3VO$U4D^uCW` zJc`5hEPb5GzzA4=PGxvU^Ou~)72-5Pmg5!MWI)mQLG2X$5D2c1bbn%EFo<~&2MVFC z@55+7vlng&UH80%pp@(!>p7Ud0OI6*#q)5zGT+YiWK6-*oaFl+ZimVhB%57g9+w}R zk@hT9?#Xc0u*m~czu$Jhx`!{q$7iP7uw?aA@@atS(6a!guY@-dp>Vvn^nmLHgyh6? z>4x4Ncv%JAQ8uqU&6zD*y{lB^c^EjZh4pH8P33rFnr|i-acNR4&6pK-oI?`G1_%eo z-5A!nu0~7s0U`0f;gJ!EVf4JI?dF6)m~ zmujWet7ajR^8_H=BODvK+Q*LqPmDbV*m_dB3ABz9X|Z#J#V6!HtMFKEqDMx+@UeY5 zI+xp2AS@^<9W`0$iN62MRz{xawhMIH+}zpIWCP;pMHdnN;U9dLR0Q8+A8e!~b?klz zPuzokl(zrk9#Uu`Tz&51G0mQV@;~x+A_Izh10yMji-|sVq+CtJFnlDsNV56e4G<4* zBXj$N#5cs$s@VO$9eOI(lb6-Y-X0RMH852E7@2^z^Mr`<(!1$edJ=cj)%1G)ya;nh z9Z0R}?3ja>YTT`1oms7ckDo0Y!V*e|p5w)z`%kN~R=p50R4NId(N*ifgJcZJv7FW^ z33}qWKCe2$_Fndt{#o3&43SmWx-Vt4>h>#T%iPq>rFg$Unif`c`IY-uwQn+-_Ayf=IIkcf#2HJ3i zVP@XG)_yvsP?g9zZP=r=vMm$ReeoTlNwu)Jfn*=d(b3+OO8_$TDI3FU0H=zW@qDs5 zcmu!<77cfW^B}3vkXS$`%n%B-1y@BPnECdupr`Bn*sYr3HE>eWu%Y2!R6);nLhO3p zf=W6_NL3q2++S2m8{;Ld6`{HI5t!#mQB&4zkn-qoBFMJqQtyD8>~A@g4Crc(VXWL0zcTBw&U->+TMvr80;Ok+7Re zf_MRdcz2i(2O{DI>xGEk7v7+_A_$gr-lst#Li0KHy^a0T74TfuVB5B_s7%k1R3Y^E ze#qNtO4)Y&S3=66JYR<$3iiN`^mW9v&;Y}oZ-g{1l}ZmX4DX1ingX7<0eQ^jlA7+^ zv7L;hH*G{62 z?IIz=9#dZls_^t_$^BVY@uUuL$dX1Q01>b~i9eXFzq}4Btr;39Z@hI`(4dg;eW86V z9GBy$tgK6I&-26)UB%Yt5(P{ad1n>`C*>V3b79gSf8X7RS&!XrF(#D5z%J56gWq!~bbe2DP@p+;I zj+Wy;Fty7pxBo^tC;wk}oBv>TpH)u(Aef)s4A%eQ-EbR-=BSKGIFdYNSU>0KiArkNs)nnxAvq zS859dzZ&JS1=I4A1l8yRvvK`d<*Nz7@5zrLs+a;QX4dVT6=My3zz$=83MN*M6ymTfo4tt}?%^?Rj1Wuv>&S;*F*)xvD za?Oq9Cc(Ctu9YbdoWI<4pl@>@rU8W46C6Yx3UF2Z-#LtNDt1e4%~OV+x1@fSbjdU; z{OS$3kO}z}1+q~F3UHLt{bN2ihPe4&_*vCX7Co#L1llxxbf*tyGS7yJD(GZWWC9{@ zBtp|^3NOL;%I^YBo5uuy{=Q}8t$!?~a)ko{44RX{_oDu}o(XXT!pFw5B_v~gRinW6o$Exu@%`7JuH^n2ry^oPnXuM6y!jEK< z8xE=H&8^UEmF{+BejrbLpvlCZG>&$VPwO(KK_v&T`oj)!8xqXW94OcPH6UgUkA#f* zU;kv}ZN>*V15te!#vS`QA{uZ}cnp`6T|~efN?kV%d&B(pITrsv9C`LJ4Cm&0eeEt)E*sP(C0mJwIXzxv< zsywr8VXP!&nN&=`zCja1qks}HsDNN91uCErdO?s<8Y2n@2q3*_tOzP92#6vW5OHr1 z6a=I{Wdx)VN~LcTTHSO3qzC!t+;!`m%J}ZD`|pl%Yn*W^l|oOUXrk{ylIj|CBq?eNSK?xq7B?{w&5n#@&Ix|ES7RB8;R35F1Rh0khr&1wQj-9 z+XSKMaAXw-H;UsYTKPH^V{Pie0FG(?3UZbl7Ypi#>20oFzh+mUe?yp8K6tO?#J2|9#VyklN9AC8GraZ6(y{7M?|;H->IS&X1)9b!YtV zet}-tW8hWMzWr2U+-rk;Z8f;w6-u0~aIupA?*sni+DrFJ4Ld0YgWLbn$UShZqNPT3 zwIho#A+K^bC0-()bFia;gT1B1VdeVU8@f4v2B?0qJc|V_RF2Gxh%eOp6~sC{ilB) zUH8P>1fccE%EJly@;jCHB)&Am&#;FPD6Y8gfjI!liot`XWUI7fwhM~I1xul@^&VRq=OY-p738j4yarb6h9EXkn zxcZL7*|W4e6q_@y1sqJA`zuU|bGqvxeBhEh@x%a&%VO$k5vIh;dpLWg{E{iosgWFU zZm<&D^Z@>^Jf?N;6M<>7G?LGe$=`kz9K3CZN1oX#i)Y~VA#F39D|f)_t7%Y5;>%D9 z-#k0|Xdp@tug-IJvqz}+il+b7=JBv=UJymx9)Csu8T<*&`vOBSUozm?fV;k8^z!I2Jbu=qEtv$HKA%Fn+~} zG^9Q^Y@dpl&ZhJUlQDbf8tCcM0GE$=_|HTa!SC`T>LxIM(CPpopsGFmht(a6QMKI* zC#!;P*cb(T-rZRAM+x_5cwsLgPIa2X8m=Fg*nL|a!xCFL-!UJej`+4x-w&k3i7~`sXvdrIuXxa(U&)&HKP%qAc z1!DFv6|Q2kuytDo-cty9Cxgymq)tC8)1W*U7bQT?5OFH9lkH_Vp;V4au z=nLRjcMOF$ElDw#y~trVOFPhbB+o719730A+@z7VY9TF~)_(KPzdS>;M}JrRZ8^MQ zN**u5^Y39+p5^hZATOq5Iz1vFl2}9`5Wg|?<`>43@Emx}Xce4*n@KY#`Zd7`=e>HMS7BzcVd0X zO(kmV=}^UyB_0?jt_*B=Iw(LRpX2_l+;-wXe^#?A1z`WSIVX#(E1>_nGO1xO`cf9Z zA3P+^1Ch(Pol6BCt+Xx2!HUnyTO`qC47)uS?~mm%dOVNVR*XQmjDH>{pX>4LY2Zyp z9om;8aLF{cF4dmtUxFCH?rslUT*W^XDmn$hp1b{$&ToUAL;sEn zmBYWGJHD?!Q(Bv;wPNYg#}Lza2GKlMlk^6iogDU&4yS<^vgA_OY=`m} zlG%vw$!9}_Jzu@gK}$~%`iz;exCDm18mF_+VbVE&7|26cKtQdUQ%hs1C$lbw*E{%q zaD<*#ep1MNs4$W5N}RiP)sinCRm2{w%u2vN=Mo$=G#}8s!Lar6$L%zyd+U#XK8u_1 z7*X9Gzke9TZ!ze7Cf!*Fp{ipu3|~Ao45Qa^o=rbDrX=U+?F+Scoww3gbrPtTD4~Xs zvR|IXHHl6(H8}4`%74v=z-t)xX|-PU`d{HIi8D5>%y5>u<$!mASO~Oqbq97)8EMUN zcVlufm5-r$;M_t+Z^N$}G(a4}DmxJOiXc((rjgbg4 z^8NbRj{w-b35Q{^u%-Seu1OhL2Dfl7)bA$TVI4L)iJJKa;E=6lNW1zeeekQ=^sEXA z<~k`)WiXZqNBI)jTu-U@6g>E^QiGWErke!@p6i!iUZSyb8A5o)z!1n8;dGSSv~lB| z;p#m&IpLHzPkTJmUEyepCV9drAPXA`V{jyHJ@UoF$2ugf2^sj2DNm@y0!?v;xKakj z!$#3Ab7+P3*S^AYh<5xD)_)3qs4V0pFXQaW5s691jW(Gfi>M2`xcr`@>Q1q{&Tmz_ z+s6@0No&j+`C&5Nzk$(s8A6u+Ks|n1IBgrCg*GxAnn8&l#yYDE+?9%exo{ahyvZvq z$i8I=3eNsBOYx?DXt0V;nfoVhzZ_Szj^J`c<|^0W7|X=>&lR6YxD#)m{v7{G0}h`I zWW9T$?fcMl$Kdz`pf-k*UNr1bh;$5ejg#K8?eG~^_xp0_%0rEsJ&Y_9J_rOEWR*v^6~gvJ+5R~&QSN@N>X>)XHAgmi z3=P_8TN`!pqGWU(rfYT3b) z1rerxXvgur;R|SZ?6ZCqL2F2<}eq{%C7hS?JpvA8}~BV?z&ANxzpYu zW>=K%63cUY%$JNq5Pezf_BUn^*tiT-?&#V+>)Id0e-?OEP==@;wMM$(9ZmF83j3}o zJw>f;)7g9*-}vLlRZ@uqKf;qi)d$g|ymeu-vD7%WPn!&$aSq{*)o>Jq<|4JSOuKGf zUHhtZYzJxIlpU9IXJEh(SAQ~J*RiIjEDf}%EfZa_>GaCC8tcWgGJwfYv}YcxSrX^F zUdI@Lkew3uGf1shNRUn1IhBdvREGa;=Bf#Ca{)?5h1xjWnN7!VH!Q029)vd_-(6v; zmdp&eu@R9c!`jl*r5bCut8$(q_V#>p_|X9Ct}d`NpZEk68(FtX8V1rk#{Jrl(TtfO z6CJJf+J9lyCnMWalLzlqPFN!yhjFz=Qtue7W#qxZ-(wLVtn#VtU~kd|Wk9uXj**1B zX$>A7%4#k}0#Jx4Qd&onaXN~`l%^m&vM?l5gN7wvI4p}eTsabiGos?$`F z*Lkb*?5!89#7;Xyo04KoT&EC@B7Fm$b<6J4AzwJl#v!Hs`pLl2>)o;6=OxJWtD$m$ zRD8z68QOK9GPpJg$F#Ntj$T}1xZ@}5x>0lmnwhbzfs+T)G$uaz;fd_KZ%I7Kdts=# znYwbBDiStzsT8Z2;9+n3Elm* zse`Z?>Y!s4zE~-jIL5?QU_#M}a=t?8B$kbit`!$6&Dll~+&@Pu-Y||?QHvKM&l&_{ z1FbC7Q`~%>Vw0n~&9!AEix=(?0U)>45lHSz+I(;JvVTWg|dDkgLxUN=)W64t3zHDX1um%T#Qp zWD7usC|fKV(Gra?ow2lW6FZx29G--qvOR$>l(noWiCBzg<7}5Kv$T<9vqMjbN1o#4 z>D<&I8~ZaYm|<&0`&_Qep}F{m4P0JABigGkMkiCaC!`bi;a?yzUj=Uh9LBC(RXn>f zpvoSriD{2oIa7o=#+3#;X*{W&@HrPR7)FY87ac{V+)330e#6mq*I}s3o{UEv13^Eb z9cy~-iy|II2leOyi{5dYSx?4%6dUqnf%3%Tm+JyLiO0i=R^_%3I%a^u-idyz(pii9 zB-vWit8)y-it+v9@!A-%q^BFENY|vrRB-7EG|Fgq*9c7YDQCA6vDlFccR_7Z2x?ju%7S3)lO9ie}a_vG?tJ2`WyF zIV&?(X7ukpZ{=KtX< z*Vjf@w~S9X;oXu(T9cEVDS*|-F!!S(*6Po?@SLG`Cc)G>=ELDvUNcxi0iXS~l3bD6 zHseYAR~%N=3LbM{OP>w(1)r^n@zP<7U9s7&bw={bRhhAB8&RzG?=!|jma^3KK^6)} zZIf0rf@`~<#|PP(gUPOm<+?^pzElyY z+-K}wFZRO$sAzfrI4*V>mJa`X3m~gt1aVuROGl(EuitqYvI>_%FHA;{`$BBML1!%) zj_Vk;(Gszs3y)+!hs$O&Gy@S?ywc^4D~~fVFhSX+4%?A1ng^9Ly1v3$5Z%XBQMLkI z-Mu|vLKcU^kVjFJ%L%b^T*9M^>&KrbENSXi@8(m9B) zX^@UPWu}QSwbuykz>lGo6rRAx55sjWd~7RXytAHanT5-j-dHCpnoSw~-i4z#q=t^8 z>@9bh2NizH{R`Sy_`x`LNU}x2*<*6sfQa#`o+U z4FP&v#-9MlosNGhM?sbjDy++93OJ2T&o0#aThY0ag5* z%yz+ZNqkE!V$hgEDq$6_<|Ti81w%20jPALhi`{`}M?dby6`|!4?_@lQzf?7sjBnHq zGM;r^raLiEigUR(aPn6{{YM+ZzI|(<96*cxT3#>qZ^4`Ue zT6K}wo{khMnaT z(pxC=yHgY7O3qKMt2g)V@?8;2_jB1poCB;cLxpiefyR?vAi5t*M~*XVghcV?;~4wl zJE%$H8Jva$ksAd=BGk~r8P z8Y9d`mgu_q{bJ#7Gk?SB7x-eC;a)>l$0YU%j{4EBS>Qk_gl@?LN!Epq}uaxs@5M}!)=aeOCqc-b&Gzkohne&kxi)6 z{D{%kjGLPiy(S0ovr_tKO;&Sb=&aF_&XBgy0KDKbRQq;^uZ!0!w((=QPQ@?$F6$tw zn&(K-s(r{~@(k6cp5nm#!+zAP;W(c?ubU2`1rxw1|DT_1&@?_T&6BrA3e5kameme`SX#>i{)>-7L3*1x_9qhiw4Tzz09U&1qdox*4k^j zbpe7I?0Yiz+mE}Hj8hTx1#ev^@)5eD$?Zc=ap|-5+h`d*Re;Sk zT}N~Yzt>D|+k_|fr~4T?Rx>{p&9n}s3+=8i^1~Tg^lq_y$+=PtcOr$OIHI2<)yvo| z^5gbHlWr!e6uTq>9e&2wY~*9l;D;Fd88^-)UE490$?xD^tvz!hINYRycBKxO4JwZg z6&vXz%etIdVRH7Y1BMTRA1=M~-tsFuUS)i>v}m$<&B=V@jxWB~rG~K#1!ee^+j541 zPfN4zYlXzk=C-0Cv+KB3Kf=Y}iW6#z>+r+&-?*8ByK)Od5p>3d^Vekb(usE6NeETQ zZsQg&vm5*!KC}56*}Z3<_{7b?snu{SDgIoGu1;{clV!>QMo;MW&XnhU zdN^z7uus|^;K~LvUglTchMqLr0hw5!(QR9)67N)UzE(XoIrNERtTQcT-z#t$o#nZf zTJd#0K!)Z7qDR zypd}FUdO!9K!I-8;m|T5)4%9rg?H^EjaFrJoosGcSE8hrt+j`BkH0ezlcnvYbB|UO ze(BT*uv+akyC$2Ol4W;0X$6`zWkSevmXIv;hJAPXhKHRjgZtoN50$e{k^iVh=R`g5L~%bQ2~+kNa3QD{nqL#F&1j zkNF^2Q7ZuQpQkf@GjP0hYO;f{{Y>{cUd3R=^JaU9k_a4b<921WjF|6l;EDs`8}8>w z=^F%3tPBPIR?p*ou1>^w3!Dh;LEj%Y<%cV4u=dt0+j)qyHJY9Yzeh!BwT9RH-}9EU%E~`Hw>JE?{Z9SF4AC>(6Vk(EYhFlHt5sBUsV(5 z(+VxZt-lqPg#PpzzxK%hL0Pz68g?z3HDZ45TrBvW>}Xll8?D0%trs|o;^^mlR7FSh&A>K+bW(qYXMg_GqFis@9<2eIoLHeBmgGiRXMvt1Sn?#pb`K_KVQ6O~UncyZ^|6jFz>`h(k+Uvqnt#5U z*pt;;{&$s%Bvkiu?AXlgDyD5XP!zZqpS)^Z_l_1J6$Nh?G&;<+$>@cRj@yJU^1HBF zO~19<4Wo@^avM%wL<+oBvJdsGJ~6Vf+;egBHj&sKrM?Qibf(KL7R&_Ot$Qy9zD{uO z>p$C`_eISjFw=++SR+w-L^N{;2iHkeDzyWKRB>&2n9^s5>?;Ud3nbgBUK;Ez9Q*k@ z_ge7e#fA`~`-Ecp#vJ;vu;yUTJWF0`;*zGfxBGi2q0Vk^RrnQzg!6DBJW3Xo&D}mt zl!PV~%$n(`c}RxbqO-Mv=GK^j^(G&;^22Cc+zl#m*3Na1L^E`B0Gb4y<=Ag@0$W(L z0&zd0ntSRC$1}N{&&dZTzzsRIJG;~THYbe;xlHI=G4SE+HEN$>eoY_%AP4V68_NX`s!6)7!Z9a`h6 z!`SqKruOAPpAV|qBP`UrZF+YiU@qaKvvAy1QF>ztT}9-{5Hdg*PRr;ZiT+v30w9YqV;*;f<|N)Sk2& zj52SfhEh!#i{)NS_G~YTu7A_5nwE>I@?ZTP@Q+|*DwX81+5V%ulKti9i?DTWBkcv> ztso_e?uIq?j!(s_E{!+??DZrF#*L=$RxI$3M9=Df-s(+t=)IH2#3%lmSmp?PM74qo z>;&Dk!_TbgD@5m5dAgz@ZPBqV1>bUM|YQn-8}t1Y7n97&un7tw0kvD5+A~ z4!?UA5BcLmL?syVhCzty&TPd+JiY?C*bcCd)4DZ0w%i1kGp212_W@aV3qFrsCOx}H z2Ut{Yxyw4NF%@)^)toeqcGKYfH=G)Hwn7l^U^`ANGCCm~-aoIrbj{|;k6^vrj+{aC zHJ!s~V|!fdCd+4qJx$d%OP4OaC8Z&@&cqf-LzkuNPxqu>=z0O?$yKE6I{Dx;T?81e z##LiGQ1Pf=&X-G% z(9v5(a09bx1u(ZwnKr{i#lTEIR=fE}iJLu22kw28v?#ghO2wijjf2-Ml0-W|nYmZTSZntU>S6TPeBvpThLXULnFYWtg zP?&F>ulB4$1en}YSK6cK*P?FM>|x%e`lGr3n+?rBBuGDnMtT)vfYTIMK6ei zXHr3WVy>&_`BmO^Zmqx*#7vrQQbIica6(r&qV1^I3_!Z*9lo`?c4h8`%*W6-Le%b+ zGb^_2_xx@IT3&i});=#M?znZn9f8lVcja#X>FH(r^`B1U+@#$J ztua;5s*@T&+T?|#$j&?%<~mO64#LWt(A&NXY5EzT1P*-%RoRmaI&Y|*-o^E$WJdzx zG|PS3p;_5zW1RL7t)t_cxQZKp43RT3cfe0m0hO!L9i6p>W*3&|4JRrGY;uK5=qbcK zG4$u&UEYAE6wyAUBiNBM@Z2B-_YllAooov~BOw5gtR@0Sta!qX9Y>^=NOAh&=~;$? zmH2b=gTeHEgi9ivmG0)*STPRh&NB00L^^&Xm)6lxD7utqLTaH(HBMyBw^`{+=lge} zi12xJR2!Xzrj^~4TzuD2E20Xuo(fuV{a3Y$XPOROH zAIdG8f}(n0!Q;RxDo05E1x3IrJFaiIq53<_v&knB*6c>1)^T*#j1|X+|0dJGwc)24 z^^5V|cb+)9%EkMR48UfV` z7~EHiQs2{zM>BLg@?7kb*bAK0M4YIBAJZLl{T80d_IXWKrJlv@NjAz|rn5ive7{&@ zW3q3pN}9EQpi)#$fB6+9+_EidT^jO+YF2j`930_mp&v~7(^kvYewG(Hl%{j(7N z%30dUj?L29pKilI4HF(stBn=BmqYHU&o(d&q%1Ae(V~ji{E-U8Js>*(F~*}GvC6jc z|Ir5rDRJGYjmnH{`{p>aKt?;$*NU)452(Jt-8#XGz73ID#>p6$v2knN@Xzbtd) zTnY<-h|zH#1G6>AgQ<~)PWJc&ZsaYdo;7(bjN^iDZaB5dtObTrIbV7bC|oW)YmL#MDojL-4C`PRWP6gB#{&B_wL&z1|%zT!4isEas zPdKgp6j~7i6jrG(Q^#x7ar_6>>)XE<&MqgxyZ6@jAw5;^z5A}okdb5E{fxQ71#u@4 zwClZdRnDnYg#OpnM6YE=w-f`j^OeCiybo%FQ)IS$zZP1MXpe;`tfg6;2@gG!DSBRK zdRf}1@S7-GuVA1p4v{mjUxkmJv+Ux%!H4(4G*_p2RS34FR%#L`cEoXXNl= zuC)S>B<;0E)(leEO7^WzKD?r>LxJ0g!=`|eGqI&hAHrd?@7K@0+%t?HllQojTq0_P zxJHN5GtOvP_*9{TNA|Y^-Z>Sz&lEj$u4vs;#zGWM&4KC6SB5E#VQTX1Op3Qy%%`Z3uOdx$#s$ zjMNt7Z+v4_R)T1*I-iC|V-cL4(*(XyV&C$jYsSVPF`eY-T-J4eJ5cLMgx>Z1d*qjL zob_-ZtGNS12f;VHz&k$ZSgMcO_cW1iEf0axLF8faM{uyRgDXKu067=Gaq zXoEN`%x~KAcmbHTG$3&UAQN%QpPWN}R@!gVu#H=a0|7QhJq$NK=G?K;b2#Vkkf4-4!(O=(t@4W=%*Tl%=L7!UTn{{U0 z*&nSh(kh;@o86EV*e-G2%1cg6U=xo2@LC{=p0Dp8gv zaS+to)!p{QDz`qXe#aJVKQ4-$p6tjrl$qGhZ3mhqYxY9qkEC^gZALqAEh+^!M6+#Y z%J0lxmXx@;4=B`m3L?aoG&sWKf6A56q;O-)};XyaGK?K-FBxSu@Q> zA(9f4wruKBb+8>-NOaQj4;+;egeH3=0Wk1yS5^m(XP{*MM4`6crlxM(xK+Q|i(`|q zzod68Ig@kfLV9j@-)QD1>p$N(C`?WbVg4S*qHR?c+9vYO;G?bMDkpAP7)Ehgg8Q|m zdgtiA&99eB{H@n4+D)>NsK%eyY*XTL>K&+v$f#E~z756=$ImN2`|3+V@WUYaYXwff zhzq#Fz}>mxqdRwP$8Ou%Q*PR! zX@Pa-PVI%10HQpNI#rF*XQ^`0th+y2a2n0gb_hkm$7;Q9C_DCGJ|%1#$gh|fUn}W` zmijSBaicZ%980oW#-muzVImonXmM$|AFaxImi*-8d)1oLv$|VCg0?A+sw*B!O3}G@ zEqyDZU|#@87M`N};3nP`4gJMD@I4_&heK;Ve}&_>xI`%qbV6I?bxkKu5%yjE^kY)8 zB_)xTFOa&6B&l<2$#7P?ZQ9F`@#@#i6M*ziss<_gemn^t$o5{H%7MOi$$;fm@3fLG zjdpLptUd#hcJh`VJ0bJ-zvX3C;E? zLr<^G36mf7;*I-}3nehQj<}s{GAGo)EJWW%MYiKb{cFtEjCSI;FUvCa54)Gr^{mOn zHZD!N74*VReq7j6eM~+%xtxIZbus_YztW1@pi__(8-l_$?fF|@OGw-~#ukT77r|*( z^!6B0sh|N`34h99#RI6CwsSr}2?qYIBo{4Pi_|23^BG0kUy3GL8fn8wI;juy;^1_` z6eOeom64|BP;k+TUAyP7qDm3Xg=yj&JRP)S{(~Q_FSXotaZBN3$5#j~PCg)|s$gm6 z)lUz9amG{8b_2}=Z z6kx$8Dar3`mJ?4ngjW;e=4vrrmw6Mpg5tW0lnE=#*}M~^h zf7U3i>Qj`W)Ud?ne)m`W;!Yg*5JZQ>#a&9EiKtz=w!`fR_$?2cW?Dh4tXZ}{-FP;# z1!}5|#ywo3Dt$GVsSF>dN;rqtceFLip8^Qe3St1A06;2)uKUL_Czl;Tz%=d%*%~K{ z>h2tn>w?Onb`U+p>-0FlfPb_4akWP9Q8g$7*lt=$@4{VRE*UW0|GpQbMHTcdeI!0GasKjpTf zR#_W_SlM9|G;OM*LrREv(;sZAjsVb)KKD`$KpBlr(~92s2HR&8UoKDyO4^6MU95-ZpCuFv*T}t9fIj%zo4 z60i2Wno${v$3vKbTagrLp!txHR!NID`b=988BT0p`-?cDs zdzNNbM4@lbNnlVRV5uk9Xy}@ks)$%YAQf({$XREHW*}(T=LKX|HRg|L6_{e=&oy^A zj|sWC7A^`ITJ?|DT0F}+clIo*k6nG9{a=Mto8v$$C!t`eH)_4?0$hR>dj9LX8vYig zp5_5@TqO)jaoaHSc6(WHWg z!F7Fi%6i+-+E%tUZgB7GrNn|Qa9wvcD3jJ((6;9eQVHeluog+`Gu-XIY0a?Y)LaF0 zGFPkuQBifm?lzceg0bljAgV}ijs*j{LeLE^oW{w3yF$X`w59c&>WC|jU*w{B9koX> zCxtck#YHO?NZeUfJS4L5-)R{eFE28Fj*T-?EGR|y)5raiRh{0J&|c&9crKNWfUAzi zT=q?QFc)#{>d#~lh(Wd%eEyg%*RnAH?fPbCmPXCEwyk-O6QI-8c-7V3QO;&r%^v$J z50hmD^`<{$Ve0Wm<4Ai5QCZ5cI zwg0%9I9{s6avc0Er$`QaIQew;Q|epnt~(S<+K$vr1xYgk@A)=KGp{wEo)|DmMt7rz zd<>o3Xj8U7`+8^fW`{a1xWZdYB|%8Iw>L3{FWSoFjog1ZH*HOPwe_+1Dz;h z>dZg;b<2i$I44@wx8g}Ve+~Hih1f9S#kBX^EZhjkgT)7u88XL7mZ@9km3@n|So{&> za&K08(>R4u*}b1_+-_q?Ot`|y_6^Ff{hNnQST0m>MWPUM{oIF#bR{I5cMmIG93R4U z&2677**?;G04RJN2z&bM%5oIoIRa6xWO#bsPMo+0E9)7nB|o?^$e`+RKSj-*jWXk=mHF>1_5dkCzx# z`VO9q3m7kZ^>Ftw_o;zRhsLpPOd-?8Jg}W`rdhnq=bos#uc{c-a*AxW5E!w2rOE4- z5@G=#|F||xKVMPtaN5gGj6wd!Vwejio%1xW2~Ttu?+PM8cl3FZ|7w&@55VfkfJm%| z-sNY;2v||QAo}}KCNF9-j4&LS=809?%!e07rMfVF@O)u_62g#};bqR@TBN!HK)ve0M9DAn07E>+cItE42^ z=!6Yw|Cw+t>gl*mWBse!*Ih%1NVP^?cg@|zajzAy_ixCyvZ_zp`)uGY@HVTbx@L7i zVlG=3Vz6p5s^v(Ij>(E`Etn;>pd9oWvh%F)va!6*Wx*`LoN~xsZf<|GEjgFmb9U^4I|@k6u1JN+o(d zAAI#}1A74s#=6d_7!;qk5|&&ozM7c3GNb0r)x=XrT0w!nnxn#H!sYvZz}~MDJ%5)( z994E}YY&aNXZg(t_!FPOzY2AX=M_U*@B#UIoap*WQ-=W^w}?|-NK z@R#q<2?ky^Z70W-y=c0|f7#U#y?6-?O>__eE>6sR$NQswPQYN5{d_^qi0(c3rzKCBx+V(dUIsoPnrm&r!vn0j#%EY<=r`gS(h9D7*J_OKa|J z@wkzT+{$zP5$6qJ%nsBAQW9rc!Q(V2{kDYHSA8Yl#H#kc=4yDbCEQ|DQU;c^^c%DsdQr;Vmpn0}bCj>~zks6EJAcUf< zw_Hn*hEOq#k$%@VCPzFs6&g)Mr1>ZAo`?p`LK=`@nbLaLg)ED82>7oB3uz!=+G?A8 zMbs2~uKKVoiW`b=-J1)5ykuw}4#=bMPwk=wF2E_!#wY=>sy&Hk@aMHV?o}48Xl=u* zHN9(pmSQ1~KR7;4lK+K%$=!9Z_b{NYl<0MFH_o2LYVJ>WLUcf#`EcqS_c(*qYz5?H1d&`t9k5*(dI+$Zp|qsxvd`Je!FWe4ya z@axDl3g>L`7)DmYSrTRmyva^`qKb&j3B?DHCuuceJ$xtJu?O*Xc`X2xRcg*=s+el- z%fZ7>64|0v>n>ccOBi3hD6V~O(A(67;@BJn;4l!`63a7>y^vD}1QCuTd9-{#(v*2N zo}`tFW-}?4>iCo4oK=vmX=)580Ml1c+O+jD>9NuE_cgA2aZln*>Jcw0#0=~qfam*K z%kvG*gINpJ_EJTQ#zHy6AG6aiqQoLH^}AC$p_@f z5UH!;dZ;$jPvqK|-%d>5%o^k4GI3I5P=y*q@YuUgze}LiDp?m>=FQ$Fc;4De|8Pmf(#|L1dHOWY@ATr@wUh zMVs;C9s&E)2kNQ0lPOD@nP!Qg%ITr~%d>kSvk2$DbG5qtVKNkqJ;yRkljbeZ+ObPg zm`BGY*FMuW5tb0DA$)xGepa?7K2OK!T66U_FYw_LMO&ctQOCN9aIm5h%f~<^&p{O3 z+8r|F9g$hJ#`WRHF9zvO#7s@;rvBz;^p;dg?$69aIC3DZF=L*kW>^OU7QHR>P$e4N zeSyK81DeS)5QbtPqsV$x&kdbqnwj)b;vJ?O@XCOC)2-e7CagFFo%aak3lHg*_9uUm zHMG@rJI-O(o?X+%BgkO)A8Xr!{AA*p2WKJS427+|V|Jdk=7Mct-&|q`Cp&&n(|a(6 z>I^aU3=b6@VZ^Dq@`KeVDz7OVY|A$relqT3Q9o{T;K0=;*RZY^1C#J~QZ)7gxliCz z*x_+tS-~EhH6uD2nccu&$&`2l2(iNU~7} zdKGS*usbm;lN0(Wt)0j>VRW3&ae$$`z#YCRhAfYzIvZ3%9V zSUXSi75$jehjUv`A)U!ku`mLt$86F+J1%V+mragEt~>tOm7D;|!!U#K(D$Fm3nz!5 zyKp%~PkYG`5oX|UcOl0r4L67Fzmgd%YP=Pbso?%lrk0WXYQL%>sM1bSYf)Q%%1_14e;5=6LeO^M=6vv9s1@+NGXTp*BVJtjsn%bIGGp z7+x<%Gyynr&>+mH_nyAyro69ey7HaLB-b+j24k}_XlcafR#y8U_4(w5)Y#`#sZnPx zDCMRfl8ef)a>J@)Lrk+R<>v))pX>>(l#v$KG?f}5K@((Rm7%4L^xgL;_QUx2PXY98 zQiiO4v3=ycePtN_YowDfuOMw6O}&Y00c-FYUtV;?kqbW*keje~R>{Dslk#PG1{i^7 z9b5-UOW}nXftQCYE~Ao4o$%#Uq*p2~&-HMz!BrAoLU!eSL%b4T;^rH^%{#R;?)qI} zdY$Q#8OblqHaHi&MPa$&GDq2da|iT(WrWIVH8@XF^6jk)=oZzTkq2GNa@*niqK`%^W;8fL*L<5K*Mf*2pr;-2UpdJfqcB|^choyk z8jCD!eBLTVPa{XMYTexCL4D7b;GBUSGoe$lmjO26Sa z)T$#0YDY6a$cD;?vIadJSNrrEDuR*M?BmTu&U=fjio^j}?mHb^Z1}gFEec`dO?>o0;R#e?V)nfiIl$VcYC>Ac<{-g&& zir3k2yH7R%-9DbKVQ4EYU$k3CtV{zESS`wI27Kp^@vw|!&Oll{Wctg>y!;AZ#-B@% zHJaqb)DD<7o7NJ6ri*$ut!vgs!8wR`#BKZa6U~Btzf+Wu`TW8E7+!xA%WJDl+k^5& zP6VS06I9!eV^UP%dm^WmCtKW*jtS&?&Hc~-*KUiIiIbBVN8(lXc*;nYVcm<^@20Y*QE|lFZjgO0}jbT?6BdyRn{(mQt6<8&wlDu7OP?~-aJ>O;k0QrdKJZIX(&O= zul5scsBFzSCw#f3Zp!zhF#YNK(i#scuOC@z-uCb(Q2xrmyKb)8FX>L(qbrSGj@6!q zVMak8C}W6DCC;PzpR$&WD}?n0{_vst?z`Tf6c1{rcUs~4igo$OIkl$BLXEr{Q z8ea|fRk6g6TUcZPb|_DH8ig4xd`--+Zec!d1RQ%BFQ+j>aUxDOgJYXYAfp~eD6G<* zL=G8654E)W7Wom^cSjp9N54Uf6^-~ThVD3Oa!6=puW}Z{$|DCbRv4b-W-E$KEZfum zm%ef59`lRYc+8KQAW=Eg6YP!GVgUO7dMX;rj@_U(jB(Wgoh9DBzsav}%9+P7sx%Wl zbfe0YotzICREj&l{Tes83{}@Pv4#~(8KYnHy~f3e^oi$uF@|M$^oVA8S(@bKe&o(F z`ZRQ*0M^F{^h;68Up;Tku9l>lhri&8PxlzeVsg|#sKSg6?4E(H`fClb;GsQnH~PEH z{Uf^W(AdbL6t1rDBZ4DGUPkm#1q8{=proRtlt@v?KwH5s^kjS44!}zwUuR}&=akxp zFuGbzp&YUj9dHyU9w1yk7zc)@G~dNUcK?OGk!9vnhcE{_FjBd-`ikH4UMe)Xv`G*0 z)hN>bZEUFGo-lJ#=!L1^H&(yW!Z%`p!+ZVetr?PhfF+m1TOjt7m?M0p( zvUgCl-Z}==EdawR-%;kRb$=fcrGMSnO`5cKDTih$Bw=#OjfdA_jCMP>MRadS*17MW zzummGhYvc2rb9(=!E^w~#17kFc8kN-pk~~sE@Ypl3JZS2i_s@Rp^I(BM9&&(zN$3( zQo1lP^iGH4*SpQ^*uX1y2a`|^r0=rn%w)k21=m_Gez>7|FtHS{pV{ScEy>9?=kDaR}+Iga%`N~jm7 z=^V>JWG#!ttWg1~W);vk#FmQqnDlKDyT1V!Q9(Ry8ayPR9{>#(fadDpC(&7fh6psz z+Xo^y?2@F=eh3F#>mC9WFD0cM70ok%1b2{cxoZn3!7`Mehe(Q4YZ7l7#lLlg<51KD z+_g#rHnAiDZ{+v`<=VT5iuZ93b!jYy_{(LITtJ8uxf73QIkI#J{&uYwcGGPX?{7sG zypQIWivW+Hqr$y7FXnIqOUZ04kQQ%`9BjxB3e04mI`cfVl=T zqFPzv$qM_(eqf16-tfOsD7|{7T8J`32lN1DSn}?)oXX4ZfBjKAg`e~+In-=}Dvg^| z(_H=_5%+$H(&vTn$TZtUo7*d|XbK7k5v8F4Eb7xDjXOX4J@JppaaUUVB%4}*-RD7A0q)<6&O$75u2z>#2LRMdAY`m zPM!brpIy9Ra{=DF(%mT^9;_U=_x`sNbU;OR6 F{|~1;#AyHk diff --git a/programming_examples/reconfiguration/run_benchmarks.sh b/programming_examples/reconfiguration/run_benchmarks.sh index adbc3f443c2..7a163a8385b 100755 --- a/programming_examples/reconfiguration/run_benchmarks.sh +++ b/programming_examples/reconfiguration/run_benchmarks.sh @@ -5,20 +5,38 @@ OUTPUT_CSV="benchmark_results.csv" # Write CSV header echo "variant,iteration,time_us" > "$OUTPUT_CSV" -VARIANTS=("separate_xclbins" "runlist" "fused_transactions_loadpdi" "fused_transactions_write32s") +# Array of base variants and their build directories +declare -A VARIANTS +VARIANTS["separate_xclbins"]="build" +VARIANTS["runlist"]="build" +VARIANTS["fused_transactions_loadpdi"]="build" +VARIANTS["fused_write32s_reset_always"]="build_reset_always" +VARIANTS["fused_write32s_reset_ifused"]="build_reset_ifused" +VARIANTS["fused_write32s_reset_ifchanged"]="build_reset_ifchanged" +VARIANTS["fused_write32s_reset_ifchangedfinegrained"]="build_reset_ifchangedfinegrained" +VARIANTS["fused_write32s_reset_never"]="build_reset_never" -for variant in "${VARIANTS[@]}"; do +for variant in "${!VARIANTS[@]}"; do + build_dir="${VARIANTS[$variant]}" + echo "Running benchmark for $variant..." >&2 - pushd "swiglu/$variant" > /dev/null + # Determine the directory based on variant name + if [[ $variant == fused_write32s_* ]]; then + base_dir="swiglu/fused_transactions_write32s" + else + base_dir="swiglu/$variant" + fi + + pushd "$base_dir" > /dev/null - if [ ! -f "build/test" ]; then - echo "Error: build/test not found in $variant. Please run 'make' first." >&2 + if [ ! -f "$build_dir/test" ]; then + echo "Error: $build_dir/test not found in $variant. Please run 'make' first." >&2 popd > /dev/null continue fi - cd build + cd "$build_dir" # Redirect stdout to CSV, stderr stays on terminal ./test 1>> "../../../$OUTPUT_CSV" diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/Makefile b/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/Makefile index 54d4e0aeb8e..74ec1a7012c 100644 --- a/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/Makefile +++ b/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/Makefile @@ -14,7 +14,9 @@ MLIR_AIE_DIR = $(shell python3 -c "from aie.utils.config import root_path; print CLANG_FLAGS = -O2 -std=c++20 --target=aie2p-none-unknown-elf -Wno-parentheses -Wno-attributes -Wno-macro-redefined -Wno-empty-body -Wno-missing-template-arg-list-after-template-kw -I$(AIE_KERNELS_DIR) -I$(MLIR_AIE_DIR)/include HOST_FLAGS = -std=c++23 -Wall -I/opt/xilinx/xrt/include -I/scratch/roesti/mlir-aie/runtime_lib/test_lib -L/opt/xilinx/xrt/lib -lxrt_core -lxrt_coreutil -lrt -lstdc++ -.PHONY: all clean test +VARIANT_NAME?=fused_transactions_write32s + +.PHONY: all clean test all_reset_modes build_reset_always build_reset_ifused build_reset_ifchanged build_reset_ifchangedfinegrained build_reset_never all: build/test @@ -27,6 +29,15 @@ build/mul.o: $(KERNEL_DIR)/mul.cc | build build/silu.o: $(KERNEL_DIR)/silu.cc | build $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ +$(BUILD_DIR)/mv.o: $(KERNEL_DIR)/mv.cc | $(BUILD_DIR) + $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ + +$(BUILD_DIR)/mul.o: $(KERNEL_DIR)/mul.cc | $(BUILD_DIR) + $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ + +$(BUILD_DIR)/silu.o: $(KERNEL_DIR)/silu.cc | $(BUILD_DIR) + $(PEANO_CLANG) $(CLANG_FLAGS) -c $< -o $@ + build/swiglu_gemv_1.mlir: $(OPERATOR_DIR)/matrix_vector_mul.py | build python3 -c 'import sys; sys.path.append("$(OPERATOR_DIR)"); from matrix_vector_mul import my_matvec; from aie.iron.device import NPU2; mlir_code = my_matvec(NPU2(), 8, 8192, 2048, 1); print(str(mlir_code))' > $@ @@ -42,17 +53,42 @@ build/swiglu_eltwise_mul.mlir: $(OPERATOR_DIR)/eltwise_mul.py | build $(COMBINED_MLIR): $(MLIR_FILES) combine_mlir.py python3 combine_mlir.py $(MLIR_FILES) $(COMBINED_MLIR) -$(ELF_FILE): $(COMBINED_MLIR) build/mv.o build/mul.o build/silu.o - cd build && $(AIECC) -v --generate-full-elf --expand-load-pdis --no-xchesscc --no-xbridge aie.mlir -o aie.elf +RESET_MODE?=always +BUILD_DIR?=build + +$(BUILD_DIR)/aie.elf: $(COMBINED_MLIR) $(BUILD_DIR)/mv.o $(BUILD_DIR)/mul.o $(BUILD_DIR)/silu.o | $(BUILD_DIR) + cp $(COMBINED_MLIR) $(BUILD_DIR)/aie.mlir + cd $(BUILD_DIR) && $(AIECC) -v --no-coalesce-write32s --generate-full-elf --expand-load-pdis --reset-mode=$(RESET_MODE) --reset-tiles=core,mem --no-xchesscc --no-xbridge aie.mlir -o aie.elf -build/test: test.cpp $(ELF_FILE) - g++-13 $< -o $@ $(HOST_FLAGS) +$(BUILD_DIR)/test: test.cpp $(BUILD_DIR)/aie.elf + g++-13 $< -o $@ $(HOST_FLAGS) -DVARIANT_NAME=\"$(VARIANT_NAME)\" + +$(BUILD_DIR): + mkdir -p $(BUILD_DIR) build: mkdir -p build -test: build/test - cd build && ./test +# Build all reset mode variants +all_reset_modes: _build_reset_always _build_reset_ifused _build_reset_ifchanged _build_reset_ifchangedfinegrained _build_reset_never + +_build_reset_always: + $(MAKE) BUILD_DIR=build_reset_always RESET_MODE=always VARIANT_NAME=fused_write32s_reset_always build_reset_always/test + +_build_reset_ifused: + $(MAKE) BUILD_DIR=build_reset_ifused RESET_MODE=ifused VARIANT_NAME=fused_write32s_reset_ifused build_reset_ifused/test + +_build_reset_ifchanged: + $(MAKE) BUILD_DIR=build_reset_ifchanged RESET_MODE=ifchanged VARIANT_NAME=fused_write32s_reset_ifchanged build_reset_ifchanged/test + +_build_reset_ifchangedfinegrained: + $(MAKE) BUILD_DIR=build_reset_ifchangedfinegrained RESET_MODE=ifchangedfinegrained VARIANT_NAME=fused_write32s_reset_ifchangedfinegrained build_reset_ifchangedfinegrained/test + +_build_reset_never: + $(MAKE) BUILD_DIR=build_reset_never RESET_MODE=never VARIANT_NAME=fused_write32s_reset_never build_reset_never/test + +test: $(BUILD_DIR)/test + cd $(BUILD_DIR) && ./test clean: - rm -rf build aie.mlir.prj + rm -rf build build_reset_* aie.mlir.prj diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/test.cpp b/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/test.cpp index a8a7a56e1ae..2ae886c594d 100644 --- a/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/test.cpp +++ b/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/test.cpp @@ -19,6 +19,10 @@ #include #include +#ifndef VARIANT_NAME +#define VARIANT_NAME "fused_transactions_write32s" +#endif + constexpr int EMBEDDING_DIM = 2048; constexpr int HIDDEN_DIM = 8192; constexpr int NUM_ITERATIONS = 1000; @@ -251,7 +255,7 @@ int main(int argc, const char *argv[]) { // Output CSV format: variant,iteration,time_us for (int i = 0; i < NUM_ITERATIONS; i++) { - std::cout << "fused_transactions_write32s," << i << "," << iteration_times[i] << std::endl; + std::cout << VARIANT_NAME << "," << i << "," << iteration_times[i] << std::endl; } return 0; diff --git a/programming_examples/reconfiguration/visualize_results.py b/programming_examples/reconfiguration/visualize_results.py index a7a7fbfa6b4..fc08b1bf437 100755 --- a/programming_examples/reconfiguration/visualize_results.py +++ b/programming_examples/reconfiguration/visualize_results.py @@ -47,25 +47,73 @@ def compute_statistics(data): } return stats -def plot_results(stats, output_file): - """Create bar chart with box-and-whisker overlay""" +def sort_variants(variants): + """Sort variants in the desired order for presentation""" + # Define the desired order + order = [ + 'separate_xclbins', + 'runlist', + 'fused_transactions_loadpdi', + 'fused_write32s_reset_always', + 'fused_write32s_reset_ifused', + 'fused_write32s_reset_ifchanged', + 'fused_write32s_reset_ifchangedfinegrained', + 'fused_write32s_reset_never' + ] + + # Sort variants according to the order, putting any unknown variants at the end + sorted_variants = [] + for v in order: + if v in variants: + sorted_variants.append(v) + + # Add any variants not in the order list + for v in variants: + if v not in sorted_variants: + sorted_variants.append(v) + + return sorted_variants + +def plot_results(stats, output_file, all_variants=None, variants_to_show=None): + """Create bar chart with box-and-whisker overlay + + Args: + stats: Dictionary of statistics for all variants + output_file: Output filename + all_variants: Ordered list of all variants (for consistent positioning) + variants_to_show: List of variants to show (None = all) + """ fig, ax = plt.subplots(figsize=(12, 7)) - variants = list(stats.keys()) - means = [stats[v]['mean'] for v in variants] + if all_variants is None: + all_variants = list(stats.keys()) + + total_variants = len(all_variants) + + # Determine which variants to display + if variants_to_show is None: + variants_to_show = all_variants + else: + # Filter to only include variants that exist in stats + variants_to_show = [v for v in variants_to_show if v in stats] + + num_shown = len(variants_to_show) + means = [stats[v]['mean'] for v in variants_to_show] - # Color scheme - use seaborn palette - colors = sns.color_palette('flare', n_colors=len(variants)) + # Color scheme - use seaborn palette for ALL variants (consistent colors) + all_colors = sns.color_palette('flare', n_colors=total_variants) + color_map = {v: all_colors[i] for i, v in enumerate(all_variants)} + colors = [color_map[v] for v in variants_to_show] - # Create bar chart for means - x_pos = np.arange(len(variants)) - bars = ax.bar(x_pos, means, color=colors, label='Mean', width=0.6) + # Create bar chart for means - use full width for x-axis + x_pos = np.arange(total_variants) + shown_positions = [all_variants.index(v) for v in variants_to_show] + + bars = ax.bar(shown_positions, means, color=colors, label='Mean', width=0.6) # Overlay box-and-whisker plots - bp_data = [stats[v]['times'] for v in variants] - bp = ax.boxplot(bp_data, positions=x_pos, widths=0.4, - #whiskerprops=dict(color='black'), - #capprops=dict(color='black'), + bp_data = [stats[v]['times'] for v in variants_to_show] + bp = ax.boxplot(bp_data, positions=shown_positions, widths=0.4, medianprops=dict(color='white'), flierprops=dict(marker='.')) @@ -73,45 +121,41 @@ def plot_results(stats, output_file): ax.set_title('SwiGLU Performance Comparison\n(4 Reconfigurations, Embedding Dim=2048, Hidden Dim=8192)', fontsize=14) ax.set_xticks(x_pos) - ax.set_xticklabels(variants) + ax.set_xticklabels(all_variants, rotation=45, ha='right') + ax.set_xlim(-0.5, total_variants - 0.5) ax.grid(axis='y', alpha=0.3) # Add mean value labels on bars - for i, (bar, mean) in enumerate(zip(bars, means)): - height = bar.get_height() - ax.text(bar.get_x() + bar.get_width()/2., height + 100, + for i, (pos, mean) in enumerate(zip(shown_positions, means)): + ax.text(pos, mean + max(means) * 0.02, f'{mean:.0f} μs', ha='center', va='bottom', fontsize=10) # Add legend - from matplotlib.patches import Patch - #legend_elements = [ - # Patch(facecolor=colors[0], alpha=1.0, label='Mean (bar)'), - # Patch(facecolor='white', edgecolor='black', label='Box: 25th-75th percentile'), - # plt.Line2D([0], [0], color='black', linewidth=2, label='Median'), - # plt.Line2D([0], [0], color='black', linewidth=1.5, label='Min/Max (whiskers)') - #] ax.legend(loc='upper right', fontsize=9) plt.tight_layout() plt.savefig(output_file, dpi=300, bbox_inches='tight') print(f"Plot saved to: {output_file}", file=sys.stderr) -def print_statistics(stats): +def print_statistics(stats, all_variants=None): """Print detailed statistics to stderr""" + if all_variants is None: + all_variants = list(stats.keys()) + print("\n" + "="*70, file=sys.stderr) print("PERFORMANCE STATISTICS", file=sys.stderr) print("="*70, file=sys.stderr) print(file=sys.stderr) - print(f"{'Variant':<20} {'Mean':<10} {'Median':<10} {'Std Dev':<10} {'Min':<10} {'Max':<10}", file=sys.stderr) - print("-"*70, file=sys.stderr) + print(f"{'Variant':<40} {'Mean':<10} {'Median':<10} {'Std Dev':<10} {'Min':<10} {'Max':<10}", file=sys.stderr) + print("-"*100, file=sys.stderr) - variants = list(stats.keys()) - for variant in variants: - s = stats[variant] - print(f"{variant:<20} {s['mean']:>8.2f} {s['median']:>8.2f} " - f"{s['std']:>8.2f} {s['min']:>8.2f} {s['max']:>8.2f}", file=sys.stderr) + for variant in all_variants: + if variant in stats: + s = stats[variant] + print(f"{variant:<40} {s['mean']:>8.2f} {s['median']:>8.2f} " + f"{s['std']:>8.2f} {s['min']:>8.2f} {s['max']:>8.2f}", file=sys.stderr) print(file=sys.stderr) print("="*70, file=sys.stderr) @@ -119,14 +163,16 @@ def print_statistics(stats): print("="*70, file=sys.stderr) print(file=sys.stderr) - baseline_mean = stats[variants[0]]['mean'] - print(f"{'Variant':<20} {'Mean (μs)':<12} {'Relative to ' + variants[0]:<20}", file=sys.stderr) - print("-"*70, file=sys.stderr) + baseline_variant = all_variants[0] if all_variants[0] in stats else list(stats.keys())[0] + baseline_mean = stats[baseline_variant]['mean'] + print(f"{'Variant':<40} {'Mean (μs)':<12} {'Relative to ' + baseline_variant:<20}", file=sys.stderr) + print("-"*100, file=sys.stderr) - for variant in variants: - mean = stats[variant]['mean'] - relative = mean / baseline_mean - print(f"{variant:<20} {mean:>10.2f} {relative:>8.2f}x", file=sys.stderr) + for variant in all_variants: + if variant in stats: + mean = stats[variant]['mean'] + relative = mean / baseline_mean + print(f"{variant:<40} {mean:>10.2f} {relative:>8.2f}x", file=sys.stderr) print(file=sys.stderr) print("="*70, file=sys.stderr) @@ -134,13 +180,14 @@ def print_statistics(stats): print("="*70, file=sys.stderr) print(file=sys.stderr) - fastest_variant = min(variants, key=lambda v: stats[v]['mean']) + variants_in_stats = [v for v in all_variants if v in stats] + fastest_variant = min(variants_in_stats, key=lambda v: stats[v]['mean']) fastest_mean = stats[fastest_variant]['mean'] print(f"Fastest variant: {fastest_variant} ({fastest_mean:.2f} μs mean)", file=sys.stderr) print(file=sys.stderr) - for variant in variants: + for variant in variants_in_stats: if variant != fastest_variant: mean = stats[variant]['mean'] speedup = mean / fastest_mean @@ -169,11 +216,21 @@ def main(): sys.exit(1) stats = compute_statistics(data) + all_variants = sort_variants(list(stats.keys())) + # Generate full plot output_plot = "benchmark_results.png" - plot_results(stats, output_plot) + plot_results(stats, output_plot, all_variants=all_variants) + + # Generate incremental plots for presentation + print("\nGenerating incremental plots...", file=sys.stderr) + for i in range(1, len(all_variants) + 1): + variants_subset = all_variants[:i] + incremental_output = f"benchmark_results_{i-1}.png" + plot_results(stats, incremental_output, all_variants=all_variants, variants_to_show=variants_subset) + print(f" Created {incremental_output} with {i} variant(s)", file=sys.stderr) - print_statistics(stats) + print_statistics(stats, all_variants) if __name__ == "__main__": main() diff --git a/third_party/bootgen b/third_party/bootgen index 17caad52af4..4f023ac2ca2 160000 --- a/third_party/bootgen +++ b/third_party/bootgen @@ -1 +1 @@ -Subproject commit 17caad52af4fb191312cbcda51b14e14aede6822 +Subproject commit 4f023ac2ca2ea452740194045fcecf1671f5b2c0 diff --git a/utils/build-mlir-aie-from-wheels.sh b/utils/build-mlir-aie-from-wheels.sh index aedb11d80b0..691db8d3fbe 100755 --- a/utils/build-mlir-aie-from-wheels.sh +++ b/utils/build-mlir-aie-from-wheels.sh @@ -68,7 +68,7 @@ CMAKE_CONFIGS="\ -DCMAKE_MODULE_PATH=${CMAKEMODULES_DIR}/modulesXilinx \ -DLLVM_EXTERNAL_LIT=$(which lit) \ -DCMAKE_INSTALL_PREFIX="../${INSTALL_DIR}" \ - -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -DLLVM_ENABLE_ASSERTIONS=ON \ -DAIE_ENABLE_BINDINGS_PYTHON=ON \ -DLLVM_ENABLE_RTTI=$LLVM_ENABLE_RTTI \ From 875eb79716998f9889e929de6514095ee4bf80af Mon Sep 17 00:00:00 2001 From: andrej Date: Tue, 16 Dec 2025 16:56:11 -0700 Subject: [PATCH 27/40] fixes after botched rebase --- include/aie/Dialect/AIEX/IR/AIEX.td | 2 +- .../AIEToConfiguration/AIEToConfiguration.cpp | 2 +- lib/Dialect/AIEX/IR/AIEXDialect.cpp | 2 +- .../AIEX/Transforms/AIECoalesceWrite32s.cpp | 10 ++-- lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp | 4 +- .../AIEX/Transforms/AIEExpandLoadPdi.cpp | 14 +++--- .../AIEMaterializeRuntimeSequences.cpp | 48 ++++++------------- 7 files changed, 33 insertions(+), 49 deletions(-) diff --git a/include/aie/Dialect/AIEX/IR/AIEX.td b/include/aie/Dialect/AIEX/IR/AIEX.td index 2051bce7484..d978887b88a 100644 --- a/include/aie/Dialect/AIEX/IR/AIEX.td +++ b/include/aie/Dialect/AIEX/IR/AIEX.td @@ -581,7 +581,7 @@ def AIE_RunOp: AIEX_Op<"run", [HasParent<"ConfigureOp">]> { def AIE_ArgSliceOp: AIEX_Op<"arg_slice", [ Pure, - ParentOneOf<["RuntimeSequenceOp", "ConfigureOp"]> + ParentOneOf<["AIE::RuntimeSequenceOp", "ConfigureOp"]> ]>, Results<(outs AnyMemRef:$result)> { let summary = "Create a slice of a runtime sequence argument with an offset"; let description = [{ diff --git a/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp b/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp index 3c7808ae220..213d6141682 100644 --- a/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp +++ b/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp @@ -679,7 +679,7 @@ static LogicalResult convertTransactionOpsToMLIR( while (device.lookupSymbol(seq_name)) seq_name = "configure" + std::to_string(id++); StringAttr seq_sym_name = builder.getStringAttr(seq_name); - auto seq = builder.create(loc, seq_sym_name); + auto seq = AIE::RuntimeSequenceOp::create(builder, loc, seq_sym_name); seq.getBody().push_back(new Block); builder.setInsertionPointToStart(&seq.getBody().front()); diff --git a/lib/Dialect/AIEX/IR/AIEXDialect.cpp b/lib/Dialect/AIEX/IR/AIEXDialect.cpp index dd820d9865a..fd779b4a062 100644 --- a/lib/Dialect/AIEX/IR/AIEXDialect.cpp +++ b/lib/Dialect/AIEX/IR/AIEXDialect.cpp @@ -1072,7 +1072,7 @@ LogicalResult AIEX::ArgSliceOp::verify() { // If input is a block argument, verify it belongs to a RuntimeSequenceOp if (auto blockArg = dyn_cast(input)) { auto *parentOp = blockArg.getOwner()->getParentOp(); - if (!isa(parentOp)) { + if (!isa(parentOp)) { return emitOpError( "input block argument must belong to a RuntimeSequenceOp"); } diff --git a/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp b/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp index 34805c8941f..7621aafeaef 100644 --- a/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp +++ b/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp @@ -397,7 +397,8 @@ struct AIECoalesceWrite32sPass // Insert the global at the beginning of the device builder.setInsertionPointToStart(deviceOp.getBody()); - builder.create( + memref::GlobalOp::create( + builder, loc, globalName, /*sym_visibility=*/builder.getStringAttr("private"), @@ -408,10 +409,11 @@ struct AIECoalesceWrite32sPass // Create a GetGlobalOp and BlockWriteOp at the position of the first write builder.setInsertionPoint(sequence[0].op); - auto getGlobalOp = builder.create( - loc, memrefType, globalName); + auto getGlobalOp = memref::GetGlobalOp::create( + builder, loc, memrefType, globalName); - builder.create( + NpuBlockWriteOp::create( + builder, loc, startAddr, getGlobalOp.getResult(), diff --git a/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp b/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp index abf492d08f2..f6161d664b6 100644 --- a/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp @@ -285,8 +285,8 @@ struct DmaToNpuPattern : OpConversionPattern { } // arg_idx and offset handling for memref or arg_slice - AIEX::RuntimeSequenceOp seq_op = - op->getParentOfType(); + AIE::RuntimeSequenceOp seq_op = + op->getParentOfType(); if (!seq_op) { op->emitOpError("NpuDmaMemcpyNdOps must have RuntimeSequenceOp parent at " "time of lowering."); diff --git a/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp b/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp index 1436adb8499..82e8bdd0097 100644 --- a/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp @@ -147,27 +147,27 @@ struct ExpandLoadPdiPattern : public OpRewritePattern { auto deviceType = referencedDevice.getDevice(); auto loc = rewriter.getUnknownLoc(); - emptyDevice = rewriter.create( - loc, deviceType, rewriter.getStringAttr(emptyName)); + emptyDevice = AIE::DeviceOp::create( + rewriter, loc, deviceType, rewriter.getStringAttr(emptyName)); emptyDevice.getRegion().emplaceBlock(); Block *deviceBlock = &emptyDevice.getRegion().front(); rewriter.setInsertionPointToEnd(deviceBlock); - rewriter.create(loc); + AIE::EndOp::create(rewriter, loc); } // Create new load_pdi operation rewriter.setInsertionPoint(loadPdiOp); NpuLoadPdiOp newLoadPdi; if (needsEmptyDevice) { - newLoadPdi = rewriter.create( - loadPdiOp.getLoc(), FlatSymbolRefAttr::get(emptyDevice.getSymNameAttr()), + newLoadPdi = NpuLoadPdiOp::create( + rewriter, loadPdiOp.getLoc(), FlatSymbolRefAttr::get(emptyDevice.getSymNameAttr()), loadPdiOp.getIdAttr(), loadPdiOp.getSizeAttr(), loadPdiOp.getAddressAttr()); } else { // First load_pdi with no resets - keep original device reference - newLoadPdi = rewriter.create( - loadPdiOp.getLoc(), loadPdiOp.getDeviceRefAttr(), + newLoadPdi = NpuLoadPdiOp::create( + rewriter, loadPdiOp.getLoc(), loadPdiOp.getDeviceRefAttr(), loadPdiOp.getIdAttr(), loadPdiOp.getSizeAttr(), loadPdiOp.getAddressAttr()); } diff --git a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp index 6d663b35bf8..cc5b176ce57 100644 --- a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp @@ -40,19 +40,19 @@ struct RuntimeCallGraphCyclicityAnalysis { RuntimeCallGraphCyclicityAnalysis(Operation *op, AnalysisManager &am) : analysisManager(am) { - RuntimeSequenceOp runtimeSequenceOp = llvm::dyn_cast(op); + AIE::RuntimeSequenceOp runtimeSequenceOp = llvm::dyn_cast(op); if (!runtimeSequenceOp) { op->emitError("RuntimeCallGraphCyclicityAnalysis can only be called on aiex.runtime_sequence operations."); return; } - llvm::SetVector visited = {}; + llvm::SetVector visited = {}; llvm::SetVector todo; for (RunOp runOp : runtimeSequenceOp.getOps()) { todo.insert(runOp); } while(!todo.empty()) { RunOp curOp = todo.pop_back_val(); - if (RuntimeSequenceOp calleeRuntimeSequence = curOp.getCalleeRuntimeSequenceOp()) { + if (AIE::RuntimeSequenceOp calleeRuntimeSequence = curOp.getCalleeRuntimeSequenceOp()) { if (visited.contains(calleeRuntimeSequence)) { continue; } @@ -86,7 +86,7 @@ struct InsertLoadPdiForConfigurePattern : RewritePattern { // LoadPDI resets the whole device, hence cannot do partial reconfiguration; // therefore, this only supports top-level configure ops - if (!llvm::isa(configureOp->getParentOp())) { + if (!llvm::isa(configureOp->getParentOp())) { return failure(); } @@ -103,7 +103,8 @@ struct InsertLoadPdiForConfigurePattern : RewritePattern { configureBlock = &configureOp.getBody().front(); } rewriter.setInsertionPointToStart(configureBlock); - rewriter.create( + AIEX::NpuLoadPdiOp::create( + rewriter, configureOp.getLoc(), FlatSymbolRefAttr::get(referencedDevice.getSymNameAttr())); @@ -265,8 +266,6 @@ LogicalResult inlineReferencedSymbolDefinitions( if (!symbolDefOp) { return std::make_pair(newSymbolRef, WalkResult::interrupt()); } - Operation *clonedSymbolDefOp = rewriter.clone(*symbolDefOp, argMap); - clonedSymbolDefOp->setAttr(SymbolTable::getSymbolAttrName(), StringAttr::get(ctx, uniqueName)); // Collect SSA values referenced by the symbol definition operation llvm::SetVector symbolReferencedValues; @@ -275,35 +274,18 @@ LogicalResult inlineReferencedSymbolDefinitions( // Copy SSA values referenced by the symbol definition if (failed(copyReferencedSSAValues(rewriter, symbolReferencedValues, callerDevice, argMap, - clonedSymbolInsertionPoint, op))) { + clonedDefOpsInsertionPoint, op))) { return std::make_pair(newSymbolRef, WalkResult::interrupt()); } Operation *clonedSymbolDefOp = rewriter.clone(*symbolDefOp, argMap); clonedSymbolDefOp->setAttr(SymbolTable::getSymbolAttrName(), - StringAttr::get(ctx, uniqueName)); + StringAttr::get(ctx, uniqueName)); } else { newSymbolRef = previouslyInlinedSymbolMap[oldSymbolRef]; } - - // Collect SSA values referenced by the symbol definition operation - llvm::SetVector symbolReferencedValues; - collectReferencedSSAValues(symbolDefOp, argMap, symbolReferencedValues); - - // Copy SSA values referenced by the symbol definition - if (failed(copyReferencedSSAValues(rewriter, symbolReferencedValues, - callerDevice, argMap, - clonedDefOpsInsertionPoint, op))) { - return std::make_pair(newSymbolRef, WalkResult::interrupt()); - } - - //rewriter.restoreInsertionPoint(clonedDefOpsInsertionPoint); - Operation *clonedSymbolDefOp = rewriter.clone(*symbolDefOp, argMap); - clonedSymbolDefOp->setAttr(SymbolTable::getSymbolAttrName(), - StringAttr::get(ctx, uniqueName)); - //clonedDefOpsInsertionPoint = rewriter.saveInsertionPoint(); - } else { - newSymbolRef = previouslyInlinedSymbolMap[oldSymbolRef]; + + return std::make_pair(newSymbolRef, WalkResult::advance()); } ); if (!newAttr) { @@ -328,7 +310,7 @@ struct InlineRuntimeCallsPattern : RewritePattern { return failure(); } AIE::DeviceOp calleeDevice = runOp.getCalleeDeviceOp(); - RuntimeSequenceOp calleeRuntimeSequence = runOp.getCalleeRuntimeSequenceOp(); + AIE::RuntimeSequenceOp calleeRuntimeSequence = runOp.getCalleeRuntimeSequenceOp(); if (!calleeDevice || !calleeRuntimeSequence) { return failure(); } @@ -424,14 +406,14 @@ struct AIEMaterializeRuntimeSequencesPass for (AIE::DeviceOp deviceOp : moduleOp.getOps()) { // Verify all runtime sequences before materialization - for (RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { + for (AIE::RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { if (failed(runtimeSequenceOp.verifyBeforeMaterialization())) { return signalPassFailure(); } } // Check for cycles in runtime sequence calls - for (RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { + for (AIE::RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { AnalysisManager am = getAnalysisManager().nest(deviceOp).nest(runtimeSequenceOp); RuntimeCallGraphCyclicityAnalysis cyclicity = am.getAnalysis(); if (!cyclicity.isValid) { @@ -459,7 +441,7 @@ struct AIEMaterializeRuntimeSequencesPass } // Insert LoadPDI ops for each aiex.configure op - for (RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { + for (AIE::RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { RewritePatternSet patterns_1(ctx); patterns_1.insert(ctx); walkAndApplyPatterns(runtimeSequenceOp, std::move(patterns_1)); @@ -467,7 +449,7 @@ struct AIEMaterializeRuntimeSequencesPass // Flatten the IR: hoist all operations inside aiex.configure to be direct // children of the runtime sequence, preserving order - for (RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { + for (AIE::RuntimeSequenceOp runtimeSequenceOp : deviceOp.getOps()) { SmallVector configureOps; for (ConfigureOp configureOp : runtimeSequenceOp.getOps()) { From 8b27f92e0fa56560e632db0e071ad537514eb9a8 Mon Sep 17 00:00:00 2001 From: andrej Date: Tue, 16 Dec 2025 17:01:05 -0700 Subject: [PATCH 28/40] rename aiex.runtime_sequence to aie.runtime_sequence in reconfig example --- .../reconfiguration/benchmark_results.csv | 8000 ----------------- .../combine_mlir.py | 2 +- .../combine_mlir.py | 2 +- 3 files changed, 2 insertions(+), 8002 deletions(-) diff --git a/programming_examples/reconfiguration/benchmark_results.csv b/programming_examples/reconfiguration/benchmark_results.csv index 4b9adc5ee27..611952e1184 100644 --- a/programming_examples/reconfiguration/benchmark_results.csv +++ b/programming_examples/reconfiguration/benchmark_results.csv @@ -1,8001 +1 @@ variant,iteration,time_us -fused_write32s_reset_always,0,7952 -fused_write32s_reset_always,1,7900 -fused_write32s_reset_always,2,7908 -fused_write32s_reset_always,3,7906 -fused_write32s_reset_always,4,7908 -fused_write32s_reset_always,5,7905 -fused_write32s_reset_always,6,7916 -fused_write32s_reset_always,7,7998 -fused_write32s_reset_always,8,7998 -fused_write32s_reset_always,9,7994 -fused_write32s_reset_always,10,7989 -fused_write32s_reset_always,11,8115 -fused_write32s_reset_always,12,7911 -fused_write32s_reset_always,13,7987 -fused_write32s_reset_always,14,7998 -fused_write32s_reset_always,15,7998 -fused_write32s_reset_always,16,8007 -fused_write32s_reset_always,17,7997 -fused_write32s_reset_always,18,7999 -fused_write32s_reset_always,19,7996 -fused_write32s_reset_always,20,8003 -fused_write32s_reset_always,21,7998 -fused_write32s_reset_always,22,7983 -fused_write32s_reset_always,23,8016 -fused_write32s_reset_always,24,8000 -fused_write32s_reset_always,25,7997 -fused_write32s_reset_always,26,8007 -fused_write32s_reset_always,27,7991 -fused_write32s_reset_always,28,8006 -fused_write32s_reset_always,29,7996 -fused_write32s_reset_always,30,8000 -fused_write32s_reset_always,31,8001 -fused_write32s_reset_always,32,8094 -fused_write32s_reset_always,33,7906 -fused_write32s_reset_always,34,7998 -fused_write32s_reset_always,35,7998 -fused_write32s_reset_always,36,7999 -fused_write32s_reset_always,37,7996 -fused_write32s_reset_always,38,8004 -fused_write32s_reset_always,39,7998 -fused_write32s_reset_always,40,7999 -fused_write32s_reset_always,41,8004 -fused_write32s_reset_always,42,7994 -fused_write32s_reset_always,43,8003 -fused_write32s_reset_always,44,8000 -fused_write32s_reset_always,45,7996 -fused_write32s_reset_always,46,8003 -fused_write32s_reset_always,47,8094 -fused_write32s_reset_always,48,7908 -fused_write32s_reset_always,49,7999 -fused_write32s_reset_always,50,7998 -fused_write32s_reset_always,51,8014 -fused_write32s_reset_always,52,7605 -fused_write32s_reset_always,53,7639 -fused_write32s_reset_always,54,7643 -fused_write32s_reset_always,55,7608 -fused_write32s_reset_always,56,7608 -fused_write32s_reset_always,57,7590 -fused_write32s_reset_always,58,7924 -fused_write32s_reset_always,59,7639 -fused_write32s_reset_always,60,7702 -fused_write32s_reset_always,61,8032 -fused_write32s_reset_always,62,7993 -fused_write32s_reset_always,63,8015 -fused_write32s_reset_always,64,7991 -fused_write32s_reset_always,65,7623 -fused_write32s_reset_always,66,7906 -fused_write32s_reset_always,67,7603 -fused_write32s_reset_always,68,7588 -fused_write32s_reset_always,69,7603 -fused_write32s_reset_always,70,7602 -fused_write32s_reset_always,71,7609 -fused_write32s_reset_always,72,7593 -fused_write32s_reset_always,73,7587 -fused_write32s_reset_always,74,7587 -fused_write32s_reset_always,75,7588 -fused_write32s_reset_always,76,7648 -fused_write32s_reset_always,77,7646 -fused_write32s_reset_always,78,7648 -fused_write32s_reset_always,79,7906 -fused_write32s_reset_always,80,7927 -fused_write32s_reset_always,81,7904 -fused_write32s_reset_always,82,7935 -fused_write32s_reset_always,83,7588 -fused_write32s_reset_always,84,7593 -fused_write32s_reset_always,85,7639 -fused_write32s_reset_always,86,7924 -fused_write32s_reset_always,87,7598 -fused_write32s_reset_always,88,7909 -fused_write32s_reset_always,89,7892 -fused_write32s_reset_always,90,7907 -fused_write32s_reset_always,91,7909 -fused_write32s_reset_always,92,7880 -fused_write32s_reset_always,93,7902 -fused_write32s_reset_always,94,7903 -fused_write32s_reset_always,95,7902 -fused_write32s_reset_always,96,7917 -fused_write32s_reset_always,97,8012 -fused_write32s_reset_always,98,7991 -fused_write32s_reset_always,99,8001 -fused_write32s_reset_always,100,8000 -fused_write32s_reset_always,101,8009 -fused_write32s_reset_always,102,7999 -fused_write32s_reset_always,103,7997 -fused_write32s_reset_always,104,7999 -fused_write32s_reset_always,105,8139 -fused_write32s_reset_always,106,8051 -fused_write32s_reset_always,107,8010 -fused_write32s_reset_always,108,7929 -fused_write32s_reset_always,109,7635 -fused_write32s_reset_always,110,7923 -fused_write32s_reset_always,111,7904 -fused_write32s_reset_always,112,7946 -fused_write32s_reset_always,113,7663 -fused_write32s_reset_always,114,7785 -fused_write32s_reset_always,115,8003 -fused_write32s_reset_always,116,7995 -fused_write32s_reset_always,117,8005 -fused_write32s_reset_always,118,8003 -fused_write32s_reset_always,119,7996 -fused_write32s_reset_always,120,7999 -fused_write32s_reset_always,121,7998 -fused_write32s_reset_always,122,8000 -fused_write32s_reset_always,123,8002 -fused_write32s_reset_always,124,7998 -fused_write32s_reset_always,125,7999 -fused_write32s_reset_always,126,8000 -fused_write32s_reset_always,127,7999 -fused_write32s_reset_always,128,7998 -fused_write32s_reset_always,129,7995 -fused_write32s_reset_always,130,8002 -fused_write32s_reset_always,131,7906 -fused_write32s_reset_always,132,8072 -fused_write32s_reset_always,133,8011 -fused_write32s_reset_always,134,8011 -fused_write32s_reset_always,135,7999 -fused_write32s_reset_always,136,7997 -fused_write32s_reset_always,137,8098 -fused_write32s_reset_always,138,7907 -fused_write32s_reset_always,139,7898 -fused_write32s_reset_always,140,7904 -fused_write32s_reset_always,141,7899 -fused_write32s_reset_always,142,7672 -fused_write32s_reset_always,143,7609 -fused_write32s_reset_always,144,8009 -fused_write32s_reset_always,145,7998 -fused_write32s_reset_always,146,7992 -fused_write32s_reset_always,147,8007 -fused_write32s_reset_always,148,8001 -fused_write32s_reset_always,149,8001 -fused_write32s_reset_always,150,8001 -fused_write32s_reset_always,151,7995 -fused_write32s_reset_always,152,7994 -fused_write32s_reset_always,153,8008 -fused_write32s_reset_always,154,7993 -fused_write32s_reset_always,155,8008 -fused_write32s_reset_always,156,8099 -fused_write32s_reset_always,157,7908 -fused_write32s_reset_always,158,7910 -fused_write32s_reset_always,159,8072 -fused_write32s_reset_always,160,8004 -fused_write32s_reset_always,161,7903 -fused_write32s_reset_always,162,8077 -fused_write32s_reset_always,163,8109 -fused_write32s_reset_always,164,7917 -fused_write32s_reset_always,165,7903 -fused_write32s_reset_always,166,7904 -fused_write32s_reset_always,167,7902 -fused_write32s_reset_always,168,7940 -fused_write32s_reset_always,169,7899 -fused_write32s_reset_always,170,7610 -fused_write32s_reset_always,171,7844 -fused_write32s_reset_always,172,7984 -fused_write32s_reset_always,173,8010 -fused_write32s_reset_always,174,7993 -fused_write32s_reset_always,175,7995 -fused_write32s_reset_always,176,8001 -fused_write32s_reset_always,177,8007 -fused_write32s_reset_always,178,7996 -fused_write32s_reset_always,179,7994 -fused_write32s_reset_always,180,8109 -fused_write32s_reset_always,181,7967 -fused_write32s_reset_always,182,7912 -fused_write32s_reset_always,183,7621 -fused_write32s_reset_always,184,7593 -fused_write32s_reset_always,185,7583 -fused_write32s_reset_always,186,7582 -fused_write32s_reset_always,187,7585 -fused_write32s_reset_always,188,7906 -fused_write32s_reset_always,189,7899 -fused_write32s_reset_always,190,7905 -fused_write32s_reset_always,191,7902 -fused_write32s_reset_always,192,7862 -fused_write32s_reset_always,193,7594 -fused_write32s_reset_always,194,7968 -fused_write32s_reset_always,195,8013 -fused_write32s_reset_always,196,7989 -fused_write32s_reset_always,197,7995 -fused_write32s_reset_always,198,7997 -fused_write32s_reset_always,199,8005 -fused_write32s_reset_always,200,8001 -fused_write32s_reset_always,201,7997 -fused_write32s_reset_always,202,8000 -fused_write32s_reset_always,203,8003 -fused_write32s_reset_always,204,7996 -fused_write32s_reset_always,205,8003 -fused_write32s_reset_always,206,7993 -fused_write32s_reset_always,207,8002 -fused_write32s_reset_always,208,8098 -fused_write32s_reset_always,209,7993 -fused_write32s_reset_always,210,7909 -fused_write32s_reset_always,211,7995 -fused_write32s_reset_always,212,8001 -fused_write32s_reset_always,213,7997 -fused_write32s_reset_always,214,8004 -fused_write32s_reset_always,215,7996 -fused_write32s_reset_always,216,7998 -fused_write32s_reset_always,217,8006 -fused_write32s_reset_always,218,8092 -fused_write32s_reset_always,219,7897 -fused_write32s_reset_always,220,8006 -fused_write32s_reset_always,221,7999 -fused_write32s_reset_always,222,8001 -fused_write32s_reset_always,223,8002 -fused_write32s_reset_always,224,7998 -fused_write32s_reset_always,225,8095 -fused_write32s_reset_always,226,7895 -fused_write32s_reset_always,227,8005 -fused_write32s_reset_always,228,8000 -fused_write32s_reset_always,229,7999 -fused_write32s_reset_always,230,8003 -fused_write32s_reset_always,231,7998 -fused_write32s_reset_always,232,8004 -fused_write32s_reset_always,233,7996 -fused_write32s_reset_always,234,8091 -fused_write32s_reset_always,235,7907 -fused_write32s_reset_always,236,7906 -fused_write32s_reset_always,237,7906 -fused_write32s_reset_always,238,7904 -fused_write32s_reset_always,239,7918 -fused_write32s_reset_always,240,7588 -fused_write32s_reset_always,241,7587 -fused_write32s_reset_always,242,7588 -fused_write32s_reset_always,243,7588 -fused_write32s_reset_always,244,7583 -fused_write32s_reset_always,245,7579 -fused_write32s_reset_always,246,7584 -fused_write32s_reset_always,247,7580 -fused_write32s_reset_always,248,7586 -fused_write32s_reset_always,249,7586 -fused_write32s_reset_always,250,7590 -fused_write32s_reset_always,251,7592 -fused_write32s_reset_always,252,7592 -fused_write32s_reset_always,253,7586 -fused_write32s_reset_always,254,7580 -fused_write32s_reset_always,255,7596 -fused_write32s_reset_always,256,7575 -fused_write32s_reset_always,257,7566 -fused_write32s_reset_always,258,7566 -fused_write32s_reset_always,259,7566 -fused_write32s_reset_always,260,7569 -fused_write32s_reset_always,261,7573 -fused_write32s_reset_always,262,7565 -fused_write32s_reset_always,263,7569 -fused_write32s_reset_always,264,7568 -fused_write32s_reset_always,265,7568 -fused_write32s_reset_always,266,7565 -fused_write32s_reset_always,267,7571 -fused_write32s_reset_always,268,7573 -fused_write32s_reset_always,269,7579 -fused_write32s_reset_always,270,7565 -fused_write32s_reset_always,271,7570 -fused_write32s_reset_always,272,7569 -fused_write32s_reset_always,273,7570 -fused_write32s_reset_always,274,7568 -fused_write32s_reset_always,275,7568 -fused_write32s_reset_always,276,7568 -fused_write32s_reset_always,277,7567 -fused_write32s_reset_always,278,7569 -fused_write32s_reset_always,279,7568 -fused_write32s_reset_always,280,7568 -fused_write32s_reset_always,281,7569 -fused_write32s_reset_always,282,7569 -fused_write32s_reset_always,283,7569 -fused_write32s_reset_always,284,7571 -fused_write32s_reset_always,285,7570 -fused_write32s_reset_always,286,7573 -fused_write32s_reset_always,287,7569 -fused_write32s_reset_always,288,7570 -fused_write32s_reset_always,289,7568 -fused_write32s_reset_always,290,7567 -fused_write32s_reset_always,291,7569 -fused_write32s_reset_always,292,7566 -fused_write32s_reset_always,293,7570 -fused_write32s_reset_always,294,7567 -fused_write32s_reset_always,295,7569 -fused_write32s_reset_always,296,7575 -fused_write32s_reset_always,297,7565 -fused_write32s_reset_always,298,7569 -fused_write32s_reset_always,299,7567 -fused_write32s_reset_always,300,7568 -fused_write32s_reset_always,301,7570 -fused_write32s_reset_always,302,7570 -fused_write32s_reset_always,303,7570 -fused_write32s_reset_always,304,7569 -fused_write32s_reset_always,305,7568 -fused_write32s_reset_always,306,7571 -fused_write32s_reset_always,307,7569 -fused_write32s_reset_always,308,7569 -fused_write32s_reset_always,309,7572 -fused_write32s_reset_always,310,7570 -fused_write32s_reset_always,311,7570 -fused_write32s_reset_always,312,7570 -fused_write32s_reset_always,313,7573 -fused_write32s_reset_always,314,7569 -fused_write32s_reset_always,315,7566 -fused_write32s_reset_always,316,7569 -fused_write32s_reset_always,317,7566 -fused_write32s_reset_always,318,7568 -fused_write32s_reset_always,319,7569 -fused_write32s_reset_always,320,7570 -fused_write32s_reset_always,321,7568 -fused_write32s_reset_always,322,7568 -fused_write32s_reset_always,323,7569 -fused_write32s_reset_always,324,7569 -fused_write32s_reset_always,325,7568 -fused_write32s_reset_always,326,7567 -fused_write32s_reset_always,327,7573 -fused_write32s_reset_always,328,7562 -fused_write32s_reset_always,329,7555 -fused_write32s_reset_always,330,7557 -fused_write32s_reset_always,331,7558 -fused_write32s_reset_always,332,7557 -fused_write32s_reset_always,333,7558 -fused_write32s_reset_always,334,7561 -fused_write32s_reset_always,335,7563 -fused_write32s_reset_always,336,7560 -fused_write32s_reset_always,337,7555 -fused_write32s_reset_always,338,7557 -fused_write32s_reset_always,339,7561 -fused_write32s_reset_always,340,7570 -fused_write32s_reset_always,341,7571 -fused_write32s_reset_always,342,7558 -fused_write32s_reset_always,343,7558 -fused_write32s_reset_always,344,7559 -fused_write32s_reset_always,345,7567 -fused_write32s_reset_always,346,7559 -fused_write32s_reset_always,347,7568 -fused_write32s_reset_always,348,7569 -fused_write32s_reset_always,349,7567 -fused_write32s_reset_always,350,7566 -fused_write32s_reset_always,351,7568 -fused_write32s_reset_always,352,7569 -fused_write32s_reset_always,353,7570 -fused_write32s_reset_always,354,7566 -fused_write32s_reset_always,355,7567 -fused_write32s_reset_always,356,7568 -fused_write32s_reset_always,357,7569 -fused_write32s_reset_always,358,7570 -fused_write32s_reset_always,359,7595 -fused_write32s_reset_always,360,7621 -fused_write32s_reset_always,361,7592 -fused_write32s_reset_always,362,7574 -fused_write32s_reset_always,363,7581 -fused_write32s_reset_always,364,7584 -fused_write32s_reset_always,365,7585 -fused_write32s_reset_always,366,7583 -fused_write32s_reset_always,367,7583 -fused_write32s_reset_always,368,7577 -fused_write32s_reset_always,369,7601 -fused_write32s_reset_always,370,7562 -fused_write32s_reset_always,371,7567 -fused_write32s_reset_always,372,7567 -fused_write32s_reset_always,373,7567 -fused_write32s_reset_always,374,7571 -fused_write32s_reset_always,375,7567 -fused_write32s_reset_always,376,7570 -fused_write32s_reset_always,377,7565 -fused_write32s_reset_always,378,7572 -fused_write32s_reset_always,379,7570 -fused_write32s_reset_always,380,7572 -fused_write32s_reset_always,381,7566 -fused_write32s_reset_always,382,7568 -fused_write32s_reset_always,383,7567 -fused_write32s_reset_always,384,7568 -fused_write32s_reset_always,385,7571 -fused_write32s_reset_always,386,7569 -fused_write32s_reset_always,387,7570 -fused_write32s_reset_always,388,7566 -fused_write32s_reset_always,389,7565 -fused_write32s_reset_always,390,7570 -fused_write32s_reset_always,391,7560 -fused_write32s_reset_always,392,7559 -fused_write32s_reset_always,393,7572 -fused_write32s_reset_always,394,7569 -fused_write32s_reset_always,395,7566 -fused_write32s_reset_always,396,7568 -fused_write32s_reset_always,397,7569 -fused_write32s_reset_always,398,7570 -fused_write32s_reset_always,399,7571 -fused_write32s_reset_always,400,7569 -fused_write32s_reset_always,401,7566 -fused_write32s_reset_always,402,7571 -fused_write32s_reset_always,403,7570 -fused_write32s_reset_always,404,7569 -fused_write32s_reset_always,405,7570 -fused_write32s_reset_always,406,7567 -fused_write32s_reset_always,407,7572 -fused_write32s_reset_always,408,7576 -fused_write32s_reset_always,409,7564 -fused_write32s_reset_always,410,7573 -fused_write32s_reset_always,411,7566 -fused_write32s_reset_always,412,7569 -fused_write32s_reset_always,413,7568 -fused_write32s_reset_always,414,7570 -fused_write32s_reset_always,415,7567 -fused_write32s_reset_always,416,7570 -fused_write32s_reset_always,417,7567 -fused_write32s_reset_always,418,7568 -fused_write32s_reset_always,419,7568 -fused_write32s_reset_always,420,7569 -fused_write32s_reset_always,421,7568 -fused_write32s_reset_always,422,7566 -fused_write32s_reset_always,423,7569 -fused_write32s_reset_always,424,7568 -fused_write32s_reset_always,425,7571 -fused_write32s_reset_always,426,7556 -fused_write32s_reset_always,427,7575 -fused_write32s_reset_always,428,7567 -fused_write32s_reset_always,429,7566 -fused_write32s_reset_always,430,7574 -fused_write32s_reset_always,431,7569 -fused_write32s_reset_always,432,7568 -fused_write32s_reset_always,433,7566 -fused_write32s_reset_always,434,7562 -fused_write32s_reset_always,435,7568 -fused_write32s_reset_always,436,7567 -fused_write32s_reset_always,437,7572 -fused_write32s_reset_always,438,7569 -fused_write32s_reset_always,439,7565 -fused_write32s_reset_always,440,7566 -fused_write32s_reset_always,441,7575 -fused_write32s_reset_always,442,7565 -fused_write32s_reset_always,443,7568 -fused_write32s_reset_always,444,7567 -fused_write32s_reset_always,445,7570 -fused_write32s_reset_always,446,7565 -fused_write32s_reset_always,447,7569 -fused_write32s_reset_always,448,7569 -fused_write32s_reset_always,449,7568 -fused_write32s_reset_always,450,7569 -fused_write32s_reset_always,451,7569 -fused_write32s_reset_always,452,7569 -fused_write32s_reset_always,453,7567 -fused_write32s_reset_always,454,7568 -fused_write32s_reset_always,455,7567 -fused_write32s_reset_always,456,7572 -fused_write32s_reset_always,457,7566 -fused_write32s_reset_always,458,7561 -fused_write32s_reset_always,459,7559 -fused_write32s_reset_always,460,7561 -fused_write32s_reset_always,461,7559 -fused_write32s_reset_always,462,7560 -fused_write32s_reset_always,463,7571 -fused_write32s_reset_always,464,7569 -fused_write32s_reset_always,465,7572 -fused_write32s_reset_always,466,7561 -fused_write32s_reset_always,467,7561 -fused_write32s_reset_always,468,7556 -fused_write32s_reset_always,469,7554 -fused_write32s_reset_always,470,7569 -fused_write32s_reset_always,471,7567 -fused_write32s_reset_always,472,7567 -fused_write32s_reset_always,473,7571 -fused_write32s_reset_always,474,7568 -fused_write32s_reset_always,475,7562 -fused_write32s_reset_always,476,7568 -fused_write32s_reset_always,477,7567 -fused_write32s_reset_always,478,7568 -fused_write32s_reset_always,479,7570 -fused_write32s_reset_always,480,7570 -fused_write32s_reset_always,481,7573 -fused_write32s_reset_always,482,7569 -fused_write32s_reset_always,483,7566 -fused_write32s_reset_always,484,7565 -fused_write32s_reset_always,485,7567 -fused_write32s_reset_always,486,7568 -fused_write32s_reset_always,487,7567 -fused_write32s_reset_always,488,7568 -fused_write32s_reset_always,489,7572 -fused_write32s_reset_always,490,7571 -fused_write32s_reset_always,491,7580 -fused_write32s_reset_always,492,7567 -fused_write32s_reset_always,493,7566 -fused_write32s_reset_always,494,7569 -fused_write32s_reset_always,495,7569 -fused_write32s_reset_always,496,7569 -fused_write32s_reset_always,497,7567 -fused_write32s_reset_always,498,7569 -fused_write32s_reset_always,499,7569 -fused_write32s_reset_always,500,7566 -fused_write32s_reset_always,501,7566 -fused_write32s_reset_always,502,7573 -fused_write32s_reset_always,503,7568 -fused_write32s_reset_always,504,7567 -fused_write32s_reset_always,505,7566 -fused_write32s_reset_always,506,7568 -fused_write32s_reset_always,507,7577 -fused_write32s_reset_always,508,7570 -fused_write32s_reset_always,509,7567 -fused_write32s_reset_always,510,7569 -fused_write32s_reset_always,511,7572 -fused_write32s_reset_always,512,7568 -fused_write32s_reset_always,513,7564 -fused_write32s_reset_always,514,7571 -fused_write32s_reset_always,515,7568 -fused_write32s_reset_always,516,7566 -fused_write32s_reset_always,517,7569 -fused_write32s_reset_always,518,7570 -fused_write32s_reset_always,519,7570 -fused_write32s_reset_always,520,7568 -fused_write32s_reset_always,521,7570 -fused_write32s_reset_always,522,7570 -fused_write32s_reset_always,523,7566 -fused_write32s_reset_always,524,7569 -fused_write32s_reset_always,525,7569 -fused_write32s_reset_always,526,7568 -fused_write32s_reset_always,527,7571 -fused_write32s_reset_always,528,7566 -fused_write32s_reset_always,529,7567 -fused_write32s_reset_always,530,7565 -fused_write32s_reset_always,531,7569 -fused_write32s_reset_always,532,7568 -fused_write32s_reset_always,533,7569 -fused_write32s_reset_always,534,7568 -fused_write32s_reset_always,535,7568 -fused_write32s_reset_always,536,7568 -fused_write32s_reset_always,537,7568 -fused_write32s_reset_always,538,7569 -fused_write32s_reset_always,539,7568 -fused_write32s_reset_always,540,7568 -fused_write32s_reset_always,541,7570 -fused_write32s_reset_always,542,7570 -fused_write32s_reset_always,543,7568 -fused_write32s_reset_always,544,7567 -fused_write32s_reset_always,545,7568 -fused_write32s_reset_always,546,7570 -fused_write32s_reset_always,547,7572 -fused_write32s_reset_always,548,7566 -fused_write32s_reset_always,549,7567 -fused_write32s_reset_always,550,7568 -fused_write32s_reset_always,551,7570 -fused_write32s_reset_always,552,7567 -fused_write32s_reset_always,553,7572 -fused_write32s_reset_always,554,7567 -fused_write32s_reset_always,555,7566 -fused_write32s_reset_always,556,7569 -fused_write32s_reset_always,557,7566 -fused_write32s_reset_always,558,7568 -fused_write32s_reset_always,559,7569 -fused_write32s_reset_always,560,7570 -fused_write32s_reset_always,561,7570 -fused_write32s_reset_always,562,7568 -fused_write32s_reset_always,563,7567 -fused_write32s_reset_always,564,7567 -fused_write32s_reset_always,565,7565 -fused_write32s_reset_always,566,7570 -fused_write32s_reset_always,567,7567 -fused_write32s_reset_always,568,7569 -fused_write32s_reset_always,569,7566 -fused_write32s_reset_always,570,7569 -fused_write32s_reset_always,571,7567 -fused_write32s_reset_always,572,7569 -fused_write32s_reset_always,573,7570 -fused_write32s_reset_always,574,7573 -fused_write32s_reset_always,575,7568 -fused_write32s_reset_always,576,7569 -fused_write32s_reset_always,577,7568 -fused_write32s_reset_always,578,7570 -fused_write32s_reset_always,579,7572 -fused_write32s_reset_always,580,7585 -fused_write32s_reset_always,581,7568 -fused_write32s_reset_always,582,7568 -fused_write32s_reset_always,583,7572 -fused_write32s_reset_always,584,7567 -fused_write32s_reset_always,585,7569 -fused_write32s_reset_always,586,7573 -fused_write32s_reset_always,587,7567 -fused_write32s_reset_always,588,7566 -fused_write32s_reset_always,589,7572 -fused_write32s_reset_always,590,7572 -fused_write32s_reset_always,591,7572 -fused_write32s_reset_always,592,7566 -fused_write32s_reset_always,593,7568 -fused_write32s_reset_always,594,7572 -fused_write32s_reset_always,595,7567 -fused_write32s_reset_always,596,7570 -fused_write32s_reset_always,597,7568 -fused_write32s_reset_always,598,7569 -fused_write32s_reset_always,599,7570 -fused_write32s_reset_always,600,7572 -fused_write32s_reset_always,601,7566 -fused_write32s_reset_always,602,7569 -fused_write32s_reset_always,603,7566 -fused_write32s_reset_always,604,7565 -fused_write32s_reset_always,605,7568 -fused_write32s_reset_always,606,7567 -fused_write32s_reset_always,607,7569 -fused_write32s_reset_always,608,7570 -fused_write32s_reset_always,609,7573 -fused_write32s_reset_always,610,7568 -fused_write32s_reset_always,611,7568 -fused_write32s_reset_always,612,7567 -fused_write32s_reset_always,613,7575 -fused_write32s_reset_always,614,7567 -fused_write32s_reset_always,615,7569 -fused_write32s_reset_always,616,7573 -fused_write32s_reset_always,617,7567 -fused_write32s_reset_always,618,7567 -fused_write32s_reset_always,619,7567 -fused_write32s_reset_always,620,7568 -fused_write32s_reset_always,621,7567 -fused_write32s_reset_always,622,7568 -fused_write32s_reset_always,623,7565 -fused_write32s_reset_always,624,7569 -fused_write32s_reset_always,625,7567 -fused_write32s_reset_always,626,7570 -fused_write32s_reset_always,627,7567 -fused_write32s_reset_always,628,7566 -fused_write32s_reset_always,629,7568 -fused_write32s_reset_always,630,7568 -fused_write32s_reset_always,631,7565 -fused_write32s_reset_always,632,7570 -fused_write32s_reset_always,633,7567 -fused_write32s_reset_always,634,7568 -fused_write32s_reset_always,635,7569 -fused_write32s_reset_always,636,7568 -fused_write32s_reset_always,637,7568 -fused_write32s_reset_always,638,7569 -fused_write32s_reset_always,639,7567 -fused_write32s_reset_always,640,7570 -fused_write32s_reset_always,641,7568 -fused_write32s_reset_always,642,7566 -fused_write32s_reset_always,643,7567 -fused_write32s_reset_always,644,7568 -fused_write32s_reset_always,645,7569 -fused_write32s_reset_always,646,7569 -fused_write32s_reset_always,647,7567 -fused_write32s_reset_always,648,7569 -fused_write32s_reset_always,649,7569 -fused_write32s_reset_always,650,7569 -fused_write32s_reset_always,651,7567 -fused_write32s_reset_always,652,7567 -fused_write32s_reset_always,653,7568 -fused_write32s_reset_always,654,7569 -fused_write32s_reset_always,655,7569 -fused_write32s_reset_always,656,7568 -fused_write32s_reset_always,657,7571 -fused_write32s_reset_always,658,7571 -fused_write32s_reset_always,659,7569 -fused_write32s_reset_always,660,7567 -fused_write32s_reset_always,661,7571 -fused_write32s_reset_always,662,7567 -fused_write32s_reset_always,663,7571 -fused_write32s_reset_always,664,7569 -fused_write32s_reset_always,665,7569 -fused_write32s_reset_always,666,7567 -fused_write32s_reset_always,667,7568 -fused_write32s_reset_always,668,7569 -fused_write32s_reset_always,669,7565 -fused_write32s_reset_always,670,7566 -fused_write32s_reset_always,671,7569 -fused_write32s_reset_always,672,7572 -fused_write32s_reset_always,673,7569 -fused_write32s_reset_always,674,7569 -fused_write32s_reset_always,675,7571 -fused_write32s_reset_always,676,7572 -fused_write32s_reset_always,677,7566 -fused_write32s_reset_always,678,7567 -fused_write32s_reset_always,679,7568 -fused_write32s_reset_always,680,7571 -fused_write32s_reset_always,681,7569 -fused_write32s_reset_always,682,7571 -fused_write32s_reset_always,683,7569 -fused_write32s_reset_always,684,7567 -fused_write32s_reset_always,685,7565 -fused_write32s_reset_always,686,7568 -fused_write32s_reset_always,687,7567 -fused_write32s_reset_always,688,7568 -fused_write32s_reset_always,689,7570 -fused_write32s_reset_always,690,7564 -fused_write32s_reset_always,691,7567 -fused_write32s_reset_always,692,7569 -fused_write32s_reset_always,693,7568 -fused_write32s_reset_always,694,7571 -fused_write32s_reset_always,695,7567 -fused_write32s_reset_always,696,7567 -fused_write32s_reset_always,697,7569 -fused_write32s_reset_always,698,7572 -fused_write32s_reset_always,699,7566 -fused_write32s_reset_always,700,7569 -fused_write32s_reset_always,701,7568 -fused_write32s_reset_always,702,7569 -fused_write32s_reset_always,703,7569 -fused_write32s_reset_always,704,7569 -fused_write32s_reset_always,705,7568 -fused_write32s_reset_always,706,7567 -fused_write32s_reset_always,707,7568 -fused_write32s_reset_always,708,7569 -fused_write32s_reset_always,709,7568 -fused_write32s_reset_always,710,7572 -fused_write32s_reset_always,711,7570 -fused_write32s_reset_always,712,7566 -fused_write32s_reset_always,713,7569 -fused_write32s_reset_always,714,7569 -fused_write32s_reset_always,715,7568 -fused_write32s_reset_always,716,7569 -fused_write32s_reset_always,717,7566 -fused_write32s_reset_always,718,7570 -fused_write32s_reset_always,719,7569 -fused_write32s_reset_always,720,7569 -fused_write32s_reset_always,721,7566 -fused_write32s_reset_always,722,7567 -fused_write32s_reset_always,723,7569 -fused_write32s_reset_always,724,7569 -fused_write32s_reset_always,725,7569 -fused_write32s_reset_always,726,7571 -fused_write32s_reset_always,727,7564 -fused_write32s_reset_always,728,7567 -fused_write32s_reset_always,729,7567 -fused_write32s_reset_always,730,7574 -fused_write32s_reset_always,731,7568 -fused_write32s_reset_always,732,7576 -fused_write32s_reset_always,733,7569 -fused_write32s_reset_always,734,7565 -fused_write32s_reset_always,735,7565 -fused_write32s_reset_always,736,7569 -fused_write32s_reset_always,737,7568 -fused_write32s_reset_always,738,7566 -fused_write32s_reset_always,739,7570 -fused_write32s_reset_always,740,7570 -fused_write32s_reset_always,741,7570 -fused_write32s_reset_always,742,7569 -fused_write32s_reset_always,743,7566 -fused_write32s_reset_always,744,7567 -fused_write32s_reset_always,745,7568 -fused_write32s_reset_always,746,7566 -fused_write32s_reset_always,747,7565 -fused_write32s_reset_always,748,7568 -fused_write32s_reset_always,749,7571 -fused_write32s_reset_always,750,7566 -fused_write32s_reset_always,751,7574 -fused_write32s_reset_always,752,7570 -fused_write32s_reset_always,753,7571 -fused_write32s_reset_always,754,7572 -fused_write32s_reset_always,755,7560 -fused_write32s_reset_always,756,7566 -fused_write32s_reset_always,757,7567 -fused_write32s_reset_always,758,7565 -fused_write32s_reset_always,759,7566 -fused_write32s_reset_always,760,7565 -fused_write32s_reset_always,761,7567 -fused_write32s_reset_always,762,7569 -fused_write32s_reset_always,763,7566 -fused_write32s_reset_always,764,7566 -fused_write32s_reset_always,765,7569 -fused_write32s_reset_always,766,7566 -fused_write32s_reset_always,767,7567 -fused_write32s_reset_always,768,7565 -fused_write32s_reset_always,769,7564 -fused_write32s_reset_always,770,7567 -fused_write32s_reset_always,771,7577 -fused_write32s_reset_always,772,7564 -fused_write32s_reset_always,773,7564 -fused_write32s_reset_always,774,7573 -fused_write32s_reset_always,775,7565 -fused_write32s_reset_always,776,7565 -fused_write32s_reset_always,777,7571 -fused_write32s_reset_always,778,7572 -fused_write32s_reset_always,779,7567 -fused_write32s_reset_always,780,7565 -fused_write32s_reset_always,781,7565 -fused_write32s_reset_always,782,7564 -fused_write32s_reset_always,783,7565 -fused_write32s_reset_always,784,7567 -fused_write32s_reset_always,785,7564 -fused_write32s_reset_always,786,7564 -fused_write32s_reset_always,787,7565 -fused_write32s_reset_always,788,7565 -fused_write32s_reset_always,789,7569 -fused_write32s_reset_always,790,7568 -fused_write32s_reset_always,791,7565 -fused_write32s_reset_always,792,7572 -fused_write32s_reset_always,793,7568 -fused_write32s_reset_always,794,7565 -fused_write32s_reset_always,795,7567 -fused_write32s_reset_always,796,7569 -fused_write32s_reset_always,797,7565 -fused_write32s_reset_always,798,7570 -fused_write32s_reset_always,799,7566 -fused_write32s_reset_always,800,7565 -fused_write32s_reset_always,801,7567 -fused_write32s_reset_always,802,7565 -fused_write32s_reset_always,803,7569 -fused_write32s_reset_always,804,7564 -fused_write32s_reset_always,805,7565 -fused_write32s_reset_always,806,7567 -fused_write32s_reset_always,807,7569 -fused_write32s_reset_always,808,7566 -fused_write32s_reset_always,809,7568 -fused_write32s_reset_always,810,7571 -fused_write32s_reset_always,811,7577 -fused_write32s_reset_always,812,7568 -fused_write32s_reset_always,813,7566 -fused_write32s_reset_always,814,7564 -fused_write32s_reset_always,815,7568 -fused_write32s_reset_always,816,7571 -fused_write32s_reset_always,817,7565 -fused_write32s_reset_always,818,7567 -fused_write32s_reset_always,819,7566 -fused_write32s_reset_always,820,7571 -fused_write32s_reset_always,821,7568 -fused_write32s_reset_always,822,7566 -fused_write32s_reset_always,823,7565 -fused_write32s_reset_always,824,7568 -fused_write32s_reset_always,825,7568 -fused_write32s_reset_always,826,7570 -fused_write32s_reset_always,827,7568 -fused_write32s_reset_always,828,7567 -fused_write32s_reset_always,829,7568 -fused_write32s_reset_always,830,7569 -fused_write32s_reset_always,831,7570 -fused_write32s_reset_always,832,7567 -fused_write32s_reset_always,833,7569 -fused_write32s_reset_always,834,7570 -fused_write32s_reset_always,835,7567 -fused_write32s_reset_always,836,7569 -fused_write32s_reset_always,837,7568 -fused_write32s_reset_always,838,7570 -fused_write32s_reset_always,839,7565 -fused_write32s_reset_always,840,7567 -fused_write32s_reset_always,841,7569 -fused_write32s_reset_always,842,7570 -fused_write32s_reset_always,843,7567 -fused_write32s_reset_always,844,7568 -fused_write32s_reset_always,845,7570 -fused_write32s_reset_always,846,7566 -fused_write32s_reset_always,847,7569 -fused_write32s_reset_always,848,7567 -fused_write32s_reset_always,849,7572 -fused_write32s_reset_always,850,7566 -fused_write32s_reset_always,851,7569 -fused_write32s_reset_always,852,7572 -fused_write32s_reset_always,853,7569 -fused_write32s_reset_always,854,7566 -fused_write32s_reset_always,855,7570 -fused_write32s_reset_always,856,7569 -fused_write32s_reset_always,857,7567 -fused_write32s_reset_always,858,7569 -fused_write32s_reset_always,859,7569 -fused_write32s_reset_always,860,7569 -fused_write32s_reset_always,861,7570 -fused_write32s_reset_always,862,7568 -fused_write32s_reset_always,863,7567 -fused_write32s_reset_always,864,7566 -fused_write32s_reset_always,865,7566 -fused_write32s_reset_always,866,7570 -fused_write32s_reset_always,867,7566 -fused_write32s_reset_always,868,7569 -fused_write32s_reset_always,869,7568 -fused_write32s_reset_always,870,7566 -fused_write32s_reset_always,871,7569 -fused_write32s_reset_always,872,7567 -fused_write32s_reset_always,873,7567 -fused_write32s_reset_always,874,7569 -fused_write32s_reset_always,875,7566 -fused_write32s_reset_always,876,7568 -fused_write32s_reset_always,877,7571 -fused_write32s_reset_always,878,7570 -fused_write32s_reset_always,879,7571 -fused_write32s_reset_always,880,7568 -fused_write32s_reset_always,881,7569 -fused_write32s_reset_always,882,7569 -fused_write32s_reset_always,883,7568 -fused_write32s_reset_always,884,7566 -fused_write32s_reset_always,885,7568 -fused_write32s_reset_always,886,7565 -fused_write32s_reset_always,887,7569 -fused_write32s_reset_always,888,7569 -fused_write32s_reset_always,889,7568 -fused_write32s_reset_always,890,7569 -fused_write32s_reset_always,891,7566 -fused_write32s_reset_always,892,7566 -fused_write32s_reset_always,893,7567 -fused_write32s_reset_always,894,7568 -fused_write32s_reset_always,895,7567 -fused_write32s_reset_always,896,7569 -fused_write32s_reset_always,897,7570 -fused_write32s_reset_always,898,7571 -fused_write32s_reset_always,899,7566 -fused_write32s_reset_always,900,7569 -fused_write32s_reset_always,901,7567 -fused_write32s_reset_always,902,7569 -fused_write32s_reset_always,903,7568 -fused_write32s_reset_always,904,7568 -fused_write32s_reset_always,905,7568 -fused_write32s_reset_always,906,7567 -fused_write32s_reset_always,907,7568 -fused_write32s_reset_always,908,7568 -fused_write32s_reset_always,909,7567 -fused_write32s_reset_always,910,7568 -fused_write32s_reset_always,911,7570 -fused_write32s_reset_always,912,7567 -fused_write32s_reset_always,913,7577 -fused_write32s_reset_always,914,7567 -fused_write32s_reset_always,915,7576 -fused_write32s_reset_always,916,7581 -fused_write32s_reset_always,917,7578 -fused_write32s_reset_always,918,7572 -fused_write32s_reset_always,919,7563 -fused_write32s_reset_always,920,7564 -fused_write32s_reset_always,921,7569 -fused_write32s_reset_always,922,7562 -fused_write32s_reset_always,923,7566 -fused_write32s_reset_always,924,7567 -fused_write32s_reset_always,925,7567 -fused_write32s_reset_always,926,7565 -fused_write32s_reset_always,927,7566 -fused_write32s_reset_always,928,7567 -fused_write32s_reset_always,929,7564 -fused_write32s_reset_always,930,7565 -fused_write32s_reset_always,931,7566 -fused_write32s_reset_always,932,7565 -fused_write32s_reset_always,933,7565 -fused_write32s_reset_always,934,7568 -fused_write32s_reset_always,935,7568 -fused_write32s_reset_always,936,7569 -fused_write32s_reset_always,937,7565 -fused_write32s_reset_always,938,7568 -fused_write32s_reset_always,939,7563 -fused_write32s_reset_always,940,7566 -fused_write32s_reset_always,941,7565 -fused_write32s_reset_always,942,7570 -fused_write32s_reset_always,943,7564 -fused_write32s_reset_always,944,7566 -fused_write32s_reset_always,945,7566 -fused_write32s_reset_always,946,7565 -fused_write32s_reset_always,947,7566 -fused_write32s_reset_always,948,7564 -fused_write32s_reset_always,949,7564 -fused_write32s_reset_always,950,7565 -fused_write32s_reset_always,951,7565 -fused_write32s_reset_always,952,7564 -fused_write32s_reset_always,953,7568 -fused_write32s_reset_always,954,7564 -fused_write32s_reset_always,955,7567 -fused_write32s_reset_always,956,7565 -fused_write32s_reset_always,957,7565 -fused_write32s_reset_always,958,7566 -fused_write32s_reset_always,959,7568 -fused_write32s_reset_always,960,7574 -fused_write32s_reset_always,961,7567 -fused_write32s_reset_always,962,7571 -fused_write32s_reset_always,963,7569 -fused_write32s_reset_always,964,7569 -fused_write32s_reset_always,965,7570 -fused_write32s_reset_always,966,7565 -fused_write32s_reset_always,967,7568 -fused_write32s_reset_always,968,7570 -fused_write32s_reset_always,969,7565 -fused_write32s_reset_always,970,7570 -fused_write32s_reset_always,971,7569 -fused_write32s_reset_always,972,7568 -fused_write32s_reset_always,973,7568 -fused_write32s_reset_always,974,7568 -fused_write32s_reset_always,975,7565 -fused_write32s_reset_always,976,7569 -fused_write32s_reset_always,977,7567 -fused_write32s_reset_always,978,7568 -fused_write32s_reset_always,979,7570 -fused_write32s_reset_always,980,7568 -fused_write32s_reset_always,981,7566 -fused_write32s_reset_always,982,7568 -fused_write32s_reset_always,983,7576 -fused_write32s_reset_always,984,7567 -fused_write32s_reset_always,985,7565 -fused_write32s_reset_always,986,7569 -fused_write32s_reset_always,987,7566 -fused_write32s_reset_always,988,7568 -fused_write32s_reset_always,989,7568 -fused_write32s_reset_always,990,7569 -fused_write32s_reset_always,991,7566 -fused_write32s_reset_always,992,7567 -fused_write32s_reset_always,993,7568 -fused_write32s_reset_always,994,7569 -fused_write32s_reset_always,995,7568 -fused_write32s_reset_always,996,7567 -fused_write32s_reset_always,997,7568 -fused_write32s_reset_always,998,7571 -fused_write32s_reset_always,999,7569 -separate_xclbins,0,5111 -separate_xclbins,1,5066 -separate_xclbins,2,5184 -separate_xclbins,3,5112 -separate_xclbins,4,4993 -separate_xclbins,5,4987 -separate_xclbins,6,4979 -separate_xclbins,7,4988 -separate_xclbins,8,4987 -separate_xclbins,9,4977 -separate_xclbins,10,4980 -separate_xclbins,11,4984 -separate_xclbins,12,4979 -separate_xclbins,13,4983 -separate_xclbins,14,4986 -separate_xclbins,15,4989 -separate_xclbins,16,4978 -separate_xclbins,17,4974 -separate_xclbins,18,4981 -separate_xclbins,19,4975 -separate_xclbins,20,4978 -separate_xclbins,21,4970 -separate_xclbins,22,4971 -separate_xclbins,23,4973 -separate_xclbins,24,4975 -separate_xclbins,25,4983 -separate_xclbins,26,4987 -separate_xclbins,27,4982 -separate_xclbins,28,4974 -separate_xclbins,29,4971 -separate_xclbins,30,4974 -separate_xclbins,31,4976 -separate_xclbins,32,4973 -separate_xclbins,33,4980 -separate_xclbins,34,4972 -separate_xclbins,35,4978 -separate_xclbins,36,4970 -separate_xclbins,37,4971 -separate_xclbins,38,4975 -separate_xclbins,39,4977 -separate_xclbins,40,4973 -separate_xclbins,41,4973 -separate_xclbins,42,4970 -separate_xclbins,43,4972 -separate_xclbins,44,4966 -separate_xclbins,45,4968 -separate_xclbins,46,4973 -separate_xclbins,47,4976 -separate_xclbins,48,4976 -separate_xclbins,49,4971 -separate_xclbins,50,4970 -separate_xclbins,51,4971 -separate_xclbins,52,4972 -separate_xclbins,53,4964 -separate_xclbins,54,4973 -separate_xclbins,55,4976 -separate_xclbins,56,4971 -separate_xclbins,57,5010 -separate_xclbins,58,5177 -separate_xclbins,59,5130 -separate_xclbins,60,5070 -separate_xclbins,61,4975 -separate_xclbins,62,4979 -separate_xclbins,63,4976 -separate_xclbins,64,4980 -separate_xclbins,65,4974 -separate_xclbins,66,4968 -separate_xclbins,67,4968 -separate_xclbins,68,4972 -separate_xclbins,69,4979 -separate_xclbins,70,4974 -separate_xclbins,71,4970 -separate_xclbins,72,4960 -separate_xclbins,73,4967 -separate_xclbins,74,4968 -separate_xclbins,75,4971 -separate_xclbins,76,4975 -separate_xclbins,77,4972 -separate_xclbins,78,4967 -separate_xclbins,79,4970 -separate_xclbins,80,4974 -separate_xclbins,81,4973 -separate_xclbins,82,4972 -separate_xclbins,83,4977 -separate_xclbins,84,4973 -separate_xclbins,85,4969 -separate_xclbins,86,4972 -separate_xclbins,87,4978 -separate_xclbins,88,4981 -separate_xclbins,89,4966 -separate_xclbins,90,4972 -separate_xclbins,91,4972 -separate_xclbins,92,4972 -separate_xclbins,93,4975 -separate_xclbins,94,4970 -separate_xclbins,95,4972 -separate_xclbins,96,4971 -separate_xclbins,97,4966 -separate_xclbins,98,4974 -separate_xclbins,99,4965 -separate_xclbins,100,4972 -separate_xclbins,101,4973 -separate_xclbins,102,4970 -separate_xclbins,103,4970 -separate_xclbins,104,4970 -separate_xclbins,105,4981 -separate_xclbins,106,4962 -separate_xclbins,107,4972 -separate_xclbins,108,4975 -separate_xclbins,109,4972 -separate_xclbins,110,4973 -separate_xclbins,111,4974 -separate_xclbins,112,4975 -separate_xclbins,113,4974 -separate_xclbins,114,4975 -separate_xclbins,115,4973 -separate_xclbins,116,4970 -separate_xclbins,117,4968 -separate_xclbins,118,4975 -separate_xclbins,119,4970 -separate_xclbins,120,5142 -separate_xclbins,121,5084 -separate_xclbins,122,4997 -separate_xclbins,123,5031 -separate_xclbins,124,5085 -separate_xclbins,125,5036 -separate_xclbins,126,4970 -separate_xclbins,127,4974 -separate_xclbins,128,4994 -separate_xclbins,129,4987 -separate_xclbins,130,4973 -separate_xclbins,131,4968 -separate_xclbins,132,4967 -separate_xclbins,133,4974 -separate_xclbins,134,5015 -separate_xclbins,135,5009 -separate_xclbins,136,4998 -separate_xclbins,137,4965 -separate_xclbins,138,4972 -separate_xclbins,139,4963 -separate_xclbins,140,4964 -separate_xclbins,141,4978 -separate_xclbins,142,4974 -separate_xclbins,143,4981 -separate_xclbins,144,4992 -separate_xclbins,145,5004 -separate_xclbins,146,5018 -separate_xclbins,147,5049 -separate_xclbins,148,5071 -separate_xclbins,149,5007 -separate_xclbins,150,5003 -separate_xclbins,151,5038 -separate_xclbins,152,5026 -separate_xclbins,153,4994 -separate_xclbins,154,4994 -separate_xclbins,155,5051 -separate_xclbins,156,5004 -separate_xclbins,157,4979 -separate_xclbins,158,4969 -separate_xclbins,159,4983 -separate_xclbins,160,5011 -separate_xclbins,161,4979 -separate_xclbins,162,4995 -separate_xclbins,163,5051 -separate_xclbins,164,5017 -separate_xclbins,165,5012 -separate_xclbins,166,4973 -separate_xclbins,167,4967 -separate_xclbins,168,4972 -separate_xclbins,169,4970 -separate_xclbins,170,5020 -separate_xclbins,171,5121 -separate_xclbins,172,5117 -separate_xclbins,173,5046 -separate_xclbins,174,4971 -separate_xclbins,175,4970 -separate_xclbins,176,4965 -separate_xclbins,177,5226 -separate_xclbins,178,5130 -separate_xclbins,179,5114 -separate_xclbins,180,5061 -separate_xclbins,181,4971 -separate_xclbins,182,4973 -separate_xclbins,183,4966 -separate_xclbins,184,4976 -separate_xclbins,185,4962 -separate_xclbins,186,4968 -separate_xclbins,187,4972 -separate_xclbins,188,4971 -separate_xclbins,189,4973 -separate_xclbins,190,4977 -separate_xclbins,191,4962 -separate_xclbins,192,4969 -separate_xclbins,193,4961 -separate_xclbins,194,4960 -separate_xclbins,195,4969 -separate_xclbins,196,4975 -separate_xclbins,197,4972 -separate_xclbins,198,4967 -separate_xclbins,199,4965 -separate_xclbins,200,4970 -separate_xclbins,201,4965 -separate_xclbins,202,4966 -separate_xclbins,203,4970 -separate_xclbins,204,4966 -separate_xclbins,205,4965 -separate_xclbins,206,4968 -separate_xclbins,207,4967 -separate_xclbins,208,4966 -separate_xclbins,209,4977 -separate_xclbins,210,4969 -separate_xclbins,211,4965 -separate_xclbins,212,4965 -separate_xclbins,213,4976 -separate_xclbins,214,4966 -separate_xclbins,215,4964 -separate_xclbins,216,4968 -separate_xclbins,217,4968 -separate_xclbins,218,4968 -separate_xclbins,219,4967 -separate_xclbins,220,4965 -separate_xclbins,221,4960 -separate_xclbins,222,4971 -separate_xclbins,223,4971 -separate_xclbins,224,4978 -separate_xclbins,225,4973 -separate_xclbins,226,4968 -separate_xclbins,227,4967 -separate_xclbins,228,4968 -separate_xclbins,229,4972 -separate_xclbins,230,4964 -separate_xclbins,231,4969 -separate_xclbins,232,4960 -separate_xclbins,233,4964 -separate_xclbins,234,4970 -separate_xclbins,235,4970 -separate_xclbins,236,4962 -separate_xclbins,237,4970 -separate_xclbins,238,4971 -separate_xclbins,239,4962 -separate_xclbins,240,4966 -separate_xclbins,241,4966 -separate_xclbins,242,4972 -separate_xclbins,243,4967 -separate_xclbins,244,4962 -separate_xclbins,245,4967 -separate_xclbins,246,4962 -separate_xclbins,247,4970 -separate_xclbins,248,4965 -separate_xclbins,249,4987 -separate_xclbins,250,4965 -separate_xclbins,251,4970 -separate_xclbins,252,4962 -separate_xclbins,253,4968 -separate_xclbins,254,4970 -separate_xclbins,255,4972 -separate_xclbins,256,4974 -separate_xclbins,257,4966 -separate_xclbins,258,4968 -separate_xclbins,259,4972 -separate_xclbins,260,4970 -separate_xclbins,261,4965 -separate_xclbins,262,4967 -separate_xclbins,263,5001 -separate_xclbins,264,5005 -separate_xclbins,265,4963 -separate_xclbins,266,4963 -separate_xclbins,267,4969 -separate_xclbins,268,4965 -separate_xclbins,269,4976 -separate_xclbins,270,4962 -separate_xclbins,271,4967 -separate_xclbins,272,4963 -separate_xclbins,273,4967 -separate_xclbins,274,4969 -separate_xclbins,275,4967 -separate_xclbins,276,4971 -separate_xclbins,277,4962 -separate_xclbins,278,4965 -separate_xclbins,279,4962 -separate_xclbins,280,4962 -separate_xclbins,281,4977 -separate_xclbins,282,4966 -separate_xclbins,283,4962 -separate_xclbins,284,4964 -separate_xclbins,285,4977 -separate_xclbins,286,4962 -separate_xclbins,287,4967 -separate_xclbins,288,4966 -separate_xclbins,289,4974 -separate_xclbins,290,4963 -separate_xclbins,291,4966 -separate_xclbins,292,4966 -separate_xclbins,293,4969 -separate_xclbins,294,4965 -separate_xclbins,295,4963 -separate_xclbins,296,4966 -separate_xclbins,297,4968 -separate_xclbins,298,4962 -separate_xclbins,299,4966 -separate_xclbins,300,4968 -separate_xclbins,301,4967 -separate_xclbins,302,4967 -separate_xclbins,303,4967 -separate_xclbins,304,4969 -separate_xclbins,305,4972 -separate_xclbins,306,4969 -separate_xclbins,307,4963 -separate_xclbins,308,4970 -separate_xclbins,309,4974 -separate_xclbins,310,4967 -separate_xclbins,311,4965 -separate_xclbins,312,4962 -separate_xclbins,313,4973 -separate_xclbins,314,4963 -separate_xclbins,315,4964 -separate_xclbins,316,4966 -separate_xclbins,317,4962 -separate_xclbins,318,4963 -separate_xclbins,319,4970 -separate_xclbins,320,4975 -separate_xclbins,321,4973 -separate_xclbins,322,4968 -separate_xclbins,323,4970 -separate_xclbins,324,4963 -separate_xclbins,325,4966 -separate_xclbins,326,4989 -separate_xclbins,327,5019 -separate_xclbins,328,4981 -separate_xclbins,329,4973 -separate_xclbins,330,4968 -separate_xclbins,331,4973 -separate_xclbins,332,4972 -separate_xclbins,333,4971 -separate_xclbins,334,4970 -separate_xclbins,335,4970 -separate_xclbins,336,4985 -separate_xclbins,337,4977 -separate_xclbins,338,4974 -separate_xclbins,339,4974 -separate_xclbins,340,4974 -separate_xclbins,341,4967 -separate_xclbins,342,4972 -separate_xclbins,343,4969 -separate_xclbins,344,4977 -separate_xclbins,345,4969 -separate_xclbins,346,4974 -separate_xclbins,347,4971 -separate_xclbins,348,4966 -separate_xclbins,349,4983 -separate_xclbins,350,4966 -separate_xclbins,351,4973 -separate_xclbins,352,4968 -separate_xclbins,353,4977 -separate_xclbins,354,4969 -separate_xclbins,355,4972 -separate_xclbins,356,4960 -separate_xclbins,357,4981 -separate_xclbins,358,4966 -separate_xclbins,359,4968 -separate_xclbins,360,4970 -separate_xclbins,361,4965 -separate_xclbins,362,4967 -separate_xclbins,363,4974 -separate_xclbins,364,4969 -separate_xclbins,365,4993 -separate_xclbins,366,4991 -separate_xclbins,367,4972 -separate_xclbins,368,4967 -separate_xclbins,369,4974 -separate_xclbins,370,4973 -separate_xclbins,371,4971 -separate_xclbins,372,4974 -separate_xclbins,373,4974 -separate_xclbins,374,4970 -separate_xclbins,375,4975 -separate_xclbins,376,4966 -separate_xclbins,377,4975 -separate_xclbins,378,4975 -separate_xclbins,379,4970 -separate_xclbins,380,4965 -separate_xclbins,381,4967 -separate_xclbins,382,4969 -separate_xclbins,383,4969 -separate_xclbins,384,4961 -separate_xclbins,385,4965 -separate_xclbins,386,4976 -separate_xclbins,387,4964 -separate_xclbins,388,4968 -separate_xclbins,389,4967 -separate_xclbins,390,4970 -separate_xclbins,391,4968 -separate_xclbins,392,4970 -separate_xclbins,393,4976 -separate_xclbins,394,4975 -separate_xclbins,395,4972 -separate_xclbins,396,4971 -separate_xclbins,397,4971 -separate_xclbins,398,4973 -separate_xclbins,399,4961 -separate_xclbins,400,4978 -separate_xclbins,401,4967 -separate_xclbins,402,4969 -separate_xclbins,403,4963 -separate_xclbins,404,4969 -separate_xclbins,405,4962 -separate_xclbins,406,4972 -separate_xclbins,407,4975 -separate_xclbins,408,4972 -separate_xclbins,409,4969 -separate_xclbins,410,4975 -separate_xclbins,411,4971 -separate_xclbins,412,4971 -separate_xclbins,413,4969 -separate_xclbins,414,4975 -separate_xclbins,415,4966 -separate_xclbins,416,4976 -separate_xclbins,417,4972 -separate_xclbins,418,4965 -separate_xclbins,419,4967 -separate_xclbins,420,4982 -separate_xclbins,421,4972 -separate_xclbins,422,4972 -separate_xclbins,423,4971 -separate_xclbins,424,4971 -separate_xclbins,425,4967 -separate_xclbins,426,4967 -separate_xclbins,427,4969 -separate_xclbins,428,4977 -separate_xclbins,429,4981 -separate_xclbins,430,4977 -separate_xclbins,431,4976 -separate_xclbins,432,4968 -separate_xclbins,433,4967 -separate_xclbins,434,4963 -separate_xclbins,435,4969 -separate_xclbins,436,4969 -separate_xclbins,437,4968 -separate_xclbins,438,4973 -separate_xclbins,439,4969 -separate_xclbins,440,4964 -separate_xclbins,441,4974 -separate_xclbins,442,4970 -separate_xclbins,443,4980 -separate_xclbins,444,4977 -separate_xclbins,445,4969 -separate_xclbins,446,4970 -separate_xclbins,447,4970 -separate_xclbins,448,4972 -separate_xclbins,449,4970 -separate_xclbins,450,4972 -separate_xclbins,451,4977 -separate_xclbins,452,4963 -separate_xclbins,453,4973 -separate_xclbins,454,4971 -separate_xclbins,455,4964 -separate_xclbins,456,4972 -separate_xclbins,457,4969 -separate_xclbins,458,4972 -separate_xclbins,459,4970 -separate_xclbins,460,4964 -separate_xclbins,461,4966 -separate_xclbins,462,4961 -separate_xclbins,463,4971 -separate_xclbins,464,4969 -separate_xclbins,465,4979 -separate_xclbins,466,4989 -separate_xclbins,467,4995 -separate_xclbins,468,4968 -separate_xclbins,469,4973 -separate_xclbins,470,4976 -separate_xclbins,471,4971 -separate_xclbins,472,4968 -separate_xclbins,473,4967 -separate_xclbins,474,4971 -separate_xclbins,475,4965 -separate_xclbins,476,4972 -separate_xclbins,477,4965 -separate_xclbins,478,4967 -separate_xclbins,479,4966 -separate_xclbins,480,4967 -separate_xclbins,481,4969 -separate_xclbins,482,4967 -separate_xclbins,483,4975 -separate_xclbins,484,4976 -separate_xclbins,485,4963 -separate_xclbins,486,4972 -separate_xclbins,487,4968 -separate_xclbins,488,4965 -separate_xclbins,489,4970 -separate_xclbins,490,4982 -separate_xclbins,491,4970 -separate_xclbins,492,4974 -separate_xclbins,493,4975 -separate_xclbins,494,4973 -separate_xclbins,495,4971 -separate_xclbins,496,4971 -separate_xclbins,497,4966 -separate_xclbins,498,4978 -separate_xclbins,499,4972 -separate_xclbins,500,4968 -separate_xclbins,501,4971 -separate_xclbins,502,4966 -separate_xclbins,503,4973 -separate_xclbins,504,4975 -separate_xclbins,505,4978 -separate_xclbins,506,4966 -separate_xclbins,507,4971 -separate_xclbins,508,4969 -separate_xclbins,509,4970 -separate_xclbins,510,4973 -separate_xclbins,511,4973 -separate_xclbins,512,4968 -separate_xclbins,513,4968 -separate_xclbins,514,4968 -separate_xclbins,515,4975 -separate_xclbins,516,4961 -separate_xclbins,517,4971 -separate_xclbins,518,4964 -separate_xclbins,519,4969 -separate_xclbins,520,4978 -separate_xclbins,521,4966 -separate_xclbins,522,4973 -separate_xclbins,523,4963 -separate_xclbins,524,4965 -separate_xclbins,525,4962 -separate_xclbins,526,4967 -separate_xclbins,527,4968 -separate_xclbins,528,4976 -separate_xclbins,529,4973 -separate_xclbins,530,4985 -separate_xclbins,531,4974 -separate_xclbins,532,4971 -separate_xclbins,533,4979 -separate_xclbins,534,4970 -separate_xclbins,535,4976 -separate_xclbins,536,4972 -separate_xclbins,537,4979 -separate_xclbins,538,4964 -separate_xclbins,539,4966 -separate_xclbins,540,4967 -separate_xclbins,541,4967 -separate_xclbins,542,4967 -separate_xclbins,543,4966 -separate_xclbins,544,4971 -separate_xclbins,545,4966 -separate_xclbins,546,4974 -separate_xclbins,547,4976 -separate_xclbins,548,5030 -separate_xclbins,549,5022 -separate_xclbins,550,5197 -separate_xclbins,551,5025 -separate_xclbins,552,4966 -separate_xclbins,553,4965 -separate_xclbins,554,4968 -separate_xclbins,555,4970 -separate_xclbins,556,4967 -separate_xclbins,557,4969 -separate_xclbins,558,4965 -separate_xclbins,559,4971 -separate_xclbins,560,4975 -separate_xclbins,561,4958 -separate_xclbins,562,4967 -separate_xclbins,563,6127 -separate_xclbins,564,5562 -separate_xclbins,565,4974 -separate_xclbins,566,4976 -separate_xclbins,567,4991 -separate_xclbins,568,4978 -separate_xclbins,569,4963 -separate_xclbins,570,4973 -separate_xclbins,571,4968 -separate_xclbins,572,4966 -separate_xclbins,573,4978 -separate_xclbins,574,4963 -separate_xclbins,575,5025 -separate_xclbins,576,5565 -separate_xclbins,577,6688 -separate_xclbins,578,5195 -separate_xclbins,579,5486 -separate_xclbins,580,5568 -separate_xclbins,581,5188 -separate_xclbins,582,5493 -separate_xclbins,583,5505 -separate_xclbins,584,5850 -separate_xclbins,585,6141 -separate_xclbins,586,6412 -separate_xclbins,587,6854 -separate_xclbins,588,6927 -separate_xclbins,589,7201 -separate_xclbins,590,6713 -separate_xclbins,591,7044 -separate_xclbins,592,6991 -separate_xclbins,593,6430 -separate_xclbins,594,6557 -separate_xclbins,595,5815 -separate_xclbins,596,5650 -separate_xclbins,597,5705 -separate_xclbins,598,5797 -separate_xclbins,599,5612 -separate_xclbins,600,5604 -separate_xclbins,601,5796 -separate_xclbins,602,6510 -separate_xclbins,603,6908 -separate_xclbins,604,6704 -separate_xclbins,605,6729 -separate_xclbins,606,5799 -separate_xclbins,607,5833 -separate_xclbins,608,6569 -separate_xclbins,609,5586 -separate_xclbins,610,5204 -separate_xclbins,611,5087 -separate_xclbins,612,5037 -separate_xclbins,613,4995 -separate_xclbins,614,4995 -separate_xclbins,615,4988 -separate_xclbins,616,4988 -separate_xclbins,617,4989 -separate_xclbins,618,4989 -separate_xclbins,619,4987 -separate_xclbins,620,4986 -separate_xclbins,621,4989 -separate_xclbins,622,4991 -separate_xclbins,623,4992 -separate_xclbins,624,4988 -separate_xclbins,625,4995 -separate_xclbins,626,4985 -separate_xclbins,627,4983 -separate_xclbins,628,4999 -separate_xclbins,629,4989 -separate_xclbins,630,4964 -separate_xclbins,631,4976 -separate_xclbins,632,4968 -separate_xclbins,633,4967 -separate_xclbins,634,4967 -separate_xclbins,635,4968 -separate_xclbins,636,4960 -separate_xclbins,637,4971 -separate_xclbins,638,4974 -separate_xclbins,639,4963 -separate_xclbins,640,4974 -separate_xclbins,641,4978 -separate_xclbins,642,4963 -separate_xclbins,643,4973 -separate_xclbins,644,4967 -separate_xclbins,645,4977 -separate_xclbins,646,4971 -separate_xclbins,647,4968 -separate_xclbins,648,4964 -separate_xclbins,649,4963 -separate_xclbins,650,4973 -separate_xclbins,651,4974 -separate_xclbins,652,4961 -separate_xclbins,653,4963 -separate_xclbins,654,4967 -separate_xclbins,655,4963 -separate_xclbins,656,4967 -separate_xclbins,657,4966 -separate_xclbins,658,4962 -separate_xclbins,659,4994 -separate_xclbins,660,5009 -separate_xclbins,661,5006 -separate_xclbins,662,5013 -separate_xclbins,663,5142 -separate_xclbins,664,5127 -separate_xclbins,665,5118 -separate_xclbins,666,5169 -separate_xclbins,667,5115 -separate_xclbins,668,5086 -separate_xclbins,669,5116 -separate_xclbins,670,5106 -separate_xclbins,671,5047 -separate_xclbins,672,4963 -separate_xclbins,673,4975 -separate_xclbins,674,4972 -separate_xclbins,675,4972 -separate_xclbins,676,4969 -separate_xclbins,677,4964 -separate_xclbins,678,4967 -separate_xclbins,679,4963 -separate_xclbins,680,4968 -separate_xclbins,681,4980 -separate_xclbins,682,4967 -separate_xclbins,683,4982 -separate_xclbins,684,4996 -separate_xclbins,685,5028 -separate_xclbins,686,5028 -separate_xclbins,687,5009 -separate_xclbins,688,5030 -separate_xclbins,689,5025 -separate_xclbins,690,5038 -separate_xclbins,691,5035 -separate_xclbins,692,5039 -separate_xclbins,693,5125 -separate_xclbins,694,5104 -separate_xclbins,695,5011 -separate_xclbins,696,4969 -separate_xclbins,697,4963 -separate_xclbins,698,4970 -separate_xclbins,699,4971 -separate_xclbins,700,4960 -separate_xclbins,701,4965 -separate_xclbins,702,4963 -separate_xclbins,703,4969 -separate_xclbins,704,4961 -separate_xclbins,705,4970 -separate_xclbins,706,4965 -separate_xclbins,707,4965 -separate_xclbins,708,4970 -separate_xclbins,709,4966 -separate_xclbins,710,4960 -separate_xclbins,711,4966 -separate_xclbins,712,4963 -separate_xclbins,713,4972 -separate_xclbins,714,4967 -separate_xclbins,715,4967 -separate_xclbins,716,4972 -separate_xclbins,717,4978 -separate_xclbins,718,4972 -separate_xclbins,719,4978 -separate_xclbins,720,4970 -separate_xclbins,721,4971 -separate_xclbins,722,4966 -separate_xclbins,723,4984 -separate_xclbins,724,4967 -separate_xclbins,725,4966 -separate_xclbins,726,4962 -separate_xclbins,727,4969 -separate_xclbins,728,4973 -separate_xclbins,729,4967 -separate_xclbins,730,4966 -separate_xclbins,731,4971 -separate_xclbins,732,4965 -separate_xclbins,733,4971 -separate_xclbins,734,4996 -separate_xclbins,735,4966 -separate_xclbins,736,4972 -separate_xclbins,737,4961 -separate_xclbins,738,4972 -separate_xclbins,739,4966 -separate_xclbins,740,4963 -separate_xclbins,741,4968 -separate_xclbins,742,4969 -separate_xclbins,743,4983 -separate_xclbins,744,4973 -separate_xclbins,745,4965 -separate_xclbins,746,4981 -separate_xclbins,747,5038 -separate_xclbins,748,5108 -separate_xclbins,749,5121 -separate_xclbins,750,5046 -separate_xclbins,751,4971 -separate_xclbins,752,4970 -separate_xclbins,753,4978 -separate_xclbins,754,4968 -separate_xclbins,755,4975 -separate_xclbins,756,4963 -separate_xclbins,757,4966 -separate_xclbins,758,4972 -separate_xclbins,759,4966 -separate_xclbins,760,4970 -separate_xclbins,761,5040 -separate_xclbins,762,5109 -separate_xclbins,763,5117 -separate_xclbins,764,5017 -separate_xclbins,765,4968 -separate_xclbins,766,4964 -separate_xclbins,767,4962 -separate_xclbins,768,4967 -separate_xclbins,769,4968 -separate_xclbins,770,4967 -separate_xclbins,771,4970 -separate_xclbins,772,4974 -separate_xclbins,773,4971 -separate_xclbins,774,4966 -separate_xclbins,775,4971 -separate_xclbins,776,4962 -separate_xclbins,777,4964 -separate_xclbins,778,4966 -separate_xclbins,779,4966 -separate_xclbins,780,4963 -separate_xclbins,781,4961 -separate_xclbins,782,4969 -separate_xclbins,783,4977 -separate_xclbins,784,4959 -separate_xclbins,785,5001 -separate_xclbins,786,5028 -separate_xclbins,787,4962 -separate_xclbins,788,4962 -separate_xclbins,789,4975 -separate_xclbins,790,4964 -separate_xclbins,791,4966 -separate_xclbins,792,4975 -separate_xclbins,793,4962 -separate_xclbins,794,4967 -separate_xclbins,795,4971 -separate_xclbins,796,4970 -separate_xclbins,797,4969 -separate_xclbins,798,4975 -separate_xclbins,799,4970 -separate_xclbins,800,4963 -separate_xclbins,801,4967 -separate_xclbins,802,4969 -separate_xclbins,803,4971 -separate_xclbins,804,4964 -separate_xclbins,805,4970 -separate_xclbins,806,4967 -separate_xclbins,807,4964 -separate_xclbins,808,4973 -separate_xclbins,809,4979 -separate_xclbins,810,4966 -separate_xclbins,811,4973 -separate_xclbins,812,4976 -separate_xclbins,813,4970 -separate_xclbins,814,4970 -separate_xclbins,815,4975 -separate_xclbins,816,4976 -separate_xclbins,817,4971 -separate_xclbins,818,4965 -separate_xclbins,819,4967 -separate_xclbins,820,4963 -separate_xclbins,821,4967 -separate_xclbins,822,4972 -separate_xclbins,823,4972 -separate_xclbins,824,4966 -separate_xclbins,825,4972 -separate_xclbins,826,4962 -separate_xclbins,827,4966 -separate_xclbins,828,4966 -separate_xclbins,829,4974 -separate_xclbins,830,4969 -separate_xclbins,831,4966 -separate_xclbins,832,4969 -separate_xclbins,833,4969 -separate_xclbins,834,4971 -separate_xclbins,835,4964 -separate_xclbins,836,4965 -separate_xclbins,837,5087 -separate_xclbins,838,5121 -separate_xclbins,839,5119 -separate_xclbins,840,5026 -separate_xclbins,841,4970 -separate_xclbins,842,4965 -separate_xclbins,843,4974 -separate_xclbins,844,4993 -separate_xclbins,845,4990 -separate_xclbins,846,4974 -separate_xclbins,847,4972 -separate_xclbins,848,4970 -separate_xclbins,849,4971 -separate_xclbins,850,4964 -separate_xclbins,851,4966 -separate_xclbins,852,4975 -separate_xclbins,853,4974 -separate_xclbins,854,4967 -separate_xclbins,855,4966 -separate_xclbins,856,4963 -separate_xclbins,857,4981 -separate_xclbins,858,4964 -separate_xclbins,859,4961 -separate_xclbins,860,4978 -separate_xclbins,861,4975 -separate_xclbins,862,4963 -separate_xclbins,863,4968 -separate_xclbins,864,4977 -separate_xclbins,865,4968 -separate_xclbins,866,4976 -separate_xclbins,867,4964 -separate_xclbins,868,4974 -separate_xclbins,869,4966 -separate_xclbins,870,4964 -separate_xclbins,871,4970 -separate_xclbins,872,4968 -separate_xclbins,873,4966 -separate_xclbins,874,4965 -separate_xclbins,875,4999 -separate_xclbins,876,5129 -separate_xclbins,877,5120 -separate_xclbins,878,5011 -separate_xclbins,879,4968 -separate_xclbins,880,4966 -separate_xclbins,881,4968 -separate_xclbins,882,4967 -separate_xclbins,883,4970 -separate_xclbins,884,4975 -separate_xclbins,885,4966 -separate_xclbins,886,4968 -separate_xclbins,887,4965 -separate_xclbins,888,4962 -separate_xclbins,889,4966 -separate_xclbins,890,4965 -separate_xclbins,891,4974 -separate_xclbins,892,4969 -separate_xclbins,893,4961 -separate_xclbins,894,4966 -separate_xclbins,895,4968 -separate_xclbins,896,4960 -separate_xclbins,897,4973 -separate_xclbins,898,4963 -separate_xclbins,899,4964 -separate_xclbins,900,4965 -separate_xclbins,901,4973 -separate_xclbins,902,4972 -separate_xclbins,903,4963 -separate_xclbins,904,5030 -separate_xclbins,905,4989 -separate_xclbins,906,4979 -separate_xclbins,907,4983 -separate_xclbins,908,4968 -separate_xclbins,909,4969 -separate_xclbins,910,4966 -separate_xclbins,911,4974 -separate_xclbins,912,4970 -separate_xclbins,913,4960 -separate_xclbins,914,5095 -separate_xclbins,915,5115 -separate_xclbins,916,5186 -separate_xclbins,917,5120 -separate_xclbins,918,4957 -separate_xclbins,919,4968 -separate_xclbins,920,4970 -separate_xclbins,921,4966 -separate_xclbins,922,4967 -separate_xclbins,923,4977 -separate_xclbins,924,4978 -separate_xclbins,925,5002 -separate_xclbins,926,4968 -separate_xclbins,927,4960 -separate_xclbins,928,4981 -separate_xclbins,929,4966 -separate_xclbins,930,4970 -separate_xclbins,931,4961 -separate_xclbins,932,4977 -separate_xclbins,933,4971 -separate_xclbins,934,4966 -separate_xclbins,935,4963 -separate_xclbins,936,4962 -separate_xclbins,937,4965 -separate_xclbins,938,4963 -separate_xclbins,939,4960 -separate_xclbins,940,4980 -separate_xclbins,941,4970 -separate_xclbins,942,4967 -separate_xclbins,943,4964 -separate_xclbins,944,4970 -separate_xclbins,945,4965 -separate_xclbins,946,4971 -separate_xclbins,947,4965 -separate_xclbins,948,4972 -separate_xclbins,949,4969 -separate_xclbins,950,4974 -separate_xclbins,951,4978 -separate_xclbins,952,4967 -separate_xclbins,953,5127 -separate_xclbins,954,5123 -separate_xclbins,955,5013 -separate_xclbins,956,4963 -separate_xclbins,957,4964 -separate_xclbins,958,4971 -separate_xclbins,959,4964 -separate_xclbins,960,4969 -separate_xclbins,961,4968 -separate_xclbins,962,4970 -separate_xclbins,963,4960 -separate_xclbins,964,4974 -separate_xclbins,965,5818 -separate_xclbins,966,4978 -separate_xclbins,967,4975 -separate_xclbins,968,4971 -separate_xclbins,969,4978 -separate_xclbins,970,4968 -separate_xclbins,971,4965 -separate_xclbins,972,4982 -separate_xclbins,973,4964 -separate_xclbins,974,4968 -separate_xclbins,975,4967 -separate_xclbins,976,4984 -separate_xclbins,977,4962 -separate_xclbins,978,5128 -separate_xclbins,979,5118 -separate_xclbins,980,5086 -separate_xclbins,981,4970 -separate_xclbins,982,4976 -separate_xclbins,983,4981 -separate_xclbins,984,4974 -separate_xclbins,985,4969 -separate_xclbins,986,4967 -separate_xclbins,987,4969 -separate_xclbins,988,4968 -separate_xclbins,989,4970 -separate_xclbins,990,4966 -separate_xclbins,991,4961 -separate_xclbins,992,4969 -separate_xclbins,993,4967 -separate_xclbins,994,4975 -separate_xclbins,995,4966 -separate_xclbins,996,4963 -separate_xclbins,997,4963 -separate_xclbins,998,4963 -separate_xclbins,999,4965 -fused_write32s_reset_ifchangedfinegrained,0,2409 -fused_write32s_reset_ifchangedfinegrained,1,2370 -fused_write32s_reset_ifchangedfinegrained,2,2348 -fused_write32s_reset_ifchangedfinegrained,3,2330 -fused_write32s_reset_ifchangedfinegrained,4,2328 -fused_write32s_reset_ifchangedfinegrained,5,2327 -fused_write32s_reset_ifchangedfinegrained,6,2329 -fused_write32s_reset_ifchangedfinegrained,7,2331 -fused_write32s_reset_ifchangedfinegrained,8,2327 -fused_write32s_reset_ifchangedfinegrained,9,2328 -fused_write32s_reset_ifchangedfinegrained,10,2327 -fused_write32s_reset_ifchangedfinegrained,11,2335 -fused_write32s_reset_ifchangedfinegrained,12,2338 -fused_write32s_reset_ifchangedfinegrained,13,2351 -fused_write32s_reset_ifchangedfinegrained,14,2328 -fused_write32s_reset_ifchangedfinegrained,15,2345 -fused_write32s_reset_ifchangedfinegrained,16,2317 -fused_write32s_reset_ifchangedfinegrained,17,2326 -fused_write32s_reset_ifchangedfinegrained,18,2330 -fused_write32s_reset_ifchangedfinegrained,19,2335 -fused_write32s_reset_ifchangedfinegrained,20,2331 -fused_write32s_reset_ifchangedfinegrained,21,2334 -fused_write32s_reset_ifchangedfinegrained,22,2332 -fused_write32s_reset_ifchangedfinegrained,23,2330 -fused_write32s_reset_ifchangedfinegrained,24,2329 -fused_write32s_reset_ifchangedfinegrained,25,2328 -fused_write32s_reset_ifchangedfinegrained,26,2336 -fused_write32s_reset_ifchangedfinegrained,27,2323 -fused_write32s_reset_ifchangedfinegrained,28,2336 -fused_write32s_reset_ifchangedfinegrained,29,2326 -fused_write32s_reset_ifchangedfinegrained,30,2325 -fused_write32s_reset_ifchangedfinegrained,31,2329 -fused_write32s_reset_ifchangedfinegrained,32,2328 -fused_write32s_reset_ifchangedfinegrained,33,2328 -fused_write32s_reset_ifchangedfinegrained,34,2328 -fused_write32s_reset_ifchangedfinegrained,35,2328 -fused_write32s_reset_ifchangedfinegrained,36,2329 -fused_write32s_reset_ifchangedfinegrained,37,2332 -fused_write32s_reset_ifchangedfinegrained,38,2334 -fused_write32s_reset_ifchangedfinegrained,39,2331 -fused_write32s_reset_ifchangedfinegrained,40,2335 -fused_write32s_reset_ifchangedfinegrained,41,2335 -fused_write32s_reset_ifchangedfinegrained,42,2335 -fused_write32s_reset_ifchangedfinegrained,43,2329 -fused_write32s_reset_ifchangedfinegrained,44,2339 -fused_write32s_reset_ifchangedfinegrained,45,2329 -fused_write32s_reset_ifchangedfinegrained,46,2329 -fused_write32s_reset_ifchangedfinegrained,47,2344 -fused_write32s_reset_ifchangedfinegrained,48,2340 -fused_write32s_reset_ifchangedfinegrained,49,2336 -fused_write32s_reset_ifchangedfinegrained,50,2338 -fused_write32s_reset_ifchangedfinegrained,51,2336 -fused_write32s_reset_ifchangedfinegrained,52,2337 -fused_write32s_reset_ifchangedfinegrained,53,2335 -fused_write32s_reset_ifchangedfinegrained,54,2335 -fused_write32s_reset_ifchangedfinegrained,55,2336 -fused_write32s_reset_ifchangedfinegrained,56,2333 -fused_write32s_reset_ifchangedfinegrained,57,2333 -fused_write32s_reset_ifchangedfinegrained,58,2329 -fused_write32s_reset_ifchangedfinegrained,59,2326 -fused_write32s_reset_ifchangedfinegrained,60,2321 -fused_write32s_reset_ifchangedfinegrained,61,2325 -fused_write32s_reset_ifchangedfinegrained,62,2329 -fused_write32s_reset_ifchangedfinegrained,63,2322 -fused_write32s_reset_ifchangedfinegrained,64,2321 -fused_write32s_reset_ifchangedfinegrained,65,2335 -fused_write32s_reset_ifchangedfinegrained,66,2323 -fused_write32s_reset_ifchangedfinegrained,67,2311 -fused_write32s_reset_ifchangedfinegrained,68,2570 -fused_write32s_reset_ifchangedfinegrained,69,2329 -fused_write32s_reset_ifchangedfinegrained,70,2309 -fused_write32s_reset_ifchangedfinegrained,71,2303 -fused_write32s_reset_ifchangedfinegrained,72,2304 -fused_write32s_reset_ifchangedfinegrained,73,2301 -fused_write32s_reset_ifchangedfinegrained,74,2297 -fused_write32s_reset_ifchangedfinegrained,75,2301 -fused_write32s_reset_ifchangedfinegrained,76,2340 -fused_write32s_reset_ifchangedfinegrained,77,2332 -fused_write32s_reset_ifchangedfinegrained,78,2328 -fused_write32s_reset_ifchangedfinegrained,79,2324 -fused_write32s_reset_ifchangedfinegrained,80,2334 -fused_write32s_reset_ifchangedfinegrained,81,2324 -fused_write32s_reset_ifchangedfinegrained,82,2326 -fused_write32s_reset_ifchangedfinegrained,83,2326 -fused_write32s_reset_ifchangedfinegrained,84,2322 -fused_write32s_reset_ifchangedfinegrained,85,2327 -fused_write32s_reset_ifchangedfinegrained,86,2320 -fused_write32s_reset_ifchangedfinegrained,87,2325 -fused_write32s_reset_ifchangedfinegrained,88,2324 -fused_write32s_reset_ifchangedfinegrained,89,2328 -fused_write32s_reset_ifchangedfinegrained,90,2321 -fused_write32s_reset_ifchangedfinegrained,91,2321 -fused_write32s_reset_ifchangedfinegrained,92,2322 -fused_write32s_reset_ifchangedfinegrained,93,2333 -fused_write32s_reset_ifchangedfinegrained,94,2331 -fused_write32s_reset_ifchangedfinegrained,95,2332 -fused_write32s_reset_ifchangedfinegrained,96,2321 -fused_write32s_reset_ifchangedfinegrained,97,2319 -fused_write32s_reset_ifchangedfinegrained,98,2321 -fused_write32s_reset_ifchangedfinegrained,99,2320 -fused_write32s_reset_ifchangedfinegrained,100,2321 -fused_write32s_reset_ifchangedfinegrained,101,2321 -fused_write32s_reset_ifchangedfinegrained,102,2325 -fused_write32s_reset_ifchangedfinegrained,103,2323 -fused_write32s_reset_ifchangedfinegrained,104,2325 -fused_write32s_reset_ifchangedfinegrained,105,2332 -fused_write32s_reset_ifchangedfinegrained,106,2327 -fused_write32s_reset_ifchangedfinegrained,107,2328 -fused_write32s_reset_ifchangedfinegrained,108,2331 -fused_write32s_reset_ifchangedfinegrained,109,2323 -fused_write32s_reset_ifchangedfinegrained,110,2324 -fused_write32s_reset_ifchangedfinegrained,111,2322 -fused_write32s_reset_ifchangedfinegrained,112,2323 -fused_write32s_reset_ifchangedfinegrained,113,2323 -fused_write32s_reset_ifchangedfinegrained,114,2321 -fused_write32s_reset_ifchangedfinegrained,115,2321 -fused_write32s_reset_ifchangedfinegrained,116,2320 -fused_write32s_reset_ifchangedfinegrained,117,2335 -fused_write32s_reset_ifchangedfinegrained,118,2341 -fused_write32s_reset_ifchangedfinegrained,119,2320 -fused_write32s_reset_ifchangedfinegrained,120,2318 -fused_write32s_reset_ifchangedfinegrained,121,2322 -fused_write32s_reset_ifchangedfinegrained,122,2323 -fused_write32s_reset_ifchangedfinegrained,123,2306 -fused_write32s_reset_ifchangedfinegrained,124,2313 -fused_write32s_reset_ifchangedfinegrained,125,2311 -fused_write32s_reset_ifchangedfinegrained,126,2302 -fused_write32s_reset_ifchangedfinegrained,127,2305 -fused_write32s_reset_ifchangedfinegrained,128,2317 -fused_write32s_reset_ifchangedfinegrained,129,2312 -fused_write32s_reset_ifchangedfinegrained,130,2311 -fused_write32s_reset_ifchangedfinegrained,131,2313 -fused_write32s_reset_ifchangedfinegrained,132,2313 -fused_write32s_reset_ifchangedfinegrained,133,2316 -fused_write32s_reset_ifchangedfinegrained,134,2313 -fused_write32s_reset_ifchangedfinegrained,135,2314 -fused_write32s_reset_ifchangedfinegrained,136,2310 -fused_write32s_reset_ifchangedfinegrained,137,2314 -fused_write32s_reset_ifchangedfinegrained,138,2312 -fused_write32s_reset_ifchangedfinegrained,139,2319 -fused_write32s_reset_ifchangedfinegrained,140,2325 -fused_write32s_reset_ifchangedfinegrained,141,2330 -fused_write32s_reset_ifchangedfinegrained,142,2327 -fused_write32s_reset_ifchangedfinegrained,143,2323 -fused_write32s_reset_ifchangedfinegrained,144,2322 -fused_write32s_reset_ifchangedfinegrained,145,2328 -fused_write32s_reset_ifchangedfinegrained,146,2320 -fused_write32s_reset_ifchangedfinegrained,147,2319 -fused_write32s_reset_ifchangedfinegrained,148,2318 -fused_write32s_reset_ifchangedfinegrained,149,2323 -fused_write32s_reset_ifchangedfinegrained,150,2320 -fused_write32s_reset_ifchangedfinegrained,151,2320 -fused_write32s_reset_ifchangedfinegrained,152,2320 -fused_write32s_reset_ifchangedfinegrained,153,2319 -fused_write32s_reset_ifchangedfinegrained,154,2321 -fused_write32s_reset_ifchangedfinegrained,155,2325 -fused_write32s_reset_ifchangedfinegrained,156,2321 -fused_write32s_reset_ifchangedfinegrained,157,2322 -fused_write32s_reset_ifchangedfinegrained,158,2318 -fused_write32s_reset_ifchangedfinegrained,159,2318 -fused_write32s_reset_ifchangedfinegrained,160,2321 -fused_write32s_reset_ifchangedfinegrained,161,2322 -fused_write32s_reset_ifchangedfinegrained,162,2320 -fused_write32s_reset_ifchangedfinegrained,163,2319 -fused_write32s_reset_ifchangedfinegrained,164,2324 -fused_write32s_reset_ifchangedfinegrained,165,2317 -fused_write32s_reset_ifchangedfinegrained,166,2321 -fused_write32s_reset_ifchangedfinegrained,167,2320 -fused_write32s_reset_ifchangedfinegrained,168,2318 -fused_write32s_reset_ifchangedfinegrained,169,2322 -fused_write32s_reset_ifchangedfinegrained,170,2339 -fused_write32s_reset_ifchangedfinegrained,171,2333 -fused_write32s_reset_ifchangedfinegrained,172,2321 -fused_write32s_reset_ifchangedfinegrained,173,2321 -fused_write32s_reset_ifchangedfinegrained,174,2321 -fused_write32s_reset_ifchangedfinegrained,175,2323 -fused_write32s_reset_ifchangedfinegrained,176,2322 -fused_write32s_reset_ifchangedfinegrained,177,2326 -fused_write32s_reset_ifchangedfinegrained,178,2320 -fused_write32s_reset_ifchangedfinegrained,179,2316 -fused_write32s_reset_ifchangedfinegrained,180,2322 -fused_write32s_reset_ifchangedfinegrained,181,2321 -fused_write32s_reset_ifchangedfinegrained,182,2322 -fused_write32s_reset_ifchangedfinegrained,183,2326 -fused_write32s_reset_ifchangedfinegrained,184,2319 -fused_write32s_reset_ifchangedfinegrained,185,2320 -fused_write32s_reset_ifchangedfinegrained,186,2321 -fused_write32s_reset_ifchangedfinegrained,187,2332 -fused_write32s_reset_ifchangedfinegrained,188,2325 -fused_write32s_reset_ifchangedfinegrained,189,2326 -fused_write32s_reset_ifchangedfinegrained,190,2331 -fused_write32s_reset_ifchangedfinegrained,191,2325 -fused_write32s_reset_ifchangedfinegrained,192,2323 -fused_write32s_reset_ifchangedfinegrained,193,2326 -fused_write32s_reset_ifchangedfinegrained,194,2312 -fused_write32s_reset_ifchangedfinegrained,195,2308 -fused_write32s_reset_ifchangedfinegrained,196,2317 -fused_write32s_reset_ifchangedfinegrained,197,2314 -fused_write32s_reset_ifchangedfinegrained,198,2310 -fused_write32s_reset_ifchangedfinegrained,199,2310 -fused_write32s_reset_ifchangedfinegrained,200,2309 -fused_write32s_reset_ifchangedfinegrained,201,2309 -fused_write32s_reset_ifchangedfinegrained,202,2314 -fused_write32s_reset_ifchangedfinegrained,203,2313 -fused_write32s_reset_ifchangedfinegrained,204,2320 -fused_write32s_reset_ifchangedfinegrained,205,2316 -fused_write32s_reset_ifchangedfinegrained,206,2331 -fused_write32s_reset_ifchangedfinegrained,207,2325 -fused_write32s_reset_ifchangedfinegrained,208,2324 -fused_write32s_reset_ifchangedfinegrained,209,2326 -fused_write32s_reset_ifchangedfinegrained,210,2319 -fused_write32s_reset_ifchangedfinegrained,211,2323 -fused_write32s_reset_ifchangedfinegrained,212,2324 -fused_write32s_reset_ifchangedfinegrained,213,2322 -fused_write32s_reset_ifchangedfinegrained,214,2329 -fused_write32s_reset_ifchangedfinegrained,215,2331 -fused_write32s_reset_ifchangedfinegrained,216,2328 -fused_write32s_reset_ifchangedfinegrained,217,2321 -fused_write32s_reset_ifchangedfinegrained,218,2327 -fused_write32s_reset_ifchangedfinegrained,219,2324 -fused_write32s_reset_ifchangedfinegrained,220,2325 -fused_write32s_reset_ifchangedfinegrained,221,2324 -fused_write32s_reset_ifchangedfinegrained,222,2325 -fused_write32s_reset_ifchangedfinegrained,223,2325 -fused_write32s_reset_ifchangedfinegrained,224,2322 -fused_write32s_reset_ifchangedfinegrained,225,2320 -fused_write32s_reset_ifchangedfinegrained,226,2322 -fused_write32s_reset_ifchangedfinegrained,227,2323 -fused_write32s_reset_ifchangedfinegrained,228,2325 -fused_write32s_reset_ifchangedfinegrained,229,2325 -fused_write32s_reset_ifchangedfinegrained,230,2324 -fused_write32s_reset_ifchangedfinegrained,231,2336 -fused_write32s_reset_ifchangedfinegrained,232,2327 -fused_write32s_reset_ifchangedfinegrained,233,2323 -fused_write32s_reset_ifchangedfinegrained,234,2322 -fused_write32s_reset_ifchangedfinegrained,235,2335 -fused_write32s_reset_ifchangedfinegrained,236,2319 -fused_write32s_reset_ifchangedfinegrained,237,2320 -fused_write32s_reset_ifchangedfinegrained,238,2321 -fused_write32s_reset_ifchangedfinegrained,239,2319 -fused_write32s_reset_ifchangedfinegrained,240,2321 -fused_write32s_reset_ifchangedfinegrained,241,2320 -fused_write32s_reset_ifchangedfinegrained,242,2319 -fused_write32s_reset_ifchangedfinegrained,243,2320 -fused_write32s_reset_ifchangedfinegrained,244,2321 -fused_write32s_reset_ifchangedfinegrained,245,2322 -fused_write32s_reset_ifchangedfinegrained,246,2322 -fused_write32s_reset_ifchangedfinegrained,247,2318 -fused_write32s_reset_ifchangedfinegrained,248,2327 -fused_write32s_reset_ifchangedfinegrained,249,2328 -fused_write32s_reset_ifchangedfinegrained,250,2321 -fused_write32s_reset_ifchangedfinegrained,251,2328 -fused_write32s_reset_ifchangedfinegrained,252,2321 -fused_write32s_reset_ifchangedfinegrained,253,2321 -fused_write32s_reset_ifchangedfinegrained,254,2324 -fused_write32s_reset_ifchangedfinegrained,255,2324 -fused_write32s_reset_ifchangedfinegrained,256,2319 -fused_write32s_reset_ifchangedfinegrained,257,2326 -fused_write32s_reset_ifchangedfinegrained,258,2330 -fused_write32s_reset_ifchangedfinegrained,259,2325 -fused_write32s_reset_ifchangedfinegrained,260,2325 -fused_write32s_reset_ifchangedfinegrained,261,2326 -fused_write32s_reset_ifchangedfinegrained,262,2320 -fused_write32s_reset_ifchangedfinegrained,263,2319 -fused_write32s_reset_ifchangedfinegrained,264,2320 -fused_write32s_reset_ifchangedfinegrained,265,2323 -fused_write32s_reset_ifchangedfinegrained,266,2313 -fused_write32s_reset_ifchangedfinegrained,267,2323 -fused_write32s_reset_ifchangedfinegrained,268,2321 -fused_write32s_reset_ifchangedfinegrained,269,2321 -fused_write32s_reset_ifchangedfinegrained,270,2321 -fused_write32s_reset_ifchangedfinegrained,271,2321 -fused_write32s_reset_ifchangedfinegrained,272,2322 -fused_write32s_reset_ifchangedfinegrained,273,2322 -fused_write32s_reset_ifchangedfinegrained,274,2324 -fused_write32s_reset_ifchangedfinegrained,275,2322 -fused_write32s_reset_ifchangedfinegrained,276,2325 -fused_write32s_reset_ifchangedfinegrained,277,2329 -fused_write32s_reset_ifchangedfinegrained,278,2323 -fused_write32s_reset_ifchangedfinegrained,279,2322 -fused_write32s_reset_ifchangedfinegrained,280,2320 -fused_write32s_reset_ifchangedfinegrained,281,2319 -fused_write32s_reset_ifchangedfinegrained,282,2318 -fused_write32s_reset_ifchangedfinegrained,283,2321 -fused_write32s_reset_ifchangedfinegrained,284,2319 -fused_write32s_reset_ifchangedfinegrained,285,2326 -fused_write32s_reset_ifchangedfinegrained,286,2322 -fused_write32s_reset_ifchangedfinegrained,287,2330 -fused_write32s_reset_ifchangedfinegrained,288,2322 -fused_write32s_reset_ifchangedfinegrained,289,2324 -fused_write32s_reset_ifchangedfinegrained,290,2321 -fused_write32s_reset_ifchangedfinegrained,291,2320 -fused_write32s_reset_ifchangedfinegrained,292,2323 -fused_write32s_reset_ifchangedfinegrained,293,2321 -fused_write32s_reset_ifchangedfinegrained,294,2321 -fused_write32s_reset_ifchangedfinegrained,295,2322 -fused_write32s_reset_ifchangedfinegrained,296,2322 -fused_write32s_reset_ifchangedfinegrained,297,2322 -fused_write32s_reset_ifchangedfinegrained,298,2323 -fused_write32s_reset_ifchangedfinegrained,299,2324 -fused_write32s_reset_ifchangedfinegrained,300,2326 -fused_write32s_reset_ifchangedfinegrained,301,2326 -fused_write32s_reset_ifchangedfinegrained,302,2328 -fused_write32s_reset_ifchangedfinegrained,303,2330 -fused_write32s_reset_ifchangedfinegrained,304,2326 -fused_write32s_reset_ifchangedfinegrained,305,2324 -fused_write32s_reset_ifchangedfinegrained,306,2324 -fused_write32s_reset_ifchangedfinegrained,307,2317 -fused_write32s_reset_ifchangedfinegrained,308,2324 -fused_write32s_reset_ifchangedfinegrained,309,2349 -fused_write32s_reset_ifchangedfinegrained,310,2328 -fused_write32s_reset_ifchangedfinegrained,311,2325 -fused_write32s_reset_ifchangedfinegrained,312,2321 -fused_write32s_reset_ifchangedfinegrained,313,2324 -fused_write32s_reset_ifchangedfinegrained,314,2326 -fused_write32s_reset_ifchangedfinegrained,315,2321 -fused_write32s_reset_ifchangedfinegrained,316,2319 -fused_write32s_reset_ifchangedfinegrained,317,2301 -fused_write32s_reset_ifchangedfinegrained,318,2303 -fused_write32s_reset_ifchangedfinegrained,319,2296 -fused_write32s_reset_ifchangedfinegrained,320,2298 -fused_write32s_reset_ifchangedfinegrained,321,2299 -fused_write32s_reset_ifchangedfinegrained,322,2312 -fused_write32s_reset_ifchangedfinegrained,323,2300 -fused_write32s_reset_ifchangedfinegrained,324,2301 -fused_write32s_reset_ifchangedfinegrained,325,2298 -fused_write32s_reset_ifchangedfinegrained,326,2295 -fused_write32s_reset_ifchangedfinegrained,327,2296 -fused_write32s_reset_ifchangedfinegrained,328,2296 -fused_write32s_reset_ifchangedfinegrained,329,2296 -fused_write32s_reset_ifchangedfinegrained,330,2297 -fused_write32s_reset_ifchangedfinegrained,331,2308 -fused_write32s_reset_ifchangedfinegrained,332,2314 -fused_write32s_reset_ifchangedfinegrained,333,2302 -fused_write32s_reset_ifchangedfinegrained,334,2310 -fused_write32s_reset_ifchangedfinegrained,335,2343 -fused_write32s_reset_ifchangedfinegrained,336,2344 -fused_write32s_reset_ifchangedfinegrained,337,2322 -fused_write32s_reset_ifchangedfinegrained,338,2313 -fused_write32s_reset_ifchangedfinegrained,339,2334 -fused_write32s_reset_ifchangedfinegrained,340,2328 -fused_write32s_reset_ifchangedfinegrained,341,2323 -fused_write32s_reset_ifchangedfinegrained,342,2325 -fused_write32s_reset_ifchangedfinegrained,343,2324 -fused_write32s_reset_ifchangedfinegrained,344,2329 -fused_write32s_reset_ifchangedfinegrained,345,2321 -fused_write32s_reset_ifchangedfinegrained,346,2318 -fused_write32s_reset_ifchangedfinegrained,347,2317 -fused_write32s_reset_ifchangedfinegrained,348,2321 -fused_write32s_reset_ifchangedfinegrained,349,2322 -fused_write32s_reset_ifchangedfinegrained,350,2316 -fused_write32s_reset_ifchangedfinegrained,351,2316 -fused_write32s_reset_ifchangedfinegrained,352,2316 -fused_write32s_reset_ifchangedfinegrained,353,2322 -fused_write32s_reset_ifchangedfinegrained,354,2321 -fused_write32s_reset_ifchangedfinegrained,355,2318 -fused_write32s_reset_ifchangedfinegrained,356,2322 -fused_write32s_reset_ifchangedfinegrained,357,2319 -fused_write32s_reset_ifchangedfinegrained,358,2324 -fused_write32s_reset_ifchangedfinegrained,359,2315 -fused_write32s_reset_ifchangedfinegrained,360,2319 -fused_write32s_reset_ifchangedfinegrained,361,2319 -fused_write32s_reset_ifchangedfinegrained,362,2330 -fused_write32s_reset_ifchangedfinegrained,363,2313 -fused_write32s_reset_ifchangedfinegrained,364,2308 -fused_write32s_reset_ifchangedfinegrained,365,2325 -fused_write32s_reset_ifchangedfinegrained,366,2325 -fused_write32s_reset_ifchangedfinegrained,367,2330 -fused_write32s_reset_ifchangedfinegrained,368,2324 -fused_write32s_reset_ifchangedfinegrained,369,2321 -fused_write32s_reset_ifchangedfinegrained,370,2324 -fused_write32s_reset_ifchangedfinegrained,371,2323 -fused_write32s_reset_ifchangedfinegrained,372,2322 -fused_write32s_reset_ifchangedfinegrained,373,2321 -fused_write32s_reset_ifchangedfinegrained,374,2322 -fused_write32s_reset_ifchangedfinegrained,375,2331 -fused_write32s_reset_ifchangedfinegrained,376,2349 -fused_write32s_reset_ifchangedfinegrained,377,2324 -fused_write32s_reset_ifchangedfinegrained,378,2326 -fused_write32s_reset_ifchangedfinegrained,379,2330 -fused_write32s_reset_ifchangedfinegrained,380,2313 -fused_write32s_reset_ifchangedfinegrained,381,2304 -fused_write32s_reset_ifchangedfinegrained,382,2302 -fused_write32s_reset_ifchangedfinegrained,383,2315 -fused_write32s_reset_ifchangedfinegrained,384,2307 -fused_write32s_reset_ifchangedfinegrained,385,2308 -fused_write32s_reset_ifchangedfinegrained,386,2310 -fused_write32s_reset_ifchangedfinegrained,387,2313 -fused_write32s_reset_ifchangedfinegrained,388,2311 -fused_write32s_reset_ifchangedfinegrained,389,2311 -fused_write32s_reset_ifchangedfinegrained,390,2313 -fused_write32s_reset_ifchangedfinegrained,391,2306 -fused_write32s_reset_ifchangedfinegrained,392,2309 -fused_write32s_reset_ifchangedfinegrained,393,2311 -fused_write32s_reset_ifchangedfinegrained,394,2319 -fused_write32s_reset_ifchangedfinegrained,395,2315 -fused_write32s_reset_ifchangedfinegrained,396,2324 -fused_write32s_reset_ifchangedfinegrained,397,2323 -fused_write32s_reset_ifchangedfinegrained,398,2324 -fused_write32s_reset_ifchangedfinegrained,399,2322 -fused_write32s_reset_ifchangedfinegrained,400,2321 -fused_write32s_reset_ifchangedfinegrained,401,2322 -fused_write32s_reset_ifchangedfinegrained,402,2330 -fused_write32s_reset_ifchangedfinegrained,403,2327 -fused_write32s_reset_ifchangedfinegrained,404,2320 -fused_write32s_reset_ifchangedfinegrained,405,2325 -fused_write32s_reset_ifchangedfinegrained,406,2317 -fused_write32s_reset_ifchangedfinegrained,407,2320 -fused_write32s_reset_ifchangedfinegrained,408,2321 -fused_write32s_reset_ifchangedfinegrained,409,2319 -fused_write32s_reset_ifchangedfinegrained,410,2319 -fused_write32s_reset_ifchangedfinegrained,411,2320 -fused_write32s_reset_ifchangedfinegrained,412,2319 -fused_write32s_reset_ifchangedfinegrained,413,2319 -fused_write32s_reset_ifchangedfinegrained,414,2323 -fused_write32s_reset_ifchangedfinegrained,415,2322 -fused_write32s_reset_ifchangedfinegrained,416,2321 -fused_write32s_reset_ifchangedfinegrained,417,2318 -fused_write32s_reset_ifchangedfinegrained,418,2312 -fused_write32s_reset_ifchangedfinegrained,419,2327 -fused_write32s_reset_ifchangedfinegrained,420,2322 -fused_write32s_reset_ifchangedfinegrained,421,2325 -fused_write32s_reset_ifchangedfinegrained,422,2322 -fused_write32s_reset_ifchangedfinegrained,423,2328 -fused_write32s_reset_ifchangedfinegrained,424,2328 -fused_write32s_reset_ifchangedfinegrained,425,2322 -fused_write32s_reset_ifchangedfinegrained,426,2324 -fused_write32s_reset_ifchangedfinegrained,427,2328 -fused_write32s_reset_ifchangedfinegrained,428,2323 -fused_write32s_reset_ifchangedfinegrained,429,2320 -fused_write32s_reset_ifchangedfinegrained,430,2332 -fused_write32s_reset_ifchangedfinegrained,431,2319 -fused_write32s_reset_ifchangedfinegrained,432,2323 -fused_write32s_reset_ifchangedfinegrained,433,2325 -fused_write32s_reset_ifchangedfinegrained,434,2325 -fused_write32s_reset_ifchangedfinegrained,435,2323 -fused_write32s_reset_ifchangedfinegrained,436,2323 -fused_write32s_reset_ifchangedfinegrained,437,2322 -fused_write32s_reset_ifchangedfinegrained,438,2325 -fused_write32s_reset_ifchangedfinegrained,439,2323 -fused_write32s_reset_ifchangedfinegrained,440,2324 -fused_write32s_reset_ifchangedfinegrained,441,2325 -fused_write32s_reset_ifchangedfinegrained,442,2325 -fused_write32s_reset_ifchangedfinegrained,443,2324 -fused_write32s_reset_ifchangedfinegrained,444,2324 -fused_write32s_reset_ifchangedfinegrained,445,2326 -fused_write32s_reset_ifchangedfinegrained,446,2322 -fused_write32s_reset_ifchangedfinegrained,447,2320 -fused_write32s_reset_ifchangedfinegrained,448,2321 -fused_write32s_reset_ifchangedfinegrained,449,2325 -fused_write32s_reset_ifchangedfinegrained,450,2326 -fused_write32s_reset_ifchangedfinegrained,451,2322 -fused_write32s_reset_ifchangedfinegrained,452,2320 -fused_write32s_reset_ifchangedfinegrained,453,2325 -fused_write32s_reset_ifchangedfinegrained,454,2320 -fused_write32s_reset_ifchangedfinegrained,455,2321 -fused_write32s_reset_ifchangedfinegrained,456,2323 -fused_write32s_reset_ifchangedfinegrained,457,2319 -fused_write32s_reset_ifchangedfinegrained,458,2323 -fused_write32s_reset_ifchangedfinegrained,459,2324 -fused_write32s_reset_ifchangedfinegrained,460,2321 -fused_write32s_reset_ifchangedfinegrained,461,2319 -fused_write32s_reset_ifchangedfinegrained,462,2326 -fused_write32s_reset_ifchangedfinegrained,463,2319 -fused_write32s_reset_ifchangedfinegrained,464,2325 -fused_write32s_reset_ifchangedfinegrained,465,2320 -fused_write32s_reset_ifchangedfinegrained,466,2326 -fused_write32s_reset_ifchangedfinegrained,467,2322 -fused_write32s_reset_ifchangedfinegrained,468,2325 -fused_write32s_reset_ifchangedfinegrained,469,2322 -fused_write32s_reset_ifchangedfinegrained,470,2321 -fused_write32s_reset_ifchangedfinegrained,471,2321 -fused_write32s_reset_ifchangedfinegrained,472,2320 -fused_write32s_reset_ifchangedfinegrained,473,2331 -fused_write32s_reset_ifchangedfinegrained,474,2322 -fused_write32s_reset_ifchangedfinegrained,475,2328 -fused_write32s_reset_ifchangedfinegrained,476,2320 -fused_write32s_reset_ifchangedfinegrained,477,2322 -fused_write32s_reset_ifchangedfinegrained,478,2325 -fused_write32s_reset_ifchangedfinegrained,479,2323 -fused_write32s_reset_ifchangedfinegrained,480,2307 -fused_write32s_reset_ifchangedfinegrained,481,2309 -fused_write32s_reset_ifchangedfinegrained,482,2315 -fused_write32s_reset_ifchangedfinegrained,483,2311 -fused_write32s_reset_ifchangedfinegrained,484,2310 -fused_write32s_reset_ifchangedfinegrained,485,2327 -fused_write32s_reset_ifchangedfinegrained,486,2329 -fused_write32s_reset_ifchangedfinegrained,487,2324 -fused_write32s_reset_ifchangedfinegrained,488,2322 -fused_write32s_reset_ifchangedfinegrained,489,2323 -fused_write32s_reset_ifchangedfinegrained,490,2322 -fused_write32s_reset_ifchangedfinegrained,491,2318 -fused_write32s_reset_ifchangedfinegrained,492,2321 -fused_write32s_reset_ifchangedfinegrained,493,2321 -fused_write32s_reset_ifchangedfinegrained,494,2324 -fused_write32s_reset_ifchangedfinegrained,495,2326 -fused_write32s_reset_ifchangedfinegrained,496,2322 -fused_write32s_reset_ifchangedfinegrained,497,2324 -fused_write32s_reset_ifchangedfinegrained,498,2321 -fused_write32s_reset_ifchangedfinegrained,499,2322 -fused_write32s_reset_ifchangedfinegrained,500,2319 -fused_write32s_reset_ifchangedfinegrained,501,2320 -fused_write32s_reset_ifchangedfinegrained,502,2326 -fused_write32s_reset_ifchangedfinegrained,503,2321 -fused_write32s_reset_ifchangedfinegrained,504,2322 -fused_write32s_reset_ifchangedfinegrained,505,2323 -fused_write32s_reset_ifchangedfinegrained,506,2324 -fused_write32s_reset_ifchangedfinegrained,507,2322 -fused_write32s_reset_ifchangedfinegrained,508,2323 -fused_write32s_reset_ifchangedfinegrained,509,2324 -fused_write32s_reset_ifchangedfinegrained,510,2325 -fused_write32s_reset_ifchangedfinegrained,511,2316 -fused_write32s_reset_ifchangedfinegrained,512,2306 -fused_write32s_reset_ifchangedfinegrained,513,2299 -fused_write32s_reset_ifchangedfinegrained,514,2311 -fused_write32s_reset_ifchangedfinegrained,515,2302 -fused_write32s_reset_ifchangedfinegrained,516,2310 -fused_write32s_reset_ifchangedfinegrained,517,2304 -fused_write32s_reset_ifchangedfinegrained,518,2310 -fused_write32s_reset_ifchangedfinegrained,519,2320 -fused_write32s_reset_ifchangedfinegrained,520,2322 -fused_write32s_reset_ifchangedfinegrained,521,2320 -fused_write32s_reset_ifchangedfinegrained,522,2319 -fused_write32s_reset_ifchangedfinegrained,523,2317 -fused_write32s_reset_ifchangedfinegrained,524,2322 -fused_write32s_reset_ifchangedfinegrained,525,2322 -fused_write32s_reset_ifchangedfinegrained,526,2325 -fused_write32s_reset_ifchangedfinegrained,527,2319 -fused_write32s_reset_ifchangedfinegrained,528,2322 -fused_write32s_reset_ifchangedfinegrained,529,2326 -fused_write32s_reset_ifchangedfinegrained,530,2325 -fused_write32s_reset_ifchangedfinegrained,531,2324 -fused_write32s_reset_ifchangedfinegrained,532,2321 -fused_write32s_reset_ifchangedfinegrained,533,2328 -fused_write32s_reset_ifchangedfinegrained,534,2323 -fused_write32s_reset_ifchangedfinegrained,535,2319 -fused_write32s_reset_ifchangedfinegrained,536,2322 -fused_write32s_reset_ifchangedfinegrained,537,2308 -fused_write32s_reset_ifchangedfinegrained,538,2310 -fused_write32s_reset_ifchangedfinegrained,539,2309 -fused_write32s_reset_ifchangedfinegrained,540,2308 -fused_write32s_reset_ifchangedfinegrained,541,2310 -fused_write32s_reset_ifchangedfinegrained,542,2310 -fused_write32s_reset_ifchangedfinegrained,543,2307 -fused_write32s_reset_ifchangedfinegrained,544,2310 -fused_write32s_reset_ifchangedfinegrained,545,2308 -fused_write32s_reset_ifchangedfinegrained,546,2307 -fused_write32s_reset_ifchangedfinegrained,547,2307 -fused_write32s_reset_ifchangedfinegrained,548,2311 -fused_write32s_reset_ifchangedfinegrained,549,2311 -fused_write32s_reset_ifchangedfinegrained,550,2313 -fused_write32s_reset_ifchangedfinegrained,551,2309 -fused_write32s_reset_ifchangedfinegrained,552,2311 -fused_write32s_reset_ifchangedfinegrained,553,2311 -fused_write32s_reset_ifchangedfinegrained,554,2313 -fused_write32s_reset_ifchangedfinegrained,555,2309 -fused_write32s_reset_ifchangedfinegrained,556,2305 -fused_write32s_reset_ifchangedfinegrained,557,2309 -fused_write32s_reset_ifchangedfinegrained,558,2308 -fused_write32s_reset_ifchangedfinegrained,559,2314 -fused_write32s_reset_ifchangedfinegrained,560,2305 -fused_write32s_reset_ifchangedfinegrained,561,2310 -fused_write32s_reset_ifchangedfinegrained,562,2308 -fused_write32s_reset_ifchangedfinegrained,563,2309 -fused_write32s_reset_ifchangedfinegrained,564,2308 -fused_write32s_reset_ifchangedfinegrained,565,2307 -fused_write32s_reset_ifchangedfinegrained,566,2311 -fused_write32s_reset_ifchangedfinegrained,567,2303 -fused_write32s_reset_ifchangedfinegrained,568,2306 -fused_write32s_reset_ifchangedfinegrained,569,2308 -fused_write32s_reset_ifchangedfinegrained,570,2305 -fused_write32s_reset_ifchangedfinegrained,571,2308 -fused_write32s_reset_ifchangedfinegrained,572,2307 -fused_write32s_reset_ifchangedfinegrained,573,2311 -fused_write32s_reset_ifchangedfinegrained,574,2315 -fused_write32s_reset_ifchangedfinegrained,575,2308 -fused_write32s_reset_ifchangedfinegrained,576,2307 -fused_write32s_reset_ifchangedfinegrained,577,2310 -fused_write32s_reset_ifchangedfinegrained,578,2307 -fused_write32s_reset_ifchangedfinegrained,579,2309 -fused_write32s_reset_ifchangedfinegrained,580,2309 -fused_write32s_reset_ifchangedfinegrained,581,2307 -fused_write32s_reset_ifchangedfinegrained,582,2310 -fused_write32s_reset_ifchangedfinegrained,583,2309 -fused_write32s_reset_ifchangedfinegrained,584,2310 -fused_write32s_reset_ifchangedfinegrained,585,2312 -fused_write32s_reset_ifchangedfinegrained,586,2308 -fused_write32s_reset_ifchangedfinegrained,587,2312 -fused_write32s_reset_ifchangedfinegrained,588,2310 -fused_write32s_reset_ifchangedfinegrained,589,2312 -fused_write32s_reset_ifchangedfinegrained,590,2308 -fused_write32s_reset_ifchangedfinegrained,591,2310 -fused_write32s_reset_ifchangedfinegrained,592,2307 -fused_write32s_reset_ifchangedfinegrained,593,2309 -fused_write32s_reset_ifchangedfinegrained,594,2310 -fused_write32s_reset_ifchangedfinegrained,595,2311 -fused_write32s_reset_ifchangedfinegrained,596,2305 -fused_write32s_reset_ifchangedfinegrained,597,2308 -fused_write32s_reset_ifchangedfinegrained,598,2310 -fused_write32s_reset_ifchangedfinegrained,599,2310 -fused_write32s_reset_ifchangedfinegrained,600,2307 -fused_write32s_reset_ifchangedfinegrained,601,2309 -fused_write32s_reset_ifchangedfinegrained,602,2310 -fused_write32s_reset_ifchangedfinegrained,603,2312 -fused_write32s_reset_ifchangedfinegrained,604,2309 -fused_write32s_reset_ifchangedfinegrained,605,2309 -fused_write32s_reset_ifchangedfinegrained,606,2310 -fused_write32s_reset_ifchangedfinegrained,607,2308 -fused_write32s_reset_ifchangedfinegrained,608,2311 -fused_write32s_reset_ifchangedfinegrained,609,2313 -fused_write32s_reset_ifchangedfinegrained,610,2311 -fused_write32s_reset_ifchangedfinegrained,611,2309 -fused_write32s_reset_ifchangedfinegrained,612,2308 -fused_write32s_reset_ifchangedfinegrained,613,2307 -fused_write32s_reset_ifchangedfinegrained,614,2311 -fused_write32s_reset_ifchangedfinegrained,615,2308 -fused_write32s_reset_ifchangedfinegrained,616,2309 -fused_write32s_reset_ifchangedfinegrained,617,2310 -fused_write32s_reset_ifchangedfinegrained,618,2307 -fused_write32s_reset_ifchangedfinegrained,619,2310 -fused_write32s_reset_ifchangedfinegrained,620,2308 -fused_write32s_reset_ifchangedfinegrained,621,2309 -fused_write32s_reset_ifchangedfinegrained,622,2307 -fused_write32s_reset_ifchangedfinegrained,623,2308 -fused_write32s_reset_ifchangedfinegrained,624,2306 -fused_write32s_reset_ifchangedfinegrained,625,2308 -fused_write32s_reset_ifchangedfinegrained,626,2309 -fused_write32s_reset_ifchangedfinegrained,627,2308 -fused_write32s_reset_ifchangedfinegrained,628,2312 -fused_write32s_reset_ifchangedfinegrained,629,2311 -fused_write32s_reset_ifchangedfinegrained,630,2312 -fused_write32s_reset_ifchangedfinegrained,631,2308 -fused_write32s_reset_ifchangedfinegrained,632,2306 -fused_write32s_reset_ifchangedfinegrained,633,2309 -fused_write32s_reset_ifchangedfinegrained,634,2308 -fused_write32s_reset_ifchangedfinegrained,635,2308 -fused_write32s_reset_ifchangedfinegrained,636,2309 -fused_write32s_reset_ifchangedfinegrained,637,2310 -fused_write32s_reset_ifchangedfinegrained,638,2309 -fused_write32s_reset_ifchangedfinegrained,639,2312 -fused_write32s_reset_ifchangedfinegrained,640,2308 -fused_write32s_reset_ifchangedfinegrained,641,2308 -fused_write32s_reset_ifchangedfinegrained,642,2307 -fused_write32s_reset_ifchangedfinegrained,643,2308 -fused_write32s_reset_ifchangedfinegrained,644,2311 -fused_write32s_reset_ifchangedfinegrained,645,2310 -fused_write32s_reset_ifchangedfinegrained,646,2316 -fused_write32s_reset_ifchangedfinegrained,647,2307 -fused_write32s_reset_ifchangedfinegrained,648,2307 -fused_write32s_reset_ifchangedfinegrained,649,2311 -fused_write32s_reset_ifchangedfinegrained,650,2310 -fused_write32s_reset_ifchangedfinegrained,651,2309 -fused_write32s_reset_ifchangedfinegrained,652,2305 -fused_write32s_reset_ifchangedfinegrained,653,2307 -fused_write32s_reset_ifchangedfinegrained,654,2313 -fused_write32s_reset_ifchangedfinegrained,655,2312 -fused_write32s_reset_ifchangedfinegrained,656,2312 -fused_write32s_reset_ifchangedfinegrained,657,2310 -fused_write32s_reset_ifchangedfinegrained,658,2309 -fused_write32s_reset_ifchangedfinegrained,659,2309 -fused_write32s_reset_ifchangedfinegrained,660,2312 -fused_write32s_reset_ifchangedfinegrained,661,2311 -fused_write32s_reset_ifchangedfinegrained,662,2308 -fused_write32s_reset_ifchangedfinegrained,663,2312 -fused_write32s_reset_ifchangedfinegrained,664,2307 -fused_write32s_reset_ifchangedfinegrained,665,2309 -fused_write32s_reset_ifchangedfinegrained,666,2307 -fused_write32s_reset_ifchangedfinegrained,667,2310 -fused_write32s_reset_ifchangedfinegrained,668,2312 -fused_write32s_reset_ifchangedfinegrained,669,2306 -fused_write32s_reset_ifchangedfinegrained,670,2309 -fused_write32s_reset_ifchangedfinegrained,671,2308 -fused_write32s_reset_ifchangedfinegrained,672,2308 -fused_write32s_reset_ifchangedfinegrained,673,2310 -fused_write32s_reset_ifchangedfinegrained,674,2312 -fused_write32s_reset_ifchangedfinegrained,675,2308 -fused_write32s_reset_ifchangedfinegrained,676,2307 -fused_write32s_reset_ifchangedfinegrained,677,2308 -fused_write32s_reset_ifchangedfinegrained,678,2304 -fused_write32s_reset_ifchangedfinegrained,679,2310 -fused_write32s_reset_ifchangedfinegrained,680,2310 -fused_write32s_reset_ifchangedfinegrained,681,2311 -fused_write32s_reset_ifchangedfinegrained,682,2313 -fused_write32s_reset_ifchangedfinegrained,683,2310 -fused_write32s_reset_ifchangedfinegrained,684,2306 -fused_write32s_reset_ifchangedfinegrained,685,2312 -fused_write32s_reset_ifchangedfinegrained,686,2308 -fused_write32s_reset_ifchangedfinegrained,687,2312 -fused_write32s_reset_ifchangedfinegrained,688,2308 -fused_write32s_reset_ifchangedfinegrained,689,2316 -fused_write32s_reset_ifchangedfinegrained,690,2309 -fused_write32s_reset_ifchangedfinegrained,691,2312 -fused_write32s_reset_ifchangedfinegrained,692,2309 -fused_write32s_reset_ifchangedfinegrained,693,2309 -fused_write32s_reset_ifchangedfinegrained,694,2314 -fused_write32s_reset_ifchangedfinegrained,695,2307 -fused_write32s_reset_ifchangedfinegrained,696,2309 -fused_write32s_reset_ifchangedfinegrained,697,2309 -fused_write32s_reset_ifchangedfinegrained,698,2309 -fused_write32s_reset_ifchangedfinegrained,699,2309 -fused_write32s_reset_ifchangedfinegrained,700,2310 -fused_write32s_reset_ifchangedfinegrained,701,2312 -fused_write32s_reset_ifchangedfinegrained,702,2307 -fused_write32s_reset_ifchangedfinegrained,703,2310 -fused_write32s_reset_ifchangedfinegrained,704,2307 -fused_write32s_reset_ifchangedfinegrained,705,2308 -fused_write32s_reset_ifchangedfinegrained,706,2311 -fused_write32s_reset_ifchangedfinegrained,707,2304 -fused_write32s_reset_ifchangedfinegrained,708,2311 -fused_write32s_reset_ifchangedfinegrained,709,2306 -fused_write32s_reset_ifchangedfinegrained,710,2309 -fused_write32s_reset_ifchangedfinegrained,711,2310 -fused_write32s_reset_ifchangedfinegrained,712,2308 -fused_write32s_reset_ifchangedfinegrained,713,2310 -fused_write32s_reset_ifchangedfinegrained,714,2307 -fused_write32s_reset_ifchangedfinegrained,715,2314 -fused_write32s_reset_ifchangedfinegrained,716,2308 -fused_write32s_reset_ifchangedfinegrained,717,2312 -fused_write32s_reset_ifchangedfinegrained,718,2309 -fused_write32s_reset_ifchangedfinegrained,719,2309 -fused_write32s_reset_ifchangedfinegrained,720,2311 -fused_write32s_reset_ifchangedfinegrained,721,2306 -fused_write32s_reset_ifchangedfinegrained,722,2308 -fused_write32s_reset_ifchangedfinegrained,723,2311 -fused_write32s_reset_ifchangedfinegrained,724,2312 -fused_write32s_reset_ifchangedfinegrained,725,2309 -fused_write32s_reset_ifchangedfinegrained,726,2309 -fused_write32s_reset_ifchangedfinegrained,727,2308 -fused_write32s_reset_ifchangedfinegrained,728,2310 -fused_write32s_reset_ifchangedfinegrained,729,2310 -fused_write32s_reset_ifchangedfinegrained,730,2312 -fused_write32s_reset_ifchangedfinegrained,731,2306 -fused_write32s_reset_ifchangedfinegrained,732,2316 -fused_write32s_reset_ifchangedfinegrained,733,2307 -fused_write32s_reset_ifchangedfinegrained,734,2309 -fused_write32s_reset_ifchangedfinegrained,735,2310 -fused_write32s_reset_ifchangedfinegrained,736,2312 -fused_write32s_reset_ifchangedfinegrained,737,2307 -fused_write32s_reset_ifchangedfinegrained,738,2310 -fused_write32s_reset_ifchangedfinegrained,739,2308 -fused_write32s_reset_ifchangedfinegrained,740,2309 -fused_write32s_reset_ifchangedfinegrained,741,2310 -fused_write32s_reset_ifchangedfinegrained,742,2307 -fused_write32s_reset_ifchangedfinegrained,743,2310 -fused_write32s_reset_ifchangedfinegrained,744,2312 -fused_write32s_reset_ifchangedfinegrained,745,2310 -fused_write32s_reset_ifchangedfinegrained,746,2310 -fused_write32s_reset_ifchangedfinegrained,747,2311 -fused_write32s_reset_ifchangedfinegrained,748,2311 -fused_write32s_reset_ifchangedfinegrained,749,2306 -fused_write32s_reset_ifchangedfinegrained,750,2312 -fused_write32s_reset_ifchangedfinegrained,751,2311 -fused_write32s_reset_ifchangedfinegrained,752,2310 -fused_write32s_reset_ifchangedfinegrained,753,2310 -fused_write32s_reset_ifchangedfinegrained,754,2310 -fused_write32s_reset_ifchangedfinegrained,755,2310 -fused_write32s_reset_ifchangedfinegrained,756,2307 -fused_write32s_reset_ifchangedfinegrained,757,2308 -fused_write32s_reset_ifchangedfinegrained,758,2310 -fused_write32s_reset_ifchangedfinegrained,759,2310 -fused_write32s_reset_ifchangedfinegrained,760,2311 -fused_write32s_reset_ifchangedfinegrained,761,2311 -fused_write32s_reset_ifchangedfinegrained,762,2311 -fused_write32s_reset_ifchangedfinegrained,763,2311 -fused_write32s_reset_ifchangedfinegrained,764,2308 -fused_write32s_reset_ifchangedfinegrained,765,2309 -fused_write32s_reset_ifchangedfinegrained,766,2309 -fused_write32s_reset_ifchangedfinegrained,767,2310 -fused_write32s_reset_ifchangedfinegrained,768,2308 -fused_write32s_reset_ifchangedfinegrained,769,2312 -fused_write32s_reset_ifchangedfinegrained,770,2310 -fused_write32s_reset_ifchangedfinegrained,771,2309 -fused_write32s_reset_ifchangedfinegrained,772,2309 -fused_write32s_reset_ifchangedfinegrained,773,2308 -fused_write32s_reset_ifchangedfinegrained,774,2311 -fused_write32s_reset_ifchangedfinegrained,775,2308 -fused_write32s_reset_ifchangedfinegrained,776,2318 -fused_write32s_reset_ifchangedfinegrained,777,2307 -fused_write32s_reset_ifchangedfinegrained,778,2310 -fused_write32s_reset_ifchangedfinegrained,779,2309 -fused_write32s_reset_ifchangedfinegrained,780,2309 -fused_write32s_reset_ifchangedfinegrained,781,2311 -fused_write32s_reset_ifchangedfinegrained,782,2306 -fused_write32s_reset_ifchangedfinegrained,783,2311 -fused_write32s_reset_ifchangedfinegrained,784,2309 -fused_write32s_reset_ifchangedfinegrained,785,2308 -fused_write32s_reset_ifchangedfinegrained,786,2307 -fused_write32s_reset_ifchangedfinegrained,787,2309 -fused_write32s_reset_ifchangedfinegrained,788,2310 -fused_write32s_reset_ifchangedfinegrained,789,2311 -fused_write32s_reset_ifchangedfinegrained,790,2313 -fused_write32s_reset_ifchangedfinegrained,791,2307 -fused_write32s_reset_ifchangedfinegrained,792,2313 -fused_write32s_reset_ifchangedfinegrained,793,2312 -fused_write32s_reset_ifchangedfinegrained,794,2309 -fused_write32s_reset_ifchangedfinegrained,795,2310 -fused_write32s_reset_ifchangedfinegrained,796,2308 -fused_write32s_reset_ifchangedfinegrained,797,2307 -fused_write32s_reset_ifchangedfinegrained,798,2311 -fused_write32s_reset_ifchangedfinegrained,799,2305 -fused_write32s_reset_ifchangedfinegrained,800,2309 -fused_write32s_reset_ifchangedfinegrained,801,2308 -fused_write32s_reset_ifchangedfinegrained,802,2309 -fused_write32s_reset_ifchangedfinegrained,803,2310 -fused_write32s_reset_ifchangedfinegrained,804,2308 -fused_write32s_reset_ifchangedfinegrained,805,2310 -fused_write32s_reset_ifchangedfinegrained,806,2307 -fused_write32s_reset_ifchangedfinegrained,807,2309 -fused_write32s_reset_ifchangedfinegrained,808,2309 -fused_write32s_reset_ifchangedfinegrained,809,2311 -fused_write32s_reset_ifchangedfinegrained,810,2306 -fused_write32s_reset_ifchangedfinegrained,811,2308 -fused_write32s_reset_ifchangedfinegrained,812,2310 -fused_write32s_reset_ifchangedfinegrained,813,2309 -fused_write32s_reset_ifchangedfinegrained,814,2308 -fused_write32s_reset_ifchangedfinegrained,815,2306 -fused_write32s_reset_ifchangedfinegrained,816,2310 -fused_write32s_reset_ifchangedfinegrained,817,2308 -fused_write32s_reset_ifchangedfinegrained,818,2308 -fused_write32s_reset_ifchangedfinegrained,819,2314 -fused_write32s_reset_ifchangedfinegrained,820,2310 -fused_write32s_reset_ifchangedfinegrained,821,2319 -fused_write32s_reset_ifchangedfinegrained,822,2308 -fused_write32s_reset_ifchangedfinegrained,823,2310 -fused_write32s_reset_ifchangedfinegrained,824,2308 -fused_write32s_reset_ifchangedfinegrained,825,2309 -fused_write32s_reset_ifchangedfinegrained,826,2311 -fused_write32s_reset_ifchangedfinegrained,827,2308 -fused_write32s_reset_ifchangedfinegrained,828,2308 -fused_write32s_reset_ifchangedfinegrained,829,2305 -fused_write32s_reset_ifchangedfinegrained,830,2312 -fused_write32s_reset_ifchangedfinegrained,831,2309 -fused_write32s_reset_ifchangedfinegrained,832,2310 -fused_write32s_reset_ifchangedfinegrained,833,2308 -fused_write32s_reset_ifchangedfinegrained,834,2297 -fused_write32s_reset_ifchangedfinegrained,835,2310 -fused_write32s_reset_ifchangedfinegrained,836,2307 -fused_write32s_reset_ifchangedfinegrained,837,2310 -fused_write32s_reset_ifchangedfinegrained,838,2308 -fused_write32s_reset_ifchangedfinegrained,839,2308 -fused_write32s_reset_ifchangedfinegrained,840,2305 -fused_write32s_reset_ifchangedfinegrained,841,2309 -fused_write32s_reset_ifchangedfinegrained,842,2310 -fused_write32s_reset_ifchangedfinegrained,843,2311 -fused_write32s_reset_ifchangedfinegrained,844,2309 -fused_write32s_reset_ifchangedfinegrained,845,2308 -fused_write32s_reset_ifchangedfinegrained,846,2310 -fused_write32s_reset_ifchangedfinegrained,847,2310 -fused_write32s_reset_ifchangedfinegrained,848,2307 -fused_write32s_reset_ifchangedfinegrained,849,2310 -fused_write32s_reset_ifchangedfinegrained,850,2308 -fused_write32s_reset_ifchangedfinegrained,851,2311 -fused_write32s_reset_ifchangedfinegrained,852,2310 -fused_write32s_reset_ifchangedfinegrained,853,2306 -fused_write32s_reset_ifchangedfinegrained,854,2310 -fused_write32s_reset_ifchangedfinegrained,855,2311 -fused_write32s_reset_ifchangedfinegrained,856,2310 -fused_write32s_reset_ifchangedfinegrained,857,2308 -fused_write32s_reset_ifchangedfinegrained,858,2306 -fused_write32s_reset_ifchangedfinegrained,859,2311 -fused_write32s_reset_ifchangedfinegrained,860,2306 -fused_write32s_reset_ifchangedfinegrained,861,2309 -fused_write32s_reset_ifchangedfinegrained,862,2316 -fused_write32s_reset_ifchangedfinegrained,863,2315 -fused_write32s_reset_ifchangedfinegrained,864,2310 -fused_write32s_reset_ifchangedfinegrained,865,2311 -fused_write32s_reset_ifchangedfinegrained,866,2309 -fused_write32s_reset_ifchangedfinegrained,867,2312 -fused_write32s_reset_ifchangedfinegrained,868,2310 -fused_write32s_reset_ifchangedfinegrained,869,2308 -fused_write32s_reset_ifchangedfinegrained,870,2311 -fused_write32s_reset_ifchangedfinegrained,871,2305 -fused_write32s_reset_ifchangedfinegrained,872,2307 -fused_write32s_reset_ifchangedfinegrained,873,2308 -fused_write32s_reset_ifchangedfinegrained,874,2309 -fused_write32s_reset_ifchangedfinegrained,875,2307 -fused_write32s_reset_ifchangedfinegrained,876,2307 -fused_write32s_reset_ifchangedfinegrained,877,2308 -fused_write32s_reset_ifchangedfinegrained,878,2312 -fused_write32s_reset_ifchangedfinegrained,879,2309 -fused_write32s_reset_ifchangedfinegrained,880,2311 -fused_write32s_reset_ifchangedfinegrained,881,2308 -fused_write32s_reset_ifchangedfinegrained,882,2310 -fused_write32s_reset_ifchangedfinegrained,883,2312 -fused_write32s_reset_ifchangedfinegrained,884,2313 -fused_write32s_reset_ifchangedfinegrained,885,2312 -fused_write32s_reset_ifchangedfinegrained,886,2308 -fused_write32s_reset_ifchangedfinegrained,887,2309 -fused_write32s_reset_ifchangedfinegrained,888,2308 -fused_write32s_reset_ifchangedfinegrained,889,2309 -fused_write32s_reset_ifchangedfinegrained,890,2308 -fused_write32s_reset_ifchangedfinegrained,891,2311 -fused_write32s_reset_ifchangedfinegrained,892,2311 -fused_write32s_reset_ifchangedfinegrained,893,2308 -fused_write32s_reset_ifchangedfinegrained,894,2309 -fused_write32s_reset_ifchangedfinegrained,895,2309 -fused_write32s_reset_ifchangedfinegrained,896,2310 -fused_write32s_reset_ifchangedfinegrained,897,2307 -fused_write32s_reset_ifchangedfinegrained,898,2312 -fused_write32s_reset_ifchangedfinegrained,899,2309 -fused_write32s_reset_ifchangedfinegrained,900,2310 -fused_write32s_reset_ifchangedfinegrained,901,2309 -fused_write32s_reset_ifchangedfinegrained,902,2309 -fused_write32s_reset_ifchangedfinegrained,903,2312 -fused_write32s_reset_ifchangedfinegrained,904,2306 -fused_write32s_reset_ifchangedfinegrained,905,2312 -fused_write32s_reset_ifchangedfinegrained,906,2308 -fused_write32s_reset_ifchangedfinegrained,907,2311 -fused_write32s_reset_ifchangedfinegrained,908,2309 -fused_write32s_reset_ifchangedfinegrained,909,2307 -fused_write32s_reset_ifchangedfinegrained,910,2312 -fused_write32s_reset_ifchangedfinegrained,911,2305 -fused_write32s_reset_ifchangedfinegrained,912,2307 -fused_write32s_reset_ifchangedfinegrained,913,2310 -fused_write32s_reset_ifchangedfinegrained,914,2309 -fused_write32s_reset_ifchangedfinegrained,915,2313 -fused_write32s_reset_ifchangedfinegrained,916,2308 -fused_write32s_reset_ifchangedfinegrained,917,2312 -fused_write32s_reset_ifchangedfinegrained,918,2312 -fused_write32s_reset_ifchangedfinegrained,919,2308 -fused_write32s_reset_ifchangedfinegrained,920,2306 -fused_write32s_reset_ifchangedfinegrained,921,2308 -fused_write32s_reset_ifchangedfinegrained,922,2308 -fused_write32s_reset_ifchangedfinegrained,923,2311 -fused_write32s_reset_ifchangedfinegrained,924,2310 -fused_write32s_reset_ifchangedfinegrained,925,2308 -fused_write32s_reset_ifchangedfinegrained,926,2309 -fused_write32s_reset_ifchangedfinegrained,927,2312 -fused_write32s_reset_ifchangedfinegrained,928,2308 -fused_write32s_reset_ifchangedfinegrained,929,2309 -fused_write32s_reset_ifchangedfinegrained,930,2309 -fused_write32s_reset_ifchangedfinegrained,931,2312 -fused_write32s_reset_ifchangedfinegrained,932,2310 -fused_write32s_reset_ifchangedfinegrained,933,2310 -fused_write32s_reset_ifchangedfinegrained,934,2310 -fused_write32s_reset_ifchangedfinegrained,935,2309 -fused_write32s_reset_ifchangedfinegrained,936,2308 -fused_write32s_reset_ifchangedfinegrained,937,2310 -fused_write32s_reset_ifchangedfinegrained,938,2309 -fused_write32s_reset_ifchangedfinegrained,939,2310 -fused_write32s_reset_ifchangedfinegrained,940,2311 -fused_write32s_reset_ifchangedfinegrained,941,2308 -fused_write32s_reset_ifchangedfinegrained,942,2308 -fused_write32s_reset_ifchangedfinegrained,943,2309 -fused_write32s_reset_ifchangedfinegrained,944,2311 -fused_write32s_reset_ifchangedfinegrained,945,2312 -fused_write32s_reset_ifchangedfinegrained,946,2311 -fused_write32s_reset_ifchangedfinegrained,947,2313 -fused_write32s_reset_ifchangedfinegrained,948,2306 -fused_write32s_reset_ifchangedfinegrained,949,2310 -fused_write32s_reset_ifchangedfinegrained,950,2309 -fused_write32s_reset_ifchangedfinegrained,951,2310 -fused_write32s_reset_ifchangedfinegrained,952,2312 -fused_write32s_reset_ifchangedfinegrained,953,2307 -fused_write32s_reset_ifchangedfinegrained,954,2306 -fused_write32s_reset_ifchangedfinegrained,955,2310 -fused_write32s_reset_ifchangedfinegrained,956,2311 -fused_write32s_reset_ifchangedfinegrained,957,2309 -fused_write32s_reset_ifchangedfinegrained,958,2308 -fused_write32s_reset_ifchangedfinegrained,959,2310 -fused_write32s_reset_ifchangedfinegrained,960,2310 -fused_write32s_reset_ifchangedfinegrained,961,2311 -fused_write32s_reset_ifchangedfinegrained,962,2310 -fused_write32s_reset_ifchangedfinegrained,963,2308 -fused_write32s_reset_ifchangedfinegrained,964,2311 -fused_write32s_reset_ifchangedfinegrained,965,2310 -fused_write32s_reset_ifchangedfinegrained,966,2307 -fused_write32s_reset_ifchangedfinegrained,967,2311 -fused_write32s_reset_ifchangedfinegrained,968,2306 -fused_write32s_reset_ifchangedfinegrained,969,2313 -fused_write32s_reset_ifchangedfinegrained,970,2310 -fused_write32s_reset_ifchangedfinegrained,971,2307 -fused_write32s_reset_ifchangedfinegrained,972,2308 -fused_write32s_reset_ifchangedfinegrained,973,2305 -fused_write32s_reset_ifchangedfinegrained,974,2309 -fused_write32s_reset_ifchangedfinegrained,975,2311 -fused_write32s_reset_ifchangedfinegrained,976,2312 -fused_write32s_reset_ifchangedfinegrained,977,2308 -fused_write32s_reset_ifchangedfinegrained,978,2312 -fused_write32s_reset_ifchangedfinegrained,979,2310 -fused_write32s_reset_ifchangedfinegrained,980,2314 -fused_write32s_reset_ifchangedfinegrained,981,2314 -fused_write32s_reset_ifchangedfinegrained,982,2307 -fused_write32s_reset_ifchangedfinegrained,983,2310 -fused_write32s_reset_ifchangedfinegrained,984,2310 -fused_write32s_reset_ifchangedfinegrained,985,2310 -fused_write32s_reset_ifchangedfinegrained,986,2311 -fused_write32s_reset_ifchangedfinegrained,987,2309 -fused_write32s_reset_ifchangedfinegrained,988,2311 -fused_write32s_reset_ifchangedfinegrained,989,2310 -fused_write32s_reset_ifchangedfinegrained,990,2310 -fused_write32s_reset_ifchangedfinegrained,991,2312 -fused_write32s_reset_ifchangedfinegrained,992,2310 -fused_write32s_reset_ifchangedfinegrained,993,2306 -fused_write32s_reset_ifchangedfinegrained,994,2308 -fused_write32s_reset_ifchangedfinegrained,995,2310 -fused_write32s_reset_ifchangedfinegrained,996,2311 -fused_write32s_reset_ifchangedfinegrained,997,2311 -fused_write32s_reset_ifchangedfinegrained,998,2309 -fused_write32s_reset_ifchangedfinegrained,999,2308 -fused_write32s_reset_never,0,2408 -fused_write32s_reset_never,1,2344 -fused_write32s_reset_never,2,2350 -fused_write32s_reset_never,3,2353 -fused_write32s_reset_never,4,2347 -fused_write32s_reset_never,5,2351 -fused_write32s_reset_never,6,2349 -fused_write32s_reset_never,7,2350 -fused_write32s_reset_never,8,2348 -fused_write32s_reset_never,9,2349 -fused_write32s_reset_never,10,2350 -fused_write32s_reset_never,11,2348 -fused_write32s_reset_never,12,2349 -fused_write32s_reset_never,13,2347 -fused_write32s_reset_never,14,2350 -fused_write32s_reset_never,15,2350 -fused_write32s_reset_never,16,2347 -fused_write32s_reset_never,17,2349 -fused_write32s_reset_never,18,2348 -fused_write32s_reset_never,19,2350 -fused_write32s_reset_never,20,2349 -fused_write32s_reset_never,21,2358 -fused_write32s_reset_never,22,2345 -fused_write32s_reset_never,23,2349 -fused_write32s_reset_never,24,2351 -fused_write32s_reset_never,25,2347 -fused_write32s_reset_never,26,2350 -fused_write32s_reset_never,27,2348 -fused_write32s_reset_never,28,2354 -fused_write32s_reset_never,29,2346 -fused_write32s_reset_never,30,2351 -fused_write32s_reset_never,31,2351 -fused_write32s_reset_never,32,2348 -fused_write32s_reset_never,33,2350 -fused_write32s_reset_never,34,2351 -fused_write32s_reset_never,35,2349 -fused_write32s_reset_never,36,2349 -fused_write32s_reset_never,37,2347 -fused_write32s_reset_never,38,2349 -fused_write32s_reset_never,39,2346 -fused_write32s_reset_never,40,2350 -fused_write32s_reset_never,41,2347 -fused_write32s_reset_never,42,2347 -fused_write32s_reset_never,43,2348 -fused_write32s_reset_never,44,2349 -fused_write32s_reset_never,45,2348 -fused_write32s_reset_never,46,2347 -fused_write32s_reset_never,47,2346 -fused_write32s_reset_never,48,2347 -fused_write32s_reset_never,49,2348 -fused_write32s_reset_never,50,2345 -fused_write32s_reset_never,51,2353 -fused_write32s_reset_never,52,2350 -fused_write32s_reset_never,53,2349 -fused_write32s_reset_never,54,2351 -fused_write32s_reset_never,55,2350 -fused_write32s_reset_never,56,2349 -fused_write32s_reset_never,57,2348 -fused_write32s_reset_never,58,2347 -fused_write32s_reset_never,59,2349 -fused_write32s_reset_never,60,2347 -fused_write32s_reset_never,61,2348 -fused_write32s_reset_never,62,2348 -fused_write32s_reset_never,63,2349 -fused_write32s_reset_never,64,2347 -fused_write32s_reset_never,65,2348 -fused_write32s_reset_never,66,2348 -fused_write32s_reset_never,67,2345 -fused_write32s_reset_never,68,2347 -fused_write32s_reset_never,69,2349 -fused_write32s_reset_never,70,2351 -fused_write32s_reset_never,71,2347 -fused_write32s_reset_never,72,2352 -fused_write32s_reset_never,73,2348 -fused_write32s_reset_never,74,2348 -fused_write32s_reset_never,75,2352 -fused_write32s_reset_never,76,2352 -fused_write32s_reset_never,77,2350 -fused_write32s_reset_never,78,2351 -fused_write32s_reset_never,79,2350 -fused_write32s_reset_never,80,2347 -fused_write32s_reset_never,81,2348 -fused_write32s_reset_never,82,2350 -fused_write32s_reset_never,83,2348 -fused_write32s_reset_never,84,2350 -fused_write32s_reset_never,85,2356 -fused_write32s_reset_never,86,2348 -fused_write32s_reset_never,87,2348 -fused_write32s_reset_never,88,2349 -fused_write32s_reset_never,89,2349 -fused_write32s_reset_never,90,2348 -fused_write32s_reset_never,91,2349 -fused_write32s_reset_never,92,2348 -fused_write32s_reset_never,93,2353 -fused_write32s_reset_never,94,2350 -fused_write32s_reset_never,95,2349 -fused_write32s_reset_never,96,2348 -fused_write32s_reset_never,97,2348 -fused_write32s_reset_never,98,2348 -fused_write32s_reset_never,99,2347 -fused_write32s_reset_never,100,2350 -fused_write32s_reset_never,101,2350 -fused_write32s_reset_never,102,2351 -fused_write32s_reset_never,103,2346 -fused_write32s_reset_never,104,2348 -fused_write32s_reset_never,105,2347 -fused_write32s_reset_never,106,2351 -fused_write32s_reset_never,107,2349 -fused_write32s_reset_never,108,2347 -fused_write32s_reset_never,109,2350 -fused_write32s_reset_never,110,2347 -fused_write32s_reset_never,111,2347 -fused_write32s_reset_never,112,2350 -fused_write32s_reset_never,113,2353 -fused_write32s_reset_never,114,2349 -fused_write32s_reset_never,115,2347 -fused_write32s_reset_never,116,2346 -fused_write32s_reset_never,117,2347 -fused_write32s_reset_never,118,2347 -fused_write32s_reset_never,119,2350 -fused_write32s_reset_never,120,2347 -fused_write32s_reset_never,121,2348 -fused_write32s_reset_never,122,2347 -fused_write32s_reset_never,123,2347 -fused_write32s_reset_never,124,2352 -fused_write32s_reset_never,125,2349 -fused_write32s_reset_never,126,2349 -fused_write32s_reset_never,127,2351 -fused_write32s_reset_never,128,2348 -fused_write32s_reset_never,129,2348 -fused_write32s_reset_never,130,2349 -fused_write32s_reset_never,131,2346 -fused_write32s_reset_never,132,2349 -fused_write32s_reset_never,133,2350 -fused_write32s_reset_never,134,2346 -fused_write32s_reset_never,135,2344 -fused_write32s_reset_never,136,2350 -fused_write32s_reset_never,137,2348 -fused_write32s_reset_never,138,2346 -fused_write32s_reset_never,139,2347 -fused_write32s_reset_never,140,2347 -fused_write32s_reset_never,141,2348 -fused_write32s_reset_never,142,2351 -fused_write32s_reset_never,143,2346 -fused_write32s_reset_never,144,2348 -fused_write32s_reset_never,145,2348 -fused_write32s_reset_never,146,2349 -fused_write32s_reset_never,147,2347 -fused_write32s_reset_never,148,2348 -fused_write32s_reset_never,149,2347 -fused_write32s_reset_never,150,2348 -fused_write32s_reset_never,151,2349 -fused_write32s_reset_never,152,2347 -fused_write32s_reset_never,153,2350 -fused_write32s_reset_never,154,2348 -fused_write32s_reset_never,155,2356 -fused_write32s_reset_never,156,2348 -fused_write32s_reset_never,157,2347 -fused_write32s_reset_never,158,2351 -fused_write32s_reset_never,159,2350 -fused_write32s_reset_never,160,2347 -fused_write32s_reset_never,161,2347 -fused_write32s_reset_never,162,2349 -fused_write32s_reset_never,163,2345 -fused_write32s_reset_never,164,2351 -fused_write32s_reset_never,165,2347 -fused_write32s_reset_never,166,2346 -fused_write32s_reset_never,167,2349 -fused_write32s_reset_never,168,2355 -fused_write32s_reset_never,169,2347 -fused_write32s_reset_never,170,2347 -fused_write32s_reset_never,171,2349 -fused_write32s_reset_never,172,2347 -fused_write32s_reset_never,173,2350 -fused_write32s_reset_never,174,2347 -fused_write32s_reset_never,175,2347 -fused_write32s_reset_never,176,2349 -fused_write32s_reset_never,177,2347 -fused_write32s_reset_never,178,2349 -fused_write32s_reset_never,179,2351 -fused_write32s_reset_never,180,2346 -fused_write32s_reset_never,181,2348 -fused_write32s_reset_never,182,2349 -fused_write32s_reset_never,183,2348 -fused_write32s_reset_never,184,2349 -fused_write32s_reset_never,185,2348 -fused_write32s_reset_never,186,2349 -fused_write32s_reset_never,187,2347 -fused_write32s_reset_never,188,2346 -fused_write32s_reset_never,189,2345 -fused_write32s_reset_never,190,2348 -fused_write32s_reset_never,191,2347 -fused_write32s_reset_never,192,2347 -fused_write32s_reset_never,193,2351 -fused_write32s_reset_never,194,2349 -fused_write32s_reset_never,195,2347 -fused_write32s_reset_never,196,2346 -fused_write32s_reset_never,197,2348 -fused_write32s_reset_never,198,2354 -fused_write32s_reset_never,199,2347 -fused_write32s_reset_never,200,2348 -fused_write32s_reset_never,201,2346 -fused_write32s_reset_never,202,2348 -fused_write32s_reset_never,203,2348 -fused_write32s_reset_never,204,2348 -fused_write32s_reset_never,205,2347 -fused_write32s_reset_never,206,2348 -fused_write32s_reset_never,207,2347 -fused_write32s_reset_never,208,2349 -fused_write32s_reset_never,209,2348 -fused_write32s_reset_never,210,2343 -fused_write32s_reset_never,211,2349 -fused_write32s_reset_never,212,2347 -fused_write32s_reset_never,213,2349 -fused_write32s_reset_never,214,2349 -fused_write32s_reset_never,215,2349 -fused_write32s_reset_never,216,2348 -fused_write32s_reset_never,217,2352 -fused_write32s_reset_never,218,2348 -fused_write32s_reset_never,219,2349 -fused_write32s_reset_never,220,2346 -fused_write32s_reset_never,221,2347 -fused_write32s_reset_never,222,2347 -fused_write32s_reset_never,223,2347 -fused_write32s_reset_never,224,2347 -fused_write32s_reset_never,225,2344 -fused_write32s_reset_never,226,2347 -fused_write32s_reset_never,227,2348 -fused_write32s_reset_never,228,2345 -fused_write32s_reset_never,229,2348 -fused_write32s_reset_never,230,2348 -fused_write32s_reset_never,231,2347 -fused_write32s_reset_never,232,2347 -fused_write32s_reset_never,233,2347 -fused_write32s_reset_never,234,2349 -fused_write32s_reset_never,235,2347 -fused_write32s_reset_never,236,2347 -fused_write32s_reset_never,237,2349 -fused_write32s_reset_never,238,2346 -fused_write32s_reset_never,239,2348 -fused_write32s_reset_never,240,2350 -fused_write32s_reset_never,241,2350 -fused_write32s_reset_never,242,2353 -fused_write32s_reset_never,243,2347 -fused_write32s_reset_never,244,2345 -fused_write32s_reset_never,245,2345 -fused_write32s_reset_never,246,2354 -fused_write32s_reset_never,247,2347 -fused_write32s_reset_never,248,2347 -fused_write32s_reset_never,249,2350 -fused_write32s_reset_never,250,2351 -fused_write32s_reset_never,251,2349 -fused_write32s_reset_never,252,2345 -fused_write32s_reset_never,253,2349 -fused_write32s_reset_never,254,2350 -fused_write32s_reset_never,255,2348 -fused_write32s_reset_never,256,2344 -fused_write32s_reset_never,257,2347 -fused_write32s_reset_never,258,2351 -fused_write32s_reset_never,259,2348 -fused_write32s_reset_never,260,2347 -fused_write32s_reset_never,261,2350 -fused_write32s_reset_never,262,2346 -fused_write32s_reset_never,263,2349 -fused_write32s_reset_never,264,2347 -fused_write32s_reset_never,265,2347 -fused_write32s_reset_never,266,2348 -fused_write32s_reset_never,267,2346 -fused_write32s_reset_never,268,2347 -fused_write32s_reset_never,269,2351 -fused_write32s_reset_never,270,2348 -fused_write32s_reset_never,271,2346 -fused_write32s_reset_never,272,2349 -fused_write32s_reset_never,273,2349 -fused_write32s_reset_never,274,2347 -fused_write32s_reset_never,275,2348 -fused_write32s_reset_never,276,2349 -fused_write32s_reset_never,277,2347 -fused_write32s_reset_never,278,2348 -fused_write32s_reset_never,279,2349 -fused_write32s_reset_never,280,2347 -fused_write32s_reset_never,281,2350 -fused_write32s_reset_never,282,2348 -fused_write32s_reset_never,283,2351 -fused_write32s_reset_never,284,2347 -fused_write32s_reset_never,285,2352 -fused_write32s_reset_never,286,2351 -fused_write32s_reset_never,287,2349 -fused_write32s_reset_never,288,2348 -fused_write32s_reset_never,289,2348 -fused_write32s_reset_never,290,2348 -fused_write32s_reset_never,291,2340 -fused_write32s_reset_never,292,2337 -fused_write32s_reset_never,293,2337 -fused_write32s_reset_never,294,2339 -fused_write32s_reset_never,295,2335 -fused_write32s_reset_never,296,2348 -fused_write32s_reset_never,297,2348 -fused_write32s_reset_never,298,2350 -fused_write32s_reset_never,299,2342 -fused_write32s_reset_never,300,2345 -fused_write32s_reset_never,301,2347 -fused_write32s_reset_never,302,2348 -fused_write32s_reset_never,303,2347 -fused_write32s_reset_never,304,2350 -fused_write32s_reset_never,305,2351 -fused_write32s_reset_never,306,2345 -fused_write32s_reset_never,307,2346 -fused_write32s_reset_never,308,2348 -fused_write32s_reset_never,309,2348 -fused_write32s_reset_never,310,2348 -fused_write32s_reset_never,311,2346 -fused_write32s_reset_never,312,2347 -fused_write32s_reset_never,313,2347 -fused_write32s_reset_never,314,2345 -fused_write32s_reset_never,315,2349 -fused_write32s_reset_never,316,2347 -fused_write32s_reset_never,317,2349 -fused_write32s_reset_never,318,2352 -fused_write32s_reset_never,319,2345 -fused_write32s_reset_never,320,2346 -fused_write32s_reset_never,321,2347 -fused_write32s_reset_never,322,2350 -fused_write32s_reset_never,323,2351 -fused_write32s_reset_never,324,2346 -fused_write32s_reset_never,325,2348 -fused_write32s_reset_never,326,2354 -fused_write32s_reset_never,327,2355 -fused_write32s_reset_never,328,2346 -fused_write32s_reset_never,329,2346 -fused_write32s_reset_never,330,2344 -fused_write32s_reset_never,331,2348 -fused_write32s_reset_never,332,2348 -fused_write32s_reset_never,333,2346 -fused_write32s_reset_never,334,2348 -fused_write32s_reset_never,335,2346 -fused_write32s_reset_never,336,2349 -fused_write32s_reset_never,337,2347 -fused_write32s_reset_never,338,2348 -fused_write32s_reset_never,339,2347 -fused_write32s_reset_never,340,2348 -fused_write32s_reset_never,341,2345 -fused_write32s_reset_never,342,2347 -fused_write32s_reset_never,343,2344 -fused_write32s_reset_never,344,2347 -fused_write32s_reset_never,345,2344 -fused_write32s_reset_never,346,2349 -fused_write32s_reset_never,347,2345 -fused_write32s_reset_never,348,2350 -fused_write32s_reset_never,349,2344 -fused_write32s_reset_never,350,2344 -fused_write32s_reset_never,351,2345 -fused_write32s_reset_never,352,2345 -fused_write32s_reset_never,353,2347 -fused_write32s_reset_never,354,2343 -fused_write32s_reset_never,355,2348 -fused_write32s_reset_never,356,2345 -fused_write32s_reset_never,357,2345 -fused_write32s_reset_never,358,2348 -fused_write32s_reset_never,359,2347 -fused_write32s_reset_never,360,2347 -fused_write32s_reset_never,361,2347 -fused_write32s_reset_never,362,2344 -fused_write32s_reset_never,363,2347 -fused_write32s_reset_never,364,2348 -fused_write32s_reset_never,365,2345 -fused_write32s_reset_never,366,2348 -fused_write32s_reset_never,367,2350 -fused_write32s_reset_never,368,2349 -fused_write32s_reset_never,369,2345 -fused_write32s_reset_never,370,2345 -fused_write32s_reset_never,371,2348 -fused_write32s_reset_never,372,2346 -fused_write32s_reset_never,373,2345 -fused_write32s_reset_never,374,2344 -fused_write32s_reset_never,375,2347 -fused_write32s_reset_never,376,2344 -fused_write32s_reset_never,377,2344 -fused_write32s_reset_never,378,2346 -fused_write32s_reset_never,379,2347 -fused_write32s_reset_never,380,2347 -fused_write32s_reset_never,381,2345 -fused_write32s_reset_never,382,2349 -fused_write32s_reset_never,383,2343 -fused_write32s_reset_never,384,2345 -fused_write32s_reset_never,385,2347 -fused_write32s_reset_never,386,2348 -fused_write32s_reset_never,387,2348 -fused_write32s_reset_never,388,2347 -fused_write32s_reset_never,389,2347 -fused_write32s_reset_never,390,2348 -fused_write32s_reset_never,391,2347 -fused_write32s_reset_never,392,2346 -fused_write32s_reset_never,393,2344 -fused_write32s_reset_never,394,2346 -fused_write32s_reset_never,395,2343 -fused_write32s_reset_never,396,2346 -fused_write32s_reset_never,397,2347 -fused_write32s_reset_never,398,2348 -fused_write32s_reset_never,399,2347 -fused_write32s_reset_never,400,2348 -fused_write32s_reset_never,401,2344 -fused_write32s_reset_never,402,2344 -fused_write32s_reset_never,403,2344 -fused_write32s_reset_never,404,2347 -fused_write32s_reset_never,405,2346 -fused_write32s_reset_never,406,2346 -fused_write32s_reset_never,407,2356 -fused_write32s_reset_never,408,2345 -fused_write32s_reset_never,409,2346 -fused_write32s_reset_never,410,2345 -fused_write32s_reset_never,411,2351 -fused_write32s_reset_never,412,2348 -fused_write32s_reset_never,413,2347 -fused_write32s_reset_never,414,2348 -fused_write32s_reset_never,415,2349 -fused_write32s_reset_never,416,2347 -fused_write32s_reset_never,417,2345 -fused_write32s_reset_never,418,2351 -fused_write32s_reset_never,419,2348 -fused_write32s_reset_never,420,2349 -fused_write32s_reset_never,421,2339 -fused_write32s_reset_never,422,2352 -fused_write32s_reset_never,423,2346 -fused_write32s_reset_never,424,2347 -fused_write32s_reset_never,425,2348 -fused_write32s_reset_never,426,2346 -fused_write32s_reset_never,427,2345 -fused_write32s_reset_never,428,2347 -fused_write32s_reset_never,429,2348 -fused_write32s_reset_never,430,2347 -fused_write32s_reset_never,431,2350 -fused_write32s_reset_never,432,2348 -fused_write32s_reset_never,433,2345 -fused_write32s_reset_never,434,2352 -fused_write32s_reset_never,435,2348 -fused_write32s_reset_never,436,2347 -fused_write32s_reset_never,437,2346 -fused_write32s_reset_never,438,2345 -fused_write32s_reset_never,439,2348 -fused_write32s_reset_never,440,2348 -fused_write32s_reset_never,441,2346 -fused_write32s_reset_never,442,2345 -fused_write32s_reset_never,443,2350 -fused_write32s_reset_never,444,2340 -fused_write32s_reset_never,445,2347 -fused_write32s_reset_never,446,2347 -fused_write32s_reset_never,447,2346 -fused_write32s_reset_never,448,2346 -fused_write32s_reset_never,449,2346 -fused_write32s_reset_never,450,2348 -fused_write32s_reset_never,451,2347 -fused_write32s_reset_never,452,2349 -fused_write32s_reset_never,453,2352 -fused_write32s_reset_never,454,2345 -fused_write32s_reset_never,455,2346 -fused_write32s_reset_never,456,2341 -fused_write32s_reset_never,457,2348 -fused_write32s_reset_never,458,2347 -fused_write32s_reset_never,459,2348 -fused_write32s_reset_never,460,2345 -fused_write32s_reset_never,461,2347 -fused_write32s_reset_never,462,2345 -fused_write32s_reset_never,463,2351 -fused_write32s_reset_never,464,2346 -fused_write32s_reset_never,465,2347 -fused_write32s_reset_never,466,2351 -fused_write32s_reset_never,467,2346 -fused_write32s_reset_never,468,2346 -fused_write32s_reset_never,469,2349 -fused_write32s_reset_never,470,2347 -fused_write32s_reset_never,471,2352 -fused_write32s_reset_never,472,2344 -fused_write32s_reset_never,473,2349 -fused_write32s_reset_never,474,2347 -fused_write32s_reset_never,475,2349 -fused_write32s_reset_never,476,2345 -fused_write32s_reset_never,477,2347 -fused_write32s_reset_never,478,2346 -fused_write32s_reset_never,479,2346 -fused_write32s_reset_never,480,2344 -fused_write32s_reset_never,481,2343 -fused_write32s_reset_never,482,2349 -fused_write32s_reset_never,483,2345 -fused_write32s_reset_never,484,2349 -fused_write32s_reset_never,485,2346 -fused_write32s_reset_never,486,2350 -fused_write32s_reset_never,487,2346 -fused_write32s_reset_never,488,2347 -fused_write32s_reset_never,489,2347 -fused_write32s_reset_never,490,2352 -fused_write32s_reset_never,491,2344 -fused_write32s_reset_never,492,2345 -fused_write32s_reset_never,493,2354 -fused_write32s_reset_never,494,2343 -fused_write32s_reset_never,495,2348 -fused_write32s_reset_never,496,2353 -fused_write32s_reset_never,497,2347 -fused_write32s_reset_never,498,2346 -fused_write32s_reset_never,499,2348 -fused_write32s_reset_never,500,2346 -fused_write32s_reset_never,501,2345 -fused_write32s_reset_never,502,2346 -fused_write32s_reset_never,503,2344 -fused_write32s_reset_never,504,2348 -fused_write32s_reset_never,505,2345 -fused_write32s_reset_never,506,2348 -fused_write32s_reset_never,507,2343 -fused_write32s_reset_never,508,2345 -fused_write32s_reset_never,509,2347 -fused_write32s_reset_never,510,2344 -fused_write32s_reset_never,511,2334 -fused_write32s_reset_never,512,2344 -fused_write32s_reset_never,513,2343 -fused_write32s_reset_never,514,2345 -fused_write32s_reset_never,515,2344 -fused_write32s_reset_never,516,2346 -fused_write32s_reset_never,517,2346 -fused_write32s_reset_never,518,2344 -fused_write32s_reset_never,519,2346 -fused_write32s_reset_never,520,2347 -fused_write32s_reset_never,521,2343 -fused_write32s_reset_never,522,2340 -fused_write32s_reset_never,523,2349 -fused_write32s_reset_never,524,2346 -fused_write32s_reset_never,525,2343 -fused_write32s_reset_never,526,2345 -fused_write32s_reset_never,527,2345 -fused_write32s_reset_never,528,2348 -fused_write32s_reset_never,529,2347 -fused_write32s_reset_never,530,2348 -fused_write32s_reset_never,531,2343 -fused_write32s_reset_never,532,2344 -fused_write32s_reset_never,533,2345 -fused_write32s_reset_never,534,2345 -fused_write32s_reset_never,535,2346 -fused_write32s_reset_never,536,2348 -fused_write32s_reset_never,537,2342 -fused_write32s_reset_never,538,2347 -fused_write32s_reset_never,539,2348 -fused_write32s_reset_never,540,2349 -fused_write32s_reset_never,541,2343 -fused_write32s_reset_never,542,2347 -fused_write32s_reset_never,543,2344 -fused_write32s_reset_never,544,2370 -fused_write32s_reset_never,545,2346 -fused_write32s_reset_never,546,2343 -fused_write32s_reset_never,547,2341 -fused_write32s_reset_never,548,2345 -fused_write32s_reset_never,549,2345 -fused_write32s_reset_never,550,2350 -fused_write32s_reset_never,551,2347 -fused_write32s_reset_never,552,2347 -fused_write32s_reset_never,553,2347 -fused_write32s_reset_never,554,2348 -fused_write32s_reset_never,555,2344 -fused_write32s_reset_never,556,2344 -fused_write32s_reset_never,557,2346 -fused_write32s_reset_never,558,2347 -fused_write32s_reset_never,559,2351 -fused_write32s_reset_never,560,2344 -fused_write32s_reset_never,561,2345 -fused_write32s_reset_never,562,2346 -fused_write32s_reset_never,563,2346 -fused_write32s_reset_never,564,2346 -fused_write32s_reset_never,565,2345 -fused_write32s_reset_never,566,2345 -fused_write32s_reset_never,567,2347 -fused_write32s_reset_never,568,2347 -fused_write32s_reset_never,569,2345 -fused_write32s_reset_never,570,2345 -fused_write32s_reset_never,571,2345 -fused_write32s_reset_never,572,2351 -fused_write32s_reset_never,573,2347 -fused_write32s_reset_never,574,2349 -fused_write32s_reset_never,575,2343 -fused_write32s_reset_never,576,2348 -fused_write32s_reset_never,577,2345 -fused_write32s_reset_never,578,2349 -fused_write32s_reset_never,579,2346 -fused_write32s_reset_never,580,2345 -fused_write32s_reset_never,581,2347 -fused_write32s_reset_never,582,2348 -fused_write32s_reset_never,583,2343 -fused_write32s_reset_never,584,2345 -fused_write32s_reset_never,585,2346 -fused_write32s_reset_never,586,2343 -fused_write32s_reset_never,587,2348 -fused_write32s_reset_never,588,2347 -fused_write32s_reset_never,589,2342 -fused_write32s_reset_never,590,2347 -fused_write32s_reset_never,591,2343 -fused_write32s_reset_never,592,2344 -fused_write32s_reset_never,593,2345 -fused_write32s_reset_never,594,2343 -fused_write32s_reset_never,595,2346 -fused_write32s_reset_never,596,2345 -fused_write32s_reset_never,597,2345 -fused_write32s_reset_never,598,2346 -fused_write32s_reset_never,599,2347 -fused_write32s_reset_never,600,2345 -fused_write32s_reset_never,601,2348 -fused_write32s_reset_never,602,2345 -fused_write32s_reset_never,603,2344 -fused_write32s_reset_never,604,2349 -fused_write32s_reset_never,605,2350 -fused_write32s_reset_never,606,2346 -fused_write32s_reset_never,607,2347 -fused_write32s_reset_never,608,2342 -fused_write32s_reset_never,609,2343 -fused_write32s_reset_never,610,2344 -fused_write32s_reset_never,611,2342 -fused_write32s_reset_never,612,2345 -fused_write32s_reset_never,613,2348 -fused_write32s_reset_never,614,2343 -fused_write32s_reset_never,615,2344 -fused_write32s_reset_never,616,2348 -fused_write32s_reset_never,617,2343 -fused_write32s_reset_never,618,2344 -fused_write32s_reset_never,619,2349 -fused_write32s_reset_never,620,2348 -fused_write32s_reset_never,621,2347 -fused_write32s_reset_never,622,2344 -fused_write32s_reset_never,623,2350 -fused_write32s_reset_never,624,2356 -fused_write32s_reset_never,625,2348 -fused_write32s_reset_never,626,2346 -fused_write32s_reset_never,627,2352 -fused_write32s_reset_never,628,2348 -fused_write32s_reset_never,629,2348 -fused_write32s_reset_never,630,2348 -fused_write32s_reset_never,631,2347 -fused_write32s_reset_never,632,2348 -fused_write32s_reset_never,633,2347 -fused_write32s_reset_never,634,2349 -fused_write32s_reset_never,635,2348 -fused_write32s_reset_never,636,2345 -fused_write32s_reset_never,637,2346 -fused_write32s_reset_never,638,2350 -fused_write32s_reset_never,639,2346 -fused_write32s_reset_never,640,2350 -fused_write32s_reset_never,641,2347 -fused_write32s_reset_never,642,2347 -fused_write32s_reset_never,643,2346 -fused_write32s_reset_never,644,2347 -fused_write32s_reset_never,645,2347 -fused_write32s_reset_never,646,2348 -fused_write32s_reset_never,647,2349 -fused_write32s_reset_never,648,2345 -fused_write32s_reset_never,649,2343 -fused_write32s_reset_never,650,2349 -fused_write32s_reset_never,651,2346 -fused_write32s_reset_never,652,2344 -fused_write32s_reset_never,653,2345 -fused_write32s_reset_never,654,2348 -fused_write32s_reset_never,655,2350 -fused_write32s_reset_never,656,2349 -fused_write32s_reset_never,657,2346 -fused_write32s_reset_never,658,2345 -fused_write32s_reset_never,659,2346 -fused_write32s_reset_never,660,2347 -fused_write32s_reset_never,661,2345 -fused_write32s_reset_never,662,2349 -fused_write32s_reset_never,663,2351 -fused_write32s_reset_never,664,2347 -fused_write32s_reset_never,665,2349 -fused_write32s_reset_never,666,2353 -fused_write32s_reset_never,667,2343 -fused_write32s_reset_never,668,2347 -fused_write32s_reset_never,669,2345 -fused_write32s_reset_never,670,2349 -fused_write32s_reset_never,671,2352 -fused_write32s_reset_never,672,2344 -fused_write32s_reset_never,673,2349 -fused_write32s_reset_never,674,2346 -fused_write32s_reset_never,675,2344 -fused_write32s_reset_never,676,2349 -fused_write32s_reset_never,677,2348 -fused_write32s_reset_never,678,2348 -fused_write32s_reset_never,679,2349 -fused_write32s_reset_never,680,2348 -fused_write32s_reset_never,681,2346 -fused_write32s_reset_never,682,2346 -fused_write32s_reset_never,683,2347 -fused_write32s_reset_never,684,2346 -fused_write32s_reset_never,685,2343 -fused_write32s_reset_never,686,2346 -fused_write32s_reset_never,687,2345 -fused_write32s_reset_never,688,2344 -fused_write32s_reset_never,689,2344 -fused_write32s_reset_never,690,2344 -fused_write32s_reset_never,691,2344 -fused_write32s_reset_never,692,2349 -fused_write32s_reset_never,693,2348 -fused_write32s_reset_never,694,2349 -fused_write32s_reset_never,695,2346 -fused_write32s_reset_never,696,2345 -fused_write32s_reset_never,697,2344 -fused_write32s_reset_never,698,2343 -fused_write32s_reset_never,699,2344 -fused_write32s_reset_never,700,2351 -fused_write32s_reset_never,701,2345 -fused_write32s_reset_never,702,2348 -fused_write32s_reset_never,703,2347 -fused_write32s_reset_never,704,2348 -fused_write32s_reset_never,705,2348 -fused_write32s_reset_never,706,2349 -fused_write32s_reset_never,707,2348 -fused_write32s_reset_never,708,2349 -fused_write32s_reset_never,709,2355 -fused_write32s_reset_never,710,2350 -fused_write32s_reset_never,711,2347 -fused_write32s_reset_never,712,2348 -fused_write32s_reset_never,713,2348 -fused_write32s_reset_never,714,2348 -fused_write32s_reset_never,715,2348 -fused_write32s_reset_never,716,2348 -fused_write32s_reset_never,717,2347 -fused_write32s_reset_never,718,2354 -fused_write32s_reset_never,719,2343 -fused_write32s_reset_never,720,2347 -fused_write32s_reset_never,721,2349 -fused_write32s_reset_never,722,2347 -fused_write32s_reset_never,723,2348 -fused_write32s_reset_never,724,2345 -fused_write32s_reset_never,725,2345 -fused_write32s_reset_never,726,2347 -fused_write32s_reset_never,727,2345 -fused_write32s_reset_never,728,2346 -fused_write32s_reset_never,729,2350 -fused_write32s_reset_never,730,2342 -fused_write32s_reset_never,731,2345 -fused_write32s_reset_never,732,2346 -fused_write32s_reset_never,733,2344 -fused_write32s_reset_never,734,2350 -fused_write32s_reset_never,735,2356 -fused_write32s_reset_never,736,2348 -fused_write32s_reset_never,737,2348 -fused_write32s_reset_never,738,2347 -fused_write32s_reset_never,739,2349 -fused_write32s_reset_never,740,2348 -fused_write32s_reset_never,741,2344 -fused_write32s_reset_never,742,2346 -fused_write32s_reset_never,743,2348 -fused_write32s_reset_never,744,2348 -fused_write32s_reset_never,745,2350 -fused_write32s_reset_never,746,2346 -fused_write32s_reset_never,747,2349 -fused_write32s_reset_never,748,2348 -fused_write32s_reset_never,749,2347 -fused_write32s_reset_never,750,2347 -fused_write32s_reset_never,751,2349 -fused_write32s_reset_never,752,2351 -fused_write32s_reset_never,753,2346 -fused_write32s_reset_never,754,2351 -fused_write32s_reset_never,755,2349 -fused_write32s_reset_never,756,2346 -fused_write32s_reset_never,757,2344 -fused_write32s_reset_never,758,2345 -fused_write32s_reset_never,759,2351 -fused_write32s_reset_never,760,2345 -fused_write32s_reset_never,761,2349 -fused_write32s_reset_never,762,2347 -fused_write32s_reset_never,763,2346 -fused_write32s_reset_never,764,2346 -fused_write32s_reset_never,765,2347 -fused_write32s_reset_never,766,2349 -fused_write32s_reset_never,767,2344 -fused_write32s_reset_never,768,2346 -fused_write32s_reset_never,769,2348 -fused_write32s_reset_never,770,2352 -fused_write32s_reset_never,771,2347 -fused_write32s_reset_never,772,2347 -fused_write32s_reset_never,773,2349 -fused_write32s_reset_never,774,2347 -fused_write32s_reset_never,775,2347 -fused_write32s_reset_never,776,2347 -fused_write32s_reset_never,777,2348 -fused_write32s_reset_never,778,2349 -fused_write32s_reset_never,779,2348 -fused_write32s_reset_never,780,2347 -fused_write32s_reset_never,781,2349 -fused_write32s_reset_never,782,2350 -fused_write32s_reset_never,783,2349 -fused_write32s_reset_never,784,2346 -fused_write32s_reset_never,785,2349 -fused_write32s_reset_never,786,2345 -fused_write32s_reset_never,787,2350 -fused_write32s_reset_never,788,2348 -fused_write32s_reset_never,789,2347 -fused_write32s_reset_never,790,2352 -fused_write32s_reset_never,791,2349 -fused_write32s_reset_never,792,2346 -fused_write32s_reset_never,793,2348 -fused_write32s_reset_never,794,2356 -fused_write32s_reset_never,795,2348 -fused_write32s_reset_never,796,2347 -fused_write32s_reset_never,797,2348 -fused_write32s_reset_never,798,2348 -fused_write32s_reset_never,799,2349 -fused_write32s_reset_never,800,2349 -fused_write32s_reset_never,801,2350 -fused_write32s_reset_never,802,2349 -fused_write32s_reset_never,803,2347 -fused_write32s_reset_never,804,2348 -fused_write32s_reset_never,805,2348 -fused_write32s_reset_never,806,2349 -fused_write32s_reset_never,807,2346 -fused_write32s_reset_never,808,2352 -fused_write32s_reset_never,809,2352 -fused_write32s_reset_never,810,2350 -fused_write32s_reset_never,811,2347 -fused_write32s_reset_never,812,2347 -fused_write32s_reset_never,813,2349 -fused_write32s_reset_never,814,2348 -fused_write32s_reset_never,815,2347 -fused_write32s_reset_never,816,2348 -fused_write32s_reset_never,817,2348 -fused_write32s_reset_never,818,2348 -fused_write32s_reset_never,819,2347 -fused_write32s_reset_never,820,2348 -fused_write32s_reset_never,821,2345 -fused_write32s_reset_never,822,2345 -fused_write32s_reset_never,823,2345 -fused_write32s_reset_never,824,2347 -fused_write32s_reset_never,825,2347 -fused_write32s_reset_never,826,2351 -fused_write32s_reset_never,827,2346 -fused_write32s_reset_never,828,2347 -fused_write32s_reset_never,829,2349 -fused_write32s_reset_never,830,2347 -fused_write32s_reset_never,831,2354 -fused_write32s_reset_never,832,2347 -fused_write32s_reset_never,833,2350 -fused_write32s_reset_never,834,2350 -fused_write32s_reset_never,835,2349 -fused_write32s_reset_never,836,2350 -fused_write32s_reset_never,837,2354 -fused_write32s_reset_never,838,2349 -fused_write32s_reset_never,839,2347 -fused_write32s_reset_never,840,2350 -fused_write32s_reset_never,841,2350 -fused_write32s_reset_never,842,2347 -fused_write32s_reset_never,843,2343 -fused_write32s_reset_never,844,2346 -fused_write32s_reset_never,845,2348 -fused_write32s_reset_never,846,2345 -fused_write32s_reset_never,847,2345 -fused_write32s_reset_never,848,2347 -fused_write32s_reset_never,849,2347 -fused_write32s_reset_never,850,2345 -fused_write32s_reset_never,851,2347 -fused_write32s_reset_never,852,2348 -fused_write32s_reset_never,853,2345 -fused_write32s_reset_never,854,2347 -fused_write32s_reset_never,855,2351 -fused_write32s_reset_never,856,2346 -fused_write32s_reset_never,857,2346 -fused_write32s_reset_never,858,2348 -fused_write32s_reset_never,859,2348 -fused_write32s_reset_never,860,2349 -fused_write32s_reset_never,861,2347 -fused_write32s_reset_never,862,2351 -fused_write32s_reset_never,863,2350 -fused_write32s_reset_never,864,2346 -fused_write32s_reset_never,865,2347 -fused_write32s_reset_never,866,2351 -fused_write32s_reset_never,867,2347 -fused_write32s_reset_never,868,2349 -fused_write32s_reset_never,869,2349 -fused_write32s_reset_never,870,2348 -fused_write32s_reset_never,871,2347 -fused_write32s_reset_never,872,2350 -fused_write32s_reset_never,873,2347 -fused_write32s_reset_never,874,2349 -fused_write32s_reset_never,875,2349 -fused_write32s_reset_never,876,2350 -fused_write32s_reset_never,877,2349 -fused_write32s_reset_never,878,2349 -fused_write32s_reset_never,879,2351 -fused_write32s_reset_never,880,2350 -fused_write32s_reset_never,881,2347 -fused_write32s_reset_never,882,2344 -fused_write32s_reset_never,883,2350 -fused_write32s_reset_never,884,2348 -fused_write32s_reset_never,885,2348 -fused_write32s_reset_never,886,2348 -fused_write32s_reset_never,887,2360 -fused_write32s_reset_never,888,2346 -fused_write32s_reset_never,889,2347 -fused_write32s_reset_never,890,2353 -fused_write32s_reset_never,891,2348 -fused_write32s_reset_never,892,2348 -fused_write32s_reset_never,893,2348 -fused_write32s_reset_never,894,2347 -fused_write32s_reset_never,895,2350 -fused_write32s_reset_never,896,2351 -fused_write32s_reset_never,897,2347 -fused_write32s_reset_never,898,2350 -fused_write32s_reset_never,899,2344 -fused_write32s_reset_never,900,2344 -fused_write32s_reset_never,901,2346 -fused_write32s_reset_never,902,2345 -fused_write32s_reset_never,903,2345 -fused_write32s_reset_never,904,2345 -fused_write32s_reset_never,905,2345 -fused_write32s_reset_never,906,2348 -fused_write32s_reset_never,907,2347 -fused_write32s_reset_never,908,2346 -fused_write32s_reset_never,909,2346 -fused_write32s_reset_never,910,2346 -fused_write32s_reset_never,911,2348 -fused_write32s_reset_never,912,2347 -fused_write32s_reset_never,913,2347 -fused_write32s_reset_never,914,2349 -fused_write32s_reset_never,915,2347 -fused_write32s_reset_never,916,2348 -fused_write32s_reset_never,917,2348 -fused_write32s_reset_never,918,2346 -fused_write32s_reset_never,919,2351 -fused_write32s_reset_never,920,2346 -fused_write32s_reset_never,921,2346 -fused_write32s_reset_never,922,2351 -fused_write32s_reset_never,923,2350 -fused_write32s_reset_never,924,2345 -fused_write32s_reset_never,925,2346 -fused_write32s_reset_never,926,2347 -fused_write32s_reset_never,927,2344 -fused_write32s_reset_never,928,2347 -fused_write32s_reset_never,929,2345 -fused_write32s_reset_never,930,2347 -fused_write32s_reset_never,931,2347 -fused_write32s_reset_never,932,2348 -fused_write32s_reset_never,933,2348 -fused_write32s_reset_never,934,2350 -fused_write32s_reset_never,935,2348 -fused_write32s_reset_never,936,2347 -fused_write32s_reset_never,937,2348 -fused_write32s_reset_never,938,2347 -fused_write32s_reset_never,939,2345 -fused_write32s_reset_never,940,2348 -fused_write32s_reset_never,941,2349 -fused_write32s_reset_never,942,2350 -fused_write32s_reset_never,943,2347 -fused_write32s_reset_never,944,2347 -fused_write32s_reset_never,945,2344 -fused_write32s_reset_never,946,2346 -fused_write32s_reset_never,947,2348 -fused_write32s_reset_never,948,2346 -fused_write32s_reset_never,949,2346 -fused_write32s_reset_never,950,2349 -fused_write32s_reset_never,951,2347 -fused_write32s_reset_never,952,2347 -fused_write32s_reset_never,953,2345 -fused_write32s_reset_never,954,2353 -fused_write32s_reset_never,955,2348 -fused_write32s_reset_never,956,2345 -fused_write32s_reset_never,957,2347 -fused_write32s_reset_never,958,2345 -fused_write32s_reset_never,959,2347 -fused_write32s_reset_never,960,2348 -fused_write32s_reset_never,961,2347 -fused_write32s_reset_never,962,2346 -fused_write32s_reset_never,963,2348 -fused_write32s_reset_never,964,2348 -fused_write32s_reset_never,965,2355 -fused_write32s_reset_never,966,2345 -fused_write32s_reset_never,967,2343 -fused_write32s_reset_never,968,2350 -fused_write32s_reset_never,969,2347 -fused_write32s_reset_never,970,2350 -fused_write32s_reset_never,971,2353 -fused_write32s_reset_never,972,2352 -fused_write32s_reset_never,973,2346 -fused_write32s_reset_never,974,2346 -fused_write32s_reset_never,975,2350 -fused_write32s_reset_never,976,2347 -fused_write32s_reset_never,977,2347 -fused_write32s_reset_never,978,2353 -fused_write32s_reset_never,979,2345 -fused_write32s_reset_never,980,2348 -fused_write32s_reset_never,981,2347 -fused_write32s_reset_never,982,2348 -fused_write32s_reset_never,983,2348 -fused_write32s_reset_never,984,2346 -fused_write32s_reset_never,985,2346 -fused_write32s_reset_never,986,2347 -fused_write32s_reset_never,987,2349 -fused_write32s_reset_never,988,2344 -fused_write32s_reset_never,989,2347 -fused_write32s_reset_never,990,2348 -fused_write32s_reset_never,991,2349 -fused_write32s_reset_never,992,2346 -fused_write32s_reset_never,993,2348 -fused_write32s_reset_never,994,2345 -fused_write32s_reset_never,995,2347 -fused_write32s_reset_never,996,2348 -fused_write32s_reset_never,997,2344 -fused_write32s_reset_never,998,2346 -fused_write32s_reset_never,999,2345 -runlist,0,8310 -runlist,1,4820 -runlist,2,4833 -runlist,3,4819 -runlist,4,4831 -runlist,5,4833 -runlist,6,4832 -runlist,7,4829 -runlist,8,4827 -runlist,9,4820 -runlist,10,4830 -runlist,11,4816 -runlist,12,4826 -runlist,13,4826 -runlist,14,4829 -runlist,15,4842 -runlist,16,4841 -runlist,17,4842 -runlist,18,4836 -runlist,19,4823 -runlist,20,4827 -runlist,21,4829 -runlist,22,4825 -runlist,23,4828 -runlist,24,4834 -runlist,25,4833 -runlist,26,4825 -runlist,27,4841 -runlist,28,4831 -runlist,29,4829 -runlist,30,4826 -runlist,31,4825 -runlist,32,4829 -runlist,33,4831 -runlist,34,4833 -runlist,35,4839 -runlist,36,4823 -runlist,37,4832 -runlist,38,4823 -runlist,39,4820 -runlist,40,4827 -runlist,41,4828 -runlist,42,4826 -runlist,43,4824 -runlist,44,4825 -runlist,45,4827 -runlist,46,4829 -runlist,47,4825 -runlist,48,4828 -runlist,49,4824 -runlist,50,4826 -runlist,51,4885 -runlist,52,4910 -runlist,53,4879 -runlist,54,4904 -runlist,55,4881 -runlist,56,4884 -runlist,57,4880 -runlist,58,4873 -runlist,59,4878 -runlist,60,4893 -runlist,61,4887 -runlist,62,4885 -runlist,63,4878 -runlist,64,4854 -runlist,65,4860 -runlist,66,4870 -runlist,67,4853 -runlist,68,4858 -runlist,69,4849 -runlist,70,4832 -runlist,71,4845 -runlist,72,4853 -runlist,73,4840 -runlist,74,4852 -runlist,75,4843 -runlist,76,4853 -runlist,77,4846 -runlist,78,4850 -runlist,79,4860 -runlist,80,4853 -runlist,81,4852 -runlist,82,4840 -runlist,83,4846 -runlist,84,4843 -runlist,85,4859 -runlist,86,4854 -runlist,87,4866 -runlist,88,4856 -runlist,89,4867 -runlist,90,4852 -runlist,91,4853 -runlist,92,4852 -runlist,93,4846 -runlist,94,4845 -runlist,95,4864 -runlist,96,4922 -runlist,97,4901 -runlist,98,4844 -runlist,99,4839 -runlist,100,4854 -runlist,101,4844 -runlist,102,4847 -runlist,103,4845 -runlist,104,4844 -runlist,105,4841 -runlist,106,4858 -runlist,107,4857 -runlist,108,4848 -runlist,109,4853 -runlist,110,4855 -runlist,111,4851 -runlist,112,4855 -runlist,113,4849 -runlist,114,4849 -runlist,115,4854 -runlist,116,4852 -runlist,117,4856 -runlist,118,4851 -runlist,119,4853 -runlist,120,4852 -runlist,121,4847 -runlist,122,4851 -runlist,123,4847 -runlist,124,4840 -runlist,125,4848 -runlist,126,4857 -runlist,127,4850 -runlist,128,4854 -runlist,129,4866 -runlist,130,4856 -runlist,131,4844 -runlist,132,4855 -runlist,133,4851 -runlist,134,4857 -runlist,135,4858 -runlist,136,4866 -runlist,137,4837 -runlist,138,4832 -runlist,139,4821 -runlist,140,4837 -runlist,141,4858 -runlist,142,4835 -runlist,143,4851 -runlist,144,4854 -runlist,145,4852 -runlist,146,4849 -runlist,147,4837 -runlist,148,4848 -runlist,149,4843 -runlist,150,4849 -runlist,151,4846 -runlist,152,4839 -runlist,153,4846 -runlist,154,4840 -runlist,155,4835 -runlist,156,4849 -runlist,157,4840 -runlist,158,4841 -runlist,159,4846 -runlist,160,4851 -runlist,161,4842 -runlist,162,4843 -runlist,163,4844 -runlist,164,4841 -runlist,165,4838 -runlist,166,4840 -runlist,167,4836 -runlist,168,4843 -runlist,169,4843 -runlist,170,4844 -runlist,171,4843 -runlist,172,4852 -runlist,173,4849 -runlist,174,4844 -runlist,175,4843 -runlist,176,4840 -runlist,177,4842 -runlist,178,4851 -runlist,179,4848 -runlist,180,4852 -runlist,181,4841 -runlist,182,4861 -runlist,183,4846 -runlist,184,4856 -runlist,185,4841 -runlist,186,4848 -runlist,187,4848 -runlist,188,4846 -runlist,189,4847 -runlist,190,4852 -runlist,191,4845 -runlist,192,4855 -runlist,193,4844 -runlist,194,4851 -runlist,195,4842 -runlist,196,4844 -runlist,197,4848 -runlist,198,4846 -runlist,199,4847 -runlist,200,4848 -runlist,201,4849 -runlist,202,4850 -runlist,203,4850 -runlist,204,4849 -runlist,205,4869 -runlist,206,4869 -runlist,207,4846 -runlist,208,4841 -runlist,209,4843 -runlist,210,4844 -runlist,211,4839 -runlist,212,4838 -runlist,213,4840 -runlist,214,4842 -runlist,215,4851 -runlist,216,4843 -runlist,217,4846 -runlist,218,4853 -runlist,219,4844 -runlist,220,4844 -runlist,221,4842 -runlist,222,4849 -runlist,223,4838 -runlist,224,4841 -runlist,225,4841 -runlist,226,4846 -runlist,227,4845 -runlist,228,4837 -runlist,229,4848 -runlist,230,4842 -runlist,231,4852 -runlist,232,4846 -runlist,233,4849 -runlist,234,4840 -runlist,235,4845 -runlist,236,4845 -runlist,237,4849 -runlist,238,4842 -runlist,239,4850 -runlist,240,4836 -runlist,241,4841 -runlist,242,4841 -runlist,243,4845 -runlist,244,4845 -runlist,245,4841 -runlist,246,4841 -runlist,247,4839 -runlist,248,4847 -runlist,249,4842 -runlist,250,4844 -runlist,251,4837 -runlist,252,4846 -runlist,253,4844 -runlist,254,4846 -runlist,255,4844 -runlist,256,4846 -runlist,257,4848 -runlist,258,4840 -runlist,259,4837 -runlist,260,4840 -runlist,261,4845 -runlist,262,4958 -runlist,263,4865 -runlist,264,4847 -runlist,265,4842 -runlist,266,4837 -runlist,267,4846 -runlist,268,4842 -runlist,269,4839 -runlist,270,4846 -runlist,271,4846 -runlist,272,4847 -runlist,273,4846 -runlist,274,4851 -runlist,275,4839 -runlist,276,4846 -runlist,277,4844 -runlist,278,4846 -runlist,279,4839 -runlist,280,4839 -runlist,281,4856 -runlist,282,4844 -runlist,283,4849 -runlist,284,4845 -runlist,285,4841 -runlist,286,4847 -runlist,287,4845 -runlist,288,4849 -runlist,289,4844 -runlist,290,4852 -runlist,291,4843 -runlist,292,4845 -runlist,293,4844 -runlist,294,4842 -runlist,295,4844 -runlist,296,4849 -runlist,297,4845 -runlist,298,4845 -runlist,299,4841 -runlist,300,4842 -runlist,301,4844 -runlist,302,4841 -runlist,303,4854 -runlist,304,4847 -runlist,305,4851 -runlist,306,4845 -runlist,307,4848 -runlist,308,4843 -runlist,309,4848 -runlist,310,4873 -runlist,311,4879 -runlist,312,4848 -runlist,313,4843 -runlist,314,4862 -runlist,315,4849 -runlist,316,4849 -runlist,317,4843 -runlist,318,4844 -runlist,319,4843 -runlist,320,4843 -runlist,321,4845 -runlist,322,4846 -runlist,323,4853 -runlist,324,4850 -runlist,325,4855 -runlist,326,4843 -runlist,327,4850 -runlist,328,4848 -runlist,329,4852 -runlist,330,4842 -runlist,331,4842 -runlist,332,4842 -runlist,333,4846 -runlist,334,4848 -runlist,335,4844 -runlist,336,4842 -runlist,337,4845 -runlist,338,4847 -runlist,339,4844 -runlist,340,4850 -runlist,341,4840 -runlist,342,4847 -runlist,343,4845 -runlist,344,4850 -runlist,345,4849 -runlist,346,4842 -runlist,347,4841 -runlist,348,4841 -runlist,349,4850 -runlist,350,4838 -runlist,351,4843 -runlist,352,4839 -runlist,353,4848 -runlist,354,4841 -runlist,355,4845 -runlist,356,4848 -runlist,357,4847 -runlist,358,4836 -runlist,359,4846 -runlist,360,4847 -runlist,361,4845 -runlist,362,4848 -runlist,363,4839 -runlist,364,4843 -runlist,365,4842 -runlist,366,4860 -runlist,367,4841 -runlist,368,4840 -runlist,369,4842 -runlist,370,4843 -runlist,371,4843 -runlist,372,4848 -runlist,373,4841 -runlist,374,4844 -runlist,375,4844 -runlist,376,4844 -runlist,377,4844 -runlist,378,4839 -runlist,379,4845 -runlist,380,4841 -runlist,381,4841 -runlist,382,4842 -runlist,383,4840 -runlist,384,4840 -runlist,385,4840 -runlist,386,4841 -runlist,387,4841 -runlist,388,4843 -runlist,389,4842 -runlist,390,4840 -runlist,391,4845 -runlist,392,4847 -runlist,393,4843 -runlist,394,4847 -runlist,395,4840 -runlist,396,4845 -runlist,397,4839 -runlist,398,4877 -runlist,399,4850 -runlist,400,4845 -runlist,401,4843 -runlist,402,4839 -runlist,403,4839 -runlist,404,4846 -runlist,405,4843 -runlist,406,4853 -runlist,407,4839 -runlist,408,4844 -runlist,409,4847 -runlist,410,4840 -runlist,411,4845 -runlist,412,4842 -runlist,413,4854 -runlist,414,4843 -runlist,415,4872 -runlist,416,4867 -runlist,417,4858 -runlist,418,4870 -runlist,419,4847 -runlist,420,4847 -runlist,421,4846 -runlist,422,4840 -runlist,423,4840 -runlist,424,4840 -runlist,425,4852 -runlist,426,4843 -runlist,427,4849 -runlist,428,4844 -runlist,429,4841 -runlist,430,4848 -runlist,431,4838 -runlist,432,4850 -runlist,433,4844 -runlist,434,4845 -runlist,435,4847 -runlist,436,4846 -runlist,437,4850 -runlist,438,4844 -runlist,439,4849 -runlist,440,4842 -runlist,441,4847 -runlist,442,4840 -runlist,443,4848 -runlist,444,4838 -runlist,445,4845 -runlist,446,4847 -runlist,447,4844 -runlist,448,4845 -runlist,449,4843 -runlist,450,4845 -runlist,451,4842 -runlist,452,4834 -runlist,453,4846 -runlist,454,4844 -runlist,455,4842 -runlist,456,4849 -runlist,457,4840 -runlist,458,4846 -runlist,459,4841 -runlist,460,4840 -runlist,461,4843 -runlist,462,4842 -runlist,463,4845 -runlist,464,4842 -runlist,465,4837 -runlist,466,4849 -runlist,467,4849 -runlist,468,4852 -runlist,469,4845 -runlist,470,4840 -runlist,471,4838 -runlist,472,4842 -runlist,473,4837 -runlist,474,4849 -runlist,475,4837 -runlist,476,4846 -runlist,477,4844 -runlist,478,4842 -runlist,479,4842 -runlist,480,4842 -runlist,481,4838 -runlist,482,4844 -runlist,483,4842 -runlist,484,4840 -runlist,485,4843 -runlist,486,4850 -runlist,487,4838 -runlist,488,4846 -runlist,489,4851 -runlist,490,4838 -runlist,491,4846 -runlist,492,4843 -runlist,493,4840 -runlist,494,4846 -runlist,495,4844 -runlist,496,4842 -runlist,497,4839 -runlist,498,4841 -runlist,499,4841 -runlist,500,4839 -runlist,501,4843 -runlist,502,4840 -runlist,503,4839 -runlist,504,4845 -runlist,505,4851 -runlist,506,4841 -runlist,507,4834 -runlist,508,4848 -runlist,509,4856 -runlist,510,4852 -runlist,511,4841 -runlist,512,4849 -runlist,513,4859 -runlist,514,4845 -runlist,515,4845 -runlist,516,4841 -runlist,517,4844 -runlist,518,4846 -runlist,519,4846 -runlist,520,4845 -runlist,521,4842 -runlist,522,4849 -runlist,523,4840 -runlist,524,4842 -runlist,525,4842 -runlist,526,4844 -runlist,527,4842 -runlist,528,4843 -runlist,529,4846 -runlist,530,4851 -runlist,531,4843 -runlist,532,4858 -runlist,533,4849 -runlist,534,4859 -runlist,535,4865 -runlist,536,4862 -runlist,537,4851 -runlist,538,4845 -runlist,539,4839 -runlist,540,4841 -runlist,541,4893 -runlist,542,4855 -runlist,543,4839 -runlist,544,4835 -runlist,545,4837 -runlist,546,4851 -runlist,547,4848 -runlist,548,4837 -runlist,549,4832 -runlist,550,4840 -runlist,551,4850 -runlist,552,4846 -runlist,553,4843 -runlist,554,4839 -runlist,555,4840 -runlist,556,4842 -runlist,557,4838 -runlist,558,4843 -runlist,559,4841 -runlist,560,4838 -runlist,561,4845 -runlist,562,4842 -runlist,563,4843 -runlist,564,4844 -runlist,565,4836 -runlist,566,4831 -runlist,567,4834 -runlist,568,4836 -runlist,569,4841 -runlist,570,4840 -runlist,571,4835 -runlist,572,4855 -runlist,573,4854 -runlist,574,4849 -runlist,575,4844 -runlist,576,4840 -runlist,577,4845 -runlist,578,4843 -runlist,579,4845 -runlist,580,4841 -runlist,581,4842 -runlist,582,4841 -runlist,583,4847 -runlist,584,4847 -runlist,585,4847 -runlist,586,4835 -runlist,587,4840 -runlist,588,4839 -runlist,589,4834 -runlist,590,4845 -runlist,591,4845 -runlist,592,4841 -runlist,593,4846 -runlist,594,4839 -runlist,595,4841 -runlist,596,4841 -runlist,597,4846 -runlist,598,4837 -runlist,599,4846 -runlist,600,4842 -runlist,601,4844 -runlist,602,4844 -runlist,603,4844 -runlist,604,4857 -runlist,605,4844 -runlist,606,4843 -runlist,607,4838 -runlist,608,4884 -runlist,609,4870 -runlist,610,4831 -runlist,611,4850 -runlist,612,4844 -runlist,613,4849 -runlist,614,4838 -runlist,615,4838 -runlist,616,4841 -runlist,617,4840 -runlist,618,4846 -runlist,619,4842 -runlist,620,4841 -runlist,621,4840 -runlist,622,4841 -runlist,623,4839 -runlist,624,4845 -runlist,625,4835 -runlist,626,4838 -runlist,627,4840 -runlist,628,4844 -runlist,629,4840 -runlist,630,4843 -runlist,631,4840 -runlist,632,4844 -runlist,633,4844 -runlist,634,4841 -runlist,635,4847 -runlist,636,4838 -runlist,637,4841 -runlist,638,4837 -runlist,639,4844 -runlist,640,4846 -runlist,641,4837 -runlist,642,4853 -runlist,643,4842 -runlist,644,4835 -runlist,645,4846 -runlist,646,4839 -runlist,647,4839 -runlist,648,4840 -runlist,649,4837 -runlist,650,4836 -runlist,651,4841 -runlist,652,4839 -runlist,653,4831 -runlist,654,4842 -runlist,655,4840 -runlist,656,4832 -runlist,657,4837 -runlist,658,4835 -runlist,659,4841 -runlist,660,4835 -runlist,661,4844 -runlist,662,4832 -runlist,663,4842 -runlist,664,4838 -runlist,665,4840 -runlist,666,4865 -runlist,667,4887 -runlist,668,4861 -runlist,669,4848 -runlist,670,4843 -runlist,671,4847 -runlist,672,4836 -runlist,673,4842 -runlist,674,4849 -runlist,675,4851 -runlist,676,4845 -runlist,677,4845 -runlist,678,4840 -runlist,679,4841 -runlist,680,4841 -runlist,681,4850 -runlist,682,4867 -runlist,683,4846 -runlist,684,4842 -runlist,685,4839 -runlist,686,4839 -runlist,687,4844 -runlist,688,4851 -runlist,689,4840 -runlist,690,4845 -runlist,691,4842 -runlist,692,4844 -runlist,693,4841 -runlist,694,4846 -runlist,695,4851 -runlist,696,4852 -runlist,697,4844 -runlist,698,4846 -runlist,699,4839 -runlist,700,4843 -runlist,701,4839 -runlist,702,4844 -runlist,703,4837 -runlist,704,4843 -runlist,705,4835 -runlist,706,4838 -runlist,707,4844 -runlist,708,4842 -runlist,709,4843 -runlist,710,4846 -runlist,711,4840 -runlist,712,4844 -runlist,713,4844 -runlist,714,4851 -runlist,715,4846 -runlist,716,4852 -runlist,717,4845 -runlist,718,4843 -runlist,719,4841 -runlist,720,4841 -runlist,721,4838 -runlist,722,4839 -runlist,723,4849 -runlist,724,4843 -runlist,725,4840 -runlist,726,4863 -runlist,727,4846 -runlist,728,4840 -runlist,729,4843 -runlist,730,4843 -runlist,731,4841 -runlist,732,4847 -runlist,733,4842 -runlist,734,4849 -runlist,735,4837 -runlist,736,4845 -runlist,737,4846 -runlist,738,4847 -runlist,739,4845 -runlist,740,4844 -runlist,741,4851 -runlist,742,4851 -runlist,743,4843 -runlist,744,4838 -runlist,745,4845 -runlist,746,4845 -runlist,747,4846 -runlist,748,4845 -runlist,749,4844 -runlist,750,4842 -runlist,751,4839 -runlist,752,4852 -runlist,753,4848 -runlist,754,4838 -runlist,755,4838 -runlist,756,4837 -runlist,757,4858 -runlist,758,4841 -runlist,759,4844 -runlist,760,4841 -runlist,761,4843 -runlist,762,4847 -runlist,763,4844 -runlist,764,4843 -runlist,765,4839 -runlist,766,4851 -runlist,767,4843 -runlist,768,4839 -runlist,769,4842 -runlist,770,4850 -runlist,771,4843 -runlist,772,4844 -runlist,773,4846 -runlist,774,4840 -runlist,775,4850 -runlist,776,4839 -runlist,777,4854 -runlist,778,4865 -runlist,779,4887 -runlist,780,4865 -runlist,781,4859 -runlist,782,4839 -runlist,783,4842 -runlist,784,4846 -runlist,785,4844 -runlist,786,4840 -runlist,787,4838 -runlist,788,4841 -runlist,789,4843 -runlist,790,4839 -runlist,791,4846 -runlist,792,4841 -runlist,793,4845 -runlist,794,4842 -runlist,795,4840 -runlist,796,4835 -runlist,797,4843 -runlist,798,4843 -runlist,799,4847 -runlist,800,4847 -runlist,801,4844 -runlist,802,4844 -runlist,803,4843 -runlist,804,4847 -runlist,805,4839 -runlist,806,4842 -runlist,807,4846 -runlist,808,4840 -runlist,809,4838 -runlist,810,4845 -runlist,811,4850 -runlist,812,4848 -runlist,813,4846 -runlist,814,4856 -runlist,815,4842 -runlist,816,4840 -runlist,817,4842 -runlist,818,4853 -runlist,819,4847 -runlist,820,4844 -runlist,821,4846 -runlist,822,4844 -runlist,823,4839 -runlist,824,4840 -runlist,825,4845 -runlist,826,4839 -runlist,827,4840 -runlist,828,4846 -runlist,829,4845 -runlist,830,4850 -runlist,831,4841 -runlist,832,4839 -runlist,833,4840 -runlist,834,4837 -runlist,835,4852 -runlist,836,4836 -runlist,837,4856 -runlist,838,4848 -runlist,839,4847 -runlist,840,4847 -runlist,841,4847 -runlist,842,4844 -runlist,843,4840 -runlist,844,4844 -runlist,845,4841 -runlist,846,4845 -runlist,847,4846 -runlist,848,4841 -runlist,849,4846 -runlist,850,4848 -runlist,851,4842 -runlist,852,4839 -runlist,853,4839 -runlist,854,4851 -runlist,855,4842 -runlist,856,4842 -runlist,857,4845 -runlist,858,4834 -runlist,859,4837 -runlist,860,4848 -runlist,861,4856 -runlist,862,4855 -runlist,863,4860 -runlist,864,4842 -runlist,865,4837 -runlist,866,4846 -runlist,867,4837 -runlist,868,4842 -runlist,869,4837 -runlist,870,4842 -runlist,871,4842 -runlist,872,4841 -runlist,873,4835 -runlist,874,4841 -runlist,875,4837 -runlist,876,4838 -runlist,877,4840 -runlist,878,4844 -runlist,879,4836 -runlist,880,4850 -runlist,881,4845 -runlist,882,4868 -runlist,883,4878 -runlist,884,4844 -runlist,885,4840 -runlist,886,4860 -runlist,887,4847 -runlist,888,4849 -runlist,889,4849 -runlist,890,4838 -runlist,891,4846 -runlist,892,4850 -runlist,893,4833 -runlist,894,4844 -runlist,895,4839 -runlist,896,4856 -runlist,897,4849 -runlist,898,4847 -runlist,899,4852 -runlist,900,4858 -runlist,901,4846 -runlist,902,4871 -runlist,903,4876 -runlist,904,4850 -runlist,905,4844 -runlist,906,4842 -runlist,907,4848 -runlist,908,4845 -runlist,909,4847 -runlist,910,4840 -runlist,911,4846 -runlist,912,4839 -runlist,913,4842 -runlist,914,4848 -runlist,915,4842 -runlist,916,4847 -runlist,917,4865 -runlist,918,4843 -runlist,919,4843 -runlist,920,4842 -runlist,921,4848 -runlist,922,4854 -runlist,923,4856 -runlist,924,4850 -runlist,925,4844 -runlist,926,4850 -runlist,927,4845 -runlist,928,4850 -runlist,929,4845 -runlist,930,4843 -runlist,931,4838 -runlist,932,4838 -runlist,933,4839 -runlist,934,4841 -runlist,935,4851 -runlist,936,4849 -runlist,937,4840 -runlist,938,4842 -runlist,939,4844 -runlist,940,4838 -runlist,941,4841 -runlist,942,4847 -runlist,943,4847 -runlist,944,4841 -runlist,945,4842 -runlist,946,4834 -runlist,947,4848 -runlist,948,4844 -runlist,949,4842 -runlist,950,4846 -runlist,951,4840 -runlist,952,4844 -runlist,953,4840 -runlist,954,4869 -runlist,955,4857 -runlist,956,4846 -runlist,957,4860 -runlist,958,4873 -runlist,959,4878 -runlist,960,4852 -runlist,961,4831 -runlist,962,4840 -runlist,963,4840 -runlist,964,4858 -runlist,965,4842 -runlist,966,4847 -runlist,967,4849 -runlist,968,4844 -runlist,969,4850 -runlist,970,4837 -runlist,971,4840 -runlist,972,4837 -runlist,973,4844 -runlist,974,4844 -runlist,975,4838 -runlist,976,4837 -runlist,977,4839 -runlist,978,4837 -runlist,979,4842 -runlist,980,4863 -runlist,981,4870 -runlist,982,4849 -runlist,983,4852 -runlist,984,4849 -runlist,985,4854 -runlist,986,4850 -runlist,987,4840 -runlist,988,4846 -runlist,989,4856 -runlist,990,4865 -runlist,991,4847 -runlist,992,4847 -runlist,993,4850 -runlist,994,4842 -runlist,995,4855 -runlist,996,4836 -runlist,997,4838 -runlist,998,4849 -runlist,999,4853 -fused_write32s_reset_ifchanged,0,4729 -fused_write32s_reset_ifchanged,1,4658 -fused_write32s_reset_ifchanged,2,4656 -fused_write32s_reset_ifchanged,3,4662 -fused_write32s_reset_ifchanged,4,4685 -fused_write32s_reset_ifchanged,5,4675 -fused_write32s_reset_ifchanged,6,4654 -fused_write32s_reset_ifchanged,7,4657 -fused_write32s_reset_ifchanged,8,4652 -fused_write32s_reset_ifchanged,9,4658 -fused_write32s_reset_ifchanged,10,4660 -fused_write32s_reset_ifchanged,11,4684 -fused_write32s_reset_ifchanged,12,4661 -fused_write32s_reset_ifchanged,13,4659 -fused_write32s_reset_ifchanged,14,4662 -fused_write32s_reset_ifchanged,15,4687 -fused_write32s_reset_ifchanged,16,4651 -fused_write32s_reset_ifchanged,17,4642 -fused_write32s_reset_ifchanged,18,4653 -fused_write32s_reset_ifchanged,19,4638 -fused_write32s_reset_ifchanged,20,4632 -fused_write32s_reset_ifchanged,21,4630 -fused_write32s_reset_ifchanged,22,4645 -fused_write32s_reset_ifchanged,23,4656 -fused_write32s_reset_ifchanged,24,4653 -fused_write32s_reset_ifchanged,25,4646 -fused_write32s_reset_ifchanged,26,4648 -fused_write32s_reset_ifchanged,27,4652 -fused_write32s_reset_ifchanged,28,4654 -fused_write32s_reset_ifchanged,29,4648 -fused_write32s_reset_ifchanged,30,4646 -fused_write32s_reset_ifchanged,31,4656 -fused_write32s_reset_ifchanged,32,4649 -fused_write32s_reset_ifchanged,33,4656 -fused_write32s_reset_ifchanged,34,4659 -fused_write32s_reset_ifchanged,35,4645 -fused_write32s_reset_ifchanged,36,4652 -fused_write32s_reset_ifchanged,37,4649 -fused_write32s_reset_ifchanged,38,4645 -fused_write32s_reset_ifchanged,39,4647 -fused_write32s_reset_ifchanged,40,4652 -fused_write32s_reset_ifchanged,41,4654 -fused_write32s_reset_ifchanged,42,4649 -fused_write32s_reset_ifchanged,43,4650 -fused_write32s_reset_ifchanged,44,4650 -fused_write32s_reset_ifchanged,45,4653 -fused_write32s_reset_ifchanged,46,4657 -fused_write32s_reset_ifchanged,47,4659 -fused_write32s_reset_ifchanged,48,4643 -fused_write32s_reset_ifchanged,49,4634 -fused_write32s_reset_ifchanged,50,4637 -fused_write32s_reset_ifchanged,51,4633 -fused_write32s_reset_ifchanged,52,4657 -fused_write32s_reset_ifchanged,53,4654 -fused_write32s_reset_ifchanged,54,4649 -fused_write32s_reset_ifchanged,55,4649 -fused_write32s_reset_ifchanged,56,4652 -fused_write32s_reset_ifchanged,57,4652 -fused_write32s_reset_ifchanged,58,4655 -fused_write32s_reset_ifchanged,59,4658 -fused_write32s_reset_ifchanged,60,4647 -fused_write32s_reset_ifchanged,61,4654 -fused_write32s_reset_ifchanged,62,4655 -fused_write32s_reset_ifchanged,63,4648 -fused_write32s_reset_ifchanged,64,4653 -fused_write32s_reset_ifchanged,65,4655 -fused_write32s_reset_ifchanged,66,4652 -fused_write32s_reset_ifchanged,67,4652 -fused_write32s_reset_ifchanged,68,4653 -fused_write32s_reset_ifchanged,69,4653 -fused_write32s_reset_ifchanged,70,4650 -fused_write32s_reset_ifchanged,71,4648 -fused_write32s_reset_ifchanged,72,4648 -fused_write32s_reset_ifchanged,73,4651 -fused_write32s_reset_ifchanged,74,4631 -fused_write32s_reset_ifchanged,75,4633 -fused_write32s_reset_ifchanged,76,4642 -fused_write32s_reset_ifchanged,77,4654 -fused_write32s_reset_ifchanged,78,4656 -fused_write32s_reset_ifchanged,79,4633 -fused_write32s_reset_ifchanged,80,4635 -fused_write32s_reset_ifchanged,81,4638 -fused_write32s_reset_ifchanged,82,4646 -fused_write32s_reset_ifchanged,83,4663 -fused_write32s_reset_ifchanged,84,4645 -fused_write32s_reset_ifchanged,85,4627 -fused_write32s_reset_ifchanged,86,4626 -fused_write32s_reset_ifchanged,87,4646 -fused_write32s_reset_ifchanged,88,4649 -fused_write32s_reset_ifchanged,89,4649 -fused_write32s_reset_ifchanged,90,4657 -fused_write32s_reset_ifchanged,91,4652 -fused_write32s_reset_ifchanged,92,4655 -fused_write32s_reset_ifchanged,93,4681 -fused_write32s_reset_ifchanged,94,4647 -fused_write32s_reset_ifchanged,95,4647 -fused_write32s_reset_ifchanged,96,4658 -fused_write32s_reset_ifchanged,97,4654 -fused_write32s_reset_ifchanged,98,4651 -fused_write32s_reset_ifchanged,99,4650 -fused_write32s_reset_ifchanged,100,4650 -fused_write32s_reset_ifchanged,101,4652 -fused_write32s_reset_ifchanged,102,4651 -fused_write32s_reset_ifchanged,103,4647 -fused_write32s_reset_ifchanged,104,4649 -fused_write32s_reset_ifchanged,105,4646 -fused_write32s_reset_ifchanged,106,4645 -fused_write32s_reset_ifchanged,107,4656 -fused_write32s_reset_ifchanged,108,4653 -fused_write32s_reset_ifchanged,109,4653 -fused_write32s_reset_ifchanged,110,4653 -fused_write32s_reset_ifchanged,111,4652 -fused_write32s_reset_ifchanged,112,4652 -fused_write32s_reset_ifchanged,113,4649 -fused_write32s_reset_ifchanged,114,4651 -fused_write32s_reset_ifchanged,115,4648 -fused_write32s_reset_ifchanged,116,4649 -fused_write32s_reset_ifchanged,117,4655 -fused_write32s_reset_ifchanged,118,4656 -fused_write32s_reset_ifchanged,119,4654 -fused_write32s_reset_ifchanged,120,4653 -fused_write32s_reset_ifchanged,121,4652 -fused_write32s_reset_ifchanged,122,4655 -fused_write32s_reset_ifchanged,123,4655 -fused_write32s_reset_ifchanged,124,4653 -fused_write32s_reset_ifchanged,125,4645 -fused_write32s_reset_ifchanged,126,4649 -fused_write32s_reset_ifchanged,127,4660 -fused_write32s_reset_ifchanged,128,4654 -fused_write32s_reset_ifchanged,129,4651 -fused_write32s_reset_ifchanged,130,4651 -fused_write32s_reset_ifchanged,131,4650 -fused_write32s_reset_ifchanged,132,4635 -fused_write32s_reset_ifchanged,133,4637 -fused_write32s_reset_ifchanged,134,4652 -fused_write32s_reset_ifchanged,135,4646 -fused_write32s_reset_ifchanged,136,4641 -fused_write32s_reset_ifchanged,137,4645 -fused_write32s_reset_ifchanged,138,4640 -fused_write32s_reset_ifchanged,139,4647 -fused_write32s_reset_ifchanged,140,4669 -fused_write32s_reset_ifchanged,141,4653 -fused_write32s_reset_ifchanged,142,4658 -fused_write32s_reset_ifchanged,143,4653 -fused_write32s_reset_ifchanged,144,4656 -fused_write32s_reset_ifchanged,145,4656 -fused_write32s_reset_ifchanged,146,4658 -fused_write32s_reset_ifchanged,147,4652 -fused_write32s_reset_ifchanged,148,4648 -fused_write32s_reset_ifchanged,149,4657 -fused_write32s_reset_ifchanged,150,4662 -fused_write32s_reset_ifchanged,151,4630 -fused_write32s_reset_ifchanged,152,4636 -fused_write32s_reset_ifchanged,153,4647 -fused_write32s_reset_ifchanged,154,4650 -fused_write32s_reset_ifchanged,155,4646 -fused_write32s_reset_ifchanged,156,4654 -fused_write32s_reset_ifchanged,157,4656 -fused_write32s_reset_ifchanged,158,4648 -fused_write32s_reset_ifchanged,159,4647 -fused_write32s_reset_ifchanged,160,4652 -fused_write32s_reset_ifchanged,161,4657 -fused_write32s_reset_ifchanged,162,4657 -fused_write32s_reset_ifchanged,163,4662 -fused_write32s_reset_ifchanged,164,4662 -fused_write32s_reset_ifchanged,165,4642 -fused_write32s_reset_ifchanged,166,4644 -fused_write32s_reset_ifchanged,167,4647 -fused_write32s_reset_ifchanged,168,4659 -fused_write32s_reset_ifchanged,169,4659 -fused_write32s_reset_ifchanged,170,4661 -fused_write32s_reset_ifchanged,171,4658 -fused_write32s_reset_ifchanged,172,4650 -fused_write32s_reset_ifchanged,173,4655 -fused_write32s_reset_ifchanged,174,4655 -fused_write32s_reset_ifchanged,175,4649 -fused_write32s_reset_ifchanged,176,4641 -fused_write32s_reset_ifchanged,177,4632 -fused_write32s_reset_ifchanged,178,4643 -fused_write32s_reset_ifchanged,179,4649 -fused_write32s_reset_ifchanged,180,4657 -fused_write32s_reset_ifchanged,181,4654 -fused_write32s_reset_ifchanged,182,4651 -fused_write32s_reset_ifchanged,183,4649 -fused_write32s_reset_ifchanged,184,4651 -fused_write32s_reset_ifchanged,185,4651 -fused_write32s_reset_ifchanged,186,4649 -fused_write32s_reset_ifchanged,187,4650 -fused_write32s_reset_ifchanged,188,4651 -fused_write32s_reset_ifchanged,189,4650 -fused_write32s_reset_ifchanged,190,4649 -fused_write32s_reset_ifchanged,191,4653 -fused_write32s_reset_ifchanged,192,4653 -fused_write32s_reset_ifchanged,193,4659 -fused_write32s_reset_ifchanged,194,4652 -fused_write32s_reset_ifchanged,195,4650 -fused_write32s_reset_ifchanged,196,4649 -fused_write32s_reset_ifchanged,197,4664 -fused_write32s_reset_ifchanged,198,4652 -fused_write32s_reset_ifchanged,199,4656 -fused_write32s_reset_ifchanged,200,4657 -fused_write32s_reset_ifchanged,201,4657 -fused_write32s_reset_ifchanged,202,4648 -fused_write32s_reset_ifchanged,203,4648 -fused_write32s_reset_ifchanged,204,4647 -fused_write32s_reset_ifchanged,205,4651 -fused_write32s_reset_ifchanged,206,4651 -fused_write32s_reset_ifchanged,207,4650 -fused_write32s_reset_ifchanged,208,4636 -fused_write32s_reset_ifchanged,209,4642 -fused_write32s_reset_ifchanged,210,4647 -fused_write32s_reset_ifchanged,211,4660 -fused_write32s_reset_ifchanged,212,4642 -fused_write32s_reset_ifchanged,213,4643 -fused_write32s_reset_ifchanged,214,4639 -fused_write32s_reset_ifchanged,215,4635 -fused_write32s_reset_ifchanged,216,4647 -fused_write32s_reset_ifchanged,217,4650 -fused_write32s_reset_ifchanged,218,4647 -fused_write32s_reset_ifchanged,219,4648 -fused_write32s_reset_ifchanged,220,4649 -fused_write32s_reset_ifchanged,221,4647 -fused_write32s_reset_ifchanged,222,4656 -fused_write32s_reset_ifchanged,223,4646 -fused_write32s_reset_ifchanged,224,4654 -fused_write32s_reset_ifchanged,225,4653 -fused_write32s_reset_ifchanged,226,4642 -fused_write32s_reset_ifchanged,227,4646 -fused_write32s_reset_ifchanged,228,4653 -fused_write32s_reset_ifchanged,229,4646 -fused_write32s_reset_ifchanged,230,4656 -fused_write32s_reset_ifchanged,231,4652 -fused_write32s_reset_ifchanged,232,4650 -fused_write32s_reset_ifchanged,233,4648 -fused_write32s_reset_ifchanged,234,4651 -fused_write32s_reset_ifchanged,235,4650 -fused_write32s_reset_ifchanged,236,4649 -fused_write32s_reset_ifchanged,237,4648 -fused_write32s_reset_ifchanged,238,4642 -fused_write32s_reset_ifchanged,239,4636 -fused_write32s_reset_ifchanged,240,4625 -fused_write32s_reset_ifchanged,241,4627 -fused_write32s_reset_ifchanged,242,4643 -fused_write32s_reset_ifchanged,243,4654 -fused_write32s_reset_ifchanged,244,4650 -fused_write32s_reset_ifchanged,245,4652 -fused_write32s_reset_ifchanged,246,4647 -fused_write32s_reset_ifchanged,247,4645 -fused_write32s_reset_ifchanged,248,4645 -fused_write32s_reset_ifchanged,249,4648 -fused_write32s_reset_ifchanged,250,4656 -fused_write32s_reset_ifchanged,251,4652 -fused_write32s_reset_ifchanged,252,4643 -fused_write32s_reset_ifchanged,253,4649 -fused_write32s_reset_ifchanged,254,4650 -fused_write32s_reset_ifchanged,255,4650 -fused_write32s_reset_ifchanged,256,4652 -fused_write32s_reset_ifchanged,257,4650 -fused_write32s_reset_ifchanged,258,4648 -fused_write32s_reset_ifchanged,259,4652 -fused_write32s_reset_ifchanged,260,4649 -fused_write32s_reset_ifchanged,261,4656 -fused_write32s_reset_ifchanged,262,4655 -fused_write32s_reset_ifchanged,263,4654 -fused_write32s_reset_ifchanged,264,4652 -fused_write32s_reset_ifchanged,265,4648 -fused_write32s_reset_ifchanged,266,4639 -fused_write32s_reset_ifchanged,267,4655 -fused_write32s_reset_ifchanged,268,4654 -fused_write32s_reset_ifchanged,269,4644 -fused_write32s_reset_ifchanged,270,4657 -fused_write32s_reset_ifchanged,271,4664 -fused_write32s_reset_ifchanged,272,4655 -fused_write32s_reset_ifchanged,273,4660 -fused_write32s_reset_ifchanged,274,4644 -fused_write32s_reset_ifchanged,275,4647 -fused_write32s_reset_ifchanged,276,4643 -fused_write32s_reset_ifchanged,277,4652 -fused_write32s_reset_ifchanged,278,4648 -fused_write32s_reset_ifchanged,279,4645 -fused_write32s_reset_ifchanged,280,4650 -fused_write32s_reset_ifchanged,281,4652 -fused_write32s_reset_ifchanged,282,4649 -fused_write32s_reset_ifchanged,283,4650 -fused_write32s_reset_ifchanged,284,4645 -fused_write32s_reset_ifchanged,285,4648 -fused_write32s_reset_ifchanged,286,4656 -fused_write32s_reset_ifchanged,287,4654 -fused_write32s_reset_ifchanged,288,4647 -fused_write32s_reset_ifchanged,289,4644 -fused_write32s_reset_ifchanged,290,4651 -fused_write32s_reset_ifchanged,291,4653 -fused_write32s_reset_ifchanged,292,4646 -fused_write32s_reset_ifchanged,293,4646 -fused_write32s_reset_ifchanged,294,4648 -fused_write32s_reset_ifchanged,295,4649 -fused_write32s_reset_ifchanged,296,4648 -fused_write32s_reset_ifchanged,297,4652 -fused_write32s_reset_ifchanged,298,4648 -fused_write32s_reset_ifchanged,299,4653 -fused_write32s_reset_ifchanged,300,4646 -fused_write32s_reset_ifchanged,301,4659 -fused_write32s_reset_ifchanged,302,4656 -fused_write32s_reset_ifchanged,303,4660 -fused_write32s_reset_ifchanged,304,4649 -fused_write32s_reset_ifchanged,305,4650 -fused_write32s_reset_ifchanged,306,4645 -fused_write32s_reset_ifchanged,307,4652 -fused_write32s_reset_ifchanged,308,4646 -fused_write32s_reset_ifchanged,309,4649 -fused_write32s_reset_ifchanged,310,4650 -fused_write32s_reset_ifchanged,311,4645 -fused_write32s_reset_ifchanged,312,4646 -fused_write32s_reset_ifchanged,313,4650 -fused_write32s_reset_ifchanged,314,4652 -fused_write32s_reset_ifchanged,315,4649 -fused_write32s_reset_ifchanged,316,4648 -fused_write32s_reset_ifchanged,317,4648 -fused_write32s_reset_ifchanged,318,4668 -fused_write32s_reset_ifchanged,319,4674 -fused_write32s_reset_ifchanged,320,4659 -fused_write32s_reset_ifchanged,321,4653 -fused_write32s_reset_ifchanged,322,4658 -fused_write32s_reset_ifchanged,323,4647 -fused_write32s_reset_ifchanged,324,4648 -fused_write32s_reset_ifchanged,325,4651 -fused_write32s_reset_ifchanged,326,4651 -fused_write32s_reset_ifchanged,327,4653 -fused_write32s_reset_ifchanged,328,4648 -fused_write32s_reset_ifchanged,329,4650 -fused_write32s_reset_ifchanged,330,4650 -fused_write32s_reset_ifchanged,331,4652 -fused_write32s_reset_ifchanged,332,4640 -fused_write32s_reset_ifchanged,333,4634 -fused_write32s_reset_ifchanged,334,4652 -fused_write32s_reset_ifchanged,335,4641 -fused_write32s_reset_ifchanged,336,4640 -fused_write32s_reset_ifchanged,337,4649 -fused_write32s_reset_ifchanged,338,4655 -fused_write32s_reset_ifchanged,339,4640 -fused_write32s_reset_ifchanged,340,4644 -fused_write32s_reset_ifchanged,341,4646 -fused_write32s_reset_ifchanged,342,4654 -fused_write32s_reset_ifchanged,343,4651 -fused_write32s_reset_ifchanged,344,4652 -fused_write32s_reset_ifchanged,345,4650 -fused_write32s_reset_ifchanged,346,4646 -fused_write32s_reset_ifchanged,347,4649 -fused_write32s_reset_ifchanged,348,4646 -fused_write32s_reset_ifchanged,349,4658 -fused_write32s_reset_ifchanged,350,4648 -fused_write32s_reset_ifchanged,351,4658 -fused_write32s_reset_ifchanged,352,4656 -fused_write32s_reset_ifchanged,353,4655 -fused_write32s_reset_ifchanged,354,4645 -fused_write32s_reset_ifchanged,355,4654 -fused_write32s_reset_ifchanged,356,4650 -fused_write32s_reset_ifchanged,357,4648 -fused_write32s_reset_ifchanged,358,4651 -fused_write32s_reset_ifchanged,359,4648 -fused_write32s_reset_ifchanged,360,4652 -fused_write32s_reset_ifchanged,361,4648 -fused_write32s_reset_ifchanged,362,4650 -fused_write32s_reset_ifchanged,363,4644 -fused_write32s_reset_ifchanged,364,4648 -fused_write32s_reset_ifchanged,365,4647 -fused_write32s_reset_ifchanged,366,4651 -fused_write32s_reset_ifchanged,367,4651 -fused_write32s_reset_ifchanged,368,4647 -fused_write32s_reset_ifchanged,369,4648 -fused_write32s_reset_ifchanged,370,4654 -fused_write32s_reset_ifchanged,371,4649 -fused_write32s_reset_ifchanged,372,4648 -fused_write32s_reset_ifchanged,373,4646 -fused_write32s_reset_ifchanged,374,4648 -fused_write32s_reset_ifchanged,375,4647 -fused_write32s_reset_ifchanged,376,4651 -fused_write32s_reset_ifchanged,377,4649 -fused_write32s_reset_ifchanged,378,4651 -fused_write32s_reset_ifchanged,379,4650 -fused_write32s_reset_ifchanged,380,4645 -fused_write32s_reset_ifchanged,381,4649 -fused_write32s_reset_ifchanged,382,4646 -fused_write32s_reset_ifchanged,383,4646 -fused_write32s_reset_ifchanged,384,4647 -fused_write32s_reset_ifchanged,385,4653 -fused_write32s_reset_ifchanged,386,4648 -fused_write32s_reset_ifchanged,387,4635 -fused_write32s_reset_ifchanged,388,4633 -fused_write32s_reset_ifchanged,389,4636 -fused_write32s_reset_ifchanged,390,4629 -fused_write32s_reset_ifchanged,391,4627 -fused_write32s_reset_ifchanged,392,4625 -fused_write32s_reset_ifchanged,393,4630 -fused_write32s_reset_ifchanged,394,4646 -fused_write32s_reset_ifchanged,395,4647 -fused_write32s_reset_ifchanged,396,4646 -fused_write32s_reset_ifchanged,397,4645 -fused_write32s_reset_ifchanged,398,4649 -fused_write32s_reset_ifchanged,399,4650 -fused_write32s_reset_ifchanged,400,4651 -fused_write32s_reset_ifchanged,401,4645 -fused_write32s_reset_ifchanged,402,4650 -fused_write32s_reset_ifchanged,403,4648 -fused_write32s_reset_ifchanged,404,4674 -fused_write32s_reset_ifchanged,405,4658 -fused_write32s_reset_ifchanged,406,4634 -fused_write32s_reset_ifchanged,407,4629 -fused_write32s_reset_ifchanged,408,4634 -fused_write32s_reset_ifchanged,409,4637 -fused_write32s_reset_ifchanged,410,4641 -fused_write32s_reset_ifchanged,411,4643 -fused_write32s_reset_ifchanged,412,4654 -fused_write32s_reset_ifchanged,413,4645 -fused_write32s_reset_ifchanged,414,4651 -fused_write32s_reset_ifchanged,415,4645 -fused_write32s_reset_ifchanged,416,4635 -fused_write32s_reset_ifchanged,417,4638 -fused_write32s_reset_ifchanged,418,4641 -fused_write32s_reset_ifchanged,419,4637 -fused_write32s_reset_ifchanged,420,4645 -fused_write32s_reset_ifchanged,421,4660 -fused_write32s_reset_ifchanged,422,4655 -fused_write32s_reset_ifchanged,423,4634 -fused_write32s_reset_ifchanged,424,4637 -fused_write32s_reset_ifchanged,425,4651 -fused_write32s_reset_ifchanged,426,4652 -fused_write32s_reset_ifchanged,427,4649 -fused_write32s_reset_ifchanged,428,4651 -fused_write32s_reset_ifchanged,429,4650 -fused_write32s_reset_ifchanged,430,4650 -fused_write32s_reset_ifchanged,431,4645 -fused_write32s_reset_ifchanged,432,4646 -fused_write32s_reset_ifchanged,433,4647 -fused_write32s_reset_ifchanged,434,4644 -fused_write32s_reset_ifchanged,435,4648 -fused_write32s_reset_ifchanged,436,4646 -fused_write32s_reset_ifchanged,437,4648 -fused_write32s_reset_ifchanged,438,4646 -fused_write32s_reset_ifchanged,439,4646 -fused_write32s_reset_ifchanged,440,4646 -fused_write32s_reset_ifchanged,441,4645 -fused_write32s_reset_ifchanged,442,4649 -fused_write32s_reset_ifchanged,443,4649 -fused_write32s_reset_ifchanged,444,4646 -fused_write32s_reset_ifchanged,445,4646 -fused_write32s_reset_ifchanged,446,4650 -fused_write32s_reset_ifchanged,447,4646 -fused_write32s_reset_ifchanged,448,4632 -fused_write32s_reset_ifchanged,449,4645 -fused_write32s_reset_ifchanged,450,4639 -fused_write32s_reset_ifchanged,451,4624 -fused_write32s_reset_ifchanged,452,4623 -fused_write32s_reset_ifchanged,453,4643 -fused_write32s_reset_ifchanged,454,4625 -fused_write32s_reset_ifchanged,455,4647 -fused_write32s_reset_ifchanged,456,4661 -fused_write32s_reset_ifchanged,457,4665 -fused_write32s_reset_ifchanged,458,4665 -fused_write32s_reset_ifchanged,459,4662 -fused_write32s_reset_ifchanged,460,4666 -fused_write32s_reset_ifchanged,461,4665 -fused_write32s_reset_ifchanged,462,4662 -fused_write32s_reset_ifchanged,463,4662 -fused_write32s_reset_ifchanged,464,4660 -fused_write32s_reset_ifchanged,465,4663 -fused_write32s_reset_ifchanged,466,4655 -fused_write32s_reset_ifchanged,467,4657 -fused_write32s_reset_ifchanged,468,4635 -fused_write32s_reset_ifchanged,469,4651 -fused_write32s_reset_ifchanged,470,4659 -fused_write32s_reset_ifchanged,471,4661 -fused_write32s_reset_ifchanged,472,4660 -fused_write32s_reset_ifchanged,473,4660 -fused_write32s_reset_ifchanged,474,4665 -fused_write32s_reset_ifchanged,475,5036 -fused_write32s_reset_ifchanged,476,4998 -fused_write32s_reset_ifchanged,477,5079 -fused_write32s_reset_ifchanged,478,4981 -fused_write32s_reset_ifchanged,479,5021 -fused_write32s_reset_ifchanged,480,5023 -fused_write32s_reset_ifchanged,481,4646 -fused_write32s_reset_ifchanged,482,4633 -fused_write32s_reset_ifchanged,483,4644 -fused_write32s_reset_ifchanged,484,4640 -fused_write32s_reset_ifchanged,485,4643 -fused_write32s_reset_ifchanged,486,4643 -fused_write32s_reset_ifchanged,487,4648 -fused_write32s_reset_ifchanged,488,4659 -fused_write32s_reset_ifchanged,489,4659 -fused_write32s_reset_ifchanged,490,4660 -fused_write32s_reset_ifchanged,491,4662 -fused_write32s_reset_ifchanged,492,4663 -fused_write32s_reset_ifchanged,493,4673 -fused_write32s_reset_ifchanged,494,4661 -fused_write32s_reset_ifchanged,495,4661 -fused_write32s_reset_ifchanged,496,4661 -fused_write32s_reset_ifchanged,497,4661 -fused_write32s_reset_ifchanged,498,4660 -fused_write32s_reset_ifchanged,499,4653 -fused_write32s_reset_ifchanged,500,4658 -fused_write32s_reset_ifchanged,501,4660 -fused_write32s_reset_ifchanged,502,4659 -fused_write32s_reset_ifchanged,503,4662 -fused_write32s_reset_ifchanged,504,4646 -fused_write32s_reset_ifchanged,505,4643 -fused_write32s_reset_ifchanged,506,4657 -fused_write32s_reset_ifchanged,507,4630 -fused_write32s_reset_ifchanged,508,4658 -fused_write32s_reset_ifchanged,509,4667 -fused_write32s_reset_ifchanged,510,4656 -fused_write32s_reset_ifchanged,511,4662 -fused_write32s_reset_ifchanged,512,4665 -fused_write32s_reset_ifchanged,513,4670 -fused_write32s_reset_ifchanged,514,4660 -fused_write32s_reset_ifchanged,515,4680 -fused_write32s_reset_ifchanged,516,4663 -fused_write32s_reset_ifchanged,517,4659 -fused_write32s_reset_ifchanged,518,4666 -fused_write32s_reset_ifchanged,519,4641 -fused_write32s_reset_ifchanged,520,4643 -fused_write32s_reset_ifchanged,521,4654 -fused_write32s_reset_ifchanged,522,4660 -fused_write32s_reset_ifchanged,523,4660 -fused_write32s_reset_ifchanged,524,4660 -fused_write32s_reset_ifchanged,525,4660 -fused_write32s_reset_ifchanged,526,4659 -fused_write32s_reset_ifchanged,527,4657 -fused_write32s_reset_ifchanged,528,4660 -fused_write32s_reset_ifchanged,529,4670 -fused_write32s_reset_ifchanged,530,4669 -fused_write32s_reset_ifchanged,531,4657 -fused_write32s_reset_ifchanged,532,4648 -fused_write32s_reset_ifchanged,533,4650 -fused_write32s_reset_ifchanged,534,4655 -fused_write32s_reset_ifchanged,535,4664 -fused_write32s_reset_ifchanged,536,4663 -fused_write32s_reset_ifchanged,537,4662 -fused_write32s_reset_ifchanged,538,4667 -fused_write32s_reset_ifchanged,539,4653 -fused_write32s_reset_ifchanged,540,4664 -fused_write32s_reset_ifchanged,541,4662 -fused_write32s_reset_ifchanged,542,4667 -fused_write32s_reset_ifchanged,543,4665 -fused_write32s_reset_ifchanged,544,4661 -fused_write32s_reset_ifchanged,545,4666 -fused_write32s_reset_ifchanged,546,4665 -fused_write32s_reset_ifchanged,547,4662 -fused_write32s_reset_ifchanged,548,4661 -fused_write32s_reset_ifchanged,549,4663 -fused_write32s_reset_ifchanged,550,4662 -fused_write32s_reset_ifchanged,551,4661 -fused_write32s_reset_ifchanged,552,4663 -fused_write32s_reset_ifchanged,553,4666 -fused_write32s_reset_ifchanged,554,4659 -fused_write32s_reset_ifchanged,555,4660 -fused_write32s_reset_ifchanged,556,4666 -fused_write32s_reset_ifchanged,557,4663 -fused_write32s_reset_ifchanged,558,4654 -fused_write32s_reset_ifchanged,559,4655 -fused_write32s_reset_ifchanged,560,4655 -fused_write32s_reset_ifchanged,561,4639 -fused_write32s_reset_ifchanged,562,4652 -fused_write32s_reset_ifchanged,563,4646 -fused_write32s_reset_ifchanged,564,4637 -fused_write32s_reset_ifchanged,565,4641 -fused_write32s_reset_ifchanged,566,4640 -fused_write32s_reset_ifchanged,567,4640 -fused_write32s_reset_ifchanged,568,4643 -fused_write32s_reset_ifchanged,569,4638 -fused_write32s_reset_ifchanged,570,4639 -fused_write32s_reset_ifchanged,571,4642 -fused_write32s_reset_ifchanged,572,4640 -fused_write32s_reset_ifchanged,573,4638 -fused_write32s_reset_ifchanged,574,4642 -fused_write32s_reset_ifchanged,575,4640 -fused_write32s_reset_ifchanged,576,4638 -fused_write32s_reset_ifchanged,577,4640 -fused_write32s_reset_ifchanged,578,4646 -fused_write32s_reset_ifchanged,579,4638 -fused_write32s_reset_ifchanged,580,4640 -fused_write32s_reset_ifchanged,581,4650 -fused_write32s_reset_ifchanged,582,4640 -fused_write32s_reset_ifchanged,583,4642 -fused_write32s_reset_ifchanged,584,4642 -fused_write32s_reset_ifchanged,585,4637 -fused_write32s_reset_ifchanged,586,4640 -fused_write32s_reset_ifchanged,587,4640 -fused_write32s_reset_ifchanged,588,4641 -fused_write32s_reset_ifchanged,589,4638 -fused_write32s_reset_ifchanged,590,4637 -fused_write32s_reset_ifchanged,591,4641 -fused_write32s_reset_ifchanged,592,4641 -fused_write32s_reset_ifchanged,593,4639 -fused_write32s_reset_ifchanged,594,4641 -fused_write32s_reset_ifchanged,595,4638 -fused_write32s_reset_ifchanged,596,4639 -fused_write32s_reset_ifchanged,597,4637 -fused_write32s_reset_ifchanged,598,4637 -fused_write32s_reset_ifchanged,599,4639 -fused_write32s_reset_ifchanged,600,4637 -fused_write32s_reset_ifchanged,601,4641 -fused_write32s_reset_ifchanged,602,4642 -fused_write32s_reset_ifchanged,603,4640 -fused_write32s_reset_ifchanged,604,4637 -fused_write32s_reset_ifchanged,605,4637 -fused_write32s_reset_ifchanged,606,4643 -fused_write32s_reset_ifchanged,607,4640 -fused_write32s_reset_ifchanged,608,4637 -fused_write32s_reset_ifchanged,609,4641 -fused_write32s_reset_ifchanged,610,4640 -fused_write32s_reset_ifchanged,611,4638 -fused_write32s_reset_ifchanged,612,4639 -fused_write32s_reset_ifchanged,613,4640 -fused_write32s_reset_ifchanged,614,4641 -fused_write32s_reset_ifchanged,615,4638 -fused_write32s_reset_ifchanged,616,4640 -fused_write32s_reset_ifchanged,617,4640 -fused_write32s_reset_ifchanged,618,4644 -fused_write32s_reset_ifchanged,619,4638 -fused_write32s_reset_ifchanged,620,4641 -fused_write32s_reset_ifchanged,621,4644 -fused_write32s_reset_ifchanged,622,4639 -fused_write32s_reset_ifchanged,623,4637 -fused_write32s_reset_ifchanged,624,4641 -fused_write32s_reset_ifchanged,625,4639 -fused_write32s_reset_ifchanged,626,4640 -fused_write32s_reset_ifchanged,627,4637 -fused_write32s_reset_ifchanged,628,4640 -fused_write32s_reset_ifchanged,629,4639 -fused_write32s_reset_ifchanged,630,4639 -fused_write32s_reset_ifchanged,631,4638 -fused_write32s_reset_ifchanged,632,4642 -fused_write32s_reset_ifchanged,633,4638 -fused_write32s_reset_ifchanged,634,4638 -fused_write32s_reset_ifchanged,635,4643 -fused_write32s_reset_ifchanged,636,4639 -fused_write32s_reset_ifchanged,637,4638 -fused_write32s_reset_ifchanged,638,4640 -fused_write32s_reset_ifchanged,639,4638 -fused_write32s_reset_ifchanged,640,4639 -fused_write32s_reset_ifchanged,641,4639 -fused_write32s_reset_ifchanged,642,4643 -fused_write32s_reset_ifchanged,643,4638 -fused_write32s_reset_ifchanged,644,4639 -fused_write32s_reset_ifchanged,645,4636 -fused_write32s_reset_ifchanged,646,4638 -fused_write32s_reset_ifchanged,647,4637 -fused_write32s_reset_ifchanged,648,4642 -fused_write32s_reset_ifchanged,649,4638 -fused_write32s_reset_ifchanged,650,4643 -fused_write32s_reset_ifchanged,651,4639 -fused_write32s_reset_ifchanged,652,4640 -fused_write32s_reset_ifchanged,653,4637 -fused_write32s_reset_ifchanged,654,4638 -fused_write32s_reset_ifchanged,655,4639 -fused_write32s_reset_ifchanged,656,4640 -fused_write32s_reset_ifchanged,657,4639 -fused_write32s_reset_ifchanged,658,4637 -fused_write32s_reset_ifchanged,659,4641 -fused_write32s_reset_ifchanged,660,4641 -fused_write32s_reset_ifchanged,661,4640 -fused_write32s_reset_ifchanged,662,4643 -fused_write32s_reset_ifchanged,663,4637 -fused_write32s_reset_ifchanged,664,4643 -fused_write32s_reset_ifchanged,665,4659 -fused_write32s_reset_ifchanged,666,4641 -fused_write32s_reset_ifchanged,667,4641 -fused_write32s_reset_ifchanged,668,4637 -fused_write32s_reset_ifchanged,669,4640 -fused_write32s_reset_ifchanged,670,4640 -fused_write32s_reset_ifchanged,671,4642 -fused_write32s_reset_ifchanged,672,4636 -fused_write32s_reset_ifchanged,673,4639 -fused_write32s_reset_ifchanged,674,4638 -fused_write32s_reset_ifchanged,675,4641 -fused_write32s_reset_ifchanged,676,4638 -fused_write32s_reset_ifchanged,677,4641 -fused_write32s_reset_ifchanged,678,4637 -fused_write32s_reset_ifchanged,679,4639 -fused_write32s_reset_ifchanged,680,4641 -fused_write32s_reset_ifchanged,681,4637 -fused_write32s_reset_ifchanged,682,4638 -fused_write32s_reset_ifchanged,683,4642 -fused_write32s_reset_ifchanged,684,4638 -fused_write32s_reset_ifchanged,685,4637 -fused_write32s_reset_ifchanged,686,4639 -fused_write32s_reset_ifchanged,687,4640 -fused_write32s_reset_ifchanged,688,4642 -fused_write32s_reset_ifchanged,689,4640 -fused_write32s_reset_ifchanged,690,4633 -fused_write32s_reset_ifchanged,691,4639 -fused_write32s_reset_ifchanged,692,4637 -fused_write32s_reset_ifchanged,693,4640 -fused_write32s_reset_ifchanged,694,4639 -fused_write32s_reset_ifchanged,695,4639 -fused_write32s_reset_ifchanged,696,4638 -fused_write32s_reset_ifchanged,697,4641 -fused_write32s_reset_ifchanged,698,4636 -fused_write32s_reset_ifchanged,699,4639 -fused_write32s_reset_ifchanged,700,4638 -fused_write32s_reset_ifchanged,701,4635 -fused_write32s_reset_ifchanged,702,4640 -fused_write32s_reset_ifchanged,703,4636 -fused_write32s_reset_ifchanged,704,4639 -fused_write32s_reset_ifchanged,705,4640 -fused_write32s_reset_ifchanged,706,4640 -fused_write32s_reset_ifchanged,707,4641 -fused_write32s_reset_ifchanged,708,4640 -fused_write32s_reset_ifchanged,709,4638 -fused_write32s_reset_ifchanged,710,4636 -fused_write32s_reset_ifchanged,711,4638 -fused_write32s_reset_ifchanged,712,4640 -fused_write32s_reset_ifchanged,713,4640 -fused_write32s_reset_ifchanged,714,4637 -fused_write32s_reset_ifchanged,715,4638 -fused_write32s_reset_ifchanged,716,4630 -fused_write32s_reset_ifchanged,717,4641 -fused_write32s_reset_ifchanged,718,4645 -fused_write32s_reset_ifchanged,719,4642 -fused_write32s_reset_ifchanged,720,4638 -fused_write32s_reset_ifchanged,721,4642 -fused_write32s_reset_ifchanged,722,4642 -fused_write32s_reset_ifchanged,723,4637 -fused_write32s_reset_ifchanged,724,4636 -fused_write32s_reset_ifchanged,725,4642 -fused_write32s_reset_ifchanged,726,4642 -fused_write32s_reset_ifchanged,727,4644 -fused_write32s_reset_ifchanged,728,4637 -fused_write32s_reset_ifchanged,729,4640 -fused_write32s_reset_ifchanged,730,4643 -fused_write32s_reset_ifchanged,731,4639 -fused_write32s_reset_ifchanged,732,4640 -fused_write32s_reset_ifchanged,733,4642 -fused_write32s_reset_ifchanged,734,4634 -fused_write32s_reset_ifchanged,735,4639 -fused_write32s_reset_ifchanged,736,4639 -fused_write32s_reset_ifchanged,737,4636 -fused_write32s_reset_ifchanged,738,4643 -fused_write32s_reset_ifchanged,739,4638 -fused_write32s_reset_ifchanged,740,4660 -fused_write32s_reset_ifchanged,741,4665 -fused_write32s_reset_ifchanged,742,4651 -fused_write32s_reset_ifchanged,743,4658 -fused_write32s_reset_ifchanged,744,4658 -fused_write32s_reset_ifchanged,745,4658 -fused_write32s_reset_ifchanged,746,4649 -fused_write32s_reset_ifchanged,747,4659 -fused_write32s_reset_ifchanged,748,4652 -fused_write32s_reset_ifchanged,749,4651 -fused_write32s_reset_ifchanged,750,4650 -fused_write32s_reset_ifchanged,751,4653 -fused_write32s_reset_ifchanged,752,4652 -fused_write32s_reset_ifchanged,753,4649 -fused_write32s_reset_ifchanged,754,4654 -fused_write32s_reset_ifchanged,755,4653 -fused_write32s_reset_ifchanged,756,4650 -fused_write32s_reset_ifchanged,757,4653 -fused_write32s_reset_ifchanged,758,4652 -fused_write32s_reset_ifchanged,759,4654 -fused_write32s_reset_ifchanged,760,4652 -fused_write32s_reset_ifchanged,761,4657 -fused_write32s_reset_ifchanged,762,4657 -fused_write32s_reset_ifchanged,763,4661 -fused_write32s_reset_ifchanged,764,4658 -fused_write32s_reset_ifchanged,765,4651 -fused_write32s_reset_ifchanged,766,4651 -fused_write32s_reset_ifchanged,767,4656 -fused_write32s_reset_ifchanged,768,4651 -fused_write32s_reset_ifchanged,769,4656 -fused_write32s_reset_ifchanged,770,4657 -fused_write32s_reset_ifchanged,771,4664 -fused_write32s_reset_ifchanged,772,4665 -fused_write32s_reset_ifchanged,773,4656 -fused_write32s_reset_ifchanged,774,4652 -fused_write32s_reset_ifchanged,775,4652 -fused_write32s_reset_ifchanged,776,4654 -fused_write32s_reset_ifchanged,777,4656 -fused_write32s_reset_ifchanged,778,4651 -fused_write32s_reset_ifchanged,779,4657 -fused_write32s_reset_ifchanged,780,4656 -fused_write32s_reset_ifchanged,781,4650 -fused_write32s_reset_ifchanged,782,4652 -fused_write32s_reset_ifchanged,783,4651 -fused_write32s_reset_ifchanged,784,4653 -fused_write32s_reset_ifchanged,785,4655 -fused_write32s_reset_ifchanged,786,4651 -fused_write32s_reset_ifchanged,787,4651 -fused_write32s_reset_ifchanged,788,4648 -fused_write32s_reset_ifchanged,789,4651 -fused_write32s_reset_ifchanged,790,4655 -fused_write32s_reset_ifchanged,791,4649 -fused_write32s_reset_ifchanged,792,4649 -fused_write32s_reset_ifchanged,793,4660 -fused_write32s_reset_ifchanged,794,4657 -fused_write32s_reset_ifchanged,795,4660 -fused_write32s_reset_ifchanged,796,4650 -fused_write32s_reset_ifchanged,797,4650 -fused_write32s_reset_ifchanged,798,4654 -fused_write32s_reset_ifchanged,799,4653 -fused_write32s_reset_ifchanged,800,4647 -fused_write32s_reset_ifchanged,801,4651 -fused_write32s_reset_ifchanged,802,4654 -fused_write32s_reset_ifchanged,803,4652 -fused_write32s_reset_ifchanged,804,4650 -fused_write32s_reset_ifchanged,805,4650 -fused_write32s_reset_ifchanged,806,4651 -fused_write32s_reset_ifchanged,807,4650 -fused_write32s_reset_ifchanged,808,4651 -fused_write32s_reset_ifchanged,809,4652 -fused_write32s_reset_ifchanged,810,4650 -fused_write32s_reset_ifchanged,811,4652 -fused_write32s_reset_ifchanged,812,4650 -fused_write32s_reset_ifchanged,813,4658 -fused_write32s_reset_ifchanged,814,4657 -fused_write32s_reset_ifchanged,815,4658 -fused_write32s_reset_ifchanged,816,4649 -fused_write32s_reset_ifchanged,817,4657 -fused_write32s_reset_ifchanged,818,4660 -fused_write32s_reset_ifchanged,819,4659 -fused_write32s_reset_ifchanged,820,4656 -fused_write32s_reset_ifchanged,821,4655 -fused_write32s_reset_ifchanged,822,4653 -fused_write32s_reset_ifchanged,823,4654 -fused_write32s_reset_ifchanged,824,4655 -fused_write32s_reset_ifchanged,825,4660 -fused_write32s_reset_ifchanged,826,4656 -fused_write32s_reset_ifchanged,827,4656 -fused_write32s_reset_ifchanged,828,4655 -fused_write32s_reset_ifchanged,829,4662 -fused_write32s_reset_ifchanged,830,4658 -fused_write32s_reset_ifchanged,831,4657 -fused_write32s_reset_ifchanged,832,4658 -fused_write32s_reset_ifchanged,833,4654 -fused_write32s_reset_ifchanged,834,4654 -fused_write32s_reset_ifchanged,835,4657 -fused_write32s_reset_ifchanged,836,4658 -fused_write32s_reset_ifchanged,837,4657 -fused_write32s_reset_ifchanged,838,4660 -fused_write32s_reset_ifchanged,839,4653 -fused_write32s_reset_ifchanged,840,4657 -fused_write32s_reset_ifchanged,841,4653 -fused_write32s_reset_ifchanged,842,4655 -fused_write32s_reset_ifchanged,843,4655 -fused_write32s_reset_ifchanged,844,4651 -fused_write32s_reset_ifchanged,845,4651 -fused_write32s_reset_ifchanged,846,4660 -fused_write32s_reset_ifchanged,847,4657 -fused_write32s_reset_ifchanged,848,4655 -fused_write32s_reset_ifchanged,849,4656 -fused_write32s_reset_ifchanged,850,4653 -fused_write32s_reset_ifchanged,851,4653 -fused_write32s_reset_ifchanged,852,4660 -fused_write32s_reset_ifchanged,853,4665 -fused_write32s_reset_ifchanged,854,4654 -fused_write32s_reset_ifchanged,855,4658 -fused_write32s_reset_ifchanged,856,4658 -fused_write32s_reset_ifchanged,857,4655 -fused_write32s_reset_ifchanged,858,4655 -fused_write32s_reset_ifchanged,859,4650 -fused_write32s_reset_ifchanged,860,4654 -fused_write32s_reset_ifchanged,861,4659 -fused_write32s_reset_ifchanged,862,4652 -fused_write32s_reset_ifchanged,863,4653 -fused_write32s_reset_ifchanged,864,4649 -fused_write32s_reset_ifchanged,865,4655 -fused_write32s_reset_ifchanged,866,4656 -fused_write32s_reset_ifchanged,867,4653 -fused_write32s_reset_ifchanged,868,4664 -fused_write32s_reset_ifchanged,869,4653 -fused_write32s_reset_ifchanged,870,4660 -fused_write32s_reset_ifchanged,871,4658 -fused_write32s_reset_ifchanged,872,4657 -fused_write32s_reset_ifchanged,873,4647 -fused_write32s_reset_ifchanged,874,4659 -fused_write32s_reset_ifchanged,875,4655 -fused_write32s_reset_ifchanged,876,4653 -fused_write32s_reset_ifchanged,877,4650 -fused_write32s_reset_ifchanged,878,4651 -fused_write32s_reset_ifchanged,879,4651 -fused_write32s_reset_ifchanged,880,4652 -fused_write32s_reset_ifchanged,881,4650 -fused_write32s_reset_ifchanged,882,4648 -fused_write32s_reset_ifchanged,883,4652 -fused_write32s_reset_ifchanged,884,4655 -fused_write32s_reset_ifchanged,885,4652 -fused_write32s_reset_ifchanged,886,4651 -fused_write32s_reset_ifchanged,887,4651 -fused_write32s_reset_ifchanged,888,4656 -fused_write32s_reset_ifchanged,889,4652 -fused_write32s_reset_ifchanged,890,4650 -fused_write32s_reset_ifchanged,891,4649 -fused_write32s_reset_ifchanged,892,4651 -fused_write32s_reset_ifchanged,893,4654 -fused_write32s_reset_ifchanged,894,4655 -fused_write32s_reset_ifchanged,895,4650 -fused_write32s_reset_ifchanged,896,4648 -fused_write32s_reset_ifchanged,897,4653 -fused_write32s_reset_ifchanged,898,4656 -fused_write32s_reset_ifchanged,899,4654 -fused_write32s_reset_ifchanged,900,4654 -fused_write32s_reset_ifchanged,901,4652 -fused_write32s_reset_ifchanged,902,4659 -fused_write32s_reset_ifchanged,903,4656 -fused_write32s_reset_ifchanged,904,4656 -fused_write32s_reset_ifchanged,905,4656 -fused_write32s_reset_ifchanged,906,4651 -fused_write32s_reset_ifchanged,907,4653 -fused_write32s_reset_ifchanged,908,4650 -fused_write32s_reset_ifchanged,909,4649 -fused_write32s_reset_ifchanged,910,4651 -fused_write32s_reset_ifchanged,911,4650 -fused_write32s_reset_ifchanged,912,4649 -fused_write32s_reset_ifchanged,913,4652 -fused_write32s_reset_ifchanged,914,4650 -fused_write32s_reset_ifchanged,915,4636 -fused_write32s_reset_ifchanged,916,4634 -fused_write32s_reset_ifchanged,917,4635 -fused_write32s_reset_ifchanged,918,4634 -fused_write32s_reset_ifchanged,919,4637 -fused_write32s_reset_ifchanged,920,4638 -fused_write32s_reset_ifchanged,921,4635 -fused_write32s_reset_ifchanged,922,4636 -fused_write32s_reset_ifchanged,923,4634 -fused_write32s_reset_ifchanged,924,4637 -fused_write32s_reset_ifchanged,925,4634 -fused_write32s_reset_ifchanged,926,4637 -fused_write32s_reset_ifchanged,927,4634 -fused_write32s_reset_ifchanged,928,4639 -fused_write32s_reset_ifchanged,929,4637 -fused_write32s_reset_ifchanged,930,4637 -fused_write32s_reset_ifchanged,931,4636 -fused_write32s_reset_ifchanged,932,4635 -fused_write32s_reset_ifchanged,933,4639 -fused_write32s_reset_ifchanged,934,4640 -fused_write32s_reset_ifchanged,935,4624 -fused_write32s_reset_ifchanged,936,4626 -fused_write32s_reset_ifchanged,937,4626 -fused_write32s_reset_ifchanged,938,4638 -fused_write32s_reset_ifchanged,939,4636 -fused_write32s_reset_ifchanged,940,4620 -fused_write32s_reset_ifchanged,941,4624 -fused_write32s_reset_ifchanged,942,4625 -fused_write32s_reset_ifchanged,943,4626 -fused_write32s_reset_ifchanged,944,4625 -fused_write32s_reset_ifchanged,945,4627 -fused_write32s_reset_ifchanged,946,4624 -fused_write32s_reset_ifchanged,947,4628 -fused_write32s_reset_ifchanged,948,4626 -fused_write32s_reset_ifchanged,949,4622 -fused_write32s_reset_ifchanged,950,4634 -fused_write32s_reset_ifchanged,951,4620 -fused_write32s_reset_ifchanged,952,4630 -fused_write32s_reset_ifchanged,953,4635 -fused_write32s_reset_ifchanged,954,4635 -fused_write32s_reset_ifchanged,955,4634 -fused_write32s_reset_ifchanged,956,4635 -fused_write32s_reset_ifchanged,957,4633 -fused_write32s_reset_ifchanged,958,4635 -fused_write32s_reset_ifchanged,959,4637 -fused_write32s_reset_ifchanged,960,4635 -fused_write32s_reset_ifchanged,961,4637 -fused_write32s_reset_ifchanged,962,4637 -fused_write32s_reset_ifchanged,963,4634 -fused_write32s_reset_ifchanged,964,4634 -fused_write32s_reset_ifchanged,965,4638 -fused_write32s_reset_ifchanged,966,4637 -fused_write32s_reset_ifchanged,967,4636 -fused_write32s_reset_ifchanged,968,4637 -fused_write32s_reset_ifchanged,969,4633 -fused_write32s_reset_ifchanged,970,4637 -fused_write32s_reset_ifchanged,971,4632 -fused_write32s_reset_ifchanged,972,4636 -fused_write32s_reset_ifchanged,973,4634 -fused_write32s_reset_ifchanged,974,4636 -fused_write32s_reset_ifchanged,975,4637 -fused_write32s_reset_ifchanged,976,4636 -fused_write32s_reset_ifchanged,977,4636 -fused_write32s_reset_ifchanged,978,4639 -fused_write32s_reset_ifchanged,979,4638 -fused_write32s_reset_ifchanged,980,4633 -fused_write32s_reset_ifchanged,981,4636 -fused_write32s_reset_ifchanged,982,4636 -fused_write32s_reset_ifchanged,983,4635 -fused_write32s_reset_ifchanged,984,4636 -fused_write32s_reset_ifchanged,985,4636 -fused_write32s_reset_ifchanged,986,4637 -fused_write32s_reset_ifchanged,987,4668 -fused_write32s_reset_ifchanged,988,4691 -fused_write32s_reset_ifchanged,989,4663 -fused_write32s_reset_ifchanged,990,4656 -fused_write32s_reset_ifchanged,991,4657 -fused_write32s_reset_ifchanged,992,4658 -fused_write32s_reset_ifchanged,993,4647 -fused_write32s_reset_ifchanged,994,4648 -fused_write32s_reset_ifchanged,995,4652 -fused_write32s_reset_ifchanged,996,4650 -fused_write32s_reset_ifchanged,997,4649 -fused_write32s_reset_ifchanged,998,4640 -fused_write32s_reset_ifchanged,999,4650 -fused_transactions_loadpdi,0,4902 -fused_transactions_loadpdi,1,4817 -fused_transactions_loadpdi,2,4818 -fused_transactions_loadpdi,3,4819 -fused_transactions_loadpdi,4,4819 -fused_transactions_loadpdi,5,4832 -fused_transactions_loadpdi,6,4820 -fused_transactions_loadpdi,7,4813 -fused_transactions_loadpdi,8,4820 -fused_transactions_loadpdi,9,4816 -fused_transactions_loadpdi,10,4822 -fused_transactions_loadpdi,11,4820 -fused_transactions_loadpdi,12,4819 -fused_transactions_loadpdi,13,4818 -fused_transactions_loadpdi,14,4816 -fused_transactions_loadpdi,15,4820 -fused_transactions_loadpdi,16,4818 -fused_transactions_loadpdi,17,4827 -fused_transactions_loadpdi,18,4815 -fused_transactions_loadpdi,19,4821 -fused_transactions_loadpdi,20,4825 -fused_transactions_loadpdi,21,4815 -fused_transactions_loadpdi,22,4831 -fused_transactions_loadpdi,23,4813 -fused_transactions_loadpdi,24,4816 -fused_transactions_loadpdi,25,4815 -fused_transactions_loadpdi,26,4815 -fused_transactions_loadpdi,27,4819 -fused_transactions_loadpdi,28,4816 -fused_transactions_loadpdi,29,4817 -fused_transactions_loadpdi,30,4818 -fused_transactions_loadpdi,31,4814 -fused_transactions_loadpdi,32,4811 -fused_transactions_loadpdi,33,4815 -fused_transactions_loadpdi,34,4818 -fused_transactions_loadpdi,35,4854 -fused_transactions_loadpdi,36,4856 -fused_transactions_loadpdi,37,4829 -fused_transactions_loadpdi,38,4832 -fused_transactions_loadpdi,39,4840 -fused_transactions_loadpdi,40,4829 -fused_transactions_loadpdi,41,4831 -fused_transactions_loadpdi,42,4831 -fused_transactions_loadpdi,43,4833 -fused_transactions_loadpdi,44,4833 -fused_transactions_loadpdi,45,4832 -fused_transactions_loadpdi,46,4826 -fused_transactions_loadpdi,47,4830 -fused_transactions_loadpdi,48,4850 -fused_transactions_loadpdi,49,4846 -fused_transactions_loadpdi,50,4825 -fused_transactions_loadpdi,51,4811 -fused_transactions_loadpdi,52,4816 -fused_transactions_loadpdi,53,4818 -fused_transactions_loadpdi,54,4816 -fused_transactions_loadpdi,55,4814 -fused_transactions_loadpdi,56,4822 -fused_transactions_loadpdi,57,4820 -fused_transactions_loadpdi,58,4815 -fused_transactions_loadpdi,59,4824 -fused_transactions_loadpdi,60,4817 -fused_transactions_loadpdi,61,4817 -fused_transactions_loadpdi,62,4816 -fused_transactions_loadpdi,63,4822 -fused_transactions_loadpdi,64,4816 -fused_transactions_loadpdi,65,4813 -fused_transactions_loadpdi,66,4819 -fused_transactions_loadpdi,67,4817 -fused_transactions_loadpdi,68,4817 -fused_transactions_loadpdi,69,4813 -fused_transactions_loadpdi,70,4819 -fused_transactions_loadpdi,71,4820 -fused_transactions_loadpdi,72,4820 -fused_transactions_loadpdi,73,4818 -fused_transactions_loadpdi,74,4854 -fused_transactions_loadpdi,75,4842 -fused_transactions_loadpdi,76,4821 -fused_transactions_loadpdi,77,4850 -fused_transactions_loadpdi,78,4865 -fused_transactions_loadpdi,79,4841 -fused_transactions_loadpdi,80,4831 -fused_transactions_loadpdi,81,4840 -fused_transactions_loadpdi,82,4828 -fused_transactions_loadpdi,83,4833 -fused_transactions_loadpdi,84,4832 -fused_transactions_loadpdi,85,4832 -fused_transactions_loadpdi,86,4831 -fused_transactions_loadpdi,87,4827 -fused_transactions_loadpdi,88,4832 -fused_transactions_loadpdi,89,4832 -fused_transactions_loadpdi,90,4831 -fused_transactions_loadpdi,91,4833 -fused_transactions_loadpdi,92,4829 -fused_transactions_loadpdi,93,4828 -fused_transactions_loadpdi,94,4834 -fused_transactions_loadpdi,95,4831 -fused_transactions_loadpdi,96,4827 -fused_transactions_loadpdi,97,4840 -fused_transactions_loadpdi,98,4836 -fused_transactions_loadpdi,99,4834 -fused_transactions_loadpdi,100,4838 -fused_transactions_loadpdi,101,4832 -fused_transactions_loadpdi,102,4837 -fused_transactions_loadpdi,103,4827 -fused_transactions_loadpdi,104,4834 -fused_transactions_loadpdi,105,4827 -fused_transactions_loadpdi,106,4831 -fused_transactions_loadpdi,107,4828 -fused_transactions_loadpdi,108,4834 -fused_transactions_loadpdi,109,4830 -fused_transactions_loadpdi,110,4830 -fused_transactions_loadpdi,111,4833 -fused_transactions_loadpdi,112,4825 -fused_transactions_loadpdi,113,4830 -fused_transactions_loadpdi,114,4822 -fused_transactions_loadpdi,115,4825 -fused_transactions_loadpdi,116,4832 -fused_transactions_loadpdi,117,4833 -fused_transactions_loadpdi,118,4829 -fused_transactions_loadpdi,119,4832 -fused_transactions_loadpdi,120,4833 -fused_transactions_loadpdi,121,4830 -fused_transactions_loadpdi,122,4830 -fused_transactions_loadpdi,123,4834 -fused_transactions_loadpdi,124,4833 -fused_transactions_loadpdi,125,4829 -fused_transactions_loadpdi,126,4832 -fused_transactions_loadpdi,127,4828 -fused_transactions_loadpdi,128,4833 -fused_transactions_loadpdi,129,4836 -fused_transactions_loadpdi,130,4831 -fused_transactions_loadpdi,131,4832 -fused_transactions_loadpdi,132,4826 -fused_transactions_loadpdi,133,4833 -fused_transactions_loadpdi,134,4833 -fused_transactions_loadpdi,135,4828 -fused_transactions_loadpdi,136,4825 -fused_transactions_loadpdi,137,4826 -fused_transactions_loadpdi,138,4831 -fused_transactions_loadpdi,139,4838 -fused_transactions_loadpdi,140,4836 -fused_transactions_loadpdi,141,4832 -fused_transactions_loadpdi,142,4835 -fused_transactions_loadpdi,143,4827 -fused_transactions_loadpdi,144,4827 -fused_transactions_loadpdi,145,4826 -fused_transactions_loadpdi,146,4828 -fused_transactions_loadpdi,147,4824 -fused_transactions_loadpdi,148,4831 -fused_transactions_loadpdi,149,4836 -fused_transactions_loadpdi,150,4833 -fused_transactions_loadpdi,151,4833 -fused_transactions_loadpdi,152,4825 -fused_transactions_loadpdi,153,4828 -fused_transactions_loadpdi,154,4829 -fused_transactions_loadpdi,155,4857 -fused_transactions_loadpdi,156,4860 -fused_transactions_loadpdi,157,4836 -fused_transactions_loadpdi,158,4830 -fused_transactions_loadpdi,159,4831 -fused_transactions_loadpdi,160,4826 -fused_transactions_loadpdi,161,4824 -fused_transactions_loadpdi,162,4827 -fused_transactions_loadpdi,163,4823 -fused_transactions_loadpdi,164,4827 -fused_transactions_loadpdi,165,4824 -fused_transactions_loadpdi,166,4826 -fused_transactions_loadpdi,167,4826 -fused_transactions_loadpdi,168,4827 -fused_transactions_loadpdi,169,4825 -fused_transactions_loadpdi,170,4832 -fused_transactions_loadpdi,171,4834 -fused_transactions_loadpdi,172,4827 -fused_transactions_loadpdi,173,4829 -fused_transactions_loadpdi,174,4834 -fused_transactions_loadpdi,175,4834 -fused_transactions_loadpdi,176,4831 -fused_transactions_loadpdi,177,4829 -fused_transactions_loadpdi,178,4826 -fused_transactions_loadpdi,179,4824 -fused_transactions_loadpdi,180,4838 -fused_transactions_loadpdi,181,4832 -fused_transactions_loadpdi,182,4834 -fused_transactions_loadpdi,183,4832 -fused_transactions_loadpdi,184,4832 -fused_transactions_loadpdi,185,4834 -fused_transactions_loadpdi,186,4824 -fused_transactions_loadpdi,187,4832 -fused_transactions_loadpdi,188,4832 -fused_transactions_loadpdi,189,4832 -fused_transactions_loadpdi,190,4833 -fused_transactions_loadpdi,191,4829 -fused_transactions_loadpdi,192,4831 -fused_transactions_loadpdi,193,4827 -fused_transactions_loadpdi,194,4832 -fused_transactions_loadpdi,195,4829 -fused_transactions_loadpdi,196,4832 -fused_transactions_loadpdi,197,4832 -fused_transactions_loadpdi,198,4832 -fused_transactions_loadpdi,199,4832 -fused_transactions_loadpdi,200,4836 -fused_transactions_loadpdi,201,4838 -fused_transactions_loadpdi,202,4830 -fused_transactions_loadpdi,203,4830 -fused_transactions_loadpdi,204,4832 -fused_transactions_loadpdi,205,4828 -fused_transactions_loadpdi,206,4824 -fused_transactions_loadpdi,207,4823 -fused_transactions_loadpdi,208,4832 -fused_transactions_loadpdi,209,4832 -fused_transactions_loadpdi,210,4824 -fused_transactions_loadpdi,211,4828 -fused_transactions_loadpdi,212,4829 -fused_transactions_loadpdi,213,4827 -fused_transactions_loadpdi,214,4834 -fused_transactions_loadpdi,215,4829 -fused_transactions_loadpdi,216,4828 -fused_transactions_loadpdi,217,4827 -fused_transactions_loadpdi,218,4826 -fused_transactions_loadpdi,219,4829 -fused_transactions_loadpdi,220,4829 -fused_transactions_loadpdi,221,4832 -fused_transactions_loadpdi,222,4833 -fused_transactions_loadpdi,223,4828 -fused_transactions_loadpdi,224,4834 -fused_transactions_loadpdi,225,4832 -fused_transactions_loadpdi,226,4832 -fused_transactions_loadpdi,227,4826 -fused_transactions_loadpdi,228,4826 -fused_transactions_loadpdi,229,4833 -fused_transactions_loadpdi,230,4826 -fused_transactions_loadpdi,231,4828 -fused_transactions_loadpdi,232,4832 -fused_transactions_loadpdi,233,4843 -fused_transactions_loadpdi,234,4829 -fused_transactions_loadpdi,235,4830 -fused_transactions_loadpdi,236,4835 -fused_transactions_loadpdi,237,4835 -fused_transactions_loadpdi,238,4824 -fused_transactions_loadpdi,239,4827 -fused_transactions_loadpdi,240,4830 -fused_transactions_loadpdi,241,4828 -fused_transactions_loadpdi,242,4831 -fused_transactions_loadpdi,243,4825 -fused_transactions_loadpdi,244,4823 -fused_transactions_loadpdi,245,4833 -fused_transactions_loadpdi,246,4831 -fused_transactions_loadpdi,247,4831 -fused_transactions_loadpdi,248,4841 -fused_transactions_loadpdi,249,4832 -fused_transactions_loadpdi,250,4835 -fused_transactions_loadpdi,251,4825 -fused_transactions_loadpdi,252,4831 -fused_transactions_loadpdi,253,4831 -fused_transactions_loadpdi,254,4824 -fused_transactions_loadpdi,255,4826 -fused_transactions_loadpdi,256,4833 -fused_transactions_loadpdi,257,4841 -fused_transactions_loadpdi,258,4828 -fused_transactions_loadpdi,259,4828 -fused_transactions_loadpdi,260,4865 -fused_transactions_loadpdi,261,4864 -fused_transactions_loadpdi,262,4826 -fused_transactions_loadpdi,263,4834 -fused_transactions_loadpdi,264,4826 -fused_transactions_loadpdi,265,4832 -fused_transactions_loadpdi,266,4828 -fused_transactions_loadpdi,267,4833 -fused_transactions_loadpdi,268,4824 -fused_transactions_loadpdi,269,4832 -fused_transactions_loadpdi,270,4832 -fused_transactions_loadpdi,271,4832 -fused_transactions_loadpdi,272,4829 -fused_transactions_loadpdi,273,4831 -fused_transactions_loadpdi,274,4825 -fused_transactions_loadpdi,275,4828 -fused_transactions_loadpdi,276,4838 -fused_transactions_loadpdi,277,4851 -fused_transactions_loadpdi,278,4855 -fused_transactions_loadpdi,279,4845 -fused_transactions_loadpdi,280,4845 -fused_transactions_loadpdi,281,4834 -fused_transactions_loadpdi,282,4831 -fused_transactions_loadpdi,283,4832 -fused_transactions_loadpdi,284,4842 -fused_transactions_loadpdi,285,4838 -fused_transactions_loadpdi,286,4856 -fused_transactions_loadpdi,287,4827 -fused_transactions_loadpdi,288,4823 -fused_transactions_loadpdi,289,4829 -fused_transactions_loadpdi,290,4822 -fused_transactions_loadpdi,291,4819 -fused_transactions_loadpdi,292,4826 -fused_transactions_loadpdi,293,4829 -fused_transactions_loadpdi,294,4828 -fused_transactions_loadpdi,295,4830 -fused_transactions_loadpdi,296,4825 -fused_transactions_loadpdi,297,4827 -fused_transactions_loadpdi,298,4836 -fused_transactions_loadpdi,299,4827 -fused_transactions_loadpdi,300,4838 -fused_transactions_loadpdi,301,4830 -fused_transactions_loadpdi,302,4829 -fused_transactions_loadpdi,303,4824 -fused_transactions_loadpdi,304,4834 -fused_transactions_loadpdi,305,4829 -fused_transactions_loadpdi,306,4833 -fused_transactions_loadpdi,307,4822 -fused_transactions_loadpdi,308,4830 -fused_transactions_loadpdi,309,4830 -fused_transactions_loadpdi,310,4829 -fused_transactions_loadpdi,311,4830 -fused_transactions_loadpdi,312,4835 -fused_transactions_loadpdi,313,4825 -fused_transactions_loadpdi,314,4825 -fused_transactions_loadpdi,315,4831 -fused_transactions_loadpdi,316,4833 -fused_transactions_loadpdi,317,4829 -fused_transactions_loadpdi,318,4829 -fused_transactions_loadpdi,319,4824 -fused_transactions_loadpdi,320,4832 -fused_transactions_loadpdi,321,4831 -fused_transactions_loadpdi,322,4822 -fused_transactions_loadpdi,323,4833 -fused_transactions_loadpdi,324,4830 -fused_transactions_loadpdi,325,4833 -fused_transactions_loadpdi,326,4830 -fused_transactions_loadpdi,327,4828 -fused_transactions_loadpdi,328,4823 -fused_transactions_loadpdi,329,4838 -fused_transactions_loadpdi,330,4828 -fused_transactions_loadpdi,331,4832 -fused_transactions_loadpdi,332,4828 -fused_transactions_loadpdi,333,4829 -fused_transactions_loadpdi,334,4842 -fused_transactions_loadpdi,335,4826 -fused_transactions_loadpdi,336,4833 -fused_transactions_loadpdi,337,4830 -fused_transactions_loadpdi,338,4830 -fused_transactions_loadpdi,339,4831 -fused_transactions_loadpdi,340,4837 -fused_transactions_loadpdi,341,4832 -fused_transactions_loadpdi,342,4827 -fused_transactions_loadpdi,343,4825 -fused_transactions_loadpdi,344,4824 -fused_transactions_loadpdi,345,4827 -fused_transactions_loadpdi,346,4833 -fused_transactions_loadpdi,347,4827 -fused_transactions_loadpdi,348,4828 -fused_transactions_loadpdi,349,4833 -fused_transactions_loadpdi,350,4829 -fused_transactions_loadpdi,351,4830 -fused_transactions_loadpdi,352,4828 -fused_transactions_loadpdi,353,4829 -fused_transactions_loadpdi,354,4837 -fused_transactions_loadpdi,355,4827 -fused_transactions_loadpdi,356,4827 -fused_transactions_loadpdi,357,4831 -fused_transactions_loadpdi,358,4829 -fused_transactions_loadpdi,359,4834 -fused_transactions_loadpdi,360,4826 -fused_transactions_loadpdi,361,4830 -fused_transactions_loadpdi,362,4827 -fused_transactions_loadpdi,363,4822 -fused_transactions_loadpdi,364,4829 -fused_transactions_loadpdi,365,4853 -fused_transactions_loadpdi,366,4864 -fused_transactions_loadpdi,367,4830 -fused_transactions_loadpdi,368,4826 -fused_transactions_loadpdi,369,4826 -fused_transactions_loadpdi,370,4827 -fused_transactions_loadpdi,371,4829 -fused_transactions_loadpdi,372,4833 -fused_transactions_loadpdi,373,4830 -fused_transactions_loadpdi,374,4824 -fused_transactions_loadpdi,375,4832 -fused_transactions_loadpdi,376,4830 -fused_transactions_loadpdi,377,4826 -fused_transactions_loadpdi,378,4829 -fused_transactions_loadpdi,379,4829 -fused_transactions_loadpdi,380,4836 -fused_transactions_loadpdi,381,4824 -fused_transactions_loadpdi,382,4832 -fused_transactions_loadpdi,383,4832 -fused_transactions_loadpdi,384,4828 -fused_transactions_loadpdi,385,4825 -fused_transactions_loadpdi,386,4830 -fused_transactions_loadpdi,387,4829 -fused_transactions_loadpdi,388,4836 -fused_transactions_loadpdi,389,4827 -fused_transactions_loadpdi,390,4828 -fused_transactions_loadpdi,391,4833 -fused_transactions_loadpdi,392,4831 -fused_transactions_loadpdi,393,4828 -fused_transactions_loadpdi,394,4830 -fused_transactions_loadpdi,395,4833 -fused_transactions_loadpdi,396,4827 -fused_transactions_loadpdi,397,4828 -fused_transactions_loadpdi,398,4831 -fused_transactions_loadpdi,399,4830 -fused_transactions_loadpdi,400,4830 -fused_transactions_loadpdi,401,4825 -fused_transactions_loadpdi,402,4828 -fused_transactions_loadpdi,403,4830 -fused_transactions_loadpdi,404,4827 -fused_transactions_loadpdi,405,4830 -fused_transactions_loadpdi,406,4827 -fused_transactions_loadpdi,407,4825 -fused_transactions_loadpdi,408,4836 -fused_transactions_loadpdi,409,4826 -fused_transactions_loadpdi,410,4826 -fused_transactions_loadpdi,411,4823 -fused_transactions_loadpdi,412,4830 -fused_transactions_loadpdi,413,4826 -fused_transactions_loadpdi,414,4826 -fused_transactions_loadpdi,415,4824 -fused_transactions_loadpdi,416,4825 -fused_transactions_loadpdi,417,4829 -fused_transactions_loadpdi,418,4825 -fused_transactions_loadpdi,419,4826 -fused_transactions_loadpdi,420,4829 -fused_transactions_loadpdi,421,4827 -fused_transactions_loadpdi,422,4829 -fused_transactions_loadpdi,423,4836 -fused_transactions_loadpdi,424,4830 -fused_transactions_loadpdi,425,4831 -fused_transactions_loadpdi,426,4836 -fused_transactions_loadpdi,427,4826 -fused_transactions_loadpdi,428,4825 -fused_transactions_loadpdi,429,4839 -fused_transactions_loadpdi,430,4832 -fused_transactions_loadpdi,431,4834 -fused_transactions_loadpdi,432,4829 -fused_transactions_loadpdi,433,4840 -fused_transactions_loadpdi,434,4832 -fused_transactions_loadpdi,435,4826 -fused_transactions_loadpdi,436,4826 -fused_transactions_loadpdi,437,4824 -fused_transactions_loadpdi,438,4828 -fused_transactions_loadpdi,439,4828 -fused_transactions_loadpdi,440,4825 -fused_transactions_loadpdi,441,4826 -fused_transactions_loadpdi,442,4828 -fused_transactions_loadpdi,443,4824 -fused_transactions_loadpdi,444,4821 -fused_transactions_loadpdi,445,4835 -fused_transactions_loadpdi,446,4829 -fused_transactions_loadpdi,447,4824 -fused_transactions_loadpdi,448,4828 -fused_transactions_loadpdi,449,4831 -fused_transactions_loadpdi,450,4824 -fused_transactions_loadpdi,451,4827 -fused_transactions_loadpdi,452,4834 -fused_transactions_loadpdi,453,4834 -fused_transactions_loadpdi,454,4823 -fused_transactions_loadpdi,455,4829 -fused_transactions_loadpdi,456,4823 -fused_transactions_loadpdi,457,4831 -fused_transactions_loadpdi,458,4833 -fused_transactions_loadpdi,459,4826 -fused_transactions_loadpdi,460,4833 -fused_transactions_loadpdi,461,4823 -fused_transactions_loadpdi,462,4828 -fused_transactions_loadpdi,463,4825 -fused_transactions_loadpdi,464,4822 -fused_transactions_loadpdi,465,4834 -fused_transactions_loadpdi,466,4838 -fused_transactions_loadpdi,467,4826 -fused_transactions_loadpdi,468,4828 -fused_transactions_loadpdi,469,4834 -fused_transactions_loadpdi,470,4860 -fused_transactions_loadpdi,471,4855 -fused_transactions_loadpdi,472,4828 -fused_transactions_loadpdi,473,4828 -fused_transactions_loadpdi,474,4832 -fused_transactions_loadpdi,475,4832 -fused_transactions_loadpdi,476,4831 -fused_transactions_loadpdi,477,4830 -fused_transactions_loadpdi,478,4830 -fused_transactions_loadpdi,479,4826 -fused_transactions_loadpdi,480,4825 -fused_transactions_loadpdi,481,4821 -fused_transactions_loadpdi,482,4825 -fused_transactions_loadpdi,483,4832 -fused_transactions_loadpdi,484,4824 -fused_transactions_loadpdi,485,4828 -fused_transactions_loadpdi,486,4834 -fused_transactions_loadpdi,487,4819 -fused_transactions_loadpdi,488,4825 -fused_transactions_loadpdi,489,4828 -fused_transactions_loadpdi,490,4824 -fused_transactions_loadpdi,491,4832 -fused_transactions_loadpdi,492,4831 -fused_transactions_loadpdi,493,4831 -fused_transactions_loadpdi,494,4834 -fused_transactions_loadpdi,495,4823 -fused_transactions_loadpdi,496,4831 -fused_transactions_loadpdi,497,4827 -fused_transactions_loadpdi,498,4826 -fused_transactions_loadpdi,499,4831 -fused_transactions_loadpdi,500,4824 -fused_transactions_loadpdi,501,4838 -fused_transactions_loadpdi,502,4845 -fused_transactions_loadpdi,503,4837 -fused_transactions_loadpdi,504,4832 -fused_transactions_loadpdi,505,4823 -fused_transactions_loadpdi,506,4832 -fused_transactions_loadpdi,507,4824 -fused_transactions_loadpdi,508,4833 -fused_transactions_loadpdi,509,4831 -fused_transactions_loadpdi,510,4824 -fused_transactions_loadpdi,511,4827 -fused_transactions_loadpdi,512,4831 -fused_transactions_loadpdi,513,4835 -fused_transactions_loadpdi,514,4830 -fused_transactions_loadpdi,515,4827 -fused_transactions_loadpdi,516,4831 -fused_transactions_loadpdi,517,4833 -fused_transactions_loadpdi,518,4821 -fused_transactions_loadpdi,519,4830 -fused_transactions_loadpdi,520,4827 -fused_transactions_loadpdi,521,4829 -fused_transactions_loadpdi,522,4830 -fused_transactions_loadpdi,523,4831 -fused_transactions_loadpdi,524,4835 -fused_transactions_loadpdi,525,4830 -fused_transactions_loadpdi,526,4831 -fused_transactions_loadpdi,527,4833 -fused_transactions_loadpdi,528,4825 -fused_transactions_loadpdi,529,4828 -fused_transactions_loadpdi,530,4823 -fused_transactions_loadpdi,531,4824 -fused_transactions_loadpdi,532,4830 -fused_transactions_loadpdi,533,4822 -fused_transactions_loadpdi,534,4830 -fused_transactions_loadpdi,535,4827 -fused_transactions_loadpdi,536,4827 -fused_transactions_loadpdi,537,4833 -fused_transactions_loadpdi,538,4831 -fused_transactions_loadpdi,539,4836 -fused_transactions_loadpdi,540,4827 -fused_transactions_loadpdi,541,4825 -fused_transactions_loadpdi,542,4830 -fused_transactions_loadpdi,543,4827 -fused_transactions_loadpdi,544,4830 -fused_transactions_loadpdi,545,4826 -fused_transactions_loadpdi,546,4824 -fused_transactions_loadpdi,547,4831 -fused_transactions_loadpdi,548,4824 -fused_transactions_loadpdi,549,4831 -fused_transactions_loadpdi,550,4830 -fused_transactions_loadpdi,551,4831 -fused_transactions_loadpdi,552,4829 -fused_transactions_loadpdi,553,4835 -fused_transactions_loadpdi,554,4826 -fused_transactions_loadpdi,555,4828 -fused_transactions_loadpdi,556,4826 -fused_transactions_loadpdi,557,4827 -fused_transactions_loadpdi,558,4826 -fused_transactions_loadpdi,559,4825 -fused_transactions_loadpdi,560,4825 -fused_transactions_loadpdi,561,4826 -fused_transactions_loadpdi,562,4827 -fused_transactions_loadpdi,563,4823 -fused_transactions_loadpdi,564,4824 -fused_transactions_loadpdi,565,4829 -fused_transactions_loadpdi,566,4828 -fused_transactions_loadpdi,567,4829 -fused_transactions_loadpdi,568,4825 -fused_transactions_loadpdi,569,4825 -fused_transactions_loadpdi,570,4823 -fused_transactions_loadpdi,571,4827 -fused_transactions_loadpdi,572,4827 -fused_transactions_loadpdi,573,4823 -fused_transactions_loadpdi,574,4825 -fused_transactions_loadpdi,575,4854 -fused_transactions_loadpdi,576,4870 -fused_transactions_loadpdi,577,4845 -fused_transactions_loadpdi,578,4827 -fused_transactions_loadpdi,579,4830 -fused_transactions_loadpdi,580,4827 -fused_transactions_loadpdi,581,4833 -fused_transactions_loadpdi,582,4830 -fused_transactions_loadpdi,583,4834 -fused_transactions_loadpdi,584,4831 -fused_transactions_loadpdi,585,4831 -fused_transactions_loadpdi,586,4827 -fused_transactions_loadpdi,587,4825 -fused_transactions_loadpdi,588,4829 -fused_transactions_loadpdi,589,4825 -fused_transactions_loadpdi,590,4828 -fused_transactions_loadpdi,591,4827 -fused_transactions_loadpdi,592,4831 -fused_transactions_loadpdi,593,4832 -fused_transactions_loadpdi,594,4832 -fused_transactions_loadpdi,595,4830 -fused_transactions_loadpdi,596,4829 -fused_transactions_loadpdi,597,4825 -fused_transactions_loadpdi,598,4828 -fused_transactions_loadpdi,599,4825 -fused_transactions_loadpdi,600,4830 -fused_transactions_loadpdi,601,4833 -fused_transactions_loadpdi,602,4829 -fused_transactions_loadpdi,603,4824 -fused_transactions_loadpdi,604,4826 -fused_transactions_loadpdi,605,4825 -fused_transactions_loadpdi,606,4827 -fused_transactions_loadpdi,607,4827 -fused_transactions_loadpdi,608,4832 -fused_transactions_loadpdi,609,4821 -fused_transactions_loadpdi,610,4831 -fused_transactions_loadpdi,611,4831 -fused_transactions_loadpdi,612,4831 -fused_transactions_loadpdi,613,4828 -fused_transactions_loadpdi,614,4821 -fused_transactions_loadpdi,615,4826 -fused_transactions_loadpdi,616,4827 -fused_transactions_loadpdi,617,4828 -fused_transactions_loadpdi,618,4833 -fused_transactions_loadpdi,619,4830 -fused_transactions_loadpdi,620,4824 -fused_transactions_loadpdi,621,4830 -fused_transactions_loadpdi,622,4824 -fused_transactions_loadpdi,623,4827 -fused_transactions_loadpdi,624,4830 -fused_transactions_loadpdi,625,4828 -fused_transactions_loadpdi,626,4826 -fused_transactions_loadpdi,627,4824 -fused_transactions_loadpdi,628,4826 -fused_transactions_loadpdi,629,4828 -fused_transactions_loadpdi,630,4832 -fused_transactions_loadpdi,631,4834 -fused_transactions_loadpdi,632,4822 -fused_transactions_loadpdi,633,4832 -fused_transactions_loadpdi,634,4829 -fused_transactions_loadpdi,635,4828 -fused_transactions_loadpdi,636,4840 -fused_transactions_loadpdi,637,4827 -fused_transactions_loadpdi,638,4831 -fused_transactions_loadpdi,639,4831 -fused_transactions_loadpdi,640,4828 -fused_transactions_loadpdi,641,4827 -fused_transactions_loadpdi,642,4827 -fused_transactions_loadpdi,643,4824 -fused_transactions_loadpdi,644,4831 -fused_transactions_loadpdi,645,4826 -fused_transactions_loadpdi,646,4826 -fused_transactions_loadpdi,647,4826 -fused_transactions_loadpdi,648,4826 -fused_transactions_loadpdi,649,4830 -fused_transactions_loadpdi,650,4824 -fused_transactions_loadpdi,651,4826 -fused_transactions_loadpdi,652,4830 -fused_transactions_loadpdi,653,4826 -fused_transactions_loadpdi,654,4836 -fused_transactions_loadpdi,655,4831 -fused_transactions_loadpdi,656,4835 -fused_transactions_loadpdi,657,4826 -fused_transactions_loadpdi,658,4832 -fused_transactions_loadpdi,659,4819 -fused_transactions_loadpdi,660,4825 -fused_transactions_loadpdi,661,4830 -fused_transactions_loadpdi,662,4829 -fused_transactions_loadpdi,663,4826 -fused_transactions_loadpdi,664,4832 -fused_transactions_loadpdi,665,4828 -fused_transactions_loadpdi,666,4824 -fused_transactions_loadpdi,667,4832 -fused_transactions_loadpdi,668,4829 -fused_transactions_loadpdi,669,4822 -fused_transactions_loadpdi,670,4826 -fused_transactions_loadpdi,671,4832 -fused_transactions_loadpdi,672,4826 -fused_transactions_loadpdi,673,4826 -fused_transactions_loadpdi,674,4826 -fused_transactions_loadpdi,675,4828 -fused_transactions_loadpdi,676,4831 -fused_transactions_loadpdi,677,4837 -fused_transactions_loadpdi,678,4826 -fused_transactions_loadpdi,679,4818 -fused_transactions_loadpdi,680,4834 -fused_transactions_loadpdi,681,4825 -fused_transactions_loadpdi,682,4827 -fused_transactions_loadpdi,683,4834 -fused_transactions_loadpdi,684,4827 -fused_transactions_loadpdi,685,4831 -fused_transactions_loadpdi,686,4828 -fused_transactions_loadpdi,687,4825 -fused_transactions_loadpdi,688,4827 -fused_transactions_loadpdi,689,4832 -fused_transactions_loadpdi,690,4824 -fused_transactions_loadpdi,691,4825 -fused_transactions_loadpdi,692,4827 -fused_transactions_loadpdi,693,4832 -fused_transactions_loadpdi,694,4826 -fused_transactions_loadpdi,695,4827 -fused_transactions_loadpdi,696,4827 -fused_transactions_loadpdi,697,4832 -fused_transactions_loadpdi,698,4833 -fused_transactions_loadpdi,699,4833 -fused_transactions_loadpdi,700,4826 -fused_transactions_loadpdi,701,4826 -fused_transactions_loadpdi,702,4835 -fused_transactions_loadpdi,703,4854 -fused_transactions_loadpdi,704,4852 -fused_transactions_loadpdi,705,4823 -fused_transactions_loadpdi,706,4828 -fused_transactions_loadpdi,707,4829 -fused_transactions_loadpdi,708,4824 -fused_transactions_loadpdi,709,4825 -fused_transactions_loadpdi,710,4831 -fused_transactions_loadpdi,711,4830 -fused_transactions_loadpdi,712,4833 -fused_transactions_loadpdi,713,4831 -fused_transactions_loadpdi,714,4829 -fused_transactions_loadpdi,715,4828 -fused_transactions_loadpdi,716,4828 -fused_transactions_loadpdi,717,4828 -fused_transactions_loadpdi,718,4834 -fused_transactions_loadpdi,719,4830 -fused_transactions_loadpdi,720,4834 -fused_transactions_loadpdi,721,4829 -fused_transactions_loadpdi,722,4828 -fused_transactions_loadpdi,723,4829 -fused_transactions_loadpdi,724,4824 -fused_transactions_loadpdi,725,4830 -fused_transactions_loadpdi,726,4824 -fused_transactions_loadpdi,727,4824 -fused_transactions_loadpdi,728,4830 -fused_transactions_loadpdi,729,4826 -fused_transactions_loadpdi,730,4833 -fused_transactions_loadpdi,731,4825 -fused_transactions_loadpdi,732,4827 -fused_transactions_loadpdi,733,4824 -fused_transactions_loadpdi,734,4830 -fused_transactions_loadpdi,735,4829 -fused_transactions_loadpdi,736,4826 -fused_transactions_loadpdi,737,4834 -fused_transactions_loadpdi,738,4828 -fused_transactions_loadpdi,739,4831 -fused_transactions_loadpdi,740,4827 -fused_transactions_loadpdi,741,4827 -fused_transactions_loadpdi,742,4829 -fused_transactions_loadpdi,743,4835 -fused_transactions_loadpdi,744,4828 -fused_transactions_loadpdi,745,4821 -fused_transactions_loadpdi,746,4832 -fused_transactions_loadpdi,747,4821 -fused_transactions_loadpdi,748,4831 -fused_transactions_loadpdi,749,4832 -fused_transactions_loadpdi,750,4825 -fused_transactions_loadpdi,751,4828 -fused_transactions_loadpdi,752,4833 -fused_transactions_loadpdi,753,4839 -fused_transactions_loadpdi,754,4834 -fused_transactions_loadpdi,755,4829 -fused_transactions_loadpdi,756,4829 -fused_transactions_loadpdi,757,4826 -fused_transactions_loadpdi,758,4837 -fused_transactions_loadpdi,759,4827 -fused_transactions_loadpdi,760,4836 -fused_transactions_loadpdi,761,4828 -fused_transactions_loadpdi,762,4828 -fused_transactions_loadpdi,763,4830 -fused_transactions_loadpdi,764,4825 -fused_transactions_loadpdi,765,4827 -fused_transactions_loadpdi,766,4847 -fused_transactions_loadpdi,767,4834 -fused_transactions_loadpdi,768,4824 -fused_transactions_loadpdi,769,4834 -fused_transactions_loadpdi,770,4833 -fused_transactions_loadpdi,771,4838 -fused_transactions_loadpdi,772,4832 -fused_transactions_loadpdi,773,4844 -fused_transactions_loadpdi,774,4832 -fused_transactions_loadpdi,775,4833 -fused_transactions_loadpdi,776,4836 -fused_transactions_loadpdi,777,4831 -fused_transactions_loadpdi,778,4824 -fused_transactions_loadpdi,779,4824 -fused_transactions_loadpdi,780,4831 -fused_transactions_loadpdi,781,4832 -fused_transactions_loadpdi,782,4826 -fused_transactions_loadpdi,783,4827 -fused_transactions_loadpdi,784,4831 -fused_transactions_loadpdi,785,4823 -fused_transactions_loadpdi,786,4827 -fused_transactions_loadpdi,787,4835 -fused_transactions_loadpdi,788,4832 -fused_transactions_loadpdi,789,4827 -fused_transactions_loadpdi,790,4833 -fused_transactions_loadpdi,791,4835 -fused_transactions_loadpdi,792,4829 -fused_transactions_loadpdi,793,4826 -fused_transactions_loadpdi,794,4825 -fused_transactions_loadpdi,795,4830 -fused_transactions_loadpdi,796,4833 -fused_transactions_loadpdi,797,4829 -fused_transactions_loadpdi,798,4823 -fused_transactions_loadpdi,799,4835 -fused_transactions_loadpdi,800,4827 -fused_transactions_loadpdi,801,4844 -fused_transactions_loadpdi,802,4827 -fused_transactions_loadpdi,803,4831 -fused_transactions_loadpdi,804,4833 -fused_transactions_loadpdi,805,4830 -fused_transactions_loadpdi,806,4826 -fused_transactions_loadpdi,807,4825 -fused_transactions_loadpdi,808,4852 -fused_transactions_loadpdi,809,4869 -fused_transactions_loadpdi,810,4836 -fused_transactions_loadpdi,811,4826 -fused_transactions_loadpdi,812,4826 -fused_transactions_loadpdi,813,4825 -fused_transactions_loadpdi,814,4828 -fused_transactions_loadpdi,815,4830 -fused_transactions_loadpdi,816,4830 -fused_transactions_loadpdi,817,4831 -fused_transactions_loadpdi,818,4824 -fused_transactions_loadpdi,819,4831 -fused_transactions_loadpdi,820,4827 -fused_transactions_loadpdi,821,4826 -fused_transactions_loadpdi,822,4834 -fused_transactions_loadpdi,823,4829 -fused_transactions_loadpdi,824,4830 -fused_transactions_loadpdi,825,4825 -fused_transactions_loadpdi,826,4827 -fused_transactions_loadpdi,827,4829 -fused_transactions_loadpdi,828,4828 -fused_transactions_loadpdi,829,4829 -fused_transactions_loadpdi,830,4823 -fused_transactions_loadpdi,831,4828 -fused_transactions_loadpdi,832,4823 -fused_transactions_loadpdi,833,4826 -fused_transactions_loadpdi,834,4824 -fused_transactions_loadpdi,835,4827 -fused_transactions_loadpdi,836,4829 -fused_transactions_loadpdi,837,4834 -fused_transactions_loadpdi,838,4828 -fused_transactions_loadpdi,839,4830 -fused_transactions_loadpdi,840,4826 -fused_transactions_loadpdi,841,4827 -fused_transactions_loadpdi,842,4824 -fused_transactions_loadpdi,843,4838 -fused_transactions_loadpdi,844,4839 -fused_transactions_loadpdi,845,4828 -fused_transactions_loadpdi,846,4834 -fused_transactions_loadpdi,847,4831 -fused_transactions_loadpdi,848,4826 -fused_transactions_loadpdi,849,4834 -fused_transactions_loadpdi,850,4828 -fused_transactions_loadpdi,851,4827 -fused_transactions_loadpdi,852,4829 -fused_transactions_loadpdi,853,4824 -fused_transactions_loadpdi,854,4821 -fused_transactions_loadpdi,855,4829 -fused_transactions_loadpdi,856,4836 -fused_transactions_loadpdi,857,4827 -fused_transactions_loadpdi,858,4827 -fused_transactions_loadpdi,859,4824 -fused_transactions_loadpdi,860,4825 -fused_transactions_loadpdi,861,4832 -fused_transactions_loadpdi,862,4830 -fused_transactions_loadpdi,863,4830 -fused_transactions_loadpdi,864,4828 -fused_transactions_loadpdi,865,4828 -fused_transactions_loadpdi,866,4829 -fused_transactions_loadpdi,867,4828 -fused_transactions_loadpdi,868,4832 -fused_transactions_loadpdi,869,4824 -fused_transactions_loadpdi,870,4827 -fused_transactions_loadpdi,871,4835 -fused_transactions_loadpdi,872,4835 -fused_transactions_loadpdi,873,4825 -fused_transactions_loadpdi,874,4829 -fused_transactions_loadpdi,875,4830 -fused_transactions_loadpdi,876,4826 -fused_transactions_loadpdi,877,4829 -fused_transactions_loadpdi,878,4827 -fused_transactions_loadpdi,879,4830 -fused_transactions_loadpdi,880,4825 -fused_transactions_loadpdi,881,4827 -fused_transactions_loadpdi,882,4834 -fused_transactions_loadpdi,883,4834 -fused_transactions_loadpdi,884,4839 -fused_transactions_loadpdi,885,4830 -fused_transactions_loadpdi,886,4831 -fused_transactions_loadpdi,887,4828 -fused_transactions_loadpdi,888,4827 -fused_transactions_loadpdi,889,4831 -fused_transactions_loadpdi,890,4839 -fused_transactions_loadpdi,891,4832 -fused_transactions_loadpdi,892,4837 -fused_transactions_loadpdi,893,4831 -fused_transactions_loadpdi,894,4833 -fused_transactions_loadpdi,895,4841 -fused_transactions_loadpdi,896,4837 -fused_transactions_loadpdi,897,4833 -fused_transactions_loadpdi,898,4839 -fused_transactions_loadpdi,899,4836 -fused_transactions_loadpdi,900,4846 -fused_transactions_loadpdi,901,4835 -fused_transactions_loadpdi,902,4807 -fused_transactions_loadpdi,903,4810 -fused_transactions_loadpdi,904,4816 -fused_transactions_loadpdi,905,4841 -fused_transactions_loadpdi,906,4841 -fused_transactions_loadpdi,907,4839 -fused_transactions_loadpdi,908,4833 -fused_transactions_loadpdi,909,4829 -fused_transactions_loadpdi,910,4832 -fused_transactions_loadpdi,911,4831 -fused_transactions_loadpdi,912,4858 -fused_transactions_loadpdi,913,4873 -fused_transactions_loadpdi,914,4872 -fused_transactions_loadpdi,915,4833 -fused_transactions_loadpdi,916,4836 -fused_transactions_loadpdi,917,4831 -fused_transactions_loadpdi,918,4832 -fused_transactions_loadpdi,919,4827 -fused_transactions_loadpdi,920,4835 -fused_transactions_loadpdi,921,4829 -fused_transactions_loadpdi,922,4829 -fused_transactions_loadpdi,923,4834 -fused_transactions_loadpdi,924,4825 -fused_transactions_loadpdi,925,4835 -fused_transactions_loadpdi,926,4828 -fused_transactions_loadpdi,927,4824 -fused_transactions_loadpdi,928,4824 -fused_transactions_loadpdi,929,4824 -fused_transactions_loadpdi,930,4831 -fused_transactions_loadpdi,931,4833 -fused_transactions_loadpdi,932,4833 -fused_transactions_loadpdi,933,4831 -fused_transactions_loadpdi,934,4832 -fused_transactions_loadpdi,935,4827 -fused_transactions_loadpdi,936,4823 -fused_transactions_loadpdi,937,4826 -fused_transactions_loadpdi,938,4833 -fused_transactions_loadpdi,939,4832 -fused_transactions_loadpdi,940,4824 -fused_transactions_loadpdi,941,4836 -fused_transactions_loadpdi,942,4833 -fused_transactions_loadpdi,943,4827 -fused_transactions_loadpdi,944,4829 -fused_transactions_loadpdi,945,4832 -fused_transactions_loadpdi,946,4834 -fused_transactions_loadpdi,947,4831 -fused_transactions_loadpdi,948,4852 -fused_transactions_loadpdi,949,4844 -fused_transactions_loadpdi,950,4835 -fused_transactions_loadpdi,951,4830 -fused_transactions_loadpdi,952,4826 -fused_transactions_loadpdi,953,4829 -fused_transactions_loadpdi,954,4828 -fused_transactions_loadpdi,955,4820 -fused_transactions_loadpdi,956,4825 -fused_transactions_loadpdi,957,4828 -fused_transactions_loadpdi,958,4831 -fused_transactions_loadpdi,959,4830 -fused_transactions_loadpdi,960,4839 -fused_transactions_loadpdi,961,4838 -fused_transactions_loadpdi,962,4827 -fused_transactions_loadpdi,963,4828 -fused_transactions_loadpdi,964,4826 -fused_transactions_loadpdi,965,4828 -fused_transactions_loadpdi,966,4828 -fused_transactions_loadpdi,967,4832 -fused_transactions_loadpdi,968,4820 -fused_transactions_loadpdi,969,4830 -fused_transactions_loadpdi,970,4838 -fused_transactions_loadpdi,971,4843 -fused_transactions_loadpdi,972,4824 -fused_transactions_loadpdi,973,4836 -fused_transactions_loadpdi,974,4824 -fused_transactions_loadpdi,975,4823 -fused_transactions_loadpdi,976,4828 -fused_transactions_loadpdi,977,4828 -fused_transactions_loadpdi,978,4819 -fused_transactions_loadpdi,979,4825 -fused_transactions_loadpdi,980,4822 -fused_transactions_loadpdi,981,4828 -fused_transactions_loadpdi,982,4830 -fused_transactions_loadpdi,983,4826 -fused_transactions_loadpdi,984,4828 -fused_transactions_loadpdi,985,4830 -fused_transactions_loadpdi,986,4834 -fused_transactions_loadpdi,987,4825 -fused_transactions_loadpdi,988,4834 -fused_transactions_loadpdi,989,4829 -fused_transactions_loadpdi,990,4826 -fused_transactions_loadpdi,991,4830 -fused_transactions_loadpdi,992,4829 -fused_transactions_loadpdi,993,4821 -fused_transactions_loadpdi,994,4826 -fused_transactions_loadpdi,995,4826 -fused_transactions_loadpdi,996,4830 -fused_transactions_loadpdi,997,4828 -fused_transactions_loadpdi,998,4831 -fused_transactions_loadpdi,999,4823 -fused_write32s_reset_ifused,0,5993 -fused_write32s_reset_ifused,1,5934 -fused_write32s_reset_ifused,2,5932 -fused_write32s_reset_ifused,3,5937 -fused_write32s_reset_ifused,4,5934 -fused_write32s_reset_ifused,5,5938 -fused_write32s_reset_ifused,6,5936 -fused_write32s_reset_ifused,7,5938 -fused_write32s_reset_ifused,8,5934 -fused_write32s_reset_ifused,9,5936 -fused_write32s_reset_ifused,10,5936 -fused_write32s_reset_ifused,11,5937 -fused_write32s_reset_ifused,12,5934 -fused_write32s_reset_ifused,13,5938 -fused_write32s_reset_ifused,14,5939 -fused_write32s_reset_ifused,15,5938 -fused_write32s_reset_ifused,16,5939 -fused_write32s_reset_ifused,17,5936 -fused_write32s_reset_ifused,18,5935 -fused_write32s_reset_ifused,19,5936 -fused_write32s_reset_ifused,20,5934 -fused_write32s_reset_ifused,21,5940 -fused_write32s_reset_ifused,22,5935 -fused_write32s_reset_ifused,23,5935 -fused_write32s_reset_ifused,24,5935 -fused_write32s_reset_ifused,25,5934 -fused_write32s_reset_ifused,26,5937 -fused_write32s_reset_ifused,27,5934 -fused_write32s_reset_ifused,28,5934 -fused_write32s_reset_ifused,29,5936 -fused_write32s_reset_ifused,30,5938 -fused_write32s_reset_ifused,31,5938 -fused_write32s_reset_ifused,32,5934 -fused_write32s_reset_ifused,33,5936 -fused_write32s_reset_ifused,34,5937 -fused_write32s_reset_ifused,35,5935 -fused_write32s_reset_ifused,36,5933 -fused_write32s_reset_ifused,37,5935 -fused_write32s_reset_ifused,38,5937 -fused_write32s_reset_ifused,39,5934 -fused_write32s_reset_ifused,40,5937 -fused_write32s_reset_ifused,41,5939 -fused_write32s_reset_ifused,42,5933 -fused_write32s_reset_ifused,43,5936 -fused_write32s_reset_ifused,44,5933 -fused_write32s_reset_ifused,45,5932 -fused_write32s_reset_ifused,46,5933 -fused_write32s_reset_ifused,47,5939 -fused_write32s_reset_ifused,48,5933 -fused_write32s_reset_ifused,49,5933 -fused_write32s_reset_ifused,50,5932 -fused_write32s_reset_ifused,51,5931 -fused_write32s_reset_ifused,52,5935 -fused_write32s_reset_ifused,53,5932 -fused_write32s_reset_ifused,54,5935 -fused_write32s_reset_ifused,55,5934 -fused_write32s_reset_ifused,56,5933 -fused_write32s_reset_ifused,57,5933 -fused_write32s_reset_ifused,58,5936 -fused_write32s_reset_ifused,59,5934 -fused_write32s_reset_ifused,60,5938 -fused_write32s_reset_ifused,61,5931 -fused_write32s_reset_ifused,62,5934 -fused_write32s_reset_ifused,63,5938 -fused_write32s_reset_ifused,64,5933 -fused_write32s_reset_ifused,65,5932 -fused_write32s_reset_ifused,66,5931 -fused_write32s_reset_ifused,67,5938 -fused_write32s_reset_ifused,68,5933 -fused_write32s_reset_ifused,69,5931 -fused_write32s_reset_ifused,70,5934 -fused_write32s_reset_ifused,71,5932 -fused_write32s_reset_ifused,72,5933 -fused_write32s_reset_ifused,73,5933 -fused_write32s_reset_ifused,74,5933 -fused_write32s_reset_ifused,75,5937 -fused_write32s_reset_ifused,76,5934 -fused_write32s_reset_ifused,77,5943 -fused_write32s_reset_ifused,78,5932 -fused_write32s_reset_ifused,79,5934 -fused_write32s_reset_ifused,80,5934 -fused_write32s_reset_ifused,81,5933 -fused_write32s_reset_ifused,82,5933 -fused_write32s_reset_ifused,83,5932 -fused_write32s_reset_ifused,84,5945 -fused_write32s_reset_ifused,85,5934 -fused_write32s_reset_ifused,86,5933 -fused_write32s_reset_ifused,87,5933 -fused_write32s_reset_ifused,88,5933 -fused_write32s_reset_ifused,89,5934 -fused_write32s_reset_ifused,90,5933 -fused_write32s_reset_ifused,91,5933 -fused_write32s_reset_ifused,92,5931 -fused_write32s_reset_ifused,93,5939 -fused_write32s_reset_ifused,94,5935 -fused_write32s_reset_ifused,95,5934 -fused_write32s_reset_ifused,96,5931 -fused_write32s_reset_ifused,97,5937 -fused_write32s_reset_ifused,98,5937 -fused_write32s_reset_ifused,99,5939 -fused_write32s_reset_ifused,100,5933 -fused_write32s_reset_ifused,101,5933 -fused_write32s_reset_ifused,102,5933 -fused_write32s_reset_ifused,103,5932 -fused_write32s_reset_ifused,104,5935 -fused_write32s_reset_ifused,105,5934 -fused_write32s_reset_ifused,106,5936 -fused_write32s_reset_ifused,107,5935 -fused_write32s_reset_ifused,108,5932 -fused_write32s_reset_ifused,109,5933 -fused_write32s_reset_ifused,110,5935 -fused_write32s_reset_ifused,111,5932 -fused_write32s_reset_ifused,112,5938 -fused_write32s_reset_ifused,113,5937 -fused_write32s_reset_ifused,114,5939 -fused_write32s_reset_ifused,115,5934 -fused_write32s_reset_ifused,116,5934 -fused_write32s_reset_ifused,117,5933 -fused_write32s_reset_ifused,118,5936 -fused_write32s_reset_ifused,119,5931 -fused_write32s_reset_ifused,120,5933 -fused_write32s_reset_ifused,121,5935 -fused_write32s_reset_ifused,122,5935 -fused_write32s_reset_ifused,123,5932 -fused_write32s_reset_ifused,124,5934 -fused_write32s_reset_ifused,125,5932 -fused_write32s_reset_ifused,126,5935 -fused_write32s_reset_ifused,127,5933 -fused_write32s_reset_ifused,128,5934 -fused_write32s_reset_ifused,129,5932 -fused_write32s_reset_ifused,130,5931 -fused_write32s_reset_ifused,131,5935 -fused_write32s_reset_ifused,132,5931 -fused_write32s_reset_ifused,133,5931 -fused_write32s_reset_ifused,134,5937 -fused_write32s_reset_ifused,135,5930 -fused_write32s_reset_ifused,136,5934 -fused_write32s_reset_ifused,137,5939 -fused_write32s_reset_ifused,138,5933 -fused_write32s_reset_ifused,139,5934 -fused_write32s_reset_ifused,140,5933 -fused_write32s_reset_ifused,141,5933 -fused_write32s_reset_ifused,142,5936 -fused_write32s_reset_ifused,143,5938 -fused_write32s_reset_ifused,144,5932 -fused_write32s_reset_ifused,145,5932 -fused_write32s_reset_ifused,146,5937 -fused_write32s_reset_ifused,147,5931 -fused_write32s_reset_ifused,148,5932 -fused_write32s_reset_ifused,149,5931 -fused_write32s_reset_ifused,150,5931 -fused_write32s_reset_ifused,151,5934 -fused_write32s_reset_ifused,152,5934 -fused_write32s_reset_ifused,153,5933 -fused_write32s_reset_ifused,154,5937 -fused_write32s_reset_ifused,155,5935 -fused_write32s_reset_ifused,156,5934 -fused_write32s_reset_ifused,157,5933 -fused_write32s_reset_ifused,158,5936 -fused_write32s_reset_ifused,159,5935 -fused_write32s_reset_ifused,160,5935 -fused_write32s_reset_ifused,161,5937 -fused_write32s_reset_ifused,162,5934 -fused_write32s_reset_ifused,163,5934 -fused_write32s_reset_ifused,164,5934 -fused_write32s_reset_ifused,165,5932 -fused_write32s_reset_ifused,166,5933 -fused_write32s_reset_ifused,167,5930 -fused_write32s_reset_ifused,168,5933 -fused_write32s_reset_ifused,169,5934 -fused_write32s_reset_ifused,170,5932 -fused_write32s_reset_ifused,171,5932 -fused_write32s_reset_ifused,172,5932 -fused_write32s_reset_ifused,173,5932 -fused_write32s_reset_ifused,174,5929 -fused_write32s_reset_ifused,175,5933 -fused_write32s_reset_ifused,176,5937 -fused_write32s_reset_ifused,177,5935 -fused_write32s_reset_ifused,178,5937 -fused_write32s_reset_ifused,179,5935 -fused_write32s_reset_ifused,180,5932 -fused_write32s_reset_ifused,181,5933 -fused_write32s_reset_ifused,182,5932 -fused_write32s_reset_ifused,183,5933 -fused_write32s_reset_ifused,184,5934 -fused_write32s_reset_ifused,185,5932 -fused_write32s_reset_ifused,186,5934 -fused_write32s_reset_ifused,187,5935 -fused_write32s_reset_ifused,188,5933 -fused_write32s_reset_ifused,189,5934 -fused_write32s_reset_ifused,190,5934 -fused_write32s_reset_ifused,191,5934 -fused_write32s_reset_ifused,192,5935 -fused_write32s_reset_ifused,193,5932 -fused_write32s_reset_ifused,194,5936 -fused_write32s_reset_ifused,195,5931 -fused_write32s_reset_ifused,196,5930 -fused_write32s_reset_ifused,197,5934 -fused_write32s_reset_ifused,198,5932 -fused_write32s_reset_ifused,199,5934 -fused_write32s_reset_ifused,200,5935 -fused_write32s_reset_ifused,201,5932 -fused_write32s_reset_ifused,202,5936 -fused_write32s_reset_ifused,203,5931 -fused_write32s_reset_ifused,204,5938 -fused_write32s_reset_ifused,205,5936 -fused_write32s_reset_ifused,206,5934 -fused_write32s_reset_ifused,207,5934 -fused_write32s_reset_ifused,208,5932 -fused_write32s_reset_ifused,209,5935 -fused_write32s_reset_ifused,210,5931 -fused_write32s_reset_ifused,211,5931 -fused_write32s_reset_ifused,212,5932 -fused_write32s_reset_ifused,213,5933 -fused_write32s_reset_ifused,214,5933 -fused_write32s_reset_ifused,215,5932 -fused_write32s_reset_ifused,216,5933 -fused_write32s_reset_ifused,217,5933 -fused_write32s_reset_ifused,218,5934 -fused_write32s_reset_ifused,219,5934 -fused_write32s_reset_ifused,220,5938 -fused_write32s_reset_ifused,221,5933 -fused_write32s_reset_ifused,222,5931 -fused_write32s_reset_ifused,223,5935 -fused_write32s_reset_ifused,224,5934 -fused_write32s_reset_ifused,225,5931 -fused_write32s_reset_ifused,226,5935 -fused_write32s_reset_ifused,227,5932 -fused_write32s_reset_ifused,228,5935 -fused_write32s_reset_ifused,229,5933 -fused_write32s_reset_ifused,230,5932 -fused_write32s_reset_ifused,231,5938 -fused_write32s_reset_ifused,232,5933 -fused_write32s_reset_ifused,233,5933 -fused_write32s_reset_ifused,234,5934 -fused_write32s_reset_ifused,235,5935 -fused_write32s_reset_ifused,236,5931 -fused_write32s_reset_ifused,237,5933 -fused_write32s_reset_ifused,238,5933 -fused_write32s_reset_ifused,239,5932 -fused_write32s_reset_ifused,240,5936 -fused_write32s_reset_ifused,241,5937 -fused_write32s_reset_ifused,242,5933 -fused_write32s_reset_ifused,243,5934 -fused_write32s_reset_ifused,244,5937 -fused_write32s_reset_ifused,245,5933 -fused_write32s_reset_ifused,246,5938 -fused_write32s_reset_ifused,247,5933 -fused_write32s_reset_ifused,248,5934 -fused_write32s_reset_ifused,249,5937 -fused_write32s_reset_ifused,250,5936 -fused_write32s_reset_ifused,251,5932 -fused_write32s_reset_ifused,252,5935 -fused_write32s_reset_ifused,253,5934 -fused_write32s_reset_ifused,254,5932 -fused_write32s_reset_ifused,255,5938 -fused_write32s_reset_ifused,256,5934 -fused_write32s_reset_ifused,257,5934 -fused_write32s_reset_ifused,258,5931 -fused_write32s_reset_ifused,259,5934 -fused_write32s_reset_ifused,260,5934 -fused_write32s_reset_ifused,261,5933 -fused_write32s_reset_ifused,262,5931 -fused_write32s_reset_ifused,263,5964 -fused_write32s_reset_ifused,264,5953 -fused_write32s_reset_ifused,265,5951 -fused_write32s_reset_ifused,266,5953 -fused_write32s_reset_ifused,267,5957 -fused_write32s_reset_ifused,268,5955 -fused_write32s_reset_ifused,269,5958 -fused_write32s_reset_ifused,270,5952 -fused_write32s_reset_ifused,271,5958 -fused_write32s_reset_ifused,272,5954 -fused_write32s_reset_ifused,273,5955 -fused_write32s_reset_ifused,274,5959 -fused_write32s_reset_ifused,275,5957 -fused_write32s_reset_ifused,276,5958 -fused_write32s_reset_ifused,277,5951 -fused_write32s_reset_ifused,278,5947 -fused_write32s_reset_ifused,279,5951 -fused_write32s_reset_ifused,280,5948 -fused_write32s_reset_ifused,281,5956 -fused_write32s_reset_ifused,282,5957 -fused_write32s_reset_ifused,283,5947 -fused_write32s_reset_ifused,284,5950 -fused_write32s_reset_ifused,285,5961 -fused_write32s_reset_ifused,286,5950 -fused_write32s_reset_ifused,287,5957 -fused_write32s_reset_ifused,288,5949 -fused_write32s_reset_ifused,289,5948 -fused_write32s_reset_ifused,290,5950 -fused_write32s_reset_ifused,291,5949 -fused_write32s_reset_ifused,292,5949 -fused_write32s_reset_ifused,293,5948 -fused_write32s_reset_ifused,294,5959 -fused_write32s_reset_ifused,295,5949 -fused_write32s_reset_ifused,296,5953 -fused_write32s_reset_ifused,297,5961 -fused_write32s_reset_ifused,298,5949 -fused_write32s_reset_ifused,299,5950 -fused_write32s_reset_ifused,300,5953 -fused_write32s_reset_ifused,301,5951 -fused_write32s_reset_ifused,302,5946 -fused_write32s_reset_ifused,303,5956 -fused_write32s_reset_ifused,304,5951 -fused_write32s_reset_ifused,305,5957 -fused_write32s_reset_ifused,306,5947 -fused_write32s_reset_ifused,307,5954 -fused_write32s_reset_ifused,308,5949 -fused_write32s_reset_ifused,309,5949 -fused_write32s_reset_ifused,310,5952 -fused_write32s_reset_ifused,311,5949 -fused_write32s_reset_ifused,312,5949 -fused_write32s_reset_ifused,313,5948 -fused_write32s_reset_ifused,314,5951 -fused_write32s_reset_ifused,315,5950 -fused_write32s_reset_ifused,316,5951 -fused_write32s_reset_ifused,317,5950 -fused_write32s_reset_ifused,318,5946 -fused_write32s_reset_ifused,319,5949 -fused_write32s_reset_ifused,320,5948 -fused_write32s_reset_ifused,321,5952 -fused_write32s_reset_ifused,322,5950 -fused_write32s_reset_ifused,323,5960 -fused_write32s_reset_ifused,324,5947 -fused_write32s_reset_ifused,325,5953 -fused_write32s_reset_ifused,326,5960 -fused_write32s_reset_ifused,327,5962 -fused_write32s_reset_ifused,328,5950 -fused_write32s_reset_ifused,329,5956 -fused_write32s_reset_ifused,330,5958 -fused_write32s_reset_ifused,331,5949 -fused_write32s_reset_ifused,332,5948 -fused_write32s_reset_ifused,333,5952 -fused_write32s_reset_ifused,334,5945 -fused_write32s_reset_ifused,335,5946 -fused_write32s_reset_ifused,336,5948 -fused_write32s_reset_ifused,337,5956 -fused_write32s_reset_ifused,338,5949 -fused_write32s_reset_ifused,339,5952 -fused_write32s_reset_ifused,340,5947 -fused_write32s_reset_ifused,341,5949 -fused_write32s_reset_ifused,342,5949 -fused_write32s_reset_ifused,343,5949 -fused_write32s_reset_ifused,344,5957 -fused_write32s_reset_ifused,345,5951 -fused_write32s_reset_ifused,346,5952 -fused_write32s_reset_ifused,347,5952 -fused_write32s_reset_ifused,348,5957 -fused_write32s_reset_ifused,349,5961 -fused_write32s_reset_ifused,350,5949 -fused_write32s_reset_ifused,351,5950 -fused_write32s_reset_ifused,352,5951 -fused_write32s_reset_ifused,353,5947 -fused_write32s_reset_ifused,354,5948 -fused_write32s_reset_ifused,355,5947 -fused_write32s_reset_ifused,356,5949 -fused_write32s_reset_ifused,357,5947 -fused_write32s_reset_ifused,358,5950 -fused_write32s_reset_ifused,359,5956 -fused_write32s_reset_ifused,360,5948 -fused_write32s_reset_ifused,361,5954 -fused_write32s_reset_ifused,362,5948 -fused_write32s_reset_ifused,363,5951 -fused_write32s_reset_ifused,364,5948 -fused_write32s_reset_ifused,365,5956 -fused_write32s_reset_ifused,366,5951 -fused_write32s_reset_ifused,367,5961 -fused_write32s_reset_ifused,368,5946 -fused_write32s_reset_ifused,369,5950 -fused_write32s_reset_ifused,370,5947 -fused_write32s_reset_ifused,371,5951 -fused_write32s_reset_ifused,372,5952 -fused_write32s_reset_ifused,373,5952 -fused_write32s_reset_ifused,374,5950 -fused_write32s_reset_ifused,375,5947 -fused_write32s_reset_ifused,376,5948 -fused_write32s_reset_ifused,377,5948 -fused_write32s_reset_ifused,378,5948 -fused_write32s_reset_ifused,379,5952 -fused_write32s_reset_ifused,380,5949 -fused_write32s_reset_ifused,381,5948 -fused_write32s_reset_ifused,382,5949 -fused_write32s_reset_ifused,383,5948 -fused_write32s_reset_ifused,384,5949 -fused_write32s_reset_ifused,385,5948 -fused_write32s_reset_ifused,386,5956 -fused_write32s_reset_ifused,387,5955 -fused_write32s_reset_ifused,388,5951 -fused_write32s_reset_ifused,389,5953 -fused_write32s_reset_ifused,390,5982 -fused_write32s_reset_ifused,391,5951 -fused_write32s_reset_ifused,392,5952 -fused_write32s_reset_ifused,393,5946 -fused_write32s_reset_ifused,394,5950 -fused_write32s_reset_ifused,395,5949 -fused_write32s_reset_ifused,396,5946 -fused_write32s_reset_ifused,397,5951 -fused_write32s_reset_ifused,398,5946 -fused_write32s_reset_ifused,399,5947 -fused_write32s_reset_ifused,400,5946 -fused_write32s_reset_ifused,401,5942 -fused_write32s_reset_ifused,402,5946 -fused_write32s_reset_ifused,403,5945 -fused_write32s_reset_ifused,404,5947 -fused_write32s_reset_ifused,405,5950 -fused_write32s_reset_ifused,406,5945 -fused_write32s_reset_ifused,407,5946 -fused_write32s_reset_ifused,408,5946 -fused_write32s_reset_ifused,409,5952 -fused_write32s_reset_ifused,410,5956 -fused_write32s_reset_ifused,411,5960 -fused_write32s_reset_ifused,412,5951 -fused_write32s_reset_ifused,413,5953 -fused_write32s_reset_ifused,414,5949 -fused_write32s_reset_ifused,415,5954 -fused_write32s_reset_ifused,416,5944 -fused_write32s_reset_ifused,417,5946 -fused_write32s_reset_ifused,418,5947 -fused_write32s_reset_ifused,419,5946 -fused_write32s_reset_ifused,420,5942 -fused_write32s_reset_ifused,421,5934 -fused_write32s_reset_ifused,422,5948 -fused_write32s_reset_ifused,423,5950 -fused_write32s_reset_ifused,424,5952 -fused_write32s_reset_ifused,425,5946 -fused_write32s_reset_ifused,426,5951 -fused_write32s_reset_ifused,427,5943 -fused_write32s_reset_ifused,428,5946 -fused_write32s_reset_ifused,429,5946 -fused_write32s_reset_ifused,430,5941 -fused_write32s_reset_ifused,431,5944 -fused_write32s_reset_ifused,432,5951 -fused_write32s_reset_ifused,433,5961 -fused_write32s_reset_ifused,434,5957 -fused_write32s_reset_ifused,435,5956 -fused_write32s_reset_ifused,436,6021 -fused_write32s_reset_ifused,437,6059 -fused_write32s_reset_ifused,438,6067 -fused_write32s_reset_ifused,439,6225 -fused_write32s_reset_ifused,440,6019 -fused_write32s_reset_ifused,441,5970 -fused_write32s_reset_ifused,442,5954 -fused_write32s_reset_ifused,443,5946 -fused_write32s_reset_ifused,444,5949 -fused_write32s_reset_ifused,445,5945 -fused_write32s_reset_ifused,446,5958 -fused_write32s_reset_ifused,447,6278 -fused_write32s_reset_ifused,448,6035 -fused_write32s_reset_ifused,449,5970 -fused_write32s_reset_ifused,450,5957 -fused_write32s_reset_ifused,451,5947 -fused_write32s_reset_ifused,452,5932 -fused_write32s_reset_ifused,453,5924 -fused_write32s_reset_ifused,454,5925 -fused_write32s_reset_ifused,455,5931 -fused_write32s_reset_ifused,456,5931 -fused_write32s_reset_ifused,457,5931 -fused_write32s_reset_ifused,458,5950 -fused_write32s_reset_ifused,459,5951 -fused_write32s_reset_ifused,460,5945 -fused_write32s_reset_ifused,461,5930 -fused_write32s_reset_ifused,462,5942 -fused_write32s_reset_ifused,463,5947 -fused_write32s_reset_ifused,464,5949 -fused_write32s_reset_ifused,465,5946 -fused_write32s_reset_ifused,466,5949 -fused_write32s_reset_ifused,467,5944 -fused_write32s_reset_ifused,468,5945 -fused_write32s_reset_ifused,469,5947 -fused_write32s_reset_ifused,470,5933 -fused_write32s_reset_ifused,471,5942 -fused_write32s_reset_ifused,472,5935 -fused_write32s_reset_ifused,473,5945 -fused_write32s_reset_ifused,474,5949 -fused_write32s_reset_ifused,475,5946 -fused_write32s_reset_ifused,476,5939 -fused_write32s_reset_ifused,477,5941 -fused_write32s_reset_ifused,478,5941 -fused_write32s_reset_ifused,479,5941 -fused_write32s_reset_ifused,480,5946 -fused_write32s_reset_ifused,481,5944 -fused_write32s_reset_ifused,482,5941 -fused_write32s_reset_ifused,483,5942 -fused_write32s_reset_ifused,484,5941 -fused_write32s_reset_ifused,485,5941 -fused_write32s_reset_ifused,486,5941 -fused_write32s_reset_ifused,487,5947 -fused_write32s_reset_ifused,488,5950 -fused_write32s_reset_ifused,489,5944 -fused_write32s_reset_ifused,490,5941 -fused_write32s_reset_ifused,491,5943 -fused_write32s_reset_ifused,492,5947 -fused_write32s_reset_ifused,493,5941 -fused_write32s_reset_ifused,494,5941 -fused_write32s_reset_ifused,495,5945 -fused_write32s_reset_ifused,496,5943 -fused_write32s_reset_ifused,497,5940 -fused_write32s_reset_ifused,498,5940 -fused_write32s_reset_ifused,499,5942 -fused_write32s_reset_ifused,500,5938 -fused_write32s_reset_ifused,501,5941 -fused_write32s_reset_ifused,502,5928 -fused_write32s_reset_ifused,503,5946 -fused_write32s_reset_ifused,504,5946 -fused_write32s_reset_ifused,505,5941 -fused_write32s_reset_ifused,506,5943 -fused_write32s_reset_ifused,507,5942 -fused_write32s_reset_ifused,508,5943 -fused_write32s_reset_ifused,509,5940 -fused_write32s_reset_ifused,510,5941 -fused_write32s_reset_ifused,511,5943 -fused_write32s_reset_ifused,512,5944 -fused_write32s_reset_ifused,513,5949 -fused_write32s_reset_ifused,514,5939 -fused_write32s_reset_ifused,515,5940 -fused_write32s_reset_ifused,516,5943 -fused_write32s_reset_ifused,517,5941 -fused_write32s_reset_ifused,518,5941 -fused_write32s_reset_ifused,519,5943 -fused_write32s_reset_ifused,520,5940 -fused_write32s_reset_ifused,521,5940 -fused_write32s_reset_ifused,522,5929 -fused_write32s_reset_ifused,523,5934 -fused_write32s_reset_ifused,524,5949 -fused_write32s_reset_ifused,525,5945 -fused_write32s_reset_ifused,526,5943 -fused_write32s_reset_ifused,527,5941 -fused_write32s_reset_ifused,528,5942 -fused_write32s_reset_ifused,529,5941 -fused_write32s_reset_ifused,530,5942 -fused_write32s_reset_ifused,531,5942 -fused_write32s_reset_ifused,532,5947 -fused_write32s_reset_ifused,533,5941 -fused_write32s_reset_ifused,534,5942 -fused_write32s_reset_ifused,535,5943 -fused_write32s_reset_ifused,536,5942 -fused_write32s_reset_ifused,537,5942 -fused_write32s_reset_ifused,538,5942 -fused_write32s_reset_ifused,539,5941 -fused_write32s_reset_ifused,540,5944 -fused_write32s_reset_ifused,541,5940 -fused_write32s_reset_ifused,542,5940 -fused_write32s_reset_ifused,543,5943 -fused_write32s_reset_ifused,544,5941 -fused_write32s_reset_ifused,545,5948 -fused_write32s_reset_ifused,546,5943 -fused_write32s_reset_ifused,547,5939 -fused_write32s_reset_ifused,548,5942 -fused_write32s_reset_ifused,549,5941 -fused_write32s_reset_ifused,550,5940 -fused_write32s_reset_ifused,551,5941 -fused_write32s_reset_ifused,552,5946 -fused_write32s_reset_ifused,553,5942 -fused_write32s_reset_ifused,554,5941 -fused_write32s_reset_ifused,555,5947 -fused_write32s_reset_ifused,556,5942 -fused_write32s_reset_ifused,557,5949 -fused_write32s_reset_ifused,558,5941 -fused_write32s_reset_ifused,559,5945 -fused_write32s_reset_ifused,560,5945 -fused_write32s_reset_ifused,561,5940 -fused_write32s_reset_ifused,562,5942 -fused_write32s_reset_ifused,563,5940 -fused_write32s_reset_ifused,564,5942 -fused_write32s_reset_ifused,565,5943 -fused_write32s_reset_ifused,566,5941 -fused_write32s_reset_ifused,567,5947 -fused_write32s_reset_ifused,568,5941 -fused_write32s_reset_ifused,569,5941 -fused_write32s_reset_ifused,570,5939 -fused_write32s_reset_ifused,571,5939 -fused_write32s_reset_ifused,572,5941 -fused_write32s_reset_ifused,573,5941 -fused_write32s_reset_ifused,574,5944 -fused_write32s_reset_ifused,575,5944 -fused_write32s_reset_ifused,576,5943 -fused_write32s_reset_ifused,577,5941 -fused_write32s_reset_ifused,578,5943 -fused_write32s_reset_ifused,579,5942 -fused_write32s_reset_ifused,580,5946 -fused_write32s_reset_ifused,581,5941 -fused_write32s_reset_ifused,582,5939 -fused_write32s_reset_ifused,583,5943 -fused_write32s_reset_ifused,584,5942 -fused_write32s_reset_ifused,585,5943 -fused_write32s_reset_ifused,586,5941 -fused_write32s_reset_ifused,587,5941 -fused_write32s_reset_ifused,588,5928 -fused_write32s_reset_ifused,589,5931 -fused_write32s_reset_ifused,590,5945 -fused_write32s_reset_ifused,591,5943 -fused_write32s_reset_ifused,592,5945 -fused_write32s_reset_ifused,593,5942 -fused_write32s_reset_ifused,594,5941 -fused_write32s_reset_ifused,595,5943 -fused_write32s_reset_ifused,596,5939 -fused_write32s_reset_ifused,597,5948 -fused_write32s_reset_ifused,598,5940 -fused_write32s_reset_ifused,599,5925 -fused_write32s_reset_ifused,600,5950 -fused_write32s_reset_ifused,601,5944 -fused_write32s_reset_ifused,602,5941 -fused_write32s_reset_ifused,603,5941 -fused_write32s_reset_ifused,604,5941 -fused_write32s_reset_ifused,605,5941 -fused_write32s_reset_ifused,606,5945 -fused_write32s_reset_ifused,607,5943 -fused_write32s_reset_ifused,608,5940 -fused_write32s_reset_ifused,609,5942 -fused_write32s_reset_ifused,610,5941 -fused_write32s_reset_ifused,611,5939 -fused_write32s_reset_ifused,612,5944 -fused_write32s_reset_ifused,613,5946 -fused_write32s_reset_ifused,614,5944 -fused_write32s_reset_ifused,615,5942 -fused_write32s_reset_ifused,616,5937 -fused_write32s_reset_ifused,617,5927 -fused_write32s_reset_ifused,618,5930 -fused_write32s_reset_ifused,619,5944 -fused_write32s_reset_ifused,620,5944 -fused_write32s_reset_ifused,621,5940 -fused_write32s_reset_ifused,622,5941 -fused_write32s_reset_ifused,623,5942 -fused_write32s_reset_ifused,624,5944 -fused_write32s_reset_ifused,625,5942 -fused_write32s_reset_ifused,626,5941 -fused_write32s_reset_ifused,627,5950 -fused_write32s_reset_ifused,628,5944 -fused_write32s_reset_ifused,629,5941 -fused_write32s_reset_ifused,630,5942 -fused_write32s_reset_ifused,631,5951 -fused_write32s_reset_ifused,632,5940 -fused_write32s_reset_ifused,633,5943 -fused_write32s_reset_ifused,634,5939 -fused_write32s_reset_ifused,635,5939 -fused_write32s_reset_ifused,636,5947 -fused_write32s_reset_ifused,637,5943 -fused_write32s_reset_ifused,638,5953 -fused_write32s_reset_ifused,639,5941 -fused_write32s_reset_ifused,640,5942 -fused_write32s_reset_ifused,641,5945 -fused_write32s_reset_ifused,642,5944 -fused_write32s_reset_ifused,643,5944 -fused_write32s_reset_ifused,644,5942 -fused_write32s_reset_ifused,645,5951 -fused_write32s_reset_ifused,646,5940 -fused_write32s_reset_ifused,647,5951 -fused_write32s_reset_ifused,648,5941 -fused_write32s_reset_ifused,649,5942 -fused_write32s_reset_ifused,650,5943 -fused_write32s_reset_ifused,651,5942 -fused_write32s_reset_ifused,652,5939 -fused_write32s_reset_ifused,653,5939 -fused_write32s_reset_ifused,654,5941 -fused_write32s_reset_ifused,655,5943 -fused_write32s_reset_ifused,656,5950 -fused_write32s_reset_ifused,657,5940 -fused_write32s_reset_ifused,658,5933 -fused_write32s_reset_ifused,659,5927 -fused_write32s_reset_ifused,660,5942 -fused_write32s_reset_ifused,661,5946 -fused_write32s_reset_ifused,662,5939 -fused_write32s_reset_ifused,663,5943 -fused_write32s_reset_ifused,664,5941 -fused_write32s_reset_ifused,665,5941 -fused_write32s_reset_ifused,666,5941 -fused_write32s_reset_ifused,667,5949 -fused_write32s_reset_ifused,668,5946 -fused_write32s_reset_ifused,669,5941 -fused_write32s_reset_ifused,670,5938 -fused_write32s_reset_ifused,671,5942 -fused_write32s_reset_ifused,672,5940 -fused_write32s_reset_ifused,673,5941 -fused_write32s_reset_ifused,674,5939 -fused_write32s_reset_ifused,675,5941 -fused_write32s_reset_ifused,676,5941 -fused_write32s_reset_ifused,677,5948 -fused_write32s_reset_ifused,678,5941 -fused_write32s_reset_ifused,679,5950 -fused_write32s_reset_ifused,680,5943 -fused_write32s_reset_ifused,681,5952 -fused_write32s_reset_ifused,682,5945 -fused_write32s_reset_ifused,683,5950 -fused_write32s_reset_ifused,684,5942 -fused_write32s_reset_ifused,685,5943 -fused_write32s_reset_ifused,686,5942 -fused_write32s_reset_ifused,687,5941 -fused_write32s_reset_ifused,688,5941 -fused_write32s_reset_ifused,689,5949 -fused_write32s_reset_ifused,690,5943 -fused_write32s_reset_ifused,691,5944 -fused_write32s_reset_ifused,692,5947 -fused_write32s_reset_ifused,693,5944 -fused_write32s_reset_ifused,694,5948 -fused_write32s_reset_ifused,695,5944 -fused_write32s_reset_ifused,696,5940 -fused_write32s_reset_ifused,697,5942 -fused_write32s_reset_ifused,698,5940 -fused_write32s_reset_ifused,699,5932 -fused_write32s_reset_ifused,700,5926 -fused_write32s_reset_ifused,701,5930 -fused_write32s_reset_ifused,702,5932 -fused_write32s_reset_ifused,703,5920 -fused_write32s_reset_ifused,704,5917 -fused_write32s_reset_ifused,705,5937 -fused_write32s_reset_ifused,706,5941 -fused_write32s_reset_ifused,707,5939 -fused_write32s_reset_ifused,708,5941 -fused_write32s_reset_ifused,709,5944 -fused_write32s_reset_ifused,710,5941 -fused_write32s_reset_ifused,711,5946 -fused_write32s_reset_ifused,712,5940 -fused_write32s_reset_ifused,713,5935 -fused_write32s_reset_ifused,714,5938 -fused_write32s_reset_ifused,715,5946 -fused_write32s_reset_ifused,716,5942 -fused_write32s_reset_ifused,717,5940 -fused_write32s_reset_ifused,718,5943 -fused_write32s_reset_ifused,719,5944 -fused_write32s_reset_ifused,720,5945 -fused_write32s_reset_ifused,721,5951 -fused_write32s_reset_ifused,722,5942 -fused_write32s_reset_ifused,723,5945 -fused_write32s_reset_ifused,724,5941 -fused_write32s_reset_ifused,725,5941 -fused_write32s_reset_ifused,726,5942 -fused_write32s_reset_ifused,727,5944 -fused_write32s_reset_ifused,728,5942 -fused_write32s_reset_ifused,729,5943 -fused_write32s_reset_ifused,730,5940 -fused_write32s_reset_ifused,731,5940 -fused_write32s_reset_ifused,732,5942 -fused_write32s_reset_ifused,733,5943 -fused_write32s_reset_ifused,734,5947 -fused_write32s_reset_ifused,735,5940 -fused_write32s_reset_ifused,736,5943 -fused_write32s_reset_ifused,737,5943 -fused_write32s_reset_ifused,738,5941 -fused_write32s_reset_ifused,739,5943 -fused_write32s_reset_ifused,740,5947 -fused_write32s_reset_ifused,741,5947 -fused_write32s_reset_ifused,742,5944 -fused_write32s_reset_ifused,743,5943 -fused_write32s_reset_ifused,744,5930 -fused_write32s_reset_ifused,745,5930 -fused_write32s_reset_ifused,746,5947 -fused_write32s_reset_ifused,747,5941 -fused_write32s_reset_ifused,748,5939 -fused_write32s_reset_ifused,749,5938 -fused_write32s_reset_ifused,750,5940 -fused_write32s_reset_ifused,751,5942 -fused_write32s_reset_ifused,752,5941 -fused_write32s_reset_ifused,753,5944 -fused_write32s_reset_ifused,754,5943 -fused_write32s_reset_ifused,755,5943 -fused_write32s_reset_ifused,756,5944 -fused_write32s_reset_ifused,757,5945 -fused_write32s_reset_ifused,758,5938 -fused_write32s_reset_ifused,759,5944 -fused_write32s_reset_ifused,760,5940 -fused_write32s_reset_ifused,761,5942 -fused_write32s_reset_ifused,762,5945 -fused_write32s_reset_ifused,763,5938 -fused_write32s_reset_ifused,764,5941 -fused_write32s_reset_ifused,765,5942 -fused_write32s_reset_ifused,766,5942 -fused_write32s_reset_ifused,767,5940 -fused_write32s_reset_ifused,768,5941 -fused_write32s_reset_ifused,769,5941 -fused_write32s_reset_ifused,770,5939 -fused_write32s_reset_ifused,771,5943 -fused_write32s_reset_ifused,772,5942 -fused_write32s_reset_ifused,773,5949 -fused_write32s_reset_ifused,774,5941 -fused_write32s_reset_ifused,775,5941 -fused_write32s_reset_ifused,776,5940 -fused_write32s_reset_ifused,777,5943 -fused_write32s_reset_ifused,778,5940 -fused_write32s_reset_ifused,779,5941 -fused_write32s_reset_ifused,780,5944 -fused_write32s_reset_ifused,781,5940 -fused_write32s_reset_ifused,782,5942 -fused_write32s_reset_ifused,783,5946 -fused_write32s_reset_ifused,784,5946 -fused_write32s_reset_ifused,785,5949 -fused_write32s_reset_ifused,786,5944 -fused_write32s_reset_ifused,787,5926 -fused_write32s_reset_ifused,788,5953 -fused_write32s_reset_ifused,789,5958 -fused_write32s_reset_ifused,790,5956 -fused_write32s_reset_ifused,791,5946 -fused_write32s_reset_ifused,792,5943 -fused_write32s_reset_ifused,793,5946 -fused_write32s_reset_ifused,794,5945 -fused_write32s_reset_ifused,795,5941 -fused_write32s_reset_ifused,796,5943 -fused_write32s_reset_ifused,797,5947 -fused_write32s_reset_ifused,798,5944 -fused_write32s_reset_ifused,799,5942 -fused_write32s_reset_ifused,800,5943 -fused_write32s_reset_ifused,801,5943 -fused_write32s_reset_ifused,802,5943 -fused_write32s_reset_ifused,803,5943 -fused_write32s_reset_ifused,804,5951 -fused_write32s_reset_ifused,805,5950 -fused_write32s_reset_ifused,806,5945 -fused_write32s_reset_ifused,807,5945 -fused_write32s_reset_ifused,808,5941 -fused_write32s_reset_ifused,809,5947 -fused_write32s_reset_ifused,810,5946 -fused_write32s_reset_ifused,811,5943 -fused_write32s_reset_ifused,812,5943 -fused_write32s_reset_ifused,813,5945 -fused_write32s_reset_ifused,814,5944 -fused_write32s_reset_ifused,815,5942 -fused_write32s_reset_ifused,816,5945 -fused_write32s_reset_ifused,817,5948 -fused_write32s_reset_ifused,818,5946 -fused_write32s_reset_ifused,819,5944 -fused_write32s_reset_ifused,820,5945 -fused_write32s_reset_ifused,821,5943 -fused_write32s_reset_ifused,822,5945 -fused_write32s_reset_ifused,823,5943 -fused_write32s_reset_ifused,824,5942 -fused_write32s_reset_ifused,825,5948 -fused_write32s_reset_ifused,826,5946 -fused_write32s_reset_ifused,827,5945 -fused_write32s_reset_ifused,828,5953 -fused_write32s_reset_ifused,829,5951 -fused_write32s_reset_ifused,830,5943 -fused_write32s_reset_ifused,831,5945 -fused_write32s_reset_ifused,832,5946 -fused_write32s_reset_ifused,833,5943 -fused_write32s_reset_ifused,834,5943 -fused_write32s_reset_ifused,835,5943 -fused_write32s_reset_ifused,836,5945 -fused_write32s_reset_ifused,837,5948 -fused_write32s_reset_ifused,838,5948 -fused_write32s_reset_ifused,839,5949 -fused_write32s_reset_ifused,840,5948 -fused_write32s_reset_ifused,841,5958 -fused_write32s_reset_ifused,842,5943 -fused_write32s_reset_ifused,843,5946 -fused_write32s_reset_ifused,844,5944 -fused_write32s_reset_ifused,845,5951 -fused_write32s_reset_ifused,846,5946 -fused_write32s_reset_ifused,847,5946 -fused_write32s_reset_ifused,848,5943 -fused_write32s_reset_ifused,849,5952 -fused_write32s_reset_ifused,850,5949 -fused_write32s_reset_ifused,851,5944 -fused_write32s_reset_ifused,852,5943 -fused_write32s_reset_ifused,853,5944 -fused_write32s_reset_ifused,854,5943 -fused_write32s_reset_ifused,855,5945 -fused_write32s_reset_ifused,856,5943 -fused_write32s_reset_ifused,857,5949 -fused_write32s_reset_ifused,858,5944 -fused_write32s_reset_ifused,859,5946 -fused_write32s_reset_ifused,860,5942 -fused_write32s_reset_ifused,861,5944 -fused_write32s_reset_ifused,862,5947 -fused_write32s_reset_ifused,863,5944 -fused_write32s_reset_ifused,864,5943 -fused_write32s_reset_ifused,865,5943 -fused_write32s_reset_ifused,866,5943 -fused_write32s_reset_ifused,867,5948 -fused_write32s_reset_ifused,868,5948 -fused_write32s_reset_ifused,869,5941 -fused_write32s_reset_ifused,870,5949 -fused_write32s_reset_ifused,871,5949 -fused_write32s_reset_ifused,872,5932 -fused_write32s_reset_ifused,873,5926 -fused_write32s_reset_ifused,874,5925 -fused_write32s_reset_ifused,875,5916 -fused_write32s_reset_ifused,876,5919 -fused_write32s_reset_ifused,877,5919 -fused_write32s_reset_ifused,878,5925 -fused_write32s_reset_ifused,879,5941 -fused_write32s_reset_ifused,880,5948 -fused_write32s_reset_ifused,881,5945 -fused_write32s_reset_ifused,882,5943 -fused_write32s_reset_ifused,883,5943 -fused_write32s_reset_ifused,884,5945 -fused_write32s_reset_ifused,885,5947 -fused_write32s_reset_ifused,886,5948 -fused_write32s_reset_ifused,887,5943 -fused_write32s_reset_ifused,888,5944 -fused_write32s_reset_ifused,889,5944 -fused_write32s_reset_ifused,890,5946 -fused_write32s_reset_ifused,891,5943 -fused_write32s_reset_ifused,892,5943 -fused_write32s_reset_ifused,893,5945 -fused_write32s_reset_ifused,894,5946 -fused_write32s_reset_ifused,895,5950 -fused_write32s_reset_ifused,896,5947 -fused_write32s_reset_ifused,897,5949 -fused_write32s_reset_ifused,898,5945 -fused_write32s_reset_ifused,899,5945 -fused_write32s_reset_ifused,900,5945 -fused_write32s_reset_ifused,901,5946 -fused_write32s_reset_ifused,902,5948 -fused_write32s_reset_ifused,903,5949 -fused_write32s_reset_ifused,904,5942 -fused_write32s_reset_ifused,905,5946 -fused_write32s_reset_ifused,906,5943 -fused_write32s_reset_ifused,907,5945 -fused_write32s_reset_ifused,908,5945 -fused_write32s_reset_ifused,909,5944 -fused_write32s_reset_ifused,910,5946 -fused_write32s_reset_ifused,911,5943 -fused_write32s_reset_ifused,912,5941 -fused_write32s_reset_ifused,913,5942 -fused_write32s_reset_ifused,914,5943 -fused_write32s_reset_ifused,915,5943 -fused_write32s_reset_ifused,916,5946 -fused_write32s_reset_ifused,917,5941 -fused_write32s_reset_ifused,918,5947 -fused_write32s_reset_ifused,919,5947 -fused_write32s_reset_ifused,920,5945 -fused_write32s_reset_ifused,921,5941 -fused_write32s_reset_ifused,922,5954 -fused_write32s_reset_ifused,923,5945 -fused_write32s_reset_ifused,924,5942 -fused_write32s_reset_ifused,925,5946 -fused_write32s_reset_ifused,926,5952 -fused_write32s_reset_ifused,927,5942 -fused_write32s_reset_ifused,928,5943 -fused_write32s_reset_ifused,929,5943 -fused_write32s_reset_ifused,930,5943 -fused_write32s_reset_ifused,931,5945 -fused_write32s_reset_ifused,932,5944 -fused_write32s_reset_ifused,933,5946 -fused_write32s_reset_ifused,934,5947 -fused_write32s_reset_ifused,935,5943 -fused_write32s_reset_ifused,936,5942 -fused_write32s_reset_ifused,937,5945 -fused_write32s_reset_ifused,938,5942 -fused_write32s_reset_ifused,939,5948 -fused_write32s_reset_ifused,940,5942 -fused_write32s_reset_ifused,941,5946 -fused_write32s_reset_ifused,942,5952 -fused_write32s_reset_ifused,943,5945 -fused_write32s_reset_ifused,944,5943 -fused_write32s_reset_ifused,945,5943 -fused_write32s_reset_ifused,946,5945 -fused_write32s_reset_ifused,947,5944 -fused_write32s_reset_ifused,948,5945 -fused_write32s_reset_ifused,949,5943 -fused_write32s_reset_ifused,950,5942 -fused_write32s_reset_ifused,951,5943 -fused_write32s_reset_ifused,952,5942 -fused_write32s_reset_ifused,953,5947 -fused_write32s_reset_ifused,954,5949 -fused_write32s_reset_ifused,955,5945 -fused_write32s_reset_ifused,956,5944 -fused_write32s_reset_ifused,957,5948 -fused_write32s_reset_ifused,958,5950 -fused_write32s_reset_ifused,959,5946 -fused_write32s_reset_ifused,960,5947 -fused_write32s_reset_ifused,961,5943 -fused_write32s_reset_ifused,962,5943 -fused_write32s_reset_ifused,963,5942 -fused_write32s_reset_ifused,964,5946 -fused_write32s_reset_ifused,965,5944 -fused_write32s_reset_ifused,966,5943 -fused_write32s_reset_ifused,967,5943 -fused_write32s_reset_ifused,968,5944 -fused_write32s_reset_ifused,969,5948 -fused_write32s_reset_ifused,970,5944 -fused_write32s_reset_ifused,971,5942 -fused_write32s_reset_ifused,972,5946 -fused_write32s_reset_ifused,973,5953 -fused_write32s_reset_ifused,974,5945 -fused_write32s_reset_ifused,975,5950 -fused_write32s_reset_ifused,976,5943 -fused_write32s_reset_ifused,977,5943 -fused_write32s_reset_ifused,978,5945 -fused_write32s_reset_ifused,979,5949 -fused_write32s_reset_ifused,980,5944 -fused_write32s_reset_ifused,981,5945 -fused_write32s_reset_ifused,982,5944 -fused_write32s_reset_ifused,983,5946 -fused_write32s_reset_ifused,984,5945 -fused_write32s_reset_ifused,985,5944 -fused_write32s_reset_ifused,986,5945 -fused_write32s_reset_ifused,987,5942 -fused_write32s_reset_ifused,988,5946 -fused_write32s_reset_ifused,989,5945 -fused_write32s_reset_ifused,990,5940 -fused_write32s_reset_ifused,991,5945 -fused_write32s_reset_ifused,992,5944 -fused_write32s_reset_ifused,993,5947 -fused_write32s_reset_ifused,994,5943 -fused_write32s_reset_ifused,995,5946 -fused_write32s_reset_ifused,996,5946 -fused_write32s_reset_ifused,997,5944 -fused_write32s_reset_ifused,998,5943 -fused_write32s_reset_ifused,999,5948 diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/combine_mlir.py b/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/combine_mlir.py index 1b77f0fd43c..32574f8d684 100644 --- a/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/combine_mlir.py +++ b/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/combine_mlir.py @@ -86,7 +86,7 @@ def create_main_device(buffer_offsets): lines = [] lines.append(" aie.device(npu2) @main {") lines.append("") - lines.append(f" aiex.runtime_sequence @sequence(%arg : memref<{buffer_offsets['total']}xbf16>) {{") + lines.append(f" aie.runtime_sequence @sequence(%arg : memref<{buffer_offsets['total']}xbf16>) {{") lines.append("") lines.append(" %c3_i32 = arith.constant 3 : i32") lines.append("") diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/combine_mlir.py b/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/combine_mlir.py index 1b77f0fd43c..32574f8d684 100644 --- a/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/combine_mlir.py +++ b/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/combine_mlir.py @@ -86,7 +86,7 @@ def create_main_device(buffer_offsets): lines = [] lines.append(" aie.device(npu2) @main {") lines.append("") - lines.append(f" aiex.runtime_sequence @sequence(%arg : memref<{buffer_offsets['total']}xbf16>) {{") + lines.append(f" aie.runtime_sequence @sequence(%arg : memref<{buffer_offsets['total']}xbf16>) {{") lines.append("") lines.append(" %c3_i32 = arith.constant 3 : i32") lines.append("") From 46754f406af75d415c5ab24a30091d5e0abefd7b Mon Sep 17 00:00:00 2001 From: andrej Date: Thu, 18 Dec 2025 09:38:24 -0700 Subject: [PATCH 29/40] update to use memref.subviews, remove arg_slice op --- include/aie/Dialect/AIEX/AIEUtils.h | 20 +++ include/aie/Dialect/AIEX/IR/AIEX.td | 56 ------- lib/Dialect/AIEX/IR/AIEXDialect.cpp | 147 +----------------- .../AIEX/Transforms/AIEDMATasksToNPU.cpp | 40 ++--- lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp | 22 +-- .../AIEMaterializeRuntimeSequences.cpp | 56 +++++-- lib/Dialect/AIEX/Utils/AIEUtils.cpp | 92 +++++++++++ 7 files changed, 188 insertions(+), 245 deletions(-) diff --git a/include/aie/Dialect/AIEX/AIEUtils.h b/include/aie/Dialect/AIEX/AIEUtils.h index 35e96e9a401..9e0e6799305 100644 --- a/include/aie/Dialect/AIEX/AIEUtils.h +++ b/include/aie/Dialect/AIEX/AIEUtils.h @@ -10,6 +10,7 @@ #include "aie/Dialect/AIE/IR/AIEDialect.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" +#include "mlir/IR/Value.h" using namespace mlir; @@ -20,5 +21,24 @@ memref::GlobalOp getOrCreateDataMemref(OpBuilder &builder, AIE::DeviceOp dev, mlir::Location loc, ArrayRef words); +// Result of tracing through subview/cast operations to a block argument +struct SubviewTraceResult { + BlockArgument rootArg; + int64_t offsetInBytes; +}; + +// Trace through memref.subview, memref.cast, and memref.reinterpret_cast +// operations to find the root block argument. +// +// Returns the root block argument and cumulative byte offset, or std::nullopt +// if the chain doesn't lead to a block argument or contains unsupported ops. +// +// This function supports: +// - Arbitrary chains of memref.subview, memref.cast, memref.reinterpret_cast +// - Only static offsets, sizes, and strides +// - Only rank-1 subviews +// - Only stride of 1 (contiguous memory) +std::optional traceSubviewToBlockArgument(Value value); + } } // namespace xilinx \ No newline at end of file diff --git a/include/aie/Dialect/AIEX/IR/AIEX.td b/include/aie/Dialect/AIEX/IR/AIEX.td index d978887b88a..46f34a80cb4 100644 --- a/include/aie/Dialect/AIEX/IR/AIEX.td +++ b/include/aie/Dialect/AIEX/IR/AIEX.td @@ -579,62 +579,6 @@ def AIE_RunOp: AIEX_Op<"run", [HasParent<"ConfigureOp">]> { }]; } -def AIE_ArgSliceOp: AIEX_Op<"arg_slice", [ - Pure, - ParentOneOf<["AIE::RuntimeSequenceOp", "ConfigureOp"]> -]>, Results<(outs AnyMemRef:$result)> { - let summary = "Create a slice of a runtime sequence argument with an offset"; - let description = [{ - The `arg_slice` operation creates a reference to a slice of a runtime sequence argument, - or another `arg_slice`, with a specified offset and length. - - This operation is used to handle cases where runtime sequences are called from other - runtime sequences, and their argument indices need to be tracked back to the original - firmware call argument indices. It also allows adding offsets to these arguments. - - The offset and length are specified as multiples of the input memref's element type. - - The operation verifies that: - - The slice (offset + length) does not exceed the size of the input memref - - The result memref has the same total number of bytes as the slice length - - Element types can differ between input and result as long as the byte sizes match - - Both input and result memrefs have static shapes - - Example: - ```mlir - // Create a slice from element 4 to 8 (bytes 16-32) of a 4x4xi32 memref - // Results in a 2x2xi32 memref (4 elements * 4 bytes = 16 bytes) - %slice = aiex.arg_slice %input_arg[4:8] : memref<4x4xi32> -> memref<2x2xi32> - - // Chain slices together - offsets are relative to the immediate input - %slice2 = aiex.arg_slice %slice[0:2] : memref<2x2xi32> -> memref<2xi32> - ``` - }]; - - let arguments = ( - ins AnyMemRef:$input, - I64Attr:$offset, - I64Attr:$length - ); - - let results = (outs AnyMemRef:$result); - - let assemblyFormat = [{ - $input custom($offset, $length) attr-dict `:` type($input) `->` type($result) - }]; - - let extraClassDeclaration = [{ - // Get the end offset in bytes (converts element offset to bytes) - int64_t getEndOffset(); - - // Trace back through the chain of arg_slices to find the original argument - // and compute the cumulative offset in bytes - std::pair getRootArgumentAndOffset(); - }]; - - let hasVerifier = 1; -} - def AIE_NpuDmaMemcpyNdOp: AIEX_Op<"npu.dma_memcpy_nd", [ AttrSizedOperandSegments, MyOffsetSizeAndStrideOpInterface diff --git a/lib/Dialect/AIEX/IR/AIEXDialect.cpp b/lib/Dialect/AIEX/IR/AIEXDialect.cpp index fd779b4a062..78e7e7b4647 100644 --- a/lib/Dialect/AIEX/IR/AIEXDialect.cpp +++ b/lib/Dialect/AIEX/IR/AIEXDialect.cpp @@ -50,46 +50,7 @@ void AIEXDialect::initialize() { } // namespace xilinx::AIEX #define GET_OP_CLASSES -#include "aie/Dialect/AIEX/IR/AIEX.cpp.inc" - -// Custom parser for ArgSliceOp range syntax: [offset:end] -// Offsets are in element counts (multiples of input element type) -ParseResult xilinx::AIEX::parseArgSliceRange(AsmParser &parser, - IntegerAttr &offset, - IntegerAttr &length) { - int64_t offsetValue, endValue; - - if (parser.parseLSquare() || - parser.parseInteger(offsetValue) || - parser.parseColon() || - parser.parseInteger(endValue) || - parser.parseRSquare()) - return failure(); - - if (offsetValue < 0) { - return parser.emitError(parser.getCurrentLocation(), - "offset must be non-negative"); - } - - if (endValue <= offsetValue) { - return parser.emitError(parser.getCurrentLocation(), - "end must be greater than offset"); - } - - int64_t lengthValue = endValue - offsetValue; - offset = parser.getBuilder().getI64IntegerAttr(offsetValue); - length = parser.getBuilder().getI64IntegerAttr(lengthValue); - return success(); -} - -// Custom printer for ArgSliceOp range syntax: [offset:end] -void xilinx::AIEX::printArgSliceRange(AsmPrinter &printer, Operation *op, - IntegerAttr offset, IntegerAttr length) { - int64_t endValue = offset.getInt() + length.getInt(); - printer << "[" << offset.getInt() << ":" << endValue << "]"; -} - -/* Return the correct values to write to the hardware registers to configure +#include "aie/Dialect/AIEX/IR/AIEX.cpp.inc"/* Return the correct values to write to the hardware registers to configure strides and wraps given the input user-facing strides and wraps. In the IR, we express strides in units of element data type, but the hardware @@ -1022,109 +983,3 @@ LogicalResult AIEX::RunOp::verify() { } return failure(); } - -//===----------------------------------------------------------------------===// -// ArgSliceOp -//===----------------------------------------------------------------------===// - -int64_t AIEX::ArgSliceOp::getEndOffset() { - // Convert element offset to bytes - auto inputType = cast(getInput().getType()); - unsigned elemSizeInBits = inputType.getElementType().getIntOrFloatBitWidth(); - int64_t elemSizeInBytes = elemSizeInBits / 8; - - int64_t endOffsetInElements = getOffset() + getLength(); - return endOffsetInElements * elemSizeInBytes; -} - -std::pair AIEX::ArgSliceOp::getRootArgumentAndOffset() { - mlir::Value current = getInput(); - int64_t cumulativeOffsetInBytes = 0; - - auto currentInputType = cast(current.getType()); - unsigned elemSizeInBytes = currentInputType.getElementType().getIntOrFloatBitWidth() / 8; - cumulativeOffsetInBytes = getOffset() * elemSizeInBytes; - - // Trace back through the chain of arg_slices - while (auto parentSlice = current.getDefiningOp()) { - auto parentInputType = cast(parentSlice.getInput().getType()); - unsigned parentElemSizeInBytes = parentInputType.getElementType().getIntOrFloatBitWidth() / 8; - cumulativeOffsetInBytes += parentSlice.getOffset() * parentElemSizeInBytes; - current = parentSlice.getInput(); - } - - return {current, cumulativeOffsetInBytes}; -} - -LogicalResult AIEX::ArgSliceOp::verify() { - if (getLength() <= 0) { - return emitOpError("length must be positive, got ") << getLength(); - } - - // Verify that the input is either a block argument or another arg_slice - mlir::Value input = getInput(); - if (!isa(input) && - !input.getDefiningOp()) { - return emitOpError( - "input must be either a runtime sequence argument or another arg_slice"); - } - - // If input is a block argument, verify it belongs to a RuntimeSequenceOp - if (auto blockArg = dyn_cast(input)) { - auto *parentOp = blockArg.getOwner()->getParentOp(); - if (!isa(parentOp)) { - return emitOpError( - "input block argument must belong to a RuntimeSequenceOp"); - } - } - - // Verify memref constraints - auto inputType = dyn_cast(input.getType()); - auto resultType = dyn_cast(getResult().getType()); - - if (!inputType || !resultType) { - return emitOpError("input and result must be memref types"); - } - - // Calculate sizes - auto inputElemType = inputType.getElementType(); - auto resultElemType = resultType.getElementType(); - - int64_t inputElemSizeInBytes = inputElemType.getIntOrFloatBitWidth() / 8; - int64_t resultElemSizeInBytes = resultElemType.getIntOrFloatBitWidth() / 8; - - // Calculate total sizes - if (!inputType.hasStaticShape()) { - return emitOpError("input memref must have static shape"); - } - if (!resultType.hasStaticShape()) { - return emitOpError("result memref must have static shape"); - } - - int64_t inputNumElements = inputType.getNumElements(); - int64_t resultNumElements = resultType.getNumElements(); - - int64_t resultSizeInBytes = resultNumElements * resultElemSizeInBytes; - - // Note: offset and length are stored as element counts relative to input element type - - // Verify that slice does not exceed input bounds (in elements) - int64_t endOffset = getOffset() + getLength(); - if (endOffset > inputNumElements) { - return emitOpError("slice end (offset + length = ") - << endOffset << " elements) exceeds input memref size (" - << inputNumElements << " elements)"; - } - - // Verify that result size in bytes matches the slice length in bytes - // length is in input elements, so convert to bytes - int64_t sliceSizeInBytes = getLength() * inputElemSizeInBytes; - if (resultSizeInBytes != sliceSizeInBytes) { - return emitOpError("result memref size (") - << resultSizeInBytes << " bytes) must match slice length (" - << sliceSizeInBytes << " bytes = " << getLength() - << " elements * " << inputElemSizeInBytes << " bytes/element)"; - } - - return success(); -} diff --git a/lib/Dialect/AIEX/Transforms/AIEDMATasksToNPU.cpp b/lib/Dialect/AIEX/Transforms/AIEDMATasksToNPU.cpp index 18941b854b6..58b0c03e971 100644 --- a/lib/Dialect/AIEX/Transforms/AIEDMATasksToNPU.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEDMATasksToNPU.cpp @@ -14,9 +14,11 @@ #include "aie/Dialect/AIE/IR/AIEDialect.h" #include "aie/Dialect/AIEX/IR/AIEXDialect.h" #include "aie/Dialect/AIEX/Transforms/AIEXPasses.h" +#include "aie/Dialect/AIEX/AIEUtils.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" +#include "mlir/Dialect/MemRef/IR/MemRef.h" #include "llvm/ADT/TypeSwitch.h" using namespace mlir; @@ -185,34 +187,24 @@ struct AIEDMATasksToNPUPass : AIEDMATasksToNPUBase { target_model.getDmaBdAddress(tile.getCol(), tile.getRow(), bd_id) + target_model.getDmaBdAddressOffset(tile.getCol(), tile.getRow()); - if (llvm::isa(buf) || - buf.getDefiningOp()) { + // Try to find the root block argument, either directly or through subviews/casts + mlir::BlockArgument buf_arg = nullptr; + int64_t offset = 0; + + if (auto directArg = llvm::dyn_cast(buf)) { + buf_arg = directArg; + offset = 0; + } else if (auto traceResult = traceSubviewToBlockArgument(buf)) { + buf_arg = traceResult->rootArg; + offset = traceResult->offsetInBytes; + } + + if (buf_arg) { if (!target_model.isShimNOCTile(tile.getCol(), tile.getRow())) { return bd_op->emitOpError("DDR memory (runtime input arguments) can " "only be referred to on shim tiles."); } - mlir::BlockArgument buf_arg = nullptr; - int64_t offset = 0; - if (mlir::BlockArgument the_buf_arg = - llvm::dyn_cast(buf)) { - buf_arg = the_buf_arg; - } else if (AIEX::ArgSliceOp arg_slice_op = buf.getDefiningOp()) { - // Trace back through arg_slice chain to find root argument and cumulative - // offset - auto [root_value, the_offset] = arg_slice_op.getRootArgumentAndOffset(); - if (mlir::BlockArgument the_buf_arg = - llvm::dyn_cast(root_value)) { - buf_arg = the_buf_arg; - offset = the_offset; - } else { - return bd_op->emitOpError( - "arg_slice chain must trace back to a block argument, but " - "found a value defined by ") - << root_value.getDefiningOp()->getName(); - } - } - unsigned arg_idx = buf_arg.getArgNumber(); offset += bd_op.getOffsetInBytes(); NpuAddressPatchOp::create(builder, bd_op.getLoc(), @@ -232,7 +224,7 @@ struct AIEDMATasksToNPUPass : AIEDMATasksToNPUBase { NpuWrite32Op::create(builder, bd_op.getLoc(), register_addr, buf_addr, nullptr, nullptr, nullptr); } else { - return bd_op->emitOpError("Buffer argument must be a constant aie.buffer, a runtime sequence input argument, or an arg_slice op."); + return bd_op->emitOpError("Buffer argument must be a constant aie.buffer, a runtime sequence input argument, or a memref.subview/memref.cast of a block argument."); } return success(); } diff --git a/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp b/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp index f6161d664b6..be12caa0a3b 100644 --- a/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp @@ -16,6 +16,7 @@ #include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" +#include "mlir/Dialect/MemRef/IR/MemRef.h" #include #include @@ -284,7 +285,7 @@ struct DmaToNpuPattern : OpConversionPattern { return failure(); } - // arg_idx and offset handling for memref or arg_slice + // arg_idx and offset handling for memref or memref.subview AIE::RuntimeSequenceOp seq_op = op->getParentOfType(); if (!seq_op) { @@ -293,16 +294,17 @@ struct DmaToNpuPattern : OpConversionPattern { return failure(); } - // Handle both direct block arguments and arg_slice operations + // Handle both direct block arguments and memref.subview operations mlir::Value rootMemref = memref; - int64_t argSliceOffset = 0; + int64_t subviewOffset = 0; - if (auto argSliceOp = memref.getDefiningOp()) { - // Trace back through arg_slice chain to find root argument and cumulative offset - auto [root, cumulativeOffset] = argSliceOp.getRootArgumentAndOffset(); - rootMemref = root; - argSliceOffset = cumulativeOffset; + // Trace through memref.subview and memref.cast chain to find root block argument + auto traceResult = traceSubviewToBlockArgument(memref); + if (!traceResult) { + return op->emitOpError("memref must be a block argument or subview/cast/reinterpret_cast of a block argument with static offsets, sizes, and strides"); } + rootMemref = traceResult->rootArg; + subviewOffset = traceResult->offsetInBytes; // Find the argument index of the root memref Block &entryBB = seq_op.getBody().front(); @@ -316,8 +318,8 @@ struct DmaToNpuPattern : OpConversionPattern { if (arg_idx < 0) return failure(); - // Add the arg_slice offset to the existing offset - offset += argSliceOffset; + // Add the subview offset to the existing offset + offset += subviewOffset; // bd_id bd_id = IntegerAttr::get(i32ty, op.getId()); diff --git a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp index cc5b176ce57..87bafc4a02d 100644 --- a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp @@ -11,6 +11,7 @@ #include "aie/Dialect/AIE/IR/AIEDialect.h" #include "aie/Dialect/AIEX/IR/AIEXDialect.h" #include "aie/Dialect/AIEX/Transforms/AIEXPasses.h" +#include "aie/Dialect/AIEX/AIEUtils.h" #include "aie/Targets/AIERT.h" #include "aie/Conversion/AIEToConfiguration/AIEToConfiguration.h" @@ -21,6 +22,7 @@ #include "mlir/Transforms/GreedyPatternRewriteDriver.h" #include "mlir/Transforms/WalkPatternRewriteDriver.h" #include "mlir/Dialect/Arith/IR/Arith.h" +#include "mlir/Dialect/MemRef/IR/MemRef.h" #define DEBUG_TYPE "aie-materialize-runtime-sequence" @@ -118,15 +120,32 @@ struct InsertLoadPdiForConfigurePattern : RewritePattern { // 2. Recursively walks through all operations in the operation's regions. // 3. For each nested operation, collects SSA values from its operands. // 4. Skips values that are already in argMap or defined within the operation. -void collectReferencedSSAValues(Operation *op, +// 5. For memref.subview operations, traces to the root block argument +static void collectReferencedSSAValues(Operation *op, const IRMapping &argMap, llvm::SetVector &referencedValues) { + auto processValue = [&](Value operand) { + if (argMap.contains(operand)) { + return; + } + + // If this is a subview, trace to the root block argument + if (auto traceResult = traceSubviewToBlockArgument(operand)) { + // Check if the root argument is already mapped + if (!argMap.contains(traceResult->rootArg)) { + referencedValues.insert(traceResult->rootArg); + } + return; + } + + // Not a subview chain leading to block arg, add as-is + referencedValues.insert(operand); + }; + // Collect SSA values from the operation's direct operands. for (Value operand : op->getOperands()) { - if (!argMap.contains(operand)) { - referencedValues.insert(operand); - } + processValue(operand); } // Recursively collect SSA values from nested operations in all regions. @@ -136,12 +155,14 @@ void collectReferencedSSAValues(Operation *op, if (argMap.contains(operand)) { return; } + + // Check if defined within the parent operation Operation *defOp = operand.getDefiningOp(); if (defOp && op->isProperAncestor(defOp)) { return; } - referencedValues.insert(operand); + processValue(operand); } }); } @@ -150,7 +171,7 @@ void collectReferencedSSAValues(Operation *op, // Copies SSA value definitions into the caller device. // Currently, only `aie.tile` operations are supported. // Updates argMap to map old values to new/existing values. -LogicalResult copyReferencedSSAValues( +static LogicalResult copyReferencedSSAValues( PatternRewriter &rewriter, const llvm::SetVector &referencedValues, AIE::DeviceOp callerDevice, @@ -236,7 +257,7 @@ LogicalResult copyReferencedSSAValues( // definition is in the "previouslyInlinedSymbolMap" map. While inlining, // symbols will be renamed to have a unique name. // Also copies in SSA values referenced by the inlined symbol definitions. -LogicalResult inlineReferencedSymbolDefinitions( +static LogicalResult inlineReferencedSymbolDefinitions( PatternRewriter &rewriter, Operation *op, Operation *lookupFrom, @@ -336,11 +357,28 @@ struct InlineRuntimeCallsPattern : RewritePattern { for (unsigned i = 0, n = calleeBody.getNumArguments(); i < n; i++) { BlockArgument arg = calleeBody.getArgument(i); Value val = values[i]; - if(arg.getType() != val.getType()) { + + // For memref types, check compatibility (same shape and element type) + // rather than exact type equality, to allow for strided memrefs with offsets + auto argType = dyn_cast(arg.getType()); + auto valType = dyn_cast(val.getType()); + + if (argType && valType) { + // Check that shapes and element types match + if (argType.getShape() != valType.getShape() || + argType.getElementType() != valType.getElementType()) { + return runOp.emitOpError() << "argument " << i << " type mismatch: " + << "expected " << argType + << " but got " << valType; + } + // Types are compatible even if layouts differ (e.g., strided with offset) + } else if (arg.getType() != val.getType()) { + // For non-memref types, require exact match return runOp.emitOpError() << "argument " << i << " type mismatch: " - << " expected " << arg.getType() + << "expected " << arg.getType() << " but got " << val.getType(); } + argMap.map(arg, val); } diff --git a/lib/Dialect/AIEX/Utils/AIEUtils.cpp b/lib/Dialect/AIEX/Utils/AIEUtils.cpp index 1a7b7638c9e..02483421299 100644 --- a/lib/Dialect/AIEX/Utils/AIEUtils.cpp +++ b/lib/Dialect/AIEX/Utils/AIEUtils.cpp @@ -15,6 +15,98 @@ using namespace xilinx; static unsigned cachedId = 0; +std::optional +AIEX::traceSubviewToBlockArgument(Value value) { + int64_t offsetInBytes = 0; + Value current = value; + + // Walk through the chain of operations until we reach a block argument + while (current) { + // Check if we've reached a block argument + if (auto blockArg = dyn_cast(current)) { + return SubviewTraceResult{blockArg, offsetInBytes}; + } + + Operation *defOp = current.getDefiningOp(); + if (!defOp) { + return std::nullopt; + } + + // Handle memref.cast (just pass through) + if (auto castOp = dyn_cast(defOp)) { + current = castOp.getSource(); + continue; + } + + // Handle memref.reinterpret_cast (validate and pass through) + if (auto reinterpretOp = dyn_cast(defOp)) { + auto sourceType = dyn_cast(reinterpretOp.getSource().getType()); + if (!sourceType) { + return std::nullopt; + } + + // Validate that source is contiguous (all strides must be 1) + if (auto strided = dyn_cast(sourceType.getLayout())) { + for (int64_t stride : strided.getStrides()) { + if (stride != 1) { + return std::nullopt; // Non-contiguous memory, cannot safely reinterpret + } + } + } + + current = reinterpretOp.getSource(); + continue; + } + + // Handle memref.subview (accumulate offset and validate) + if (auto subviewOp = dyn_cast(defOp)) { + // Verify static offsets, sizes, strides + if (!subviewOp.getStaticOffsets().empty() && + subviewOp.getStaticOffsets()[0] == ShapedType::kDynamic) { + return std::nullopt; + } + if (!subviewOp.getStaticSizes().empty() && + subviewOp.getStaticSizes()[0] == ShapedType::kDynamic) { + return std::nullopt; + } + if (!subviewOp.getStaticStrides().empty() && + subviewOp.getStaticStrides()[0] == ShapedType::kDynamic) { + return std::nullopt; + } + + // Only support rank-1 subviews + if (subviewOp.getSourceType().getRank() != 1 || + subviewOp.getType().getRank() != 1) { + return std::nullopt; + } + + // Only support stride of 1 (contiguous) + if (!subviewOp.getStaticStrides().empty() && + subviewOp.getStaticStrides()[0] != 1) { + return std::nullopt; + } + + // Calculate and accumulate offset in bytes + auto sourceType = subviewOp.getSourceType(); + unsigned elemSizeInBits = sourceType.getElementType().getIntOrFloatBitWidth(); + if (elemSizeInBits % 8 != 0) { + return std::nullopt; + } + unsigned elemSizeInBytes = elemSizeInBits / 8; + int64_t offsetInElements = subviewOp.getStaticOffsets()[0]; + offsetInBytes += offsetInElements * elemSizeInBytes; + + current = subviewOp.getSource(); + continue; + } + + // Encountered an unsupported operation + return std::nullopt; + } + + return std::nullopt; +} + memref::GlobalOp AIEX::getOrCreateDataMemref(OpBuilder &builder, AIE::DeviceOp dev, mlir::Location loc, From 94e547f6f05b92efa3aabac9a607fbc844c2d4e7 Mon Sep 17 00:00:00 2001 From: andrej Date: Thu, 18 Dec 2025 09:38:40 -0700 Subject: [PATCH 30/40] update tests to new memref.subview --- .../fused_transactions_loadpdi/combine_mlir.py | 9 ++++++--- .../fused_transactions_write32s/combine_mlir.py | 9 ++++++--- test/npu-xrt/reconfigure/aie.mlir | 12 ++++++++---- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/combine_mlir.py b/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/combine_mlir.py index 32574f8d684..24e4446f4f1 100644 --- a/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/combine_mlir.py +++ b/programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/combine_mlir.py @@ -111,14 +111,17 @@ def create_main_device(buffer_offsets): declared_buffers = set() for op_buffer_args, op_idx in device_operations: - # Generate arg_slice declarations for buffers not yet declared + # Generate memref.subview and memref.reinterpret_cast declarations for buffers not yet declared for buf_name in op_buffer_args: if buf_name not in declared_buffers: buf_info = buffer_offsets[buf_name] - lines.append(f" %{buf_name} = aiex.arg_slice %arg[{buf_info['start']}:{buf_info['end']}] : memref<{buffer_offsets['total']}xbf16> -> memref<{buf_info['size']}xbf16>") + # Generate subview with strided layout including offset + lines.append(f" %{buf_name}_subview = memref.subview %arg[{buf_info['start']}] [{buf_info['size']}] [1] : memref<{buffer_offsets['total']}xbf16> to memref<{buf_info['size']}xbf16, strided<[1], offset: {buf_info['start']}>>") + # Use reinterpret_cast to convert to plain memref + lines.append(f" %{buf_name} = memref.reinterpret_cast %{buf_name}_subview to offset: [0], sizes: [{buf_info['size']}], strides: [1] : memref<{buf_info['size']}xbf16, strided<[1], offset: {buf_info['start']}>> to memref<{buf_info['size']}xbf16>") declared_buffers.add(buf_name) - # Generate aiex.run call + # Generate aiex.run call with plain memref types buffer_args_str = ", ".join([f"%{b}" for b in op_buffer_args]) buffer_types_str = ", ".join([f"memref<{buffer_offsets[b]['size']}xbf16>" for b in op_buffer_args]) lines.append(f" aiex.run @sequence ({buffer_args_str}) : ({buffer_types_str})") diff --git a/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/combine_mlir.py b/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/combine_mlir.py index 32574f8d684..24e4446f4f1 100644 --- a/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/combine_mlir.py +++ b/programming_examples/reconfiguration/swiglu/fused_transactions_write32s/combine_mlir.py @@ -111,14 +111,17 @@ def create_main_device(buffer_offsets): declared_buffers = set() for op_buffer_args, op_idx in device_operations: - # Generate arg_slice declarations for buffers not yet declared + # Generate memref.subview and memref.reinterpret_cast declarations for buffers not yet declared for buf_name in op_buffer_args: if buf_name not in declared_buffers: buf_info = buffer_offsets[buf_name] - lines.append(f" %{buf_name} = aiex.arg_slice %arg[{buf_info['start']}:{buf_info['end']}] : memref<{buffer_offsets['total']}xbf16> -> memref<{buf_info['size']}xbf16>") + # Generate subview with strided layout including offset + lines.append(f" %{buf_name}_subview = memref.subview %arg[{buf_info['start']}] [{buf_info['size']}] [1] : memref<{buffer_offsets['total']}xbf16> to memref<{buf_info['size']}xbf16, strided<[1], offset: {buf_info['start']}>>") + # Use reinterpret_cast to convert to plain memref + lines.append(f" %{buf_name} = memref.reinterpret_cast %{buf_name}_subview to offset: [0], sizes: [{buf_info['size']}], strides: [1] : memref<{buf_info['size']}xbf16, strided<[1], offset: {buf_info['start']}>> to memref<{buf_info['size']}xbf16>") declared_buffers.add(buf_name) - # Generate aiex.run call + # Generate aiex.run call with plain memref types buffer_args_str = ", ".join([f"%{b}" for b in op_buffer_args]) buffer_types_str = ", ".join([f"memref<{buffer_offsets[b]['size']}xbf16>" for b in op_buffer_args]) lines.append(f" aiex.run @sequence ({buffer_args_str}) : ({buffer_types_str})") diff --git a/test/npu-xrt/reconfigure/aie.mlir b/test/npu-xrt/reconfigure/aie.mlir index e847303347e..2be159877c2 100644 --- a/test/npu-xrt/reconfigure/aie.mlir +++ b/test/npu-xrt/reconfigure/aie.mlir @@ -9,16 +9,20 @@ module { %c3_i32 = arith.constant 3 : i32 aiex.configure @add_two { - %arg1 = aiex.arg_slice %arg[0:4] : memref<512xi32> -> memref<4xi32> + %arg1_subview = memref.subview %arg[0] [4] [1] : memref<512xi32> to memref<4xi32, strided<[1]>> + %arg1 = memref.cast %arg1_subview : memref<4xi32, strided<[1]>> to memref<4xi32> aiex.run @sequence (%arg1) : (memref<4xi32>) - %arg2 = aiex.arg_slice %arg[12:16] : memref<512xi32> -> memref<4xi32> + %arg2_subview = memref.subview %arg[12] [4] [1] : memref<512xi32> to memref<4xi32, strided<[1]>> + %arg2 = memref.cast %arg2_subview : memref<4xi32, strided<[1]>> to memref<4xi32> aiex.run @sequence (%arg2) : (memref<4xi32>) } aiex.configure @add_three { - %arg1 = aiex.arg_slice %arg[4:8] : memref<512xi32> -> memref<4xi32> + %arg1_subview = memref.subview %arg[4] [4] [1] : memref<512xi32> to memref<4xi32, strided<[1]>> + %arg1 = memref.cast %arg1_subview : memref<4xi32, strided<[1]>> to memref<4xi32> aiex.run @sequence (%arg1) : (memref<4xi32>) - %arg2 = aiex.arg_slice %arg[12:16] : memref<512xi32> -> memref<4xi32> + %arg2_subview = memref.subview %arg[12] [4] [1] : memref<512xi32> to memref<4xi32, strided<[1]>> + %arg2 = memref.cast %arg2_subview : memref<4xi32, strided<[1]>> to memref<4xi32> aiex.run @sequence (%arg2) : (memref<4xi32>) } From fbc6132271d958832152f26c36bc397c1ac68dd1 Mon Sep 17 00:00:00 2001 From: andrej Date: Thu, 18 Dec 2025 14:47:15 -0700 Subject: [PATCH 31/40] remove coalesce_write32s pass and clean up reset operations --- .../AIEToConfiguration/AIEToConfiguration.h | 76 +- include/aie/Dialect/AIE/IR/AIEOps.td | 12 + include/aie/Dialect/AIE/IR/AIETargetModel.h | 67 -- include/aie/Dialect/AIEX/AIEUtils.h | 10 +- include/aie/Dialect/AIEX/IR/AIEXDialect.h | 7 - .../aie/Dialect/AIEX/Transforms/AIEXPasses.h | 2 - .../aie/Dialect/AIEX/Transforms/AIEXPasses.td | 57 +- include/aie/Targets/AIERT.h | 1 - .../AIEToConfiguration/AIEToConfiguration.cpp | 864 +++++------------- lib/Dialect/AIE/IR/AIEDialect.cpp | 154 ++++ .../AIEX/Transforms/AIECoalesceWrite32s.cpp | 433 --------- .../AIEX/Transforms/AIEDMATasksToNPU.cpp | 8 +- lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp | 6 +- .../AIEX/Transforms/AIEExpandLoadPdi.cpp | 14 +- lib/Dialect/AIEX/Transforms/CMakeLists.txt | 1 - lib/Targets/AIERT.cpp | 20 +- python/compiler/aiecc/cl_arguments.py | 15 - python/compiler/aiecc/main.py | 9 - 18 files changed, 480 insertions(+), 1276 deletions(-) delete mode 100644 lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp diff --git a/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h b/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h index 4aefd33f818..8696e04ace6 100644 --- a/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h +++ b/include/aie/Conversion/AIEToConfiguration/AIEToConfiguration.h @@ -19,6 +19,32 @@ namespace xilinx::AIE { class DeviceOp; + +// -------------------------------------------------------------------------- +// Device configuration +// -------------------------------------------------------------------------- + +std::unique_ptr> +createConvertAIEToTransactionPass(); + +std::unique_ptr> +createConvertAIEToControlPacketsPass(); + +std::optional +convertTransactionBinaryToMLIR(mlir::MLIRContext *ctx, + std::vector &binary); + +// Generate transaction binary and insert configuration operations at a specific point +mlir::LogicalResult +generateAndInsertConfigOps(xilinx::AIE::DeviceOp device, + mlir::Operation *insertionPoint, + llvm::StringRef clElfDir = ""); + + +// -------------------------------------------------------------------------- +// Device reset +// -------------------------------------------------------------------------- + // Enum for specifying which tile types to reset enum class ResetTileType : unsigned { None = 0, @@ -28,17 +54,8 @@ enum class ResetTileType : unsigned { All = ShimNOC | MemTile | CoreTile }; -// Allow bitwise OR operations on ResetTileType -inline ResetTileType operator|(ResetTileType lhs, ResetTileType rhs) { - return static_cast(static_cast(lhs) | static_cast(rhs)); -} - -inline ResetTileType operator&(ResetTileType lhs, ResetTileType rhs) { - return static_cast(static_cast(lhs) & static_cast(rhs)); -} - inline bool hasFlag(ResetTileType value, ResetTileType flag) { - return static_cast(value & flag) != 0; + return (static_cast(value) & static_cast(flag)) != 0; } // Enum for specifying when to reset @@ -60,40 +77,15 @@ struct ResetConfig { : tileType(tt), mode(m) {} }; -std::unique_ptr> -createConvertAIEToTransactionPass(); - -std::unique_ptr> -createConvertAIEToControlPacketsPass(); - -std::optional -convertTransactionBinaryToMLIR(mlir::MLIRContext *ctx, - std::vector &binary); - -// Generate transaction binary and insert configuration operations at a specific point -mlir::LogicalResult -generateAndInsertConfigOps(xilinx::AIE::DeviceOp device, - mlir::Operation *insertionPoint, - llvm::StringRef clElfDir = ""); - -// Generate reset operations for tiles in a device and insert them at a specific point +// Insert reset operations mlir::LogicalResult generateAndInsertResetOps(xilinx::AIE::DeviceOp device, - mlir::Operation *insertionPoint, - ResetConfig dmaConfig = ResetConfig(), - ResetConfig switchConfig = ResetConfig(), - ResetConfig lockConfig = ResetConfig(), - ResetConfig coreConfig = ResetConfig()); - -// Version with previous device for change detection -mlir::LogicalResult -generateAndInsertResetOps(xilinx::AIE::DeviceOp device, - mlir::Operation *insertionPoint, - ResetConfig dmaConfig, - ResetConfig switchConfig, - ResetConfig lockConfig, - ResetConfig coreConfig, - xilinx::AIE::DeviceOp previousDevice); + mlir::Operation *insertionPoint, + ResetConfig dmaConfig, + ResetConfig switchConfig, + ResetConfig lockConfig, + ResetConfig coreConfig, + xilinx::AIE::DeviceOp previousDevice); } // namespace xilinx::AIE diff --git a/include/aie/Dialect/AIE/IR/AIEOps.td b/include/aie/Dialect/AIE/IR/AIEOps.td index 3bc214a41d1..9b13faf178d 100644 --- a/include/aie/Dialect/AIE/IR/AIEOps.td +++ b/include/aie/Dialect/AIE/IR/AIEOps.td @@ -76,6 +76,11 @@ def AIE_DeviceOp: AIE_Op<"device", [ static xilinx::AIE::DeviceOp getForSymbolInModule(mlir::ModuleOp module, llvm::StringRef symbol); static xilinx::AIE::DeviceOp getForSymbolInModuleOrError(mlir::ModuleOp module, llvm::StringRef symbol); static llvm::StringRef getDefaultDeviceName() { return "main"; } + + // Helper methods to find operations by tile coordinates, if they already exist (nullptr otherwise) + xilinx::AIE::SwitchboxOp lookupSwitchbox(int col, int row); + xilinx::AIE::CoreOp lookupCore(int col, int row); + mlir::Operation* lookupDMA(int col, int row); }]; } @@ -212,6 +217,7 @@ def AIE_SwitchboxOp: AIE_Op<"switchbox", [ int colIndex(); int rowIndex(); TileOp getTileOp(); + bool isEquivalent(SwitchboxOp other); void getAsmResultNames( llvm::function_ref setNameFn) { ::xilinx::AIE::TileElement::Trait::getAsmResultNames(setNameFn); @@ -322,6 +328,7 @@ def AIE_ShimDMAOp: AIE_Op<"shim_dma", [ int colIndex(); int rowIndex(); TileOp getTileOp(); + bool isEquivalent(mlir::Operation *other); void getAsmResultNames( llvm::function_ref setNameFn) { ::xilinx::AIE::TileElement::Trait::getAsmResultNames(setNameFn); @@ -389,6 +396,9 @@ def AIE_CoreOp: AIE_Op<"core", [ bool isMemWest() { return ((rowIndex() % 2) == 0); }; bool isEmpty(); TileOp getTileOp(); + // Check whether another core has equivalent program memory. + // Note that this currently only checks the ELF attribute, so only works after compiling the program memory. + bool isEquivalent(CoreOp other); void getAsmResultNames( llvm::function_ref setNameFn) { ::xilinx::AIE::TileElement::Trait::getAsmResultNames(setNameFn); @@ -1135,6 +1145,7 @@ def AIE_MemOp: AIE_Op<"mem", [ int colIndex(); int rowIndex(); TileOp getTileOp(); + bool isEquivalent(mlir::Operation *other); void getAsmResultNames( llvm::function_ref setNameFn) { ::xilinx::AIE::TileElement::Trait::getAsmResultNames(setNameFn); @@ -1182,6 +1193,7 @@ def AIE_MemTileDMAOp: AIE_Op<"memtile_dma", [ int colIndex(); int rowIndex(); TileOp getTileOp(); + bool isEquivalent(mlir::Operation *other); void getAsmResultNames( llvm::function_ref setNameFn) { ::xilinx::AIE::TileElement::Trait::getAsmResultNames(setNameFn); diff --git a/include/aie/Dialect/AIE/IR/AIETargetModel.h b/include/aie/Dialect/AIE/IR/AIETargetModel.h index 72ea0d2cd12..201d7da658b 100644 --- a/include/aie/Dialect/AIE/IR/AIETargetModel.h +++ b/include/aie/Dialect/AIE/IR/AIETargetModel.h @@ -325,28 +325,6 @@ class AIETargetModel { // Returns true if the target model supports the given block format. virtual bool isSupportedBlockFormat(std::string const &format) const; - - /// Check if a register at the given address is a "special register" that - /// should not be reordered. Special registers are those that trigger - /// side-effects like device reset, start processing, etc. - /// \param absoluteAddress The full 32-bit address (including tile col/row) - /// \return true if this is a special register that must not be reordered - virtual bool isSpecialRegister(uint32_t absoluteAddress) const { - return false; // Default: no special registers - } - - /// Check if a register at the given tile and offset is a "special register" - /// \param col The column of the tile - /// \param row The row of the tile - /// \param offset The offset within the tile's address space - /// \return true if this is a special register that must not be reordered - virtual bool isSpecialRegister(int col, int row, uint32_t offset) const { - uint32_t absoluteAddress = - ((col & 0xff) << getColumnShift()) | - ((row & 0xff) << getRowShift()) | - (offset & 0xfffff); - return isSpecialRegister(absoluteAddress); - } }; class AIE1TargetModel : public AIETargetModel { @@ -733,51 +711,6 @@ class BaseNPU2TargetModel : public AIE2TargetModel { bool isSupportedBlockFormat(std::string const &format) const override; - /// Check if a register is a special register that should not be reordered - /// for AIE2P (NPU2) devices - bool isSpecialRegister(uint32_t absoluteAddress) const override { - // Extract tile coordinates from absolute address - // Address format: (col << 25) | (row << 20) | offset - int col = (absoluteAddress >> getColumnShift()) & 0xff; - int row = (absoluteAddress >> getRowShift()) & 0x1f; - uint32_t offset = absoluteAddress & 0xfffff; - return isSpecialRegister(col, row, offset); - } - - bool isSpecialRegister(int col, int row, uint32_t offset) const override { - if (isCoreTile(col, row)) { - // Core tile special registers - return offset == 0x32000 || // Core_Control - offset == 0x36070 || // Memory_Control - offset == 0x60000 || // Module_Clock_Control - offset == 0x60010 || // Module_Reset_Control - offset == 0x60020 || // Tile_Control - offset == 0x1DE04 || offset == 0x1DE0C || - offset == 0x1DE14 || offset == 0x1DE1C; - } else if (isShimNOCTile(col, row)) { - // Shim tile special registers - return (offset >= 0x15000 && offset <= 0x15010) || - offset == 0x1D204 || offset == 0x1D20C || - offset == 0x1D214 || offset == 0x1D21C || - offset == 0x1D200 || offset == 0x1D208 || - offset == 0x1D210 || offset == 0x1D218 || - offset == 0x1F000 || offset == 0x1F004 || - offset == 0x40000; - } else if (isMemTile(col, row)) { - // Memory tile special registers - return offset == 0x94008 || offset == 0x96048 || - offset == 0xA0604 || offset == 0xA060C || - offset == 0xA0614 || offset == 0xA061C || - offset == 0xA0624 || offset == 0xA062C || - offset == 0xA0634 || offset == 0xA063C || - offset == 0xA0644 || offset == 0xA064C || - offset == 0xA0654 || offset == 0xA065C || - offset == 0xFFF00 || offset == 0xFFF10 || - offset == 0xFFF20; - } - return false; - } - static bool classof(const AIETargetModel *model) { return model->getKind() >= TK_AIE2_NPU2 && model->getKind() < TK_AIE2_NPU2_Last; diff --git a/include/aie/Dialect/AIEX/AIEUtils.h b/include/aie/Dialect/AIEX/AIEUtils.h index 9e0e6799305..25b1343f531 100644 --- a/include/aie/Dialect/AIEX/AIEUtils.h +++ b/include/aie/Dialect/AIEX/AIEUtils.h @@ -21,23 +21,19 @@ memref::GlobalOp getOrCreateDataMemref(OpBuilder &builder, AIE::DeviceOp dev, mlir::Location loc, ArrayRef words); -// Result of tracing through subview/cast operations to a block argument +// Result of tracing through subview/cast operations to a block argument for traceSubviewToBlockArgument function. struct SubviewTraceResult { BlockArgument rootArg; int64_t offsetInBytes; }; // Trace through memref.subview, memref.cast, and memref.reinterpret_cast -// operations to find the root block argument. +// operations until the referenced SSA value is a block argument. // // Returns the root block argument and cumulative byte offset, or std::nullopt // if the chain doesn't lead to a block argument or contains unsupported ops. // -// This function supports: -// - Arbitrary chains of memref.subview, memref.cast, memref.reinterpret_cast -// - Only static offsets, sizes, and strides -// - Only rank-1 subviews -// - Only stride of 1 (contiguous memory) +// This function supports checks that all subviews remain static and contiguous. std::optional traceSubviewToBlockArgument(Value value); } diff --git a/include/aie/Dialect/AIEX/IR/AIEXDialect.h b/include/aie/Dialect/AIEX/IR/AIEXDialect.h index 8441dabe5b5..884c2c8c264 100644 --- a/include/aie/Dialect/AIEX/IR/AIEXDialect.h +++ b/include/aie/Dialect/AIEX/IR/AIEXDialect.h @@ -49,13 +49,6 @@ verifyStridesWraps(mlir::Operation *forOp, llvm::SmallVector hardwareStrides, bool skipTransformationChecks = false); -mlir::ParseResult parseArgSliceRange(mlir::AsmParser &parser, - mlir::IntegerAttr &offset, - mlir::IntegerAttr &length); - -void printArgSliceRange(mlir::AsmPrinter &printer, mlir::Operation *op, - mlir::IntegerAttr offset, mlir::IntegerAttr length); - } // namespace AIEX } // namespace xilinx diff --git a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h index 005b58d2c0d..730123f3052 100644 --- a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h +++ b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.h @@ -54,8 +54,6 @@ std::unique_ptr> createAIELegalizeControlPacketPass(); std::unique_ptr> createAIEExpandLoadPdiPass(); -std::unique_ptr> -createAIECoalesceWrite32sPass(); /// Generate the code for registering passes. #define GEN_PASS_REGISTRATION diff --git a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td index 4cbc88e03ae..23ff70f5c55 100644 --- a/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td +++ b/include/aie/Dialect/AIEX/Transforms/AIEXPasses.td @@ -275,14 +275,23 @@ def AIELegalizeControlPacket : Pass<"aie-legalize-ctrl-packet", "AIE::DeviceOp"> def AIEExpandLoadPdi : Pass<"aie-expand-load-pdi", "mlir::ModuleOp"> { let summary = "Expand load_pdi operations to explicit configuration sequences"; let description = [{ - This pass transforms `load_pdi { device_ref = @device }` operations by: - 1. Creating an empty device `@empty` if it doesn't exist - 2. Replacing the load_pdi with `load_pdi { device_ref = @empty }` - 3. Following it with explicit write32/blockwrite configuration operations + This pass transforms `load_pdi { device_ref = @device }` operations as follows: + 1. Create an empty device `@empty` if it doesn't exist + 2. Replace the load_pdi with `load_pdi { device_ref = @empty }` -- this causes a device reset. + 3. Insert additional reset instructions (e.g., reset switchboxes, based on command-line arguments passed). + 4. Configure the device for the selected design by inserting write32s and blockwrites. - The configuration operations are generated by converting the referenced - device's configuration to a transaction binary and then disassembling it - into MLIR operations. + The configuration operations are generated by converting the referenced device's configuration to a transaction binary and then disassembling it into MLIR operations. + + Example command-line usage: + ``` + aie-opt --aie-expand-load-pdi \ + --reset-switches-tiles=shim,mem,core \ + --reset-switches-mode=ifused \ + --reset-locks-tiles=mem,core \ + --reset-locks-mode=always \ + input.mlir + ``` }]; let constructor = "xilinx::AIEX::createAIEExpandLoadPdiPass()"; @@ -312,38 +321,4 @@ def AIEExpandLoadPdi : Pass<"aie-expand-load-pdi", "mlir::ModuleOp"> { ]; } -def AIECoalesceWrite32s : Pass<"aie-coalesce-write32s", "AIE::DeviceOp"> { - let summary = "Coalesce consecutive write32 operations into blockwrite operations"; - let description = [{ - This pass optimizes sequences of consecutive npu.write32 operations by - coalescing them into npu.blockwrite operations when their addresses are - contiguous (4-byte increments). - - The pass can reorder non-special register writes within slices bounded by - special register writes. Special registers (e.g., control registers) act - as barriers and cannot be reordered. - - For each sequence of N consecutive write32 operations at addresses - [addr, addr+4, addr+8, ...], the pass: - 1. Eliminates duplicate writes (keeps only the last value for each address) - 2. Reorders writes by address within safe boundaries - 3. Creates a memref.global with the values - 4. Replaces the write32 sequence with a single npu.blockwrite - - This reduces instruction count and can improve performance. - }]; - - let options = [ - Option<"minWritesToCoalesce", "min-writes-to-coalesce", "unsigned", - /*default=*/"2", - "Minimum number of contiguous writes required to coalesce into a blockwrite"> - ]; - - let constructor = "xilinx::AIEX::createAIECoalesceWrite32sPass()"; - let dependentDialects = [ - "mlir::memref::MemRefDialect", - "xilinx::AIE::AIEDialect", - "xilinx::AIEX::AIEXDialect", - ]; -} #endif diff --git a/include/aie/Targets/AIERT.h b/include/aie/Targets/AIERT.h index 1538de0332f..c3d94efe219 100644 --- a/include/aie/Targets/AIERT.h +++ b/include/aie/Targets/AIERT.h @@ -51,7 +51,6 @@ struct AIERTControl { mlir::LogicalResult resetCore(int col, int row); mlir::LogicalResult resetCoreUnreset(int col, int row); mlir::LogicalResult resetSwitch(int col, int row); - mlir::LogicalResult resetLocks(int col, int row, int numLocks); mlir::LogicalResult resetLock(int col, int row, int lockId); mlir::LogicalResult resetSwitchConnection(int col, int row, WireBundle sourceBundle, int sourceChannel, diff --git a/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp b/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp index 213d6141682..5185ad7cf85 100644 --- a/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp +++ b/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp @@ -911,677 +911,299 @@ xilinx::AIE::generateAndInsertConfigOps(xilinx::AIE::DeviceOp device, return success(); } -// Helper structures for fine-grained resets -struct ConnectionToReset { - int col, row; - WireBundle sourceBundle; - int sourceChannel; - WireBundle destBundle; - int destChannel; -}; - -struct LockToReset { - int col, row; - int lockId; -}; - -// Helper function to collect connections from a switchbox -static void collectConnections(SwitchboxOp sb, - SmallVectorImpl> &connections) { - if (!sb) return; - - for (auto connectOp : sb.getOps()) { - connections.push_back({connectOp.getSourceBundle(), - connectOp.getSourceChannel(), - connectOp.getDestBundle(), - connectOp.getDestChannel()}); +// Helper function to check DMA equivalence for different operation types +static bool areDMAsEquivalent(Operation *dma1, Operation *dma2) { + if (!dma1 || !dma2) + return dma1 == dma2; + if (auto mem1 = dyn_cast(dma1)) { + return mem1.isEquivalent(dma2); + } else if (auto memTile1 = dyn_cast(dma1)) { + return memTile1.isEquivalent(dma2); + } else if (auto shim1 = dyn_cast(dma1)) { + return shim1.isEquivalent(dma2); } + return false; } -// Helper function to collect lock IDs from a device at a specific location -static void collectLockIds(DeviceOp device, int col, int row, SmallVectorImpl &lockIds) { - if (!device) return; +// Reset cores +static LogicalResult resetCores(DeviceOp device, DeviceOp previousDevice, + ResetConfig coreConfig, AIERTControl &ctl) { + const AIETargetModel &targetModel = device.getTargetModel(); - for (auto lockOp : device.getOps()) { - if (auto tileValue = lockOp.getTile()) { - if (auto tileOp = tileValue.getDefiningOp()) { - if (tileOp.getCol() == col && tileOp.getRow() == row) { - if (auto lockId = lockOp.getLockID()) { - lockIds.push_back(*lockId); - } - } + if (coreConfig.mode == ResetMode::Never || !hasFlag(coreConfig.tileType, ResetTileType::CoreTile)) + return success(); + + int numCols = targetModel.columns(); + int numRows = targetModel.rows(); + + for (int col = 0; col < numCols; col++) { + for (int row = 0; row < numRows; row++) { + if (!targetModel.isCoreTile(col, row)) + continue; + + bool shouldReset = false; + + if (coreConfig.mode == ResetMode::Always) { + shouldReset = true; + } else if (coreConfig.mode == ResetMode::IfUsed || coreConfig.mode == ResetMode::IfUsedFineGrained) { + shouldReset = device.lookupCore(col, row) != nullptr; + } else if (coreConfig.mode == ResetMode::IfChanged || coreConfig.mode == ResetMode::IfChangedFineGrained) { + auto currentCore = device.lookupCore(col, row); + auto prevCore = previousDevice ? previousDevice.lookupCore(col, row) : nullptr; + shouldReset = currentCore && !currentCore.isEquivalent(prevCore); } + + if (shouldReset && failed(ctl.resetCore(col, row))) + return failure(); } } + + return success(); } -// Version without previous device (first load) -mlir::LogicalResult -xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, - mlir::Operation *insertionPoint, - ResetConfig dmaConfig, - ResetConfig switchConfig, - ResetConfig lockConfig, - ResetConfig coreConfig) { - // Call the full version with a null DeviceOp - return generateAndInsertResetOps(device, insertionPoint, dmaConfig, - switchConfig, lockConfig, coreConfig, nullptr); -} - -// Generate reset operations for all tiles used in the device -mlir::LogicalResult -xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, - mlir::Operation *insertionPoint, - ResetConfig dmaConfig, - ResetConfig switchConfig, - ResetConfig lockConfig, - ResetConfig coreConfig, - xilinx::AIE::DeviceOp previousDevice) { - const AIETargetModel &targetModel = - (const AIETargetModel &)device.getTargetModel(); - - if (!targetModel.hasProperty(AIETargetModel::IsNPU)) - return failure(); - - AIERTControl ctl(targetModel); - bool aieSim = false; - bool xaieDebug = false; - - if (failed(ctl.setIOBackend(aieSim, xaieDebug))) - return failure(); - - ctl.startTransaction(); - +// Reset DMAs based on the provided configuration +static LogicalResult resetDMAs(DeviceOp device, DeviceOp previousDevice, + ResetConfig dmaConfig, AIERTControl &ctl) { + const AIETargetModel &targetModel = device.getTargetModel(); + + if (dmaConfig.mode == ResetMode::Never) + return success(); + int numCols = targetModel.columns(); int numRows = targetModel.rows(); - - // Helper function to compare two switchbox ops for equivalence - auto switchboxesEquivalent = [](SwitchboxOp sb1, SwitchboxOp sb2) -> bool { - if (!sb1 || !sb2) - return sb1 == sb2; // Both null means equivalent - - // Compare all connection ops - auto conns1 = sb1.getOps(); - auto conns2 = sb2.getOps(); - - llvm::SmallVector vec1(conns1.begin(), conns1.end()); - llvm::SmallVector vec2(conns2.begin(), conns2.end()); - - if (vec1.size() != vec2.size()) - return false; - - // Sort by source/dest to make comparison order-independent - auto connComparator = [](ConnectOp a, ConnectOp b) { - if (a.getSourceBundle() != b.getSourceBundle()) - return static_cast(a.getSourceBundle()) < static_cast(b.getSourceBundle()); - if (a.getSourceChannel() != b.getSourceChannel()) - return a.getSourceChannel() < b.getSourceChannel(); - if (a.getDestBundle() != b.getDestBundle()) - return static_cast(a.getDestBundle()) < static_cast(b.getDestBundle()); - return a.getDestChannel() < b.getDestChannel(); - }; - - llvm::sort(vec1, connComparator); - llvm::sort(vec2, connComparator); - - for (size_t i = 0; i < vec1.size(); ++i) { - if (vec1[i].getSourceBundle() != vec2[i].getSourceBundle() || - vec1[i].getSourceChannel() != vec2[i].getSourceChannel() || - vec1[i].getDestBundle() != vec2[i].getDestBundle() || - vec1[i].getDestChannel() != vec2[i].getDestChannel()) - return false; - } - - return true; - }; - - // Helper function to compare two core ops for equivalence - auto coresEquivalent = [](CoreOp c1, CoreOp c2) -> bool { - if (!c1 || !c2) - return c1 == c2; // Both null means equivalent - - // Compare ELF files - auto elf1 = c1.getElfFileAttr(); - auto elf2 = c2.getElfFileAttr(); - - if (elf1 && elf2) - return elf1 == elf2; - - return !elf1 && !elf2; - }; - - // Helper function to compare DMA configuration for equivalence - auto dmasEquivalent = [](Operation *dma1, Operation *dma2) -> bool { - if (!dma1 || !dma2) - return dma1 == dma2; - - // For MemOp, MemTileDMAOp, ShimDMAOp, compare their contained operations - // This is a structural comparison including attributes - auto ®ion1 = dma1->getRegion(0); - auto ®ion2 = dma2->getRegion(0); - - if (region1.empty() != region2.empty()) - return false; - - if (region1.empty()) - return true; - - auto &block1 = region1.front(); - auto &block2 = region2.front(); - - auto ops1 = block1.without_terminator(); - auto ops2 = block2.without_terminator(); - - auto it1 = ops1.begin(); - auto it2 = ops2.begin(); - - while (it1 != ops1.end() && it2 != ops2.end()) { - // Check operation names match - if (it1->getName() != it2->getName()) - return false; - - // Check all attributes match - auto attrs1 = it1->getAttrs(); - auto attrs2 = it2->getAttrs(); + + for (int col = 0; col < numCols; col++) { + for (int row = 0; row < numRows; row++) { + if ((targetModel.isMemTile(col, row) && !hasFlag(dmaConfig.tileType, ResetTileType::MemTile)) + || (targetModel.isCoreTile(col, row) && !hasFlag(dmaConfig.tileType, ResetTileType::CoreTile)) + || (targetModel.isShimNOCTile(col, row) && !hasFlag(dmaConfig.tileType, ResetTileType::ShimNOC))) { + continue; + } - if (attrs1.size() != attrs2.size()) - return false; + bool shouldReset = false; - for (auto attr1 : attrs1) { - auto attr2 = it2->getAttr(attr1.getName()); - if (!attr2 || attr1.getValue() != attr2) - return false; + if (dmaConfig.mode == ResetMode::Always) { + shouldReset = true; + } else if (dmaConfig.mode == ResetMode::IfUsed || dmaConfig.mode == ResetMode::IfUsedFineGrained) { + shouldReset = nullptr != device.lookupDMA(col, row); + } else if (dmaConfig.mode == ResetMode::IfChanged || dmaConfig.mode == ResetMode::IfChangedFineGrained) { + Operation *currentDMA = device.lookupDMA(col, row); + Operation *prevDMA = previousDevice ? previousDevice.lookupDMA(col, row) : nullptr; + shouldReset = currentDMA && !areDMAsEquivalent(currentDMA, prevDMA); } - ++it1; - ++it2; - } - - return it1 == ops1.end() && it2 == ops2.end(); - }; - - // Helper lambda to check if a tile is used in the device - auto isTileUsed = [&](int col, int row) -> bool { - for (auto tileOp : device.getOps()) { - if (tileOp.colIndex() == col && tileOp.rowIndex() == row) { - return true; - } + if (shouldReset && failed(ctl.resetDMA(col, row, false))) + return failure(); } - return false; - }; + } + + return success(); +} - // Helper lambda to check if a tile has a core - auto hasCoreOp = [&](int col, int row) -> bool { - for (auto coreOp : device.getOps()) { - auto tileOp = cast(coreOp.getTile().getDefiningOp()); - if (tileOp.colIndex() == col && tileOp.rowIndex() == row) { - return true; +// Reset switches based on the provided configuration +static LogicalResult resetSwitches(DeviceOp device, DeviceOp previousDevice, + ResetConfig switchConfig, AIERTControl &ctl) { + const AIETargetModel &targetModel = device.getTargetModel(); + + if (switchConfig.mode == ResetMode::Never) + return success(); + + int numCols = targetModel.columns(); + int numRows = targetModel.rows(); + + for (int col = 0; col < numCols; col++) { + for (int row = 0; row < numRows; row++) { + if ((targetModel.isMemTile(col, row) && !hasFlag(switchConfig.tileType, ResetTileType::MemTile)) + || (targetModel.isCoreTile(col, row) && !hasFlag(switchConfig.tileType, ResetTileType::CoreTile)) + || (targetModel.isShimNOCTile(col, row) && !hasFlag(switchConfig.tileType, ResetTileType::ShimNOC))) { + continue; } - } - return false; - }; - - // Helper lambda to check if a tile has a switchbox - auto hasSwitchboxOp = [&](int col, int row) -> bool { - for (auto switchboxOp : device.getOps()) { - auto tileOp = cast(switchboxOp.getTile().getDefiningOp()); - if (tileOp.colIndex() == col && tileOp.rowIndex() == row) { - return true; + + bool shouldReset = false; + + if (switchConfig.mode == ResetMode::Always) { + shouldReset = true; + } else if (switchConfig.mode == ResetMode::IfUsed) { + shouldReset = nullptr != device.lookupSwitchbox(col, row); + } else if (switchConfig.mode == ResetMode::IfChanged) { + SwitchboxOp currentSB = device.lookupSwitchbox(col, row); + SwitchboxOp prevSB = previousDevice ? previousDevice.lookupSwitchbox(col, row) : nullptr; + shouldReset = currentSB && !currentSB.isEquivalent(prevSB); } + + if (shouldReset && failed(ctl.resetSwitch(col, row))) + return failure(); } - return false; - }; + } + + return success(); +} - // Helper lambda to check if a tile has locks - auto hasLockOp = [&](int col, int row) -> bool { - for (auto lockOp : device.getOps()) { - auto tileOp = cast(lockOp.getTile().getDefiningOp()); - if (tileOp.colIndex() == col && tileOp.rowIndex() == row) { - return true; +// Reset locks based on the provided configuration +static LogicalResult resetLocks(DeviceOp device, DeviceOp previousDevice, + ResetConfig lockConfig, AIERTControl &ctl) { + const AIETargetModel &targetModel = device.getTargetModel(); + + if (lockConfig.mode == ResetMode::Never) + return success(); + + int numCols = targetModel.columns(); + int numRows = targetModel.rows(); + + for (int col = 0; col < numCols; col++) { + for (int row = 0; row < numRows; row++) { + if ((targetModel.isMemTile(col, row) && !hasFlag(lockConfig.tileType, ResetTileType::MemTile)) + || (targetModel.isCoreTile(col, row) && !hasFlag(lockConfig.tileType, ResetTileType::CoreTile))) { + continue; } - } - return false; - }; - - // Helper functions to find ops in previous device - auto findPreviousSwitchbox = [&](int col, int row) -> SwitchboxOp { - if (!previousDevice) - return nullptr; - for (auto sb : previousDevice.getOps()) { - auto tile = cast(sb.getTile().getDefiningOp()); - if (tile.colIndex() == col && tile.rowIndex() == row) - return sb; - } - return nullptr; - }; - - auto findPreviousCore = [&](int col, int row) -> CoreOp { - if (!previousDevice) - return nullptr; - for (auto core : previousDevice.getOps()) { - auto tile = cast(core.getTile().getDefiningOp()); - if (tile.colIndex() == col && tile.rowIndex() == row) - return core; - } - return nullptr; - }; - - auto findPreviousDMA = [&](int col, int row) -> Operation* { - if (!previousDevice) - return nullptr; - // Check MemOp - for (auto mem : previousDevice.getOps()) { - auto tile = cast(mem.getTile().getDefiningOp()); - if (tile.colIndex() == col && tile.rowIndex() == row) - return mem.getOperation(); - } - // Check MemTileDMAOp - for (auto mem : previousDevice.getOps()) { - auto tile = cast(mem.getTile().getDefiningOp()); - if (tile.colIndex() == col && tile.rowIndex() == row) - return mem.getOperation(); - } - // Check ShimDMAOp - for (auto shim : previousDevice.getOps()) { - auto tile = cast(shim.getTile().getDefiningOp()); - if (tile.colIndex() == col && tile.rowIndex() == row) - return shim.getOperation(); - } - return nullptr; - }; - - auto findCurrentSwitchbox = [&](int col, int row) -> SwitchboxOp { - for (auto sb : device.getOps()) { - auto tile = cast(sb.getTile().getDefiningOp()); - if (tile.colIndex() == col && tile.rowIndex() == row) - return sb; - } - return nullptr; - }; - - auto findCurrentCore = [&](int col, int row) -> CoreOp { - for (auto core : device.getOps()) { - auto tile = cast(core.getTile().getDefiningOp()); - if (tile.colIndex() == col && tile.rowIndex() == row) - return core; - } - return nullptr; - }; - - auto findCurrentDMA = [&](int col, int row) -> Operation* { - // Check MemOp - for (auto mem : device.getOps()) { - auto tile = cast(mem.getTile().getDefiningOp()); - if (tile.colIndex() == col && tile.rowIndex() == row) - return mem.getOperation(); - } - // Check MemTileDMAOp - for (auto mem : device.getOps()) { - auto tile = cast(mem.getTile().getDefiningOp()); - if (tile.colIndex() == col && tile.rowIndex() == row) - return mem.getOperation(); - } - // Check ShimDMAOp - for (auto shim : device.getOps()) { - auto tile = cast(shim.getTile().getDefiningOp()); - if (tile.colIndex() == col && tile.rowIndex() == row) - return shim.getOperation(); - } - return nullptr; - }; - - // Build tile lists for DMA resets - std::vector> dmaTiles; - if (dmaConfig.mode != ResetMode::Never) { - for (int col = 0; col < numCols; col++) { - for (int row = 0; row < numRows; row++) { - bool shouldReset = false; - - if (targetModel.isMemTile(col, row) && hasFlag(dmaConfig.tileType, ResetTileType::MemTile)) { - if (dmaConfig.mode == ResetMode::Always) { - shouldReset = true; - } else if (dmaConfig.mode == ResetMode::IfUsed || dmaConfig.mode == ResetMode::IfUsedFineGrained) { - shouldReset = isTileUsed(col, row); - } else if (dmaConfig.mode == ResetMode::IfChanged || dmaConfig.mode == ResetMode::IfChangedFineGrained) { - auto currentDMA = findCurrentDMA(col, row); - auto prevDMA = findPreviousDMA(col, row); - shouldReset = currentDMA && !dmasEquivalent(currentDMA, prevDMA); - } - } else if (targetModel.isCoreTile(col, row) && hasFlag(dmaConfig.tileType, ResetTileType::CoreTile)) { - if (dmaConfig.mode == ResetMode::Always) { - shouldReset = true; - } else if (dmaConfig.mode == ResetMode::IfUsed || dmaConfig.mode == ResetMode::IfUsedFineGrained) { - shouldReset = isTileUsed(col, row); - } else if (dmaConfig.mode == ResetMode::IfChanged || dmaConfig.mode == ResetMode::IfChangedFineGrained) { - auto currentDMA = findCurrentDMA(col, row); - auto prevDMA = findPreviousDMA(col, row); - shouldReset = currentDMA && !dmasEquivalent(currentDMA, prevDMA); - } - } else if (targetModel.isShimNOCTile(col, row) && hasFlag(dmaConfig.tileType, ResetTileType::ShimNOC)) { - if (dmaConfig.mode == ResetMode::Always) { - shouldReset = true; - } else if (dmaConfig.mode == ResetMode::IfUsed || dmaConfig.mode == ResetMode::IfUsedFineGrained) { - shouldReset = isTileUsed(col, row); - } else if (dmaConfig.mode == ResetMode::IfChanged || dmaConfig.mode == ResetMode::IfChangedFineGrained) { - auto currentDMA = findCurrentDMA(col, row); - auto prevDMA = findPreviousDMA(col, row); - shouldReset = currentDMA && !dmasEquivalent(currentDMA, prevDMA); - } - } - - if (shouldReset) { - dmaTiles.push_back({col, row}); + + if (lockConfig.mode == ResetMode::Always) { + // Reset all locks on this tile; + int numLocks = targetModel.getNumLocks(col, row); + for (int lockID = 0; lockID < numLocks; lockID++) { + if (failed(ctl.resetLock(col, row, lockID))) + return failure(); } - } - } - } - - // Build tile lists for switch resets - std::vector> switchTiles; - if (switchConfig.mode != ResetMode::Never) { - for (int col = 0; col < numCols; col++) { - for (int row = 0; row < numRows; row++) { - bool shouldReset = false; - - if (targetModel.isMemTile(col, row) && hasFlag(switchConfig.tileType, ResetTileType::MemTile)) { - if (switchConfig.mode == ResetMode::Always) { - shouldReset = true; - } else if (switchConfig.mode == ResetMode::IfUsed) { - shouldReset = isTileUsed(col, row) && hasSwitchboxOp(col, row); - } else if (switchConfig.mode == ResetMode::IfChanged) { - auto currentSB = findCurrentSwitchbox(col, row); - auto prevSB = findPreviousSwitchbox(col, row); - shouldReset = currentSB && !switchboxesEquivalent(currentSB, prevSB); - } - } else if (targetModel.isCoreTile(col, row) && hasFlag(switchConfig.tileType, ResetTileType::CoreTile)) { - if (switchConfig.mode == ResetMode::Always) { - shouldReset = true; - } else if (switchConfig.mode == ResetMode::IfUsed) { - shouldReset = isTileUsed(col, row) && hasSwitchboxOp(col, row); - } else if (switchConfig.mode == ResetMode::IfChanged) { - auto currentSB = findCurrentSwitchbox(col, row); - auto prevSB = findPreviousSwitchbox(col, row); - shouldReset = currentSB && !switchboxesEquivalent(currentSB, prevSB); - } - } else if (targetModel.isShimNOCTile(col, row) && hasFlag(switchConfig.tileType, ResetTileType::ShimNOC)) { - if (switchConfig.mode == ResetMode::Always) { - shouldReset = true; - } else if (switchConfig.mode == ResetMode::IfUsed) { - shouldReset = isTileUsed(col, row) && hasSwitchboxOp(col, row); - } else if (switchConfig.mode == ResetMode::IfChanged) { - auto currentSB = findCurrentSwitchbox(col, row); - auto prevSB = findPreviousSwitchbox(col, row); - shouldReset = currentSB && !switchboxesEquivalent(currentSB, prevSB); + } else { + // treat "ifUsed" and "ifChanged" as the same -- if a tile defined some locks, it probably also toggled them, so we should reset them + for (auto lockOp : device.getOps()) { + auto tileOp = lockOp.getTileOp(); + if (tileOp.getCol() == col && tileOp.getRow() == row) { + if (auto lockId = lockOp.getLockID()) { + if (failed(ctl.resetLock(col, row, *lockId))) { + return failure(); + } + } } } - - if (shouldReset) { - switchTiles.push_back({col, row}); - } } } } + + return success(); +} - // Build tile lists for lock resets - std::vector> lockTiles; // col, row, numLocks - if (lockConfig.mode != ResetMode::Never) { - for (int col = 0; col < numCols; col++) { - for (int row = 0; row < numRows; row++) { - bool shouldReset = false; - int numLocks = 0; - - if (targetModel.isMemTile(col, row) && hasFlag(lockConfig.tileType, ResetTileType::MemTile)) { - numLocks = 64; - if (lockConfig.mode == ResetMode::Always) { - shouldReset = true; - } else if (lockConfig.mode == ResetMode::IfUsed) { - shouldReset = isTileUsed(col, row) && hasLockOp(col, row); - } else if (lockConfig.mode == ResetMode::IfChanged) { - // For locks, we reset if the tile configuration changed (conservative) - auto currentDMA = findCurrentDMA(col, row); - auto prevDMA = findPreviousDMA(col, row); - shouldReset = currentDMA && !dmasEquivalent(currentDMA, prevDMA); - } - } else if (targetModel.isCoreTile(col, row) && hasFlag(lockConfig.tileType, ResetTileType::CoreTile)) { - numLocks = 16; - if (lockConfig.mode == ResetMode::Always) { - shouldReset = true; - } else if (lockConfig.mode == ResetMode::IfUsed) { - shouldReset = isTileUsed(col, row) && hasLockOp(col, row); - } else if (lockConfig.mode == ResetMode::IfChanged) { - // For locks, we reset if the tile configuration changed (conservative) - auto currentDMA = findCurrentDMA(col, row); - auto prevDMA = findPreviousDMA(col, row); - shouldReset = currentDMA && !dmasEquivalent(currentDMA, prevDMA); - } - } - - if (shouldReset && numLocks > 0) { - lockTiles.push_back({col, row, numLocks}); - } +// Reset fine-grained switch connections based on the provided configuration +static LogicalResult resetSwitchConnectionsFineGrained(DeviceOp device, DeviceOp previousDevice, + ResetConfig switchConfig, AIERTControl &ctl) { + const AIETargetModel &targetModel = device.getTargetModel(); + + if (switchConfig.mode != ResetMode::IfUsedFineGrained && + switchConfig.mode != ResetMode::IfChangedFineGrained) + return success(); + + int numCols = targetModel.columns(); + int numRows = targetModel.rows(); + + for (int col = 0; col < numCols; col++) { + for (int row = 0; row < numRows; row++) { + if ((targetModel.isMemTile(col, row) && !hasFlag(switchConfig.tileType, ResetTileType::MemTile)) + || (targetModel.isCoreTile(col, row) && !hasFlag(switchConfig.tileType, ResetTileType::CoreTile)) + || (targetModel.isShimNOCTile(col, row) && !hasFlag(switchConfig.tileType, ResetTileType::ShimNOC))) { + continue; } - } - } - - // Build tile list for core resets - std::vector> coreTiles; - if (coreConfig.mode != ResetMode::Never && hasFlag(coreConfig.tileType, ResetTileType::CoreTile)) { - for (int col = 0; col < numCols; col++) { - for (int row = 0; row < numRows; row++) { - if (targetModel.isCoreTile(col, row)) { - bool shouldReset = false; - - if (coreConfig.mode == ResetMode::Always) { - shouldReset = true; - } else if (coreConfig.mode == ResetMode::IfUsed || coreConfig.mode == ResetMode::IfUsedFineGrained) { - shouldReset = hasCoreOp(col, row); - } else if (coreConfig.mode == ResetMode::IfChanged || coreConfig.mode == ResetMode::IfChangedFineGrained) { - auto currentCore = findCurrentCore(col, row); - auto prevCore = findPreviousCore(col, row); - shouldReset = currentCore && !coresEquivalent(currentCore, prevCore); - } - - if (shouldReset) { - coreTiles.push_back({col, row}); - } + + auto currentSB = device.lookupSwitchbox(col, row); + if (!currentSB) continue; + + // Collect unique sources and active connections + DenseSet> uniqueSources; + DenseSet> activeConns; + for (auto connectOp : currentSB.getOps()) { + WireBundle srcBundle = connectOp.getSourceBundle(); + int srcChan = connectOp.getSourceChannel(); + WireBundle dstBundle = connectOp.getDestBundle(); + int dstChan = connectOp.getDestChannel(); + uniqueSources.insert({srcBundle, srcChan}); + activeConns.insert({srcBundle, srcChan, dstBundle, dstChan}); + } + DenseSet> prevConnsSet; + auto prevSB = previousDevice ? previousDevice.lookupSwitchbox(col, row) : nullptr; + if (prevSB) { + for (auto connectOp : prevSB.getOps()) { + prevConnsSet.insert({connectOp.getSourceBundle(), connectOp.getSourceChannel(), + connectOp.getDestBundle(), connectOp.getDestChannel()}); } } - } - } - - // Build fine-grained switch connection resets - std::vector connectionsToReset; - if (switchConfig.mode == ResetMode::IfUsedFineGrained || - switchConfig.mode == ResetMode::IfChangedFineGrained) { - for (int col = 0; col < numCols; col++) { - for (int row = 0; row < numRows; row++) { - bool shouldCheck = false; - - if (targetModel.isMemTile(col, row) && hasFlag(switchConfig.tileType, ResetTileType::MemTile)) { - shouldCheck = true; - } else if (targetModel.isCoreTile(col, row) && hasFlag(switchConfig.tileType, ResetTileType::CoreTile)) { - shouldCheck = true; - } else if (targetModel.isShimNOCTile(col, row) && hasFlag(switchConfig.tileType, ResetTileType::ShimNOC)) { - shouldCheck = true; + + // Get all possible destinations + llvm::SmallVector> possibleDests; + for (auto bundle : {WireBundle::Core, WireBundle::DMA, WireBundle::FIFO, + WireBundle::South, WireBundle::West, WireBundle::North, + WireBundle::East, WireBundle::PLIO, WireBundle::NOC, + WireBundle::Trace, WireBundle::TileControl}) { + uint32_t numDestChans = targetModel.getNumDestSwitchboxConnections(col, row, bundle); + if (numDestChans > 0) { + possibleDests.push_back(std::make_pair(bundle, numDestChans)); } - - if (!shouldCheck) continue; - - auto currentSB = findCurrentSwitchbox(col, row); - if (!currentSB) continue; - - // Collect current connections - SmallVector> currentConns; - collectConnections(currentSB, currentConns); - - if (switchConfig.mode == ResetMode::IfUsedFineGrained) { - // For each source port used in current design, disable all possible - // destination connections that are NOT used in the current design. - // This prevents backpressure from stale destinations. - - // Collect all unique source ports used in current design - llvm::DenseSet> usedSources; - for (auto [srcBundle, srcChan, dstBundle, dstChan] : currentConns) { - usedSources.insert({srcBundle, srcChan}); - } - - // For each used source, check all possible destinations - for (auto [srcBundle, srcChan] : usedSources) { - // Get all possible destination bundles for this tile type - llvm::SmallVector possibleDests; - if (targetModel.isMemTile(col, row)) { - possibleDests = {WireBundle::DMA, WireBundle::North, WireBundle::South}; - } else if (targetModel.isCoreTile(col, row)) { - possibleDests = {WireBundle::Core, WireBundle::DMA, WireBundle::North, - WireBundle::South, WireBundle::West, WireBundle::East}; - } else if (targetModel.isShimNOCTile(col, row)) { - possibleDests = {WireBundle::DMA, WireBundle::North, WireBundle::South}; - } - - // For each possible destination, check all channels (0-7 is typical) - for (auto dstBundle : possibleDests) { - for (int dstChan = 0; dstChan < 8; dstChan++) { - if (!targetModel.isLegalTileConnection(col, row, srcBundle, srcChan, dstBundle, dstChan)) { - continue; - } - // Check if this specific connection exists in current design - bool isUsed = false; - for (auto [cSrcBundle, cSrcChan, cDstBundle, cDstChan] : currentConns) { - if (srcBundle == cSrcBundle && srcChan == cSrcChan && - dstBundle == cDstBundle && dstChan == cDstChan) { - isUsed = true; - break; - } - } - - // If this destination is NOT used, disable it to prevent backpressure - if (!isUsed) { - connectionsToReset.push_back({col, row, srcBundle, srcChan, dstBundle, dstChan}); - } - } - } - } - } else if (switchConfig.mode == ResetMode::IfChangedFineGrained) { - // Disable connections that existed in previous design but are NOT in current design. - // This prevents backpressure from stale destinations while preserving active ones. - auto prevSB = findPreviousSwitchbox(col, row); - SmallVector> prevConns; - collectConnections(prevSB, prevConns); - - // Find connections that were in previous but are NOT in current - for (auto [pSrcBundle, pSrcChan, pDstBundle, pDstChan] : prevConns) { - if (!targetModel.isLegalTileConnection(col, row, pSrcBundle, pSrcChan, pDstBundle, pDstChan)) { + } + + // Iterate over all sources of connections in the current device + for (auto [srcBundle, srcChan] : uniqueSources) { + // Iterate over all legal destinations from this source + for (auto [altDstBundle, numDestChans] : possibleDests) { + for (uint32_t altDstChan = 0; altDstChan < numDestChans; altDstChan++) { + if (!targetModel.isLegalTileConnection(col, row, srcBundle, srcChan, altDstBundle, altDstChan)) { continue; } - bool stillUsed = false; - for (auto [cSrcBundle, cSrcChan, cDstBundle, cDstChan] : currentConns) { - if (pSrcBundle == cSrcBundle && pSrcChan == cSrcChan && - pDstBundle == cDstBundle && pDstChan == cDstChan) { - stillUsed = true; - break; - } + // Skip if this is an active connection in the new configuration + if (activeConns.contains({srcBundle, srcChan, altDstBundle, altDstChan})) { + continue; } - // If this connection was in previous but NOT in current, disable it - if (!stillUsed) { - connectionsToReset.push_back({col, row, pSrcBundle, pSrcChan, pDstBundle, pDstChan}); - } - } - } - } - } - } - - // Build fine-grained lock resets - std::vector locksToReset; - if (lockConfig.mode == ResetMode::IfUsedFineGrained || - lockConfig.mode == ResetMode::IfChangedFineGrained) { - for (int col = 0; col < numCols; col++) { - for (int row = 0; row < numRows; row++) { - bool shouldCheck = false; - - if (targetModel.isMemTile(col, row) && hasFlag(lockConfig.tileType, ResetTileType::MemTile)) { - shouldCheck = true; - } else if (targetModel.isCoreTile(col, row) && hasFlag(lockConfig.tileType, ResetTileType::CoreTile)) { - shouldCheck = true; - } - - if (!shouldCheck) continue; - - // Collect current lock IDs - SmallVector currentLockIds; - collectLockIds(device, col, row, currentLockIds); - - if (currentLockIds.empty()) continue; - - if (lockConfig.mode == ResetMode::IfUsedFineGrained) { - // Reset all used locks - for (int lockId : currentLockIds) { - locksToReset.push_back({col, row, lockId}); - } - } else if (lockConfig.mode == ResetMode::IfChangedFineGrained) { - // Reset only changed locks - SmallVector prevLockIds; - if (previousDevice) { - collectLockIds(previousDevice, col, row, prevLockIds); - } - - // Reset locks that are in current but not in previous - for (int lockId : currentLockIds) { - bool foundInPrev = false; - for (int pLockId : prevLockIds) { - if (lockId == pLockId) { - foundInPrev = true; - break; + if (switchConfig.mode == ResetMode::IfUsedFineGrained || + prevConnsSet.contains({srcBundle, srcChan, altDstBundle, altDstChan})) { + // Reset any legal destination that's not the active one + if (failed(ctl.resetSwitchConnection(col, row, srcBundle, srcChan, altDstBundle, altDstChan))) { + return failure(); } } - // Only reset if new or changed (conservatively reset if changed) - if (!foundInPrev) { - locksToReset.push_back({col, row, lockId}); - } } } } } } + + return success(); +} - // Perform core resets - for (auto [col, row] : coreTiles) { - if (failed(ctl.resetCore(col, row))) - return failure(); - } +// Generate reset operations for all tiles used in the device +mlir::LogicalResult +xilinx::AIE::generateAndInsertResetOps(xilinx::AIE::DeviceOp device, + mlir::Operation *insertionPoint, + ResetConfig dmaConfig, + ResetConfig switchConfig, + ResetConfig lockConfig, + ResetConfig coreConfig, + xilinx::AIE::DeviceOp previousDevice) { + const AIETargetModel &targetModel = device.getTargetModel(); - // Perform DMA resets - for (auto [col, row] : dmaTiles) { - if (failed(ctl.resetDMA(col, row, false))) - return failure(); - } + if (!targetModel.hasProperty(AIETargetModel::IsNPU)) + return failure(); - // Perform switch resets - for (auto [col, row] : switchTiles) { - if (failed(ctl.resetSwitch(col, row))) - return failure(); - } + AIERTControl ctl(targetModel); - // Perform fine-grained switch connection resets - for (auto &conn : connectionsToReset) { - if (failed(ctl.resetSwitchConnection(conn.col, conn.row, - conn.sourceBundle, conn.sourceChannel, - conn.destBundle, conn.destChannel))) - return failure(); - } + bool aieSim = false; + bool xaieDebug = false; + if (failed(ctl.setIOBackend(aieSim, xaieDebug))) + return failure(); - // Perform lock resets - for (auto [col, row, numLocks] : lockTiles) { - if (failed(ctl.resetLocks(col, row, numLocks))) - return failure(); - } + ctl.startTransaction(); - // Perform fine-grained lock resets - for (auto &lock : locksToReset) { - if (failed(ctl.resetLock(lock.col, lock.row, lock.lockId))) - return failure(); - } + if (failed(resetCores(device, previousDevice, coreConfig, ctl))) + return failure(); + + if (failed(resetDMAs(device, previousDevice, dmaConfig, ctl))) + return failure(); + + if (failed(resetSwitches(device, previousDevice, switchConfig, ctl))) + return failure(); + + if (failed(resetSwitchConnectionsFineGrained(device, previousDevice, switchConfig, ctl))) + return failure(); + + if (failed(resetLocks(device, previousDevice, lockConfig, ctl))) + return failure(); // Export the reset transactions std::vector txn_data = ctl.exportSerializedTransaction(); diff --git a/lib/Dialect/AIE/IR/AIEDialect.cpp b/lib/Dialect/AIE/IR/AIEDialect.cpp index 9b4e4581f7f..f25c23c1111 100644 --- a/lib/Dialect/AIE/IR/AIEDialect.cpp +++ b/lib/Dialect/AIE/IR/AIEDialect.cpp @@ -1093,6 +1093,45 @@ DeviceOp::getForSymbolInModuleOrError(mlir::ModuleOp module, return deviceOp; } +SwitchboxOp DeviceOp::lookupSwitchbox(int col, int row) { + for (auto sb : getOps()) { + if (sb.colIndex() == col && sb.rowIndex() == row) + return sb; + } + return nullptr; +} + +CoreOp DeviceOp::lookupCore(int col, int row) { + for (auto core : getOps()) { + if (core.colIndex() == col && core.rowIndex() == row) + return core; + } + return nullptr; +} + +Operation* DeviceOp::lookupDMA(int col, int row) { + const AIETargetModel &targetModel = getTargetModel(); + + // Use target model to determine which type of DMA op to look for + if (targetModel.isMemTile(col, row)) { + for (auto mem : getOps()) { + if (mem.colIndex() == col && mem.rowIndex() == row) + return mem.getOperation(); + } + } else if (targetModel.isCoreTile(col, row)) { + for (auto mem : getOps()) { + if (mem.colIndex() == col && mem.rowIndex() == row) + return mem.getOperation(); + } + } else if (targetModel.isShimNOCTile(col, row)) { + for (auto shim : getOps()) { + if (shim.colIndex() == col && shim.rowIndex() == row) + return shim.getOperation(); + } + } + return nullptr; +} + //===----------------------------------------------------------------------===// // TileOp //===----------------------------------------------------------------------===// @@ -1298,6 +1337,56 @@ int ShimMuxOp::colIndex() { return getTileOp().colIndex(); } int ShimMuxOp::rowIndex() { return getTileOp().rowIndex(); } +// Helper function to compare DMA configuration for equivalence +static bool areDMAsEquivalent(Operation *dma1, Operation *dma2) { + if (!dma1 || !dma2) + return dma1 == dma2; + + // Compare their contained operations + // This is a structural comparison including attributes + auto ®ion1 = dma1->getRegion(0); + auto ®ion2 = dma2->getRegion(0); + + if (region1.empty() != region2.empty()) + return false; + + if (region1.empty()) + return true; + + auto &block1 = region1.front(); + auto &block2 = region2.front(); + + auto ops1 = block1.without_terminator(); + auto ops2 = block2.without_terminator(); + + auto it1 = ops1.begin(); + auto it2 = ops2.begin(); + + while (it1 != ops1.end() && it2 != ops2.end()) { + // Check operation names match + if (it1->getName() != it2->getName()) + return false; + + // Check all attributes match + auto attrs1 = it1->getAttrs(); + auto attrs2 = it2->getAttrs(); + + if (attrs1.size() != attrs2.size()) + return false; + + for (auto attr1 : attrs1) { + auto attr2 = it2->getAttr(attr1.getName()); + if (!attr2 || attr1.getValue() != attr2) + return false; + } + + ++it1; + ++it2; + } + + return it1 == ops1.end() && it2 == ops2.end(); +} + //===----------------------------------------------------------------------===// // ShimDMAOp //===----------------------------------------------------------------------===// @@ -1320,6 +1409,10 @@ int ShimDMAOp::colIndex() { return getTileOp().colIndex(); } int ShimDMAOp::rowIndex() { return getTileOp().rowIndex(); } +bool ShimDMAOp::isEquivalent(Operation *other) { + return areDMAsEquivalent(getOperation(), other); +} + LogicalResult PacketRulesOp::verify() { if (Region &body = getRules(); body.empty()) return emitOpError("should have non-empty body"); @@ -1376,6 +1469,20 @@ bool CoreOp::isEmpty() { llvm::isa(body.front().front())); } +bool CoreOp::isEquivalent(CoreOp other) { + if (!other) + return false; + + // Compare program memory ELF + auto elf1 = getElfFileAttr(); + auto elf2 = other.getElfFileAttr(); + + if (elf1 && elf2) + return elf1 == elf2; + + return !elf1 && !elf2; +} + //===----------------------------------------------------------------------===// // BufferOp //===----------------------------------------------------------------------===// @@ -1477,6 +1584,10 @@ int MemOp::colIndex() { return getTileOp().colIndex(); } int MemOp::rowIndex() { return getTileOp().rowIndex(); } +bool MemOp::isEquivalent(Operation *other) { + return areDMAsEquivalent(getOperation(), other); +} + //===----------------------------------------------------------------------===// // MemTileDMAOp //===----------------------------------------------------------------------===// @@ -1899,6 +2010,10 @@ int MemTileDMAOp::colIndex() { return getTileOp().colIndex(); } int MemTileDMAOp::rowIndex() { return getTileOp().rowIndex(); } +bool MemTileDMAOp::isEquivalent(Operation *other) { + return areDMAsEquivalent(getOperation(), other); +} + //===----------------------------------------------------------------------===// // DMAStartOp //===----------------------------------------------------------------------===// @@ -2114,6 +2229,45 @@ int SwitchboxOp::colIndex() { return getTileOp().colIndex(); } int SwitchboxOp::rowIndex() { return getTileOp().rowIndex(); } +bool SwitchboxOp::isEquivalent(SwitchboxOp other) { + if (!other) + return false; + + // Compare all connection ops + auto conns1 = getOps(); + auto conns2 = other.getOps(); + + llvm::SmallVector vec1(conns1.begin(), conns1.end()); + llvm::SmallVector vec2(conns2.begin(), conns2.end()); + + if (vec1.size() != vec2.size()) + return false; + + // Sort by source/dest to make comparison order-independent + auto connComparator = [](ConnectOp a, ConnectOp b) { + if (a.getSourceBundle() != b.getSourceBundle()) + return static_cast(a.getSourceBundle()) < static_cast(b.getSourceBundle()); + if (a.getSourceChannel() != b.getSourceChannel()) + return a.getSourceChannel() < b.getSourceChannel(); + if (a.getDestBundle() != b.getDestBundle()) + return static_cast(a.getDestBundle()) < static_cast(b.getDestBundle()); + return a.getDestChannel() < b.getDestChannel(); + }; + + llvm::sort(vec1, connComparator); + llvm::sort(vec2, connComparator); + + for (size_t i = 0; i < vec1.size(); ++i) { + if (vec1[i].getSourceBundle() != vec2[i].getSourceBundle() || + vec1[i].getSourceChannel() != vec2[i].getSourceChannel() || + vec1[i].getDestBundle() != vec2[i].getDestBundle() || + vec1[i].getDestChannel() != vec2[i].getDestChannel()) + return false; + } + + return true; +} + template struct HasSomeParent { static LogicalResult verifyTrait(Operation *op) { diff --git a/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp b/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp deleted file mode 100644 index 7621aafeaef..00000000000 --- a/lib/Dialect/AIEX/Transforms/AIECoalesceWrite32s.cpp +++ /dev/null @@ -1,433 +0,0 @@ -//===- AIECoalesceWrite32s.cpp ----------------------------------*- C++ -*-===// -// -// This file is licensed under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -// (c) Copyright 2025 Advanced Micro Devices Inc. -// -//===----------------------------------------------------------------------===// -// -// This pass coalesces consecutive npu.write32 operations into npu.blockwrite -// operations when their addresses are contiguous (4-byte increments). -// -// The pass can reorder non-special register writes within slices. Special -// register writes act as barriers and cannot be reordered. Duplicate writes -// to the same address are eliminated (keeping the last value). -// -// Masked writes (npu.maskwrite32) are handled as follows: -// - If a maskwrite is done to an address after a previous write32/blockwrite, -// the maskwrite supersedes the earlier write (earlier write is removed) -// - If a write32/blockwrite is done after a maskwrite to the same address, -// the later write supersedes the maskwrite (maskwrite is removed) -// - Maskwrite operations cannot be coalesced into blockwrites and act as -// barriers for coalescing (similar to special register writes) -// -// A configurable threshold controls the minimum number of contiguous writes -// required for coalescing into a blockwrite. -// -//===----------------------------------------------------------------------===// - -#include "aie/Dialect/AIE/IR/AIEDialect.h" -#include "aie/Dialect/AIEX/IR/AIEXDialect.h" -#include "aie/Dialect/AIEX/Transforms/AIEXPasses.h" - -#include "mlir/Dialect/MemRef/IR/MemRef.h" -#include "mlir/IR/Builders.h" -#include "mlir/IR/PatternMatch.h" -#include "mlir/Pass/Pass.h" -#include "mlir/Transforms/GreedyPatternRewriteDriver.h" - -#include "llvm/ADT/DenseMap.h" -#include "llvm/ADT/SmallVector.h" - -#define DEBUG_TYPE "aie-coalesce-write32s" - -using namespace mlir; -using namespace xilinx; -using namespace xilinx::AIEX; -using namespace xilinx::AIE; - -namespace { - -// Represents a single 32-bit write to memory -struct WriteWord { - uint32_t address; - uint32_t value; - std::optional mask; // If present, this is a masked write - Operation *op; // The original operation that created this write - - bool operator<(const WriteWord &other) const { - return address < other.address; - } - - bool isMaskWrite() const { return mask.has_value(); } -}; - -// Represents a slice of execution between special register barriers -// All writes within a slice can be reordered -struct WriteSlice { - SmallVector writes; // All writes in this slice (can be reordered) - SmallVector specialOps; // Special register writes (cannot be reordered) - SmallVector otherOps; // Non-write operations that create barriers - - bool isEmpty() const { - return writes.empty() && specialOps.empty() && otherOps.empty(); - } -}; - -struct AIECoalesceWrite32sPass - : public AIECoalesceWrite32sBase { - - void runOnOperation() override { - AIE::DeviceOp deviceOp = getOperation(); - - // Collect all runtime sequences in the device - SmallVector runtimeSeqs; - deviceOp.walk([&](RuntimeSequenceOp seqOp) { - runtimeSeqs.push_back(seqOp); - }); - - // Process each runtime sequence - for (auto seqOp : runtimeSeqs) { - coalesceWrite32sInSequence(seqOp); - } - } - -private: - void coalesceWrite32sInSequence(RuntimeSequenceOp seqOp) { - OpBuilder builder(seqOp.getContext()); - - // Get the device and target model - auto deviceOp = seqOp->getParentOfType(); - if (!deviceOp) return; - - const auto &tm = deviceOp.getTargetModel(); - - // Walk through the sequence and partition into slices - for (Block &block : seqOp.getBody()) { - SmallVector slices; - WriteSlice currentSlice; - - for (Operation &op : block) { - // Skip get_global operations - they don't create barriers - if (isa(&op)) { - continue; - } - - bool isSpecialWrite = false; - - // Check if this is a write32 operation - if (auto write32Op = dyn_cast(&op)) { - // Only handle writes with absolute addresses (no buffer/col/row) - if (!write32Op.getBuffer() && !write32Op.getColumn() && - !write32Op.getRow()) { - uint32_t addr = write32Op.getAddress(); - isSpecialWrite = tm.isSpecialRegister(addr); - - if (isSpecialWrite) { - currentSlice.specialOps.push_back(&op); - } else { - WriteWord word{addr, write32Op.getValue(), std::nullopt, &op}; - currentSlice.writes.push_back(word); - } - } else { - // Symbolic write creates a barrier - if (!currentSlice.isEmpty()) { - slices.push_back(std::move(currentSlice)); - currentSlice = WriteSlice(); - } - currentSlice.otherOps.push_back(&op); - } - } - // Check if this is a maskwrite operation - else if (auto maskWriteOp = dyn_cast(&op)) { - // Only handle writes with absolute addresses (no buffer/col/row) - if (!maskWriteOp.getBuffer() && !maskWriteOp.getColumn() && - !maskWriteOp.getRow()) { - uint32_t addr = maskWriteOp.getAddress(); - isSpecialWrite = tm.isSpecialRegister(addr); - - if (isSpecialWrite) { - currentSlice.specialOps.push_back(&op); - } else { - WriteWord word{addr, maskWriteOp.getValue(), maskWriteOp.getMask(), &op}; - currentSlice.writes.push_back(word); - } - } else { - // Symbolic write creates a barrier - if (!currentSlice.isEmpty()) { - slices.push_back(std::move(currentSlice)); - currentSlice = WriteSlice(); - } - currentSlice.otherOps.push_back(&op); - } - } - // Check if this is a blockwrite operation - else if (auto blockWriteOp = dyn_cast(&op)) { - // Only handle writes with absolute addresses - if (!blockWriteOp.getBuffer() && !blockWriteOp.getColumn() && - !blockWriteOp.getRow()) { - auto addr = blockWriteOp.getAbsoluteAddress(); - auto dataWords = blockWriteOp.getDataWords(); - - if (addr && dataWords) { - uint32_t baseAddr = *addr; - - // Check if any word writes to a special register - int64_t numWords = dataWords.size(); - for (int64_t i = 0; i < numWords; ++i) { - if (tm.isSpecialRegister(baseAddr + i * 4)) { - isSpecialWrite = true; - break; - } - } - - if (isSpecialWrite) { - currentSlice.specialOps.push_back(&op); - } else { - // Add each word in the blockwrite as a separate WriteWord - int64_t idx = 0; - for (auto val : dataWords.getValues()) { - WriteWord word{ - static_cast(baseAddr + idx * 4), - static_cast(val.getZExtValue()), - std::nullopt, // blockwrites don't have masks - &op - }; - currentSlice.writes.push_back(word); - ++idx; - } - } - } else { - // Invalid blockwrite creates a barrier - if (!currentSlice.isEmpty()) { - slices.push_back(std::move(currentSlice)); - currentSlice = WriteSlice(); - } - currentSlice.otherOps.push_back(&op); - } - } else { - // Symbolic write creates a barrier - if (!currentSlice.isEmpty()) { - slices.push_back(std::move(currentSlice)); - currentSlice = WriteSlice(); - } - currentSlice.otherOps.push_back(&op); - } - } - // Any other operation creates a barrier - else { - if (!currentSlice.isEmpty()) { - slices.push_back(std::move(currentSlice)); - currentSlice = WriteSlice(); - } - currentSlice.otherOps.push_back(&op); - } - - // Special register writes create slice boundaries - if (isSpecialWrite) { - slices.push_back(std::move(currentSlice)); - currentSlice = WriteSlice(); - } - } - - // Don't forget the last slice - if (!currentSlice.isEmpty()) { - slices.push_back(std::move(currentSlice)); - } - - // Now process each slice: sort writes and coalesce - for (auto &slice : slices) { - processSlice(builder, slice, deviceOp); - } - } - } - - void processSlice(OpBuilder &builder, WriteSlice &slice, - AIE::DeviceOp deviceOp) { - // Non-write operations (barriers) are kept in their original positions - // Nothing to do here - they're already in the IR - - // If there are no writes to coalesce, nothing to do - if (slice.writes.empty()) { - return; - } - - // Eliminate duplicate writes - keep only the last write to each address - // Map from address to the index of the last write to that address - DenseMap lastWriteIndex; - DenseSet supersededOps; // Operations that are superseded by later writes - - for (size_t i = 0; i < slice.writes.size(); ++i) { - uint32_t addr = slice.writes[i].address; - - // If there was a previous write to this address, mark it as superseded - if (lastWriteIndex.count(addr)) { - supersededOps.insert(slice.writes[lastWriteIndex[addr]].op); - } - - lastWriteIndex[addr] = i; - } - - // Filter writes to keep only the last write to each address - SmallVector uniqueWrites; - for (size_t i = 0; i < slice.writes.size(); ++i) { - if (lastWriteIndex[slice.writes[i].address] == i) { - uniqueWrites.push_back(slice.writes[i]); - } - } - - // Update slice.writes with unique writes - slice.writes = std::move(uniqueWrites); - - // Sort writes by address to enable coalescing - llvm::sort(slice.writes); - - // Separate mask writes from regular writes - // Mask writes act as barriers for coalescing - DenseSet maskWriteAddresses; - for (auto &write : slice.writes) { - if (write.isMaskWrite()) { - maskWriteAddresses.insert(write.address); - } - } - - // Find contiguous sequences of non-masked writes and coalesce them - // Masked writes cannot be coalesced and act as barriers - SmallVector> sequences; - SmallVector currentSeq; - - for (auto &write : slice.writes) { - // Mask writes cannot be part of coalesced sequences - if (write.isMaskWrite()) { - // Save current sequence if it meets threshold - if (currentSeq.size() >= minWritesToCoalesce) { - sequences.push_back(currentSeq); - } - currentSeq.clear(); - continue; - } - - if (currentSeq.empty()) { - currentSeq.push_back(write); - } else if (write.address == currentSeq.back().address + 4 && - !maskWriteAddresses.count(write.address)) { - // Contiguous with previous write and not a mask write address - currentSeq.push_back(write); - } else { - // Not contiguous, start new sequence - // Only save sequences that meet the minimum threshold - if (currentSeq.size() >= minWritesToCoalesce) { - sequences.push_back(currentSeq); - } - currentSeq.clear(); - currentSeq.push_back(write); - } - } - - // Don't forget the last sequence (also check threshold) - if (currentSeq.size() >= minWritesToCoalesce) { - sequences.push_back(currentSeq); - } - - // Track which operations to erase - DenseSet toErase = supersededOps; // Start with superseded ops - - // Create blockwrites for each sequence - for (auto &seq : sequences) { - createBlockWrite(builder, seq, deviceOp); - - // Mark operations for erasure - for (auto &write : seq) { - toErase.insert(write.op); - } - } - - // For writes that couldn't be coalesced, keep them as write32 ops - for (auto &write : slice.writes) { - if (!toErase.contains(write.op)) { - // This write wasn't coalesced - keep it but possibly reorder - // The write is already in the IR, we just need to move it if needed - } - } - - // Special register writes stay in their original positions - // Nothing to do here - they're already in the IR - - // Erase operations that were coalesced or superseded - for (auto *op : toErase) { - op->erase(); - } - } - - void createBlockWrite(OpBuilder &builder, - const SmallVector &sequence, - AIE::DeviceOp deviceOp) { - if (sequence.empty()) return; - - MLIRContext *ctx = builder.getContext(); - uint32_t startAddr = sequence[0].address; - - // Generate a unique name for the global memref - static unsigned globalCounter = 0; - std::string globalName = "coalesced_write32_" + - std::to_string(startAddr) + "_" + - std::to_string(globalCounter++); - - // Collect values - SmallVector values; - for (auto &write : sequence) { - values.push_back(static_cast(write.value)); - } - - // Create memref type - auto i32Type = IntegerType::get(ctx, 32); - auto memrefType = MemRefType::get({static_cast(values.size())}, - i32Type); - - // Create DenseIntElementsAttr for initial values - auto tensorType = RankedTensorType::get({static_cast(values.size())}, - i32Type); - auto valuesAttr = DenseElementsAttr::get( - tensorType, ArrayRef(values)); - - // Get location from first operation - Location loc = sequence[0].op->getLoc(); - - // Insert the global at the beginning of the device - builder.setInsertionPointToStart(deviceOp.getBody()); - memref::GlobalOp::create( - builder, - loc, - globalName, - /*sym_visibility=*/builder.getStringAttr("private"), - /*type=*/memrefType, - /*initial_value=*/valuesAttr, - /*constant=*/true, - /*alignment=*/nullptr); - - // Create a GetGlobalOp and BlockWriteOp at the position of the first write - builder.setInsertionPoint(sequence[0].op); - auto getGlobalOp = memref::GetGlobalOp::create( - builder, loc, memrefType, globalName); - - NpuBlockWriteOp::create( - builder, - loc, - startAddr, - getGlobalOp.getResult(), - nullptr, // buffer - nullptr, // column - nullptr // row - ); - } -}; - -} // namespace - -namespace xilinx::AIEX { -std::unique_ptr> createAIECoalesceWrite32sPass() { - return std::make_unique(); -} -} // namespace xilinx::AIEX diff --git a/lib/Dialect/AIEX/Transforms/AIEDMATasksToNPU.cpp b/lib/Dialect/AIEX/Transforms/AIEDMATasksToNPU.cpp index 58b0c03e971..096a72a850a 100644 --- a/lib/Dialect/AIEX/Transforms/AIEDMATasksToNPU.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEDMATasksToNPU.cpp @@ -186,8 +186,10 @@ struct AIEDMATasksToNPUPass : AIEDMATasksToNPUBase { uint64_t register_addr = target_model.getDmaBdAddress(tile.getCol(), tile.getRow(), bd_id) + target_model.getDmaBdAddressOffset(tile.getCol(), tile.getRow()); - - // Try to find the root block argument, either directly or through subviews/casts + + // A buffer descriptor can refer to a statically allocated aie.buffer, or to a + // DDR buffer which will be passed as a runtime arguument (block argument). + // Try to find the root block argument, either directly or through subviews/casts. mlir::BlockArgument buf_arg = nullptr; int64_t offset = 0; @@ -224,7 +226,7 @@ struct AIEDMATasksToNPUPass : AIEDMATasksToNPUBase { NpuWrite32Op::create(builder, bd_op.getLoc(), register_addr, buf_addr, nullptr, nullptr, nullptr); } else { - return bd_op->emitOpError("Buffer argument must be a constant aie.buffer, a runtime sequence input argument, or a memref.subview/memref.cast of a block argument."); + return bd_op->emitOpError("Buffer argument must be a constant aie.buffer, a runtime sequence input argument, or a (chain of) subview(s) or cast(s) of a block argument with constant offsets and strides equal to one."); } return success(); } diff --git a/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp b/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp index be12caa0a3b..3eb2fb64976 100644 --- a/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEDmaToNpu.cpp @@ -285,7 +285,7 @@ struct DmaToNpuPattern : OpConversionPattern { return failure(); } - // arg_idx and offset handling for memref or memref.subview + // arg_idx and offset for block arguments AIE::RuntimeSequenceOp seq_op = op->getParentOfType(); if (!seq_op) { @@ -294,11 +294,10 @@ struct DmaToNpuPattern : OpConversionPattern { return failure(); } - // Handle both direct block arguments and memref.subview operations mlir::Value rootMemref = memref; int64_t subviewOffset = 0; - // Trace through memref.subview and memref.cast chain to find root block argument + // Trace through memref.subview and memref.reinterpret_cast chain, if any, to find root block argument auto traceResult = traceSubviewToBlockArgument(memref); if (!traceResult) { return op->emitOpError("memref must be a block argument or subview/cast/reinterpret_cast of a block argument with static offsets, sizes, and strides"); @@ -318,7 +317,6 @@ struct DmaToNpuPattern : OpConversionPattern { if (arg_idx < 0) return failure(); - // Add the subview offset to the existing offset offset += subviewOffset; // bd_id diff --git a/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp b/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp index 82e8bdd0097..d415a896317 100644 --- a/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEExpandLoadPdi.cpp @@ -9,7 +9,7 @@ //===----------------------------------------------------------------------===// // // This pass expands `npu.load_pdi` operations that reference a device into: -// 1. An empty device PDI load +// 1. An empty device PDI load (causes firmware to reset the device) // 2. Optional reset operations based on command-line configuration // 3. Explicit configuration operations (write32/blockwrite) // @@ -51,23 +51,23 @@ static ResetTileType parseTileTypes(llvm::StringRef str) { if (str.empty()) return ResetTileType::None; - ResetTileType result = ResetTileType::None; + unsigned result = 0; llvm::SmallVector tokens; str.split(tokens, ',', -1, false); for (auto token : tokens) { token = token.trim(); if (token == "shim" || token == "shimnoc") - result = result | ResetTileType::ShimNOC; + result |= static_cast(ResetTileType::ShimNOC); else if (token == "mem" || token == "memtile") - result = result | ResetTileType::MemTile; + result |= static_cast(ResetTileType::MemTile); else if (token == "core" || token == "coretile") - result = result | ResetTileType::CoreTile; + result |= static_cast(ResetTileType::CoreTile); else if (token == "all") - result = ResetTileType::All; + return ResetTileType::All; } - return result; + return static_cast(result); } // Helper function to parse reset mode from string diff --git a/lib/Dialect/AIEX/Transforms/CMakeLists.txt b/lib/Dialect/AIEX/Transforms/CMakeLists.txt index 4679734f2e2..5818ea8478d 100644 --- a/lib/Dialect/AIEX/Transforms/CMakeLists.txt +++ b/lib/Dialect/AIEX/Transforms/CMakeLists.txt @@ -24,7 +24,6 @@ add_mlir_dialect_library(AIEXTransforms AIETransformBfpTypes.cpp AIETxnToControlPacket.cpp AIEExpandLoadPdi.cpp - AIECoalesceWrite32s.cpp ADDITIONAL_HEADER_DIRS ${AIE_BINARY_DIR}/include diff --git a/lib/Targets/AIERT.cpp b/lib/Targets/AIERT.cpp index 8e6203ccb95..b8a8875141d 100644 --- a/lib/Targets/AIERT.cpp +++ b/lib/Targets/AIERT.cpp @@ -893,18 +893,6 @@ LogicalResult xilinx::AIE::AIERTControl::resetCoreUnreset(int col, int row) { return success(); } -LogicalResult xilinx::AIE::AIERTControl::resetLocks(int col, int row, int numLocks) { - auto tileLoc = XAie_TileLoc(col, row); - // Reset all locks to value 0 - for (int lockID = 0; lockID < numLocks; lockID++) { - XAie_Lock lock; - lock.LockId = lockID; - lock.LockVal = 0; - TRY_XAIE_API_LOGICAL_RESULT(XAie_LockSetValue, &aiert->devInst, tileLoc, lock); - } - return success(); -} - LogicalResult xilinx::AIE::AIERTControl::resetLock(int col, int row, int lockId) { auto tileLoc = XAie_TileLoc(col, row); // Reset a single lock to value 0 @@ -916,10 +904,10 @@ LogicalResult xilinx::AIE::AIERTControl::resetLock(int col, int row, int lockId) } LogicalResult xilinx::AIE::AIERTControl::resetSwitchConnection(int col, int row, - WireBundle sourceBundle, - int sourceChannel, - WireBundle destBundle, - int destChannel) { + WireBundle sourceBundle, + int sourceChannel, + WireBundle destBundle, + int destChannel) { auto tileLoc = XAie_TileLoc(col, row); // Helper lambda to map WireBundle to StrmSwPortType diff --git a/python/compiler/aiecc/cl_arguments.py b/python/compiler/aiecc/cl_arguments.py index 435762cb076..64f316f3087 100644 --- a/python/compiler/aiecc/cl_arguments.py +++ b/python/compiler/aiecc/cl_arguments.py @@ -454,21 +454,6 @@ def parse_args(args=None): action="store_true", help="Expand load_pdi operations into explicit device reset and configuration sequences", ) - parser.add_argument( - "--no-coalesce-write32s", - dest="coalesce_write32s", - default=True, - action="store_const", - const=False, - help="Do not coalesce write32 operations into blockwrites in the NPU instruction sequence", - ) - parser.add_argument( - "--min-writes-to-coalesce", - dest="min_writes_to_coalesce", - default=2, - type=int, - help="Minimum number of consecutive write32 operations required to coalesce into a blockwrite (default: 2)", - ) opts = parser.parse_args(args) diff --git a/python/compiler/aiecc/main.py b/python/compiler/aiecc/main.py index cf907b56de7..f9dc115faca 100644 --- a/python/compiler/aiecc/main.py +++ b/python/compiler/aiecc/main.py @@ -156,8 +156,6 @@ def _create_npu_lowering_pipeline( reset_switches_mode="never", reset_locks_tiles="", reset_locks_mode="never", - coalesce_write32s=True, - min_writes_to_coalesce=2, ): device_pipeline_1 = ( ) @@ -185,11 +183,6 @@ def _create_npu_lowering_pipeline( reset_locks_tiles=reset_locks_tiles, reset_locks_mode=reset_locks_mode, ) - if coalesce_write32s: - pipeline = pipeline.Nested( - "aie.device", - Pipeline().add_pass("aie-coalesce-write32s", min_writes_to_coalesce=min_writes_to_coalesce), - ) return pipeline @@ -1738,8 +1731,6 @@ async def run_flow(self): reset_switches_mode=opts.reset_switches_mode, reset_locks_tiles=opts.reset_locks_tiles, reset_locks_mode=opts.reset_locks_mode, - coalesce_write32s=opts.coalesce_write32s, - min_writes_to_coalesce=opts.min_writes_to_coalesce ) pass_pipeline = npu_pipeline.materialize(module=True) npu_insts_file = self.prepend_tmp(f"npu_insts.mlir") From 8126ede28023401b5c7e4ada13fe9a14958e676b Mon Sep 17 00:00:00 2001 From: andrej Date: Thu, 18 Dec 2025 16:08:22 -0700 Subject: [PATCH 32/40] add unit test for materialize-runtime-sequences pass --- .../DmaToNpu/dma_to_npu_subview.mlir | 31 +++++++++ .../error_arg_type_mismatch.mlir | 35 ++++++++++ .../error_cyclic.mlir | 64 +++++++++++++++++++ .../inline_and_load_pdi.mlir | 44 +++++++++++++ .../inline_symbols.mlir | 41 ++++++++++++ .../dma-tasks-to-npu/good_subview.mlir | 33 ++++++++++ 6 files changed, 248 insertions(+) create mode 100644 test/Conversion/DmaToNpu/dma_to_npu_subview.mlir create mode 100644 test/Passes/materialize-runtime-sequences/error_arg_type_mismatch.mlir create mode 100644 test/Passes/materialize-runtime-sequences/error_cyclic.mlir create mode 100644 test/Passes/materialize-runtime-sequences/inline_and_load_pdi.mlir create mode 100644 test/Passes/materialize-runtime-sequences/inline_symbols.mlir create mode 100644 test/bd-chains-and-dma-tasks/dma-tasks-to-npu/good_subview.mlir diff --git a/test/Conversion/DmaToNpu/dma_to_npu_subview.mlir b/test/Conversion/DmaToNpu/dma_to_npu_subview.mlir new file mode 100644 index 00000000000..971389f0afb --- /dev/null +++ b/test/Conversion/DmaToNpu/dma_to_npu_subview.mlir @@ -0,0 +1,31 @@ +//===- dma_to_npu_subview.mlir ---------------------------------*- MLIR -*-===// +// +// This file is licensed under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// Copyright (C) 2025, Advanced Micro Devices, Inc. +// +//===----------------------------------------------------------------------===// + +// RUN: aie-opt --aie-dma-to-npu %s | FileCheck %s + +// Test that memref.subview is correctly traced through to adjust address patches + +// CHECK-LABEL: module +// CHECK: aiex.npu.address_patch +// CHECK-SAME: arg_idx = 0 : i32 +// CHECK-SAME: arg_plus = 512 : i32 +module { + aie.device(npu1) { + aie.runtime_sequence(%arg0: memref<1024xi32>) { + // Create a subview at offset 128 elements (512 bytes for i32) + %subview = memref.subview %arg0[128] [256] [1] : memref<1024xi32> to memref<256xi32, strided<[1], offset: 128>> + %reinterpret = memref.reinterpret_cast %subview to offset: [0], sizes: [256], strides: [1] : memref<256xi32, strided<[1], offset: 128>> to memref<256xi32> + // DMA should use the reinterpreted memref, and the pass should trace back to %arg0 with offset + aiex.npu.dma_memcpy_nd (%reinterpret[0, 0, 0, 0][1, 1, 1, 256][0, 0, 0, 1]) { metadata = @buffer, id = 0 : i64 } : memref<256xi32> + } + %tile_0_0 = aie.tile(0, 0) + aie.shim_dma_allocation @buffer (%tile_0_0, S2MM, 0) + } +} diff --git a/test/Passes/materialize-runtime-sequences/error_arg_type_mismatch.mlir b/test/Passes/materialize-runtime-sequences/error_arg_type_mismatch.mlir new file mode 100644 index 00000000000..fe5d6396955 --- /dev/null +++ b/test/Passes/materialize-runtime-sequences/error_arg_type_mismatch.mlir @@ -0,0 +1,35 @@ +//===- error_arg_type_mismatch.mlir ----------------------------*- MLIR -*-===// +// +// This file is licensed under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// Copyright (C) 2025, Advanced Micro Devices, Inc. +// +//===----------------------------------------------------------------------===// + +// RUN: aie-opt --verify-diagnostics --aie-materialize-runtime-sequences %s + +// Test detection of argument type mismatches when calling runtime sequences + +module { + aie.device(npu2) @main { + %tile00 = aie.tile(0, 0) + + aie.runtime_sequence @main_seq(%arg0: memref<16xi32>) { + aiex.configure @config_wrong_type { + // expected-error @+1 {{argument 0 type mismatch}} + aiex.run @seq_expects_i16(%arg0) : (memref<16xi32>) + } + } + } + + aie.device(npu2) @config_wrong_type { + %tile10 = aie.tile(1, 0) + + // This expects memref<16xi16> but we're passing memref<16xi32> + aie.runtime_sequence @seq_expects_i16(%arg0: memref<16xi16>) { + aiex.npu.write32 {address = 100 : ui32, column = 1 : i32, row = 0 : i32, value = 42 : ui32} + } + } +} diff --git a/test/Passes/materialize-runtime-sequences/error_cyclic.mlir b/test/Passes/materialize-runtime-sequences/error_cyclic.mlir new file mode 100644 index 00000000000..d2e0ce541fb --- /dev/null +++ b/test/Passes/materialize-runtime-sequences/error_cyclic.mlir @@ -0,0 +1,64 @@ +//===- error_cyclic.mlir ----------------------------------------*- MLIR -*-===// +// +// This file is licensed under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// Copyright (C) 2025, Advanced Micro Devices, Inc. +// +//===----------------------------------------------------------------------===// + +// RUN: aie-opt --verify-diagnostics --split-input-file --aie-materialize-runtime-sequences %s + +// Test detection of self-recursive runtime sequence calls + +module { + aie.device(npu2) @main { + %tile00 = aie.tile(0, 0) + + // expected-error @+1 {{Runtime sequence call graph contains a cycle}} + aie.runtime_sequence @main_seq(%arg0: memref<16xi32>) { + aiex.configure @main { + aiex.run @main_seq(%arg0) : (memref<16xi32>) + } + } + } +} + +// ----- + +// Test detection of cycles through intermediate runtime sequences + +module { + aie.device(npu2) @main { + %tile00 = aie.tile(0, 0) + + // expected-error @+1 {{Runtime sequence call graph contains a cycle}} + aie.runtime_sequence @main_seq(%arg0: memref<16xi32>) { + aiex.configure @config_a { + aiex.run @seq_a(%arg0) : (memref<16xi32>) + } + } + } + + aie.device(npu2) @config_a { + %tile10 = aie.tile(1, 0) + + aie.runtime_sequence @seq_a(%arg0: memref<16xi32>) { + aiex.configure @config_b { + aiex.run @seq_b(%arg0) : (memref<16xi32>) + } + } + } + + aie.device(npu2) @config_b { + %tile20 = aie.tile(2, 0) + + aie.runtime_sequence @seq_b(%arg0: memref<16xi32>) { + // This creates a cycle: main -> a -> b -> a + aiex.configure @config_a { + aiex.run @seq_a(%arg0) : (memref<16xi32>) + } + } + } +} diff --git a/test/Passes/materialize-runtime-sequences/inline_and_load_pdi.mlir b/test/Passes/materialize-runtime-sequences/inline_and_load_pdi.mlir new file mode 100644 index 00000000000..be67b086e09 --- /dev/null +++ b/test/Passes/materialize-runtime-sequences/inline_and_load_pdi.mlir @@ -0,0 +1,44 @@ +//===- inline_and_load_pdi.mlir --------------------------------*- MLIR -*-===// +// +// This file is licensed under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// Copyright (C) 2025, Advanced Micro Devices, Inc. +// +//===----------------------------------------------------------------------===// + +// RUN: aie-opt --aie-materialize-runtime-sequences %s | FileCheck %s + +// Test that aiex.configure blocks are properly transformed into load_pdi operations +// and that aiex.run calls are inlined + +module { + // CHECK-LABEL: aie.device(npu2) { + aie.device(npu2) @main { + %tile00 = aie.tile(0, 0) + + // CHECK-LABEL: aie.runtime_sequence @main_seq + // CHECK-SAME: (%[[ARG0:.*]]: memref<16xi32>) + aie.runtime_sequence @main_seq(%arg0: memref<16xi32>) { + // CHECK: aiex.npu.load_pdi {device_ref = @config_a} + // CHECK-NOT: aiex.configure + // CHECK-NOT: aiex.run + // CHECK: aiex.npu.write32 {address = 100 : ui32, column = 1 : i32, row = 0 : i32, value = 42 : ui32} + aiex.configure @config_a { + aiex.run @seq_a(%arg0) : (memref<16xi32>) + } + // CHECK: aiex.npu.write32 {address = 200 : ui32, column = 0 : i32, row = 0 : i32, value = 99 : ui32} + aiex.npu.write32 {address = 200 : ui32, column = 0 : i32, row = 0 : i32, value = 99 : ui32} + } + } + + // CHECK: aie.device(npu2) @config_a + aie.device(npu2) @config_a { + %tile10 = aie.tile(1, 0) + + aie.runtime_sequence @seq_a(%arg0: memref<16xi32>) { + aiex.npu.write32 {address = 100 : ui32, column = 1 : i32, row = 0 : i32, value = 42 : ui32} + } + } +} diff --git a/test/Passes/materialize-runtime-sequences/inline_symbols.mlir b/test/Passes/materialize-runtime-sequences/inline_symbols.mlir new file mode 100644 index 00000000000..162b32ebcd7 --- /dev/null +++ b/test/Passes/materialize-runtime-sequences/inline_symbols.mlir @@ -0,0 +1,41 @@ +//===- inline_symbols.mlir -------------------------------------*- MLIR -*-===// +// +// This file is licensed under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// Copyright (C) 2025, Advanced Micro Devices, Inc. +// +//===----------------------------------------------------------------------===// + +// RUN: aie-opt --aie-materialize-runtime-sequences %s | FileCheck %s + +// Test that symbol definitions (like shim_dma_allocation) are properly preserved +// when inlining runtime sequences from other devices + +module { + aie.device(npu2) @main { + %tile00 = aie.tile(0, 0) + + // CHECK-LABEL: aie.runtime_sequence @main_seq + aie.runtime_sequence @main_seq(%arg0: memref<64xi32>) { + // CHECK: aiex.npu.load_pdi {device_ref = @config_with_symbols} + // CHECK: aiex.npu.dma_memcpy_nd(%[[ARG0:.*]][0, 0, 0, 0][1, 1, 1, 64][0, 0, 0, 1]) + // CHECK-SAME: metadata = @buffer_in + aiex.configure @config_with_symbols { + aiex.run @seq_with_dma(%arg0) : (memref<64xi32>) + } + } + } + + // CHECK: aie.device(npu2) @config_with_symbols + aie.device(npu2) @config_with_symbols { + %tile20 = aie.tile(2, 0) + // CHECK: aie.shim_dma_allocation @buffer_in + aie.shim_dma_allocation @buffer_in(%tile20, S2MM, 0) + + aie.runtime_sequence @seq_with_dma(%arg0: memref<64xi32>) { + aiex.npu.dma_memcpy_nd(%arg0[0, 0, 0, 0][1, 1, 1, 64][0, 0, 0, 1]) { metadata = @buffer_in, id = 0 : i64 } : memref<64xi32> + } + } +} diff --git a/test/bd-chains-and-dma-tasks/dma-tasks-to-npu/good_subview.mlir b/test/bd-chains-and-dma-tasks/dma-tasks-to-npu/good_subview.mlir new file mode 100644 index 00000000000..7318856e20d --- /dev/null +++ b/test/bd-chains-and-dma-tasks/dma-tasks-to-npu/good_subview.mlir @@ -0,0 +1,33 @@ +// +// This file is licensed under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// Copyright (C) 2025 AMD Inc. + +// RUN: aie-opt --aie-dma-tasks-to-npu %s | FileCheck %s + +// Test that memref.subview is correctly traced through when configuring DMA tasks + +module { + aie.device(npu1) { + %tile_0_0 = aie.tile(0, 0) + + aie.runtime_sequence(%arg0: memref<1024xi16>) { + // Create a subview at offset 64 elements (128 bytes for i16) + // CHECK: aiex.npu.writebd + // CHECK: aiex.npu.address_patch {addr = {{.*}}, arg_idx = 0 : i32, arg_plus = 128 : i32} + %subview = memref.subview %arg0[64] [128] [1] : memref<1024xi16> to memref<128xi16, strided<[1], offset: 64>> + %reinterpret = memref.reinterpret_cast %subview to offset: [0], sizes: [128], strides: [1] : memref<128xi16, strided<[1], offset: 64>> to memref<128xi16> + %t1 = aiex.dma_configure_task(%tile_0_0, MM2S, 0) { + aie.dma_bd(%reinterpret : memref<128xi16>, 0, 128) {bd_id = 7 : i32} + aie.end + } {issue_token = true} + + // CHECK: aiex.npu.push_queue(0, 0, MM2S : 0) {bd_id = 7 : i32, issue_token = true, repeat_count = 0 : i32} + aiex.dma_start_task(%t1) + // CHECK: aiex.npu.sync {channel = 0 : i32, column = 0 : i32, column_num = 1 : i32, direction = 1 : i32, row = 0 : i32, row_num = 1 : i32} + aiex.dma_await_task(%t1) + } + } +} From 8a88ce51ebe4b46c11a52b8058b8019dda4bc06b Mon Sep 17 00:00:00 2001 From: andrej Date: Thu, 18 Dec 2025 16:17:37 -0700 Subject: [PATCH 33/40] fix cyclicity analysis and add argument verification to aiex.run --- .../AIEToConfiguration/AIEToConfiguration.cpp | 1 - lib/Dialect/AIEX/IR/AIEXDialect.cpp | 45 +++++++++++++++++-- .../AIEMaterializeRuntimeSequences.cpp | 42 +++++------------ 3 files changed, 54 insertions(+), 34 deletions(-) diff --git a/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp b/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp index 5185ad7cf85..2f55f3e3ddd 100644 --- a/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp +++ b/lib/Conversion/AIEToConfiguration/AIEToConfiguration.cpp @@ -857,7 +857,6 @@ xilinx::AIE::createConvertAIEToControlPacketsPass() { return std::make_unique(); } -// Public API to generate transaction binary and insert configuration ops mlir::LogicalResult xilinx::AIE::generateAndInsertConfigOps(xilinx::AIE::DeviceOp device, mlir::Operation *insertionPoint, diff --git a/lib/Dialect/AIEX/IR/AIEXDialect.cpp b/lib/Dialect/AIEX/IR/AIEXDialect.cpp index 78e7e7b4647..07c403a87cc 100644 --- a/lib/Dialect/AIEX/IR/AIEXDialect.cpp +++ b/lib/Dialect/AIEX/IR/AIEXDialect.cpp @@ -978,8 +978,47 @@ AIE::RuntimeSequenceOp AIEX::RunOp::getCalleeRuntimeSequenceOp() { } LogicalResult AIEX::RunOp::verify() { - if (getCalleeDeviceOp() && getCalleeRuntimeSequenceOp()) { - return success(); + AIE::DeviceOp calleeDevice = getCalleeDeviceOp(); + if (!calleeDevice) { + return emitOpError() << "cannot find callee device for runtime sequence '" + << getRuntimeSequenceSymbol() << "'"; } - return failure(); + + AIE::RuntimeSequenceOp calleeRuntimeSequence = getCalleeRuntimeSequenceOp(); + if (!calleeRuntimeSequence) { + return emitOpError() << "cannot find runtime sequence '" + << getRuntimeSequenceSymbol() << "'"; + } + + // Validate argument types match the callee's parameters + Block &calleeBody = calleeRuntimeSequence.getBody().front(); + ValueRange values = getArgs(); + + if (calleeBody.getNumArguments() != values.size()) { + return emitOpError() << "argument count mismatch"; + } + + for (unsigned i = 0, n = calleeBody.getNumArguments(); i < n; i++) { + BlockArgument arg = calleeBody.getArgument(i); + Value val = values[i]; + + // For memref types, check compatibility (same shape and element type) + auto argType = dyn_cast(arg.getType()); + auto valType = dyn_cast(val.getType()); + + if (argType && valType) { + if (argType.getShape() != valType.getShape() || + argType.getElementType() != valType.getElementType()) { + return emitOpError() << "argument " << i << " type mismatch: " + << "expected " << argType + << " but got " << valType; + } + } else if (arg.getType() != val.getType()) { + return emitOpError() << "argument " << i << " type mismatch: " + << "expected " << arg.getType() + << " but got " << val.getType(); + } + } + + return success(); } diff --git a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp index 87bafc4a02d..b7e645d2fa3 100644 --- a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp @@ -48,23 +48,27 @@ struct RuntimeCallGraphCyclicityAnalysis { return; } llvm::SetVector visited = {}; + visited.insert(runtimeSequenceOp); llvm::SetVector todo; - for (RunOp runOp : runtimeSequenceOp.getOps()) { + runtimeSequenceOp.walk([&](RunOp runOp) { todo.insert(runOp); - } + }); while(!todo.empty()) { RunOp curOp = todo.pop_back_val(); if (AIE::RuntimeSequenceOp calleeRuntimeSequence = curOp.getCalleeRuntimeSequenceOp()) { if (visited.contains(calleeRuntimeSequence)) { - continue; + isCyclic = true; + isValid = true; + return; } visited.insert(calleeRuntimeSequence); - for (RunOp runOp : calleeRuntimeSequence.getOps()) { + // Also need to walk the callee to find all nested RunOps + calleeRuntimeSequence.walk([&](RunOp runOp) { todo.insert(runOp); - } + }); } } - isCyclic = visited.contains(runtimeSequenceOp); + isCyclic = false; isValid = true; } }; @@ -357,28 +361,6 @@ struct InlineRuntimeCallsPattern : RewritePattern { for (unsigned i = 0, n = calleeBody.getNumArguments(); i < n; i++) { BlockArgument arg = calleeBody.getArgument(i); Value val = values[i]; - - // For memref types, check compatibility (same shape and element type) - // rather than exact type equality, to allow for strided memrefs with offsets - auto argType = dyn_cast(arg.getType()); - auto valType = dyn_cast(val.getType()); - - if (argType && valType) { - // Check that shapes and element types match - if (argType.getShape() != valType.getShape() || - argType.getElementType() != valType.getElementType()) { - return runOp.emitOpError() << "argument " << i << " type mismatch: " - << "expected " << argType - << " but got " << valType; - } - // Types are compatible even if layouts differ (e.g., strided with offset) - } else if (arg.getType() != val.getType()) { - // For non-memref types, require exact match - return runOp.emitOpError() << "argument " << i << " type mismatch: " - << "expected " << arg.getType() - << " but got " << val.getType(); - } - argMap.map(arg, val); } @@ -458,7 +440,7 @@ struct AIEMaterializeRuntimeSequencesPass return signalPassFailure(); } if (cyclicity.isCyclic) { - runtimeSequenceOp.emitError("Runtime sequence contains a cycle"); + runtimeSequenceOp.emitError("Runtime sequence call graph contains a cycle"); return signalPassFailure(); } } @@ -475,7 +457,7 @@ struct AIEMaterializeRuntimeSequencesPass RewritePatternSet patterns_0(ctx); patterns_0.insert(ctx); if (failed(applyPatternsGreedily(deviceOp, std::move(patterns_0), rewriter_config))) { - signalPassFailure(); + return signalPassFailure(); } // Insert LoadPDI ops for each aiex.configure op From 71b974550735361dbbb451f953f73af71ca26854 Mon Sep 17 00:00:00 2001 From: andrej Date: Thu, 18 Dec 2025 16:45:58 -0700 Subject: [PATCH 34/40] fix cycle detection for real --- .../AIEMaterializeRuntimeSequences.cpp | 55 ++++++++++++------- 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp index b7e645d2fa3..1f063c7a9d2 100644 --- a/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp +++ b/lib/Dialect/AIEX/Transforms/AIEMaterializeRuntimeSequences.cpp @@ -47,26 +47,43 @@ struct RuntimeCallGraphCyclicityAnalysis { op->emitError("RuntimeCallGraphCyclicityAnalysis can only be called on aiex.runtime_sequence operations."); return; } - llvm::SetVector visited = {}; - visited.insert(runtimeSequenceOp); - llvm::SetVector todo; - runtimeSequenceOp.walk([&](RunOp runOp) { - todo.insert(runOp); - }); - while(!todo.empty()) { - RunOp curOp = todo.pop_back_val(); - if (AIE::RuntimeSequenceOp calleeRuntimeSequence = curOp.getCalleeRuntimeSequenceOp()) { - if (visited.contains(calleeRuntimeSequence)) { - isCyclic = true; - isValid = true; - return; - } - visited.insert(calleeRuntimeSequence); - // Also need to walk the callee to find all nested RunOps - calleeRuntimeSequence.walk([&](RunOp runOp) { - todo.insert(runOp); - }); + + // Use DFS with a stack to detect cycles + // A cycle exists if we encounter a sequence already on the current path + llvm::DenseSet callStack; + llvm::DenseSet visited; + + std::function hasCycle = [&](AIE::RuntimeSequenceOp seq) -> bool { + if (callStack.contains(seq)) { + return true; // Found a cycle + } + if (visited.contains(seq)) { + return false; // Already checked this sequence } + + callStack.insert(seq); + visited.insert(seq); + + // Check all sequences called by this one + bool foundCycle = false; + seq.walk([&](RunOp runOp) { + if (AIE::RuntimeSequenceOp callee = runOp.getCalleeRuntimeSequenceOp()) { + if (hasCycle(callee)) { + foundCycle = true; + return WalkResult::interrupt(); + } + } + return WalkResult::advance(); + }); + + callStack.erase(seq); + return foundCycle; + }; + + if (hasCycle(runtimeSequenceOp)) { + isCyclic = true; + isValid = true; + return; } isCyclic = false; isValid = true; From d7345de31405444304694fa86eb3e2ab3402197f Mon Sep 17 00:00:00 2001 From: andrej Date: Thu, 18 Dec 2025 16:49:11 -0700 Subject: [PATCH 35/40] add end-to-end npu-xrt tests --- test/npu-xrt/reconfigure_loadpdi/aie.mlir | 144 ++++++++++++++++++ .../reconfigure_loadpdi/run_loadpdi.lit | 8 + .../reconfigure_loadpdi/run_write32s.lit | 8 + test/npu-xrt/reconfigure_loadpdi/test.cpp | 93 +++++++++++ 4 files changed, 253 insertions(+) create mode 100644 test/npu-xrt/reconfigure_loadpdi/aie.mlir create mode 100644 test/npu-xrt/reconfigure_loadpdi/run_loadpdi.lit create mode 100644 test/npu-xrt/reconfigure_loadpdi/run_write32s.lit create mode 100644 test/npu-xrt/reconfigure_loadpdi/test.cpp diff --git a/test/npu-xrt/reconfigure_loadpdi/aie.mlir b/test/npu-xrt/reconfigure_loadpdi/aie.mlir new file mode 100644 index 00000000000..7a59536f904 --- /dev/null +++ b/test/npu-xrt/reconfigure_loadpdi/aie.mlir @@ -0,0 +1,144 @@ +// (c) Copyright 2025 Advanced Micro Devices, Inc. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +// This test: +// 1. Calls the @add_two design on the first four i32 elements of the input. +// 2. Calls the @add_two design on the last four i32 elements of the input. +// 3. Calls the @add_three design on i32 elements 4-7 of the input. +// 4. Calls the @add_three_design on the last four i32 elements of the input. +// Elements 8-11 remain untouched by any design. +// This tests, end-to-end: +// - Inlining ('calling') runtime sequences multiple times. +// - Slicing input argument buffers to the runtime sequence in different ways. +// - Reconfiguration between different designs. + +module { + + aie.device(npu2) @main { + + aie.runtime_sequence @sequence(%arg : memref<512xi32>) { + + %c3_i32 = arith.constant 3 : i32 + + aiex.configure @add_two { + %arg1_subview = memref.subview %arg[0] [4] [1] : memref<512xi32> to memref<4xi32, strided<[1], offset: 0>> + %arg1 = memref.reinterpret_cast %arg1_subview to offset: [0], sizes: [4], strides: [1] : memref<4xi32, strided<[1], offset: 0>> to memref<4xi32> + aiex.run @add_two_sequence (%arg1) : (memref<4xi32>) + %arg2_subview = memref.subview %arg[12] [4] [1] : memref<512xi32> to memref<4xi32, strided<[1], offset: 12>> + %arg2 = memref.reinterpret_cast %arg2_subview to offset: [0], sizes: [4], strides: [1] : memref<4xi32, strided<[1], offset: 12>> to memref<4xi32> + aiex.run @add_two_sequence (%arg2) : (memref<4xi32>) + } + + aiex.configure @add_three { + %arg1_subview = memref.subview %arg[4] [4] [1] : memref<512xi32> to memref<4xi32, strided<[1], offset: 4>> + %arg1 = memref.reinterpret_cast %arg1_subview to offset: [0], sizes: [4], strides: [1] : memref<4xi32, strided<[1], offset: 4>> to memref<4xi32> + aiex.run @add_three_sequence (%arg1) : (memref<4xi32>) + %arg2_subview = memref.subview %arg[12] [4] [1] : memref<512xi32> to memref<4xi32, strided<[1], offset: 12>> + %arg2 = memref.reinterpret_cast %arg2_subview to offset: [0], sizes: [4], strides: [1] : memref<4xi32, strided<[1], offset: 12>> to memref<4xi32> + aiex.run @add_three_sequence (%arg2) : (memref<4xi32>) + } + + } + + } + + aie.device(npu2) @add_two { + + %t00 = aie.tile(0, 0) + %t02 = aie.tile(0, 2) + + aie.objectfifo @objfifo_in (%t00, {%t02}, 1 : i32) : !aie.objectfifo> + aie.objectfifo @objfifo_out(%t02, {%t00}, 1 : i32) : !aie.objectfifo> + + aie.core(%t02) { + %c0 = arith.constant 0 : index + %c1 = arith.constant 1 : index + %c2 = arith.constant 2 : index + %c2_i32 = arith.constant 2 : i32 + %c8 = arith.constant 8 : index + %c4 = arith.constant 4 : index + %c_intmax = arith.constant 0xFFFFFE : index + + scf.for %niter = %c0 to %c_intmax step %c1 { + %subview_in = aie.objectfifo.acquire @objfifo_in (Consume, 1) : !aie.objectfifosubview> + %subview_out = aie.objectfifo.acquire @objfifo_out(Produce, 1) : !aie.objectfifosubview> + %elem_in = aie.objectfifo.subview.access %subview_in [0] : !aie.objectfifosubview> -> memref<4xi32> + %elem_out = aie.objectfifo.subview.access %subview_out[0] : !aie.objectfifosubview> -> memref<4xi32> + scf.for %i = %c0 to %c4 step %c1 { + %0 = memref.load %elem_in[%i] : memref<4xi32> + %1 = arith.addi %0, %c2_i32 : i32 + memref.store %1, %elem_out[%i] : memref<4xi32> + } + aie.objectfifo.release @objfifo_in (Consume, 1) + aie.objectfifo.release @objfifo_out(Produce, 1) + } + aie.end + } + + aie.runtime_sequence @add_two_sequence(%a : memref<4xi32>) { + + %t_in = aiex.dma_configure_task_for @objfifo_in { + aie.dma_bd(%a : memref<4xi32>, 0, 4) + aie.end + } + %t_out = aiex.dma_configure_task_for @objfifo_out { + aie.dma_bd(%a: memref<4xi32>, 0, 4) + aie.end + } {issue_token = true} + aiex.dma_start_task(%t_in) + aiex.dma_start_task(%t_out) + aiex.dma_await_task(%t_out) + } + + } + + aie.device(npu2) @add_three { + + %t00 = aie.tile(0, 0) + %t02 = aie.tile(0, 2) + + aie.objectfifo @objfifo_in (%t00, {%t02}, 1 : i32) : !aie.objectfifo> + aie.objectfifo @objfifo_out(%t02, {%t00}, 1 : i32) : !aie.objectfifo> + + aie.core(%t02) { + %c0 = arith.constant 0 : index + %c1 = arith.constant 1 : index + %c2 = arith.constant 2 : index + %c3_i32 = arith.constant 3 : i32 + %c8 = arith.constant 8 : index + %c4 = arith.constant 4 : index + %c_intmax = arith.constant 0xFFFFFE : index + + scf.for %niter = %c0 to %c_intmax step %c1 { + %subview_in = aie.objectfifo.acquire @objfifo_in (Consume, 1) : !aie.objectfifosubview> + %subview_out = aie.objectfifo.acquire @objfifo_out(Produce, 1) : !aie.objectfifosubview> + %elem_in = aie.objectfifo.subview.access %subview_in [0] : !aie.objectfifosubview> -> memref<4xi32> + %elem_out = aie.objectfifo.subview.access %subview_out[0] : !aie.objectfifosubview> -> memref<4xi32> + scf.for %i = %c0 to %c4 step %c1 { + %0 = memref.load %elem_in[%i] : memref<4xi32> + %1 = arith.addi %0, %c3_i32 : i32 + memref.store %1, %elem_out[%i] : memref<4xi32> + } + aie.objectfifo.release @objfifo_in (Consume, 1) + aie.objectfifo.release @objfifo_out(Produce, 1) + } + aie.end + } + + aie.runtime_sequence @add_three_sequence(%a : memref<4xi32>) { + + %t_in = aiex.dma_configure_task_for @objfifo_in { + aie.dma_bd(%a : memref<4xi32>, 0, 4) + aie.end + } + %t_out = aiex.dma_configure_task_for @objfifo_out { + aie.dma_bd(%a: memref<4xi32>, 0, 4) + aie.end + } {issue_token = true} + aiex.dma_start_task(%t_in) + aiex.dma_start_task(%t_out) + aiex.dma_await_task(%t_out) + } + + } +} diff --git a/test/npu-xrt/reconfigure_loadpdi/run_loadpdi.lit b/test/npu-xrt/reconfigure_loadpdi/run_loadpdi.lit new file mode 100644 index 00000000000..e335c44c7bd --- /dev/null +++ b/test/npu-xrt/reconfigure_loadpdi/run_loadpdi.lit @@ -0,0 +1,8 @@ +// (c) Copyright 2025 Advanced Micro Devices, Inc. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// REQUIRES: ryzen_ai_npu2, peano +// +// RUN: %PYTHON aiecc.py -v --generate-full-elf --no-xchesscc --no-xbridge %S/aie.mlir +// RUN: clang -o test %S/test.cpp -std=c++17 -lstdc++ %xrt_flags +// RUN: ./test diff --git a/test/npu-xrt/reconfigure_loadpdi/run_write32s.lit b/test/npu-xrt/reconfigure_loadpdi/run_write32s.lit new file mode 100644 index 00000000000..1ee87787843 --- /dev/null +++ b/test/npu-xrt/reconfigure_loadpdi/run_write32s.lit @@ -0,0 +1,8 @@ +// (c) Copyright 2025 Advanced Micro Devices, Inc. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// REQUIRES: ryzen_ai_npu2, peano +// +// RUN: %PYTHON aiecc.py -v --generate-full-elf --expand-load-pdis --no-xchesscc --no-xbridge %S/aie.mlir +// RUN: clang -o test %S/test.cpp -std=c++17 -lstdc++ %xrt_flags +// RUN: ./test diff --git a/test/npu-xrt/reconfigure_loadpdi/test.cpp b/test/npu-xrt/reconfigure_loadpdi/test.cpp new file mode 100644 index 00000000000..ae4c70fe131 --- /dev/null +++ b/test/npu-xrt/reconfigure_loadpdi/test.cpp @@ -0,0 +1,93 @@ +// (c) Copyright 2025 Advanced Micro Devices, Inc. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#define DTYPE int32_t + +constexpr size_t DATA_COUNT = 16; +constexpr size_t BUF_SIZE = DATA_COUNT * sizeof(DTYPE); + +int main(int argc, const char *argv[]) { + // Set up input data + srand(1726250518); + std::vector vec_in(DATA_COUNT); + for (int i = 0; i < vec_in.size(); i++) { + vec_in[i] = DTYPE(i); + } + + // Set up XRT + unsigned int device_index = 0; + auto device = xrt::device(device_index); + // The name format here is : from the config.json + std::string kernelName = "main:sequence"; + xrt::elf ctx_elf{"aie.elf"}; + xrt::hw_context context = xrt::hw_context(device, ctx_elf); + auto kernel = xrt::ext::kernel(context, kernelName); + xrt::bo bo_inout = xrt::ext::bo{device, BUF_SIZE}; + + // Set up kernel run + char *buf_inout = bo_inout.map(); + memcpy(buf_inout, vec_in.data(), BUF_SIZE); + bo_inout.sync(XCL_BO_SYNC_BO_TO_DEVICE); + auto run = xrt::run(kernel); + run.set_arg(0, bo_inout); + + // Run + auto t_start = std::chrono::high_resolution_clock::now(); + run.start(); + run.wait2(); + auto t_stop = std::chrono::high_resolution_clock::now(); + bo_inout.sync(XCL_BO_SYNC_BO_FROM_DEVICE); + + // Validate output + std::vector vec_out(DATA_COUNT); + std::vector vec_ref(DATA_COUNT); + memcpy(vec_out.data(), buf_inout, BUF_SIZE); + for (int i = 0; i < 4; i++) { + vec_ref[i] = vec_in[i] + 2; + } + for (int i = 4; i < 8; i++) { + vec_ref[i] = vec_in[i] + 3; + } + for (int i = 8; i < 12; i++) { + vec_ref[i] = vec_in[i]; + } + for (int i = 12; i < 16; i++) { + vec_ref[i] = vec_in[i] + 2 + 3; + } + bool outputs_correct = (vec_out == vec_ref); + + // Report results + float time = + std::chrono::duration_cast(t_stop - t_start) + .count(); + std::cout << "Elapsed time for all kernel executions: " << std::fixed + << std::setprecision(0) << std::setw(8) << time << " μs" + << std::endl; + if (outputs_correct) { + std::cout << "PASS!" << std::endl; + } else { + for (int i = 0; i < DATA_COUNT; i++) { + std::cout << "in: " << std::setw(12) << vec_in[i] << ", " + << "out: " << std::setw(12) << vec_out[i] + << ", ref: " << std::setw(12) << vec_ref[i] << std::endl; + } + std::cout << "Fail." << std::endl; + } + + return (outputs_correct ? 0 : 1); +} From 20bb5e9295903bfef430c4f5751cc06c20d517aa Mon Sep 17 00:00:00 2001 From: andrej Date: Thu, 18 Dec 2025 16:49:42 -0700 Subject: [PATCH 36/40] remove SwiGLU example --- .../0_write32s_reset_core_dma_switch_lock.csv | 1000 ----------------- .../1_write32s_reset_core_dma_switch.csv | 1000 ----------------- .../ablation/2_write32s_reset_core_dma.csv | 1000 ----------------- .../ablation/3_write32s_reset_core.csv | 1000 ----------------- .../ablation/4_write32s_reset_nothing.csv | 1000 ----------------- .../ablation/ablation_results.png | Bin 238506 -> 0 bytes .../ablation/visualize_ablation.py | 214 ---- .../reconfiguration/benchmark_results.csv | 1 - .../reconfiguration/benchmark_results.png | Bin 336117 -> 0 bytes .../reconfiguration/instructions.md | 94 -- .../reconfiguration/kernels/mul.cc | 42 - .../reconfiguration/kernels/mv.cc | 78 -- .../reconfiguration/kernels/silu.cc | 53 - .../reconfiguration/operators/eltwise_mul.py | 206 ---- .../operators/matrix_vector_mul.py | 141 --- .../reconfiguration/operators/silu.py | 212 ---- .../reconfiguration/run_benchmarks.sh | 54 - .../reconfiguration/swiglu/README.md | 96 -- .../fused_transactions_loadpdi/Makefile | 58 - .../combine_mlir.py | 170 --- .../fused_transactions_loadpdi/test.cpp | 258 ----- .../fused_transactions_write32s/Makefile | 94 -- .../combine_mlir.py | 170 --- .../fused_transactions_write32s/test.cpp | 262 ----- .../swiglu/generate_reference.py | 103 -- .../reconfiguration/swiglu/runlist/Makefile | 74 -- .../reconfiguration/swiglu/runlist/test.cpp | 388 ------- .../swiglu/separate_xclbins/Makefile | 66 -- .../swiglu/separate_xclbins/test.cpp | 386 ------- .../reconfiguration/visualize_results.py | 236 ---- 30 files changed, 8456 deletions(-) delete mode 100644 programming_examples/reconfiguration/ablation/0_write32s_reset_core_dma_switch_lock.csv delete mode 100644 programming_examples/reconfiguration/ablation/1_write32s_reset_core_dma_switch.csv delete mode 100644 programming_examples/reconfiguration/ablation/2_write32s_reset_core_dma.csv delete mode 100644 programming_examples/reconfiguration/ablation/3_write32s_reset_core.csv delete mode 100644 programming_examples/reconfiguration/ablation/4_write32s_reset_nothing.csv delete mode 100644 programming_examples/reconfiguration/ablation/ablation_results.png delete mode 100755 programming_examples/reconfiguration/ablation/visualize_ablation.py delete mode 100644 programming_examples/reconfiguration/benchmark_results.csv delete mode 100644 programming_examples/reconfiguration/benchmark_results.png delete mode 100644 programming_examples/reconfiguration/instructions.md delete mode 100644 programming_examples/reconfiguration/kernels/mul.cc delete mode 100644 programming_examples/reconfiguration/kernels/mv.cc delete mode 100644 programming_examples/reconfiguration/kernels/silu.cc delete mode 100644 programming_examples/reconfiguration/operators/eltwise_mul.py delete mode 100644 programming_examples/reconfiguration/operators/matrix_vector_mul.py delete mode 100644 programming_examples/reconfiguration/operators/silu.py delete mode 100755 programming_examples/reconfiguration/run_benchmarks.sh delete mode 100644 programming_examples/reconfiguration/swiglu/README.md delete mode 100644 programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/Makefile delete mode 100644 programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/combine_mlir.py delete mode 100644 programming_examples/reconfiguration/swiglu/fused_transactions_loadpdi/test.cpp delete mode 100644 programming_examples/reconfiguration/swiglu/fused_transactions_write32s/Makefile delete mode 100644 programming_examples/reconfiguration/swiglu/fused_transactions_write32s/combine_mlir.py delete mode 100644 programming_examples/reconfiguration/swiglu/fused_transactions_write32s/test.cpp delete mode 100755 programming_examples/reconfiguration/swiglu/generate_reference.py delete mode 100644 programming_examples/reconfiguration/swiglu/runlist/Makefile delete mode 100644 programming_examples/reconfiguration/swiglu/runlist/test.cpp delete mode 100644 programming_examples/reconfiguration/swiglu/separate_xclbins/Makefile delete mode 100644 programming_examples/reconfiguration/swiglu/separate_xclbins/test.cpp delete mode 100755 programming_examples/reconfiguration/visualize_results.py diff --git a/programming_examples/reconfiguration/ablation/0_write32s_reset_core_dma_switch_lock.csv b/programming_examples/reconfiguration/ablation/0_write32s_reset_core_dma_switch_lock.csv deleted file mode 100644 index 3bc8208d9bb..00000000000 --- a/programming_examples/reconfiguration/ablation/0_write32s_reset_core_dma_switch_lock.csv +++ /dev/null @@ -1,1000 +0,0 @@ -fused_transactions_write32s,0,10900 -fused_transactions_write32s,1,10849 -fused_transactions_write32s,2,10791 -fused_transactions_write32s,3,10782 -fused_transactions_write32s,4,10777 -fused_transactions_write32s,5,10785 -fused_transactions_write32s,6,10780 -fused_transactions_write32s,7,10784 -fused_transactions_write32s,8,10780 -fused_transactions_write32s,9,10779 -fused_transactions_write32s,10,10786 -fused_transactions_write32s,11,10783 -fused_transactions_write32s,12,10786 -fused_transactions_write32s,13,10778 -fused_transactions_write32s,14,10784 -fused_transactions_write32s,15,10781 -fused_transactions_write32s,16,10783 -fused_transactions_write32s,17,10779 -fused_transactions_write32s,18,10781 -fused_transactions_write32s,19,10783 -fused_transactions_write32s,20,10779 -fused_transactions_write32s,21,10777 -fused_transactions_write32s,22,10783 -fused_transactions_write32s,23,10782 -fused_transactions_write32s,24,10777 -fused_transactions_write32s,25,10774 -fused_transactions_write32s,26,10781 -fused_transactions_write32s,27,10779 -fused_transactions_write32s,28,10777 -fused_transactions_write32s,29,10798 -fused_transactions_write32s,30,10785 -fused_transactions_write32s,31,10775 -fused_transactions_write32s,32,10778 -fused_transactions_write32s,33,10781 -fused_transactions_write32s,34,10787 -fused_transactions_write32s,35,10780 -fused_transactions_write32s,36,10783 -fused_transactions_write32s,37,10778 -fused_transactions_write32s,38,10782 -fused_transactions_write32s,39,10771 -fused_transactions_write32s,40,10758 -fused_transactions_write32s,41,10758 -fused_transactions_write32s,42,10783 -fused_transactions_write32s,43,10774 -fused_transactions_write32s,44,10787 -fused_transactions_write32s,45,10777 -fused_transactions_write32s,46,10781 -fused_transactions_write32s,47,10780 -fused_transactions_write32s,48,10777 -fused_transactions_write32s,49,10773 -fused_transactions_write32s,50,10778 -fused_transactions_write32s,51,10777 -fused_transactions_write32s,52,10772 -fused_transactions_write32s,53,10777 -fused_transactions_write32s,54,10780 -fused_transactions_write32s,55,10776 -fused_transactions_write32s,56,10776 -fused_transactions_write32s,57,10778 -fused_transactions_write32s,58,10772 -fused_transactions_write32s,59,10776 -fused_transactions_write32s,60,10776 -fused_transactions_write32s,61,10781 -fused_transactions_write32s,62,10772 -fused_transactions_write32s,63,10773 -fused_transactions_write32s,64,10779 -fused_transactions_write32s,65,10776 -fused_transactions_write32s,66,10774 -fused_transactions_write32s,67,10777 -fused_transactions_write32s,68,10780 -fused_transactions_write32s,69,10784 -fused_transactions_write32s,70,10786 -fused_transactions_write32s,71,10776 -fused_transactions_write32s,72,10779 -fused_transactions_write32s,73,10775 -fused_transactions_write32s,74,10776 -fused_transactions_write32s,75,10775 -fused_transactions_write32s,76,10785 -fused_transactions_write32s,77,10773 -fused_transactions_write32s,78,10775 -fused_transactions_write32s,79,10781 -fused_transactions_write32s,80,10783 -fused_transactions_write32s,81,10771 -fused_transactions_write32s,82,10784 -fused_transactions_write32s,83,10775 -fused_transactions_write32s,84,10781 -fused_transactions_write32s,85,10769 -fused_transactions_write32s,86,10772 -fused_transactions_write32s,87,10776 -fused_transactions_write32s,88,10782 -fused_transactions_write32s,89,10780 -fused_transactions_write32s,90,10777 -fused_transactions_write32s,91,10782 -fused_transactions_write32s,92,10777 -fused_transactions_write32s,93,10776 -fused_transactions_write32s,94,10780 -fused_transactions_write32s,95,10783 -fused_transactions_write32s,96,10777 -fused_transactions_write32s,97,10774 -fused_transactions_write32s,98,10779 -fused_transactions_write32s,99,10777 -fused_transactions_write32s,100,10779 -fused_transactions_write32s,101,10780 -fused_transactions_write32s,102,10781 -fused_transactions_write32s,103,10783 -fused_transactions_write32s,104,10782 -fused_transactions_write32s,105,10778 -fused_transactions_write32s,106,10780 -fused_transactions_write32s,107,10773 -fused_transactions_write32s,108,10781 -fused_transactions_write32s,109,10782 -fused_transactions_write32s,110,10771 -fused_transactions_write32s,111,10783 -fused_transactions_write32s,112,10783 -fused_transactions_write32s,113,10782 -fused_transactions_write32s,114,10787 -fused_transactions_write32s,115,10778 -fused_transactions_write32s,116,10778 -fused_transactions_write32s,117,10773 -fused_transactions_write32s,118,10781 -fused_transactions_write32s,119,10778 -fused_transactions_write32s,120,10774 -fused_transactions_write32s,121,10773 -fused_transactions_write32s,122,10782 -fused_transactions_write32s,123,10781 -fused_transactions_write32s,124,10779 -fused_transactions_write32s,125,10782 -fused_transactions_write32s,126,10783 -fused_transactions_write32s,127,10778 -fused_transactions_write32s,128,10781 -fused_transactions_write32s,129,10778 -fused_transactions_write32s,130,10777 -fused_transactions_write32s,131,10782 -fused_transactions_write32s,132,10786 -fused_transactions_write32s,133,10779 -fused_transactions_write32s,134,10783 -fused_transactions_write32s,135,10778 -fused_transactions_write32s,136,10784 -fused_transactions_write32s,137,10781 -fused_transactions_write32s,138,10777 -fused_transactions_write32s,139,11103 -fused_transactions_write32s,140,10786 -fused_transactions_write32s,141,10786 -fused_transactions_write32s,142,10782 -fused_transactions_write32s,143,10775 -fused_transactions_write32s,144,10779 -fused_transactions_write32s,145,10776 -fused_transactions_write32s,146,10781 -fused_transactions_write32s,147,10779 -fused_transactions_write32s,148,10778 -fused_transactions_write32s,149,10777 -fused_transactions_write32s,150,10782 -fused_transactions_write32s,151,10779 -fused_transactions_write32s,152,10774 -fused_transactions_write32s,153,10780 -fused_transactions_write32s,154,10779 -fused_transactions_write32s,155,10775 -fused_transactions_write32s,156,10778 -fused_transactions_write32s,157,10776 -fused_transactions_write32s,158,10772 -fused_transactions_write32s,159,10784 -fused_transactions_write32s,160,10776 -fused_transactions_write32s,161,10776 -fused_transactions_write32s,162,10775 -fused_transactions_write32s,163,10778 -fused_transactions_write32s,164,10777 -fused_transactions_write32s,165,10777 -fused_transactions_write32s,166,10776 -fused_transactions_write32s,167,10782 -fused_transactions_write32s,168,10776 -fused_transactions_write32s,169,10775 -fused_transactions_write32s,170,10775 -fused_transactions_write32s,171,10780 -fused_transactions_write32s,172,10775 -fused_transactions_write32s,173,10773 -fused_transactions_write32s,174,10773 -fused_transactions_write32s,175,10778 -fused_transactions_write32s,176,10781 -fused_transactions_write32s,177,10781 -fused_transactions_write32s,178,10780 -fused_transactions_write32s,179,10786 -fused_transactions_write32s,180,10774 -fused_transactions_write32s,181,10777 -fused_transactions_write32s,182,10777 -fused_transactions_write32s,183,10776 -fused_transactions_write32s,184,10775 -fused_transactions_write32s,185,10776 -fused_transactions_write32s,186,10774 -fused_transactions_write32s,187,10776 -fused_transactions_write32s,188,10775 -fused_transactions_write32s,189,10783 -fused_transactions_write32s,190,10779 -fused_transactions_write32s,191,10785 -fused_transactions_write32s,192,10781 -fused_transactions_write32s,193,10779 -fused_transactions_write32s,194,10780 -fused_transactions_write32s,195,10781 -fused_transactions_write32s,196,10783 -fused_transactions_write32s,197,10776 -fused_transactions_write32s,198,10777 -fused_transactions_write32s,199,10779 -fused_transactions_write32s,200,10782 -fused_transactions_write32s,201,10779 -fused_transactions_write32s,202,10782 -fused_transactions_write32s,203,10778 -fused_transactions_write32s,204,10780 -fused_transactions_write32s,205,10784 -fused_transactions_write32s,206,10779 -fused_transactions_write32s,207,10775 -fused_transactions_write32s,208,10773 -fused_transactions_write32s,209,10775 -fused_transactions_write32s,210,10782 -fused_transactions_write32s,211,10781 -fused_transactions_write32s,212,10778 -fused_transactions_write32s,213,10779 -fused_transactions_write32s,214,10783 -fused_transactions_write32s,215,10778 -fused_transactions_write32s,216,10779 -fused_transactions_write32s,217,10780 -fused_transactions_write32s,218,10784 -fused_transactions_write32s,219,10780 -fused_transactions_write32s,220,10774 -fused_transactions_write32s,221,10779 -fused_transactions_write32s,222,10780 -fused_transactions_write32s,223,10787 -fused_transactions_write32s,224,10789 -fused_transactions_write32s,225,10779 -fused_transactions_write32s,226,10781 -fused_transactions_write32s,227,10780 -fused_transactions_write32s,228,10779 -fused_transactions_write32s,229,10777 -fused_transactions_write32s,230,10772 -fused_transactions_write32s,231,10775 -fused_transactions_write32s,232,10779 -fused_transactions_write32s,233,10780 -fused_transactions_write32s,234,10784 -fused_transactions_write32s,235,10777 -fused_transactions_write32s,236,10777 -fused_transactions_write32s,237,10770 -fused_transactions_write32s,238,10778 -fused_transactions_write32s,239,10774 -fused_transactions_write32s,240,10773 -fused_transactions_write32s,241,10774 -fused_transactions_write32s,242,10780 -fused_transactions_write32s,243,10779 -fused_transactions_write32s,244,10779 -fused_transactions_write32s,245,10772 -fused_transactions_write32s,246,10778 -fused_transactions_write32s,247,10784 -fused_transactions_write32s,248,10783 -fused_transactions_write32s,249,10782 -fused_transactions_write32s,250,10779 -fused_transactions_write32s,251,10780 -fused_transactions_write32s,252,10784 -fused_transactions_write32s,253,10777 -fused_transactions_write32s,254,10782 -fused_transactions_write32s,255,10783 -fused_transactions_write32s,256,10780 -fused_transactions_write32s,257,10781 -fused_transactions_write32s,258,10782 -fused_transactions_write32s,259,10776 -fused_transactions_write32s,260,10783 -fused_transactions_write32s,261,10778 -fused_transactions_write32s,262,10775 -fused_transactions_write32s,263,10776 -fused_transactions_write32s,264,10780 -fused_transactions_write32s,265,10776 -fused_transactions_write32s,266,10778 -fused_transactions_write32s,267,10781 -fused_transactions_write32s,268,10779 -fused_transactions_write32s,269,10786 -fused_transactions_write32s,270,10779 -fused_transactions_write32s,271,10784 -fused_transactions_write32s,272,10779 -fused_transactions_write32s,273,10780 -fused_transactions_write32s,274,10779 -fused_transactions_write32s,275,10776 -fused_transactions_write32s,276,10782 -fused_transactions_write32s,277,10782 -fused_transactions_write32s,278,10781 -fused_transactions_write32s,279,10780 -fused_transactions_write32s,280,10776 -fused_transactions_write32s,281,10779 -fused_transactions_write32s,282,10778 -fused_transactions_write32s,283,10777 -fused_transactions_write32s,284,10775 -fused_transactions_write32s,285,10779 -fused_transactions_write32s,286,10780 -fused_transactions_write32s,287,10779 -fused_transactions_write32s,288,10783 -fused_transactions_write32s,289,10782 -fused_transactions_write32s,290,10777 -fused_transactions_write32s,291,10776 -fused_transactions_write32s,292,10774 -fused_transactions_write32s,293,10780 -fused_transactions_write32s,294,10778 -fused_transactions_write32s,295,10778 -fused_transactions_write32s,296,10777 -fused_transactions_write32s,297,10783 -fused_transactions_write32s,298,10788 -fused_transactions_write32s,299,10783 -fused_transactions_write32s,300,10780 -fused_transactions_write32s,301,10780 -fused_transactions_write32s,302,10778 -fused_transactions_write32s,303,10778 -fused_transactions_write32s,304,10777 -fused_transactions_write32s,305,10776 -fused_transactions_write32s,306,10779 -fused_transactions_write32s,307,10775 -fused_transactions_write32s,308,10781 -fused_transactions_write32s,309,10780 -fused_transactions_write32s,310,10781 -fused_transactions_write32s,311,10781 -fused_transactions_write32s,312,10776 -fused_transactions_write32s,313,10777 -fused_transactions_write32s,314,10774 -fused_transactions_write32s,315,10782 -fused_transactions_write32s,316,10785 -fused_transactions_write32s,317,10781 -fused_transactions_write32s,318,10762 -fused_transactions_write32s,319,10778 -fused_transactions_write32s,320,10775 -fused_transactions_write32s,321,10774 -fused_transactions_write32s,322,10788 -fused_transactions_write32s,323,10779 -fused_transactions_write32s,324,10783 -fused_transactions_write32s,325,10778 -fused_transactions_write32s,326,10775 -fused_transactions_write32s,327,10781 -fused_transactions_write32s,328,10779 -fused_transactions_write32s,329,10778 -fused_transactions_write32s,330,10775 -fused_transactions_write32s,331,10783 -fused_transactions_write32s,332,10776 -fused_transactions_write32s,333,10778 -fused_transactions_write32s,334,10780 -fused_transactions_write32s,335,10778 -fused_transactions_write32s,336,10778 -fused_transactions_write32s,337,10779 -fused_transactions_write32s,338,10780 -fused_transactions_write32s,339,10782 -fused_transactions_write32s,340,10780 -fused_transactions_write32s,341,10775 -fused_transactions_write32s,342,10779 -fused_transactions_write32s,343,10780 -fused_transactions_write32s,344,10782 -fused_transactions_write32s,345,10774 -fused_transactions_write32s,346,10775 -fused_transactions_write32s,347,10779 -fused_transactions_write32s,348,10780 -fused_transactions_write32s,349,10777 -fused_transactions_write32s,350,10775 -fused_transactions_write32s,351,10776 -fused_transactions_write32s,352,10775 -fused_transactions_write32s,353,10779 -fused_transactions_write32s,354,10781 -fused_transactions_write32s,355,10777 -fused_transactions_write32s,356,10774 -fused_transactions_write32s,357,10778 -fused_transactions_write32s,358,10780 -fused_transactions_write32s,359,10774 -fused_transactions_write32s,360,10779 -fused_transactions_write32s,361,10774 -fused_transactions_write32s,362,10776 -fused_transactions_write32s,363,10774 -fused_transactions_write32s,364,10783 -fused_transactions_write32s,365,10786 -fused_transactions_write32s,366,10783 -fused_transactions_write32s,367,10778 -fused_transactions_write32s,368,10776 -fused_transactions_write32s,369,10775 -fused_transactions_write32s,370,10778 -fused_transactions_write32s,371,10773 -fused_transactions_write32s,372,10777 -fused_transactions_write32s,373,10777 -fused_transactions_write32s,374,10778 -fused_transactions_write32s,375,10782 -fused_transactions_write32s,376,10769 -fused_transactions_write32s,377,10777 -fused_transactions_write32s,378,10780 -fused_transactions_write32s,379,10783 -fused_transactions_write32s,380,10783 -fused_transactions_write32s,381,10783 -fused_transactions_write32s,382,10782 -fused_transactions_write32s,383,10785 -fused_transactions_write32s,384,10784 -fused_transactions_write32s,385,10776 -fused_transactions_write32s,386,10778 -fused_transactions_write32s,387,10783 -fused_transactions_write32s,388,10781 -fused_transactions_write32s,389,10786 -fused_transactions_write32s,390,10779 -fused_transactions_write32s,391,10775 -fused_transactions_write32s,392,10776 -fused_transactions_write32s,393,10774 -fused_transactions_write32s,394,10777 -fused_transactions_write32s,395,10776 -fused_transactions_write32s,396,10777 -fused_transactions_write32s,397,10782 -fused_transactions_write32s,398,10782 -fused_transactions_write32s,399,10782 -fused_transactions_write32s,400,10777 -fused_transactions_write32s,401,10779 -fused_transactions_write32s,402,10766 -fused_transactions_write32s,403,10776 -fused_transactions_write32s,404,10783 -fused_transactions_write32s,405,10783 -fused_transactions_write32s,406,10779 -fused_transactions_write32s,407,10780 -fused_transactions_write32s,408,10782 -fused_transactions_write32s,409,10783 -fused_transactions_write32s,410,10783 -fused_transactions_write32s,411,10785 -fused_transactions_write32s,412,10783 -fused_transactions_write32s,413,10777 -fused_transactions_write32s,414,10778 -fused_transactions_write32s,415,10783 -fused_transactions_write32s,416,10775 -fused_transactions_write32s,417,10781 -fused_transactions_write32s,418,10781 -fused_transactions_write32s,419,10779 -fused_transactions_write32s,420,10779 -fused_transactions_write32s,421,10778 -fused_transactions_write32s,422,10774 -fused_transactions_write32s,423,10782 -fused_transactions_write32s,424,10781 -fused_transactions_write32s,425,10786 -fused_transactions_write32s,426,10781 -fused_transactions_write32s,427,10786 -fused_transactions_write32s,428,10779 -fused_transactions_write32s,429,10781 -fused_transactions_write32s,430,10779 -fused_transactions_write32s,431,10782 -fused_transactions_write32s,432,10784 -fused_transactions_write32s,433,10776 -fused_transactions_write32s,434,10778 -fused_transactions_write32s,435,10783 -fused_transactions_write32s,436,10783 -fused_transactions_write32s,437,10778 -fused_transactions_write32s,438,10784 -fused_transactions_write32s,439,10781 -fused_transactions_write32s,440,10782 -fused_transactions_write32s,441,10782 -fused_transactions_write32s,442,10783 -fused_transactions_write32s,443,10777 -fused_transactions_write32s,444,10785 -fused_transactions_write32s,445,10780 -fused_transactions_write32s,446,10786 -fused_transactions_write32s,447,10778 -fused_transactions_write32s,448,10794 -fused_transactions_write32s,449,10788 -fused_transactions_write32s,450,10784 -fused_transactions_write32s,451,10780 -fused_transactions_write32s,452,10778 -fused_transactions_write32s,453,10778 -fused_transactions_write32s,454,10781 -fused_transactions_write32s,455,10783 -fused_transactions_write32s,456,10782 -fused_transactions_write32s,457,10779 -fused_transactions_write32s,458,10773 -fused_transactions_write32s,459,10779 -fused_transactions_write32s,460,10779 -fused_transactions_write32s,461,10777 -fused_transactions_write32s,462,10780 -fused_transactions_write32s,463,10777 -fused_transactions_write32s,464,10780 -fused_transactions_write32s,465,10773 -fused_transactions_write32s,466,10784 -fused_transactions_write32s,467,10779 -fused_transactions_write32s,468,10773 -fused_transactions_write32s,469,10778 -fused_transactions_write32s,470,10777 -fused_transactions_write32s,471,10784 -fused_transactions_write32s,472,10782 -fused_transactions_write32s,473,10781 -fused_transactions_write32s,474,10783 -fused_transactions_write32s,475,10779 -fused_transactions_write32s,476,10782 -fused_transactions_write32s,477,10783 -fused_transactions_write32s,478,10783 -fused_transactions_write32s,479,10775 -fused_transactions_write32s,480,10779 -fused_transactions_write32s,481,10777 -fused_transactions_write32s,482,10780 -fused_transactions_write32s,483,10778 -fused_transactions_write32s,484,10772 -fused_transactions_write32s,485,10777 -fused_transactions_write32s,486,10781 -fused_transactions_write32s,487,10781 -fused_transactions_write32s,488,10779 -fused_transactions_write32s,489,10784 -fused_transactions_write32s,490,10782 -fused_transactions_write32s,491,10774 -fused_transactions_write32s,492,10778 -fused_transactions_write32s,493,10781 -fused_transactions_write32s,494,10782 -fused_transactions_write32s,495,10781 -fused_transactions_write32s,496,10781 -fused_transactions_write32s,497,10780 -fused_transactions_write32s,498,10782 -fused_transactions_write32s,499,10784 -fused_transactions_write32s,500,10778 -fused_transactions_write32s,501,10784 -fused_transactions_write32s,502,10778 -fused_transactions_write32s,503,10781 -fused_transactions_write32s,504,10783 -fused_transactions_write32s,505,10779 -fused_transactions_write32s,506,10776 -fused_transactions_write32s,507,10777 -fused_transactions_write32s,508,10776 -fused_transactions_write32s,509,10778 -fused_transactions_write32s,510,10776 -fused_transactions_write32s,511,10779 -fused_transactions_write32s,512,10778 -fused_transactions_write32s,513,10779 -fused_transactions_write32s,514,10783 -fused_transactions_write32s,515,10778 -fused_transactions_write32s,516,10771 -fused_transactions_write32s,517,10780 -fused_transactions_write32s,518,10785 -fused_transactions_write32s,519,10783 -fused_transactions_write32s,520,10780 -fused_transactions_write32s,521,10776 -fused_transactions_write32s,522,10785 -fused_transactions_write32s,523,10777 -fused_transactions_write32s,524,10776 -fused_transactions_write32s,525,10778 -fused_transactions_write32s,526,10776 -fused_transactions_write32s,527,10782 -fused_transactions_write32s,528,10783 -fused_transactions_write32s,529,10781 -fused_transactions_write32s,530,10779 -fused_transactions_write32s,531,10779 -fused_transactions_write32s,532,10774 -fused_transactions_write32s,533,10781 -fused_transactions_write32s,534,10771 -fused_transactions_write32s,535,10775 -fused_transactions_write32s,536,10776 -fused_transactions_write32s,537,10781 -fused_transactions_write32s,538,10782 -fused_transactions_write32s,539,10780 -fused_transactions_write32s,540,10782 -fused_transactions_write32s,541,10781 -fused_transactions_write32s,542,10784 -fused_transactions_write32s,543,10779 -fused_transactions_write32s,544,10777 -fused_transactions_write32s,545,10778 -fused_transactions_write32s,546,10773 -fused_transactions_write32s,547,10774 -fused_transactions_write32s,548,10776 -fused_transactions_write32s,549,10776 -fused_transactions_write32s,550,10783 -fused_transactions_write32s,551,10775 -fused_transactions_write32s,552,10779 -fused_transactions_write32s,553,10772 -fused_transactions_write32s,554,10776 -fused_transactions_write32s,555,10775 -fused_transactions_write32s,556,10777 -fused_transactions_write32s,557,10777 -fused_transactions_write32s,558,10775 -fused_transactions_write32s,559,10776 -fused_transactions_write32s,560,10775 -fused_transactions_write32s,561,10779 -fused_transactions_write32s,562,10777 -fused_transactions_write32s,563,10782 -fused_transactions_write32s,564,10789 -fused_transactions_write32s,565,10787 -fused_transactions_write32s,566,10786 -fused_transactions_write32s,567,10772 -fused_transactions_write32s,568,10786 -fused_transactions_write32s,569,10784 -fused_transactions_write32s,570,10785 -fused_transactions_write32s,571,10774 -fused_transactions_write32s,572,10776 -fused_transactions_write32s,573,10781 -fused_transactions_write32s,574,10780 -fused_transactions_write32s,575,10775 -fused_transactions_write32s,576,10782 -fused_transactions_write32s,577,10785 -fused_transactions_write32s,578,10779 -fused_transactions_write32s,579,10779 -fused_transactions_write32s,580,10776 -fused_transactions_write32s,581,10779 -fused_transactions_write32s,582,10781 -fused_transactions_write32s,583,10778 -fused_transactions_write32s,584,10776 -fused_transactions_write32s,585,10781 -fused_transactions_write32s,586,10781 -fused_transactions_write32s,587,10781 -fused_transactions_write32s,588,10782 -fused_transactions_write32s,589,10782 -fused_transactions_write32s,590,10787 -fused_transactions_write32s,591,10779 -fused_transactions_write32s,592,10779 -fused_transactions_write32s,593,10784 -fused_transactions_write32s,594,10780 -fused_transactions_write32s,595,10778 -fused_transactions_write32s,596,10781 -fused_transactions_write32s,597,10784 -fused_transactions_write32s,598,10778 -fused_transactions_write32s,599,10777 -fused_transactions_write32s,600,10774 -fused_transactions_write32s,601,10778 -fused_transactions_write32s,602,10778 -fused_transactions_write32s,603,10787 -fused_transactions_write32s,604,10779 -fused_transactions_write32s,605,10779 -fused_transactions_write32s,606,10775 -fused_transactions_write32s,607,10778 -fused_transactions_write32s,608,10784 -fused_transactions_write32s,609,10781 -fused_transactions_write32s,610,10780 -fused_transactions_write32s,611,10779 -fused_transactions_write32s,612,10778 -fused_transactions_write32s,613,10780 -fused_transactions_write32s,614,11102 -fused_transactions_write32s,615,10782 -fused_transactions_write32s,616,10783 -fused_transactions_write32s,617,10780 -fused_transactions_write32s,618,10775 -fused_transactions_write32s,619,10781 -fused_transactions_write32s,620,10776 -fused_transactions_write32s,621,10783 -fused_transactions_write32s,622,10782 -fused_transactions_write32s,623,10781 -fused_transactions_write32s,624,10779 -fused_transactions_write32s,625,10782 -fused_transactions_write32s,626,10782 -fused_transactions_write32s,627,10772 -fused_transactions_write32s,628,10766 -fused_transactions_write32s,629,10766 -fused_transactions_write32s,630,10767 -fused_transactions_write32s,631,10773 -fused_transactions_write32s,632,10760 -fused_transactions_write32s,633,10766 -fused_transactions_write32s,634,10766 -fused_transactions_write32s,635,10762 -fused_transactions_write32s,636,10762 -fused_transactions_write32s,637,10764 -fused_transactions_write32s,638,10764 -fused_transactions_write32s,639,10764 -fused_transactions_write32s,640,10763 -fused_transactions_write32s,641,10767 -fused_transactions_write32s,642,10764 -fused_transactions_write32s,643,10765 -fused_transactions_write32s,644,10768 -fused_transactions_write32s,645,10761 -fused_transactions_write32s,646,10768 -fused_transactions_write32s,647,10765 -fused_transactions_write32s,648,10773 -fused_transactions_write32s,649,10764 -fused_transactions_write32s,650,10764 -fused_transactions_write32s,651,10762 -fused_transactions_write32s,652,10766 -fused_transactions_write32s,653,10765 -fused_transactions_write32s,654,10764 -fused_transactions_write32s,655,10751 -fused_transactions_write32s,656,10763 -fused_transactions_write32s,657,10766 -fused_transactions_write32s,658,10762 -fused_transactions_write32s,659,10766 -fused_transactions_write32s,660,10766 -fused_transactions_write32s,661,10764 -fused_transactions_write32s,662,10766 -fused_transactions_write32s,663,10759 -fused_transactions_write32s,664,10761 -fused_transactions_write32s,665,10758 -fused_transactions_write32s,666,10763 -fused_transactions_write32s,667,10770 -fused_transactions_write32s,668,10763 -fused_transactions_write32s,669,10765 -fused_transactions_write32s,670,10765 -fused_transactions_write32s,671,10764 -fused_transactions_write32s,672,10764 -fused_transactions_write32s,673,10764 -fused_transactions_write32s,674,10763 -fused_transactions_write32s,675,10763 -fused_transactions_write32s,676,10762 -fused_transactions_write32s,677,10763 -fused_transactions_write32s,678,10765 -fused_transactions_write32s,679,10763 -fused_transactions_write32s,680,10766 -fused_transactions_write32s,681,10762 -fused_transactions_write32s,682,10767 -fused_transactions_write32s,683,10765 -fused_transactions_write32s,684,10761 -fused_transactions_write32s,685,10765 -fused_transactions_write32s,686,10766 -fused_transactions_write32s,687,10767 -fused_transactions_write32s,688,10763 -fused_transactions_write32s,689,10765 -fused_transactions_write32s,690,10765 -fused_transactions_write32s,691,10762 -fused_transactions_write32s,692,10765 -fused_transactions_write32s,693,10768 -fused_transactions_write32s,694,10764 -fused_transactions_write32s,695,10763 -fused_transactions_write32s,696,10763 -fused_transactions_write32s,697,10764 -fused_transactions_write32s,698,10759 -fused_transactions_write32s,699,10766 -fused_transactions_write32s,700,10762 -fused_transactions_write32s,701,10770 -fused_transactions_write32s,702,10762 -fused_transactions_write32s,703,10765 -fused_transactions_write32s,704,10768 -fused_transactions_write32s,705,10761 -fused_transactions_write32s,706,10768 -fused_transactions_write32s,707,10768 -fused_transactions_write32s,708,10768 -fused_transactions_write32s,709,10764 -fused_transactions_write32s,710,10764 -fused_transactions_write32s,711,10764 -fused_transactions_write32s,712,10761 -fused_transactions_write32s,713,10763 -fused_transactions_write32s,714,10766 -fused_transactions_write32s,715,10757 -fused_transactions_write32s,716,10762 -fused_transactions_write32s,717,10763 -fused_transactions_write32s,718,10769 -fused_transactions_write32s,719,10765 -fused_transactions_write32s,720,10759 -fused_transactions_write32s,721,10759 -fused_transactions_write32s,722,10763 -fused_transactions_write32s,723,10768 -fused_transactions_write32s,724,10763 -fused_transactions_write32s,725,10761 -fused_transactions_write32s,726,10768 -fused_transactions_write32s,727,10767 -fused_transactions_write32s,728,10767 -fused_transactions_write32s,729,10763 -fused_transactions_write32s,730,10761 -fused_transactions_write32s,731,10767 -fused_transactions_write32s,732,10763 -fused_transactions_write32s,733,10762 -fused_transactions_write32s,734,10761 -fused_transactions_write32s,735,10769 -fused_transactions_write32s,736,10763 -fused_transactions_write32s,737,10763 -fused_transactions_write32s,738,10761 -fused_transactions_write32s,739,10766 -fused_transactions_write32s,740,10763 -fused_transactions_write32s,741,10766 -fused_transactions_write32s,742,10764 -fused_transactions_write32s,743,10765 -fused_transactions_write32s,744,10767 -fused_transactions_write32s,745,10762 -fused_transactions_write32s,746,10759 -fused_transactions_write32s,747,10769 -fused_transactions_write32s,748,10764 -fused_transactions_write32s,749,10765 -fused_transactions_write32s,750,10761 -fused_transactions_write32s,751,10762 -fused_transactions_write32s,752,10763 -fused_transactions_write32s,753,10764 -fused_transactions_write32s,754,10768 -fused_transactions_write32s,755,10762 -fused_transactions_write32s,756,10763 -fused_transactions_write32s,757,10757 -fused_transactions_write32s,758,10767 -fused_transactions_write32s,759,10764 -fused_transactions_write32s,760,10760 -fused_transactions_write32s,761,10762 -fused_transactions_write32s,762,10761 -fused_transactions_write32s,763,10764 -fused_transactions_write32s,764,10766 -fused_transactions_write32s,765,10764 -fused_transactions_write32s,766,10767 -fused_transactions_write32s,767,10763 -fused_transactions_write32s,768,10764 -fused_transactions_write32s,769,10764 -fused_transactions_write32s,770,10767 -fused_transactions_write32s,771,10761 -fused_transactions_write32s,772,10764 -fused_transactions_write32s,773,10765 -fused_transactions_write32s,774,10763 -fused_transactions_write32s,775,10761 -fused_transactions_write32s,776,10763 -fused_transactions_write32s,777,10760 -fused_transactions_write32s,778,10757 -fused_transactions_write32s,779,10765 -fused_transactions_write32s,780,10787 -fused_transactions_write32s,781,10797 -fused_transactions_write32s,782,10776 -fused_transactions_write32s,783,10771 -fused_transactions_write32s,784,10774 -fused_transactions_write32s,785,10774 -fused_transactions_write32s,786,10776 -fused_transactions_write32s,787,10776 -fused_transactions_write32s,788,10775 -fused_transactions_write32s,789,10775 -fused_transactions_write32s,790,10777 -fused_transactions_write32s,791,10767 -fused_transactions_write32s,792,10783 -fused_transactions_write32s,793,10776 -fused_transactions_write32s,794,10775 -fused_transactions_write32s,795,10774 -fused_transactions_write32s,796,10771 -fused_transactions_write32s,797,10771 -fused_transactions_write32s,798,10783 -fused_transactions_write32s,799,10783 -fused_transactions_write32s,800,10777 -fused_transactions_write32s,801,10777 -fused_transactions_write32s,802,10782 -fused_transactions_write32s,803,10782 -fused_transactions_write32s,804,10780 -fused_transactions_write32s,805,10780 -fused_transactions_write32s,806,10779 -fused_transactions_write32s,807,10782 -fused_transactions_write32s,808,10774 -fused_transactions_write32s,809,10769 -fused_transactions_write32s,810,10781 -fused_transactions_write32s,811,10781 -fused_transactions_write32s,812,10783 -fused_transactions_write32s,813,10783 -fused_transactions_write32s,814,10782 -fused_transactions_write32s,815,10781 -fused_transactions_write32s,816,10780 -fused_transactions_write32s,817,10782 -fused_transactions_write32s,818,10781 -fused_transactions_write32s,819,10787 -fused_transactions_write32s,820,10782 -fused_transactions_write32s,821,10783 -fused_transactions_write32s,822,10779 -fused_transactions_write32s,823,10784 -fused_transactions_write32s,824,10782 -fused_transactions_write32s,825,10780 -fused_transactions_write32s,826,10788 -fused_transactions_write32s,827,10786 -fused_transactions_write32s,828,10781 -fused_transactions_write32s,829,10780 -fused_transactions_write32s,830,10781 -fused_transactions_write32s,831,10772 -fused_transactions_write32s,832,10775 -fused_transactions_write32s,833,10775 -fused_transactions_write32s,834,10778 -fused_transactions_write32s,835,10786 -fused_transactions_write32s,836,10774 -fused_transactions_write32s,837,10783 -fused_transactions_write32s,838,10768 -fused_transactions_write32s,839,10781 -fused_transactions_write32s,840,10781 -fused_transactions_write32s,841,10782 -fused_transactions_write32s,842,10775 -fused_transactions_write32s,843,10772 -fused_transactions_write32s,844,10781 -fused_transactions_write32s,845,10776 -fused_transactions_write32s,846,10775 -fused_transactions_write32s,847,10783 -fused_transactions_write32s,848,10776 -fused_transactions_write32s,849,10780 -fused_transactions_write32s,850,10777 -fused_transactions_write32s,851,10776 -fused_transactions_write32s,852,10789 -fused_transactions_write32s,853,10774 -fused_transactions_write32s,854,10780 -fused_transactions_write32s,855,10780 -fused_transactions_write32s,856,10791 -fused_transactions_write32s,857,10783 -fused_transactions_write32s,858,10778 -fused_transactions_write32s,859,10776 -fused_transactions_write32s,860,10780 -fused_transactions_write32s,861,10781 -fused_transactions_write32s,862,10784 -fused_transactions_write32s,863,10781 -fused_transactions_write32s,864,10780 -fused_transactions_write32s,865,10784 -fused_transactions_write32s,866,10775 -fused_transactions_write32s,867,10783 -fused_transactions_write32s,868,10779 -fused_transactions_write32s,869,10785 -fused_transactions_write32s,870,10784 -fused_transactions_write32s,871,10786 -fused_transactions_write32s,872,10778 -fused_transactions_write32s,873,10785 -fused_transactions_write32s,874,10783 -fused_transactions_write32s,875,10780 -fused_transactions_write32s,876,10779 -fused_transactions_write32s,877,10777 -fused_transactions_write32s,878,10782 -fused_transactions_write32s,879,10785 -fused_transactions_write32s,880,10774 -fused_transactions_write32s,881,10787 -fused_transactions_write32s,882,10783 -fused_transactions_write32s,883,10773 -fused_transactions_write32s,884,10785 -fused_transactions_write32s,885,10776 -fused_transactions_write32s,886,10776 -fused_transactions_write32s,887,10779 -fused_transactions_write32s,888,10779 -fused_transactions_write32s,889,10782 -fused_transactions_write32s,890,10784 -fused_transactions_write32s,891,10781 -fused_transactions_write32s,892,10777 -fused_transactions_write32s,893,10779 -fused_transactions_write32s,894,10778 -fused_transactions_write32s,895,10774 -fused_transactions_write32s,896,10776 -fused_transactions_write32s,897,10774 -fused_transactions_write32s,898,10776 -fused_transactions_write32s,899,10776 -fused_transactions_write32s,900,10777 -fused_transactions_write32s,901,10776 -fused_transactions_write32s,902,10788 -fused_transactions_write32s,903,10782 -fused_transactions_write32s,904,10774 -fused_transactions_write32s,905,10785 -fused_transactions_write32s,906,10780 -fused_transactions_write32s,907,10784 -fused_transactions_write32s,908,10776 -fused_transactions_write32s,909,10773 -fused_transactions_write32s,910,10782 -fused_transactions_write32s,911,10785 -fused_transactions_write32s,912,10787 -fused_transactions_write32s,913,10773 -fused_transactions_write32s,914,10780 -fused_transactions_write32s,915,10787 -fused_transactions_write32s,916,10778 -fused_transactions_write32s,917,10774 -fused_transactions_write32s,918,10777 -fused_transactions_write32s,919,10781 -fused_transactions_write32s,920,10781 -fused_transactions_write32s,921,10777 -fused_transactions_write32s,922,10773 -fused_transactions_write32s,923,10774 -fused_transactions_write32s,924,10770 -fused_transactions_write32s,925,10776 -fused_transactions_write32s,926,10785 -fused_transactions_write32s,927,10773 -fused_transactions_write32s,928,10781 -fused_transactions_write32s,929,10775 -fused_transactions_write32s,930,10803 -fused_transactions_write32s,931,10764 -fused_transactions_write32s,932,10762 -fused_transactions_write32s,933,10762 -fused_transactions_write32s,934,10766 -fused_transactions_write32s,935,10766 -fused_transactions_write32s,936,10764 -fused_transactions_write32s,937,10759 -fused_transactions_write32s,938,10763 -fused_transactions_write32s,939,10768 -fused_transactions_write32s,940,10765 -fused_transactions_write32s,941,10764 -fused_transactions_write32s,942,10762 -fused_transactions_write32s,943,10787 -fused_transactions_write32s,944,10785 -fused_transactions_write32s,945,10772 -fused_transactions_write32s,946,10782 -fused_transactions_write32s,947,10782 -fused_transactions_write32s,948,10779 -fused_transactions_write32s,949,10775 -fused_transactions_write32s,950,10770 -fused_transactions_write32s,951,10774 -fused_transactions_write32s,952,10783 -fused_transactions_write32s,953,10785 -fused_transactions_write32s,954,10782 -fused_transactions_write32s,955,10770 -fused_transactions_write32s,956,10776 -fused_transactions_write32s,957,10774 -fused_transactions_write32s,958,10776 -fused_transactions_write32s,959,10774 -fused_transactions_write32s,960,10775 -fused_transactions_write32s,961,10784 -fused_transactions_write32s,962,10780 -fused_transactions_write32s,963,10782 -fused_transactions_write32s,964,10774 -fused_transactions_write32s,965,10776 -fused_transactions_write32s,966,10778 -fused_transactions_write32s,967,10773 -fused_transactions_write32s,968,10780 -fused_transactions_write32s,969,10775 -fused_transactions_write32s,970,10787 -fused_transactions_write32s,971,10769 -fused_transactions_write32s,972,10777 -fused_transactions_write32s,973,10775 -fused_transactions_write32s,974,10780 -fused_transactions_write32s,975,10783 -fused_transactions_write32s,976,10782 -fused_transactions_write32s,977,10776 -fused_transactions_write32s,978,10782 -fused_transactions_write32s,979,10776 -fused_transactions_write32s,980,10768 -fused_transactions_write32s,981,10778 -fused_transactions_write32s,982,10768 -fused_transactions_write32s,983,10777 -fused_transactions_write32s,984,10781 -fused_transactions_write32s,985,10776 -fused_transactions_write32s,986,10785 -fused_transactions_write32s,987,10783 -fused_transactions_write32s,988,10773 -fused_transactions_write32s,989,10783 -fused_transactions_write32s,990,10784 -fused_transactions_write32s,991,10770 -fused_transactions_write32s,992,10773 -fused_transactions_write32s,993,10779 -fused_transactions_write32s,994,10773 -fused_transactions_write32s,995,10776 -fused_transactions_write32s,996,10778 -fused_transactions_write32s,997,10776 -fused_transactions_write32s,998,10787 -fused_transactions_write32s,999,10773 \ No newline at end of file diff --git a/programming_examples/reconfiguration/ablation/1_write32s_reset_core_dma_switch.csv b/programming_examples/reconfiguration/ablation/1_write32s_reset_core_dma_switch.csv deleted file mode 100644 index 014ee17b95b..00000000000 --- a/programming_examples/reconfiguration/ablation/1_write32s_reset_core_dma_switch.csv +++ /dev/null @@ -1,1000 +0,0 @@ -fused_transactions_write32s,0,10608 -fused_transactions_write32s,1,10572 -fused_transactions_write32s,2,10530 -fused_transactions_write32s,3,10550 -fused_transactions_write32s,4,10537 -fused_transactions_write32s,5,10546 -fused_transactions_write32s,6,10548 -fused_transactions_write32s,7,10543 -fused_transactions_write32s,8,10544 -fused_transactions_write32s,9,10541 -fused_transactions_write32s,10,10544 -fused_transactions_write32s,11,10538 -fused_transactions_write32s,12,10550 -fused_transactions_write32s,13,10538 -fused_transactions_write32s,14,10553 -fused_transactions_write32s,15,10537 -fused_transactions_write32s,16,10537 -fused_transactions_write32s,17,10528 -fused_transactions_write32s,18,10537 -fused_transactions_write32s,19,10539 -fused_transactions_write32s,20,10519 -fused_transactions_write32s,21,10547 -fused_transactions_write32s,22,10541 -fused_transactions_write32s,23,10537 -fused_transactions_write32s,24,10533 -fused_transactions_write32s,25,10541 -fused_transactions_write32s,26,10540 -fused_transactions_write32s,27,10549 -fused_transactions_write32s,28,10540 -fused_transactions_write32s,29,10544 -fused_transactions_write32s,30,10542 -fused_transactions_write32s,31,10545 -fused_transactions_write32s,32,10541 -fused_transactions_write32s,33,10537 -fused_transactions_write32s,34,10540 -fused_transactions_write32s,35,10543 -fused_transactions_write32s,36,10538 -fused_transactions_write32s,37,10541 -fused_transactions_write32s,38,10544 -fused_transactions_write32s,39,10542 -fused_transactions_write32s,40,10541 -fused_transactions_write32s,41,10541 -fused_transactions_write32s,42,10547 -fused_transactions_write32s,43,10546 -fused_transactions_write32s,44,10536 -fused_transactions_write32s,45,10543 -fused_transactions_write32s,46,10538 -fused_transactions_write32s,47,10543 -fused_transactions_write32s,48,10543 -fused_transactions_write32s,49,10540 -fused_transactions_write32s,50,10552 -fused_transactions_write32s,51,10540 -fused_transactions_write32s,52,10540 -fused_transactions_write32s,53,10540 -fused_transactions_write32s,54,10545 -fused_transactions_write32s,55,10536 -fused_transactions_write32s,56,10525 -fused_transactions_write32s,57,10531 -fused_transactions_write32s,58,10546 -fused_transactions_write32s,59,10543 -fused_transactions_write32s,60,10536 -fused_transactions_write32s,61,10536 -fused_transactions_write32s,62,10537 -fused_transactions_write32s,63,10521 -fused_transactions_write32s,64,10546 -fused_transactions_write32s,65,10544 -fused_transactions_write32s,66,10541 -fused_transactions_write32s,67,10547 -fused_transactions_write32s,68,10535 -fused_transactions_write32s,69,10537 -fused_transactions_write32s,70,10537 -fused_transactions_write32s,71,10547 -fused_transactions_write32s,72,10540 -fused_transactions_write32s,73,10540 -fused_transactions_write32s,74,10539 -fused_transactions_write32s,75,10536 -fused_transactions_write32s,76,10534 -fused_transactions_write32s,77,10536 -fused_transactions_write32s,78,10538 -fused_transactions_write32s,79,10543 -fused_transactions_write32s,80,10536 -fused_transactions_write32s,81,10541 -fused_transactions_write32s,82,10535 -fused_transactions_write32s,83,10537 -fused_transactions_write32s,84,10537 -fused_transactions_write32s,85,10540 -fused_transactions_write32s,86,10540 -fused_transactions_write32s,87,10543 -fused_transactions_write32s,88,10549 -fused_transactions_write32s,89,10536 -fused_transactions_write32s,90,10541 -fused_transactions_write32s,91,10538 -fused_transactions_write32s,92,10534 -fused_transactions_write32s,93,10541 -fused_transactions_write32s,94,10548 -fused_transactions_write32s,95,10547 -fused_transactions_write32s,96,10540 -fused_transactions_write32s,97,10526 -fused_transactions_write32s,98,10540 -fused_transactions_write32s,99,10544 -fused_transactions_write32s,100,10546 -fused_transactions_write32s,101,10547 -fused_transactions_write32s,102,10543 -fused_transactions_write32s,103,10532 -fused_transactions_write32s,104,10537 -fused_transactions_write32s,105,10541 -fused_transactions_write32s,106,10538 -fused_transactions_write32s,107,10542 -fused_transactions_write32s,108,10535 -fused_transactions_write32s,109,10543 -fused_transactions_write32s,110,10537 -fused_transactions_write32s,111,10542 -fused_transactions_write32s,112,10536 -fused_transactions_write32s,113,10539 -fused_transactions_write32s,114,10540 -fused_transactions_write32s,115,10538 -fused_transactions_write32s,116,10545 -fused_transactions_write32s,117,10546 -fused_transactions_write32s,118,10539 -fused_transactions_write32s,119,10535 -fused_transactions_write32s,120,10541 -fused_transactions_write32s,121,10543 -fused_transactions_write32s,122,10541 -fused_transactions_write32s,123,10536 -fused_transactions_write32s,124,10548 -fused_transactions_write32s,125,10545 -fused_transactions_write32s,126,10539 -fused_transactions_write32s,127,10536 -fused_transactions_write32s,128,10538 -fused_transactions_write32s,129,10539 -fused_transactions_write32s,130,10537 -fused_transactions_write32s,131,10535 -fused_transactions_write32s,132,10541 -fused_transactions_write32s,133,10539 -fused_transactions_write32s,134,10541 -fused_transactions_write32s,135,10546 -fused_transactions_write32s,136,10542 -fused_transactions_write32s,137,10545 -fused_transactions_write32s,138,10552 -fused_transactions_write32s,139,10535 -fused_transactions_write32s,140,10535 -fused_transactions_write32s,141,10538 -fused_transactions_write32s,142,10541 -fused_transactions_write32s,143,10534 -fused_transactions_write32s,144,10540 -fused_transactions_write32s,145,10539 -fused_transactions_write32s,146,10542 -fused_transactions_write32s,147,10532 -fused_transactions_write32s,148,10535 -fused_transactions_write32s,149,10537 -fused_transactions_write32s,150,10553 -fused_transactions_write32s,151,10540 -fused_transactions_write32s,152,10552 -fused_transactions_write32s,153,10542 -fused_transactions_write32s,154,10537 -fused_transactions_write32s,155,10534 -fused_transactions_write32s,156,10539 -fused_transactions_write32s,157,10542 -fused_transactions_write32s,158,10546 -fused_transactions_write32s,159,10536 -fused_transactions_write32s,160,10533 -fused_transactions_write32s,161,10540 -fused_transactions_write32s,162,10546 -fused_transactions_write32s,163,10545 -fused_transactions_write32s,164,10541 -fused_transactions_write32s,165,10533 -fused_transactions_write32s,166,10540 -fused_transactions_write32s,167,10536 -fused_transactions_write32s,168,10536 -fused_transactions_write32s,169,10537 -fused_transactions_write32s,170,10532 -fused_transactions_write32s,171,10535 -fused_transactions_write32s,172,10535 -fused_transactions_write32s,173,10535 -fused_transactions_write32s,174,10538 -fused_transactions_write32s,175,10537 -fused_transactions_write32s,176,10537 -fused_transactions_write32s,177,10537 -fused_transactions_write32s,178,10535 -fused_transactions_write32s,179,10533 -fused_transactions_write32s,180,10540 -fused_transactions_write32s,181,10536 -fused_transactions_write32s,182,10535 -fused_transactions_write32s,183,10533 -fused_transactions_write32s,184,10537 -fused_transactions_write32s,185,10533 -fused_transactions_write32s,186,10545 -fused_transactions_write32s,187,10541 -fused_transactions_write32s,188,10548 -fused_transactions_write32s,189,10544 -fused_transactions_write32s,190,10544 -fused_transactions_write32s,191,10540 -fused_transactions_write32s,192,10542 -fused_transactions_write32s,193,10546 -fused_transactions_write32s,194,10543 -fused_transactions_write32s,195,10543 -fused_transactions_write32s,196,10542 -fused_transactions_write32s,197,10545 -fused_transactions_write32s,198,10539 -fused_transactions_write32s,199,10545 -fused_transactions_write32s,200,10535 -fused_transactions_write32s,201,10538 -fused_transactions_write32s,202,10535 -fused_transactions_write32s,203,10539 -fused_transactions_write32s,204,10540 -fused_transactions_write32s,205,10533 -fused_transactions_write32s,206,10540 -fused_transactions_write32s,207,10541 -fused_transactions_write32s,208,10537 -fused_transactions_write32s,209,10534 -fused_transactions_write32s,210,10544 -fused_transactions_write32s,211,10546 -fused_transactions_write32s,212,10543 -fused_transactions_write32s,213,10533 -fused_transactions_write32s,214,10535 -fused_transactions_write32s,215,10534 -fused_transactions_write32s,216,10535 -fused_transactions_write32s,217,10546 -fused_transactions_write32s,218,10535 -fused_transactions_write32s,219,10534 -fused_transactions_write32s,220,10538 -fused_transactions_write32s,221,10545 -fused_transactions_write32s,222,10532 -fused_transactions_write32s,223,10545 -fused_transactions_write32s,224,10536 -fused_transactions_write32s,225,10536 -fused_transactions_write32s,226,10537 -fused_transactions_write32s,227,10545 -fused_transactions_write32s,228,10540 -fused_transactions_write32s,229,10539 -fused_transactions_write32s,230,10534 -fused_transactions_write32s,231,10537 -fused_transactions_write32s,232,10532 -fused_transactions_write32s,233,10535 -fused_transactions_write32s,234,10538 -fused_transactions_write32s,235,10541 -fused_transactions_write32s,236,10533 -fused_transactions_write32s,237,10537 -fused_transactions_write32s,238,10534 -fused_transactions_write32s,239,10534 -fused_transactions_write32s,240,10541 -fused_transactions_write32s,241,10537 -fused_transactions_write32s,242,10537 -fused_transactions_write32s,243,10531 -fused_transactions_write32s,244,10539 -fused_transactions_write32s,245,10539 -fused_transactions_write32s,246,10848 -fused_transactions_write32s,247,10544 -fused_transactions_write32s,248,10541 -fused_transactions_write32s,249,10536 -fused_transactions_write32s,250,10545 -fused_transactions_write32s,251,10536 -fused_transactions_write32s,252,10536 -fused_transactions_write32s,253,10540 -fused_transactions_write32s,254,10542 -fused_transactions_write32s,255,10537 -fused_transactions_write32s,256,10537 -fused_transactions_write32s,257,10554 -fused_transactions_write32s,258,10542 -fused_transactions_write32s,259,10548 -fused_transactions_write32s,260,10543 -fused_transactions_write32s,261,10541 -fused_transactions_write32s,262,10541 -fused_transactions_write32s,263,10544 -fused_transactions_write32s,264,10531 -fused_transactions_write32s,265,10541 -fused_transactions_write32s,266,10541 -fused_transactions_write32s,267,10543 -fused_transactions_write32s,268,10533 -fused_transactions_write32s,269,10537 -fused_transactions_write32s,270,10533 -fused_transactions_write32s,271,10534 -fused_transactions_write32s,272,10534 -fused_transactions_write32s,273,10536 -fused_transactions_write32s,274,10540 -fused_transactions_write32s,275,10531 -fused_transactions_write32s,276,10537 -fused_transactions_write32s,277,10530 -fused_transactions_write32s,278,10538 -fused_transactions_write32s,279,10535 -fused_transactions_write32s,280,10536 -fused_transactions_write32s,281,10535 -fused_transactions_write32s,282,10536 -fused_transactions_write32s,283,10533 -fused_transactions_write32s,284,10536 -fused_transactions_write32s,285,10533 -fused_transactions_write32s,286,10539 -fused_transactions_write32s,287,10540 -fused_transactions_write32s,288,10534 -fused_transactions_write32s,289,10536 -fused_transactions_write32s,290,10532 -fused_transactions_write32s,291,10530 -fused_transactions_write32s,292,10536 -fused_transactions_write32s,293,10529 -fused_transactions_write32s,294,10537 -fused_transactions_write32s,295,10546 -fused_transactions_write32s,296,10537 -fused_transactions_write32s,297,10534 -fused_transactions_write32s,298,10546 -fused_transactions_write32s,299,10535 -fused_transactions_write32s,300,10533 -fused_transactions_write32s,301,10532 -fused_transactions_write32s,302,10540 -fused_transactions_write32s,303,10533 -fused_transactions_write32s,304,10532 -fused_transactions_write32s,305,10536 -fused_transactions_write32s,306,10532 -fused_transactions_write32s,307,10535 -fused_transactions_write32s,308,10549 -fused_transactions_write32s,309,10542 -fused_transactions_write32s,310,10545 -fused_transactions_write32s,311,10540 -fused_transactions_write32s,312,10541 -fused_transactions_write32s,313,10531 -fused_transactions_write32s,314,10537 -fused_transactions_write32s,315,10538 -fused_transactions_write32s,316,10534 -fused_transactions_write32s,317,10536 -fused_transactions_write32s,318,10533 -fused_transactions_write32s,319,10536 -fused_transactions_write32s,320,10536 -fused_transactions_write32s,321,10535 -fused_transactions_write32s,322,10540 -fused_transactions_write32s,323,10541 -fused_transactions_write32s,324,10533 -fused_transactions_write32s,325,10530 -fused_transactions_write32s,326,10533 -fused_transactions_write32s,327,10540 -fused_transactions_write32s,328,10537 -fused_transactions_write32s,329,10534 -fused_transactions_write32s,330,10541 -fused_transactions_write32s,331,10543 -fused_transactions_write32s,332,10540 -fused_transactions_write32s,333,10530 -fused_transactions_write32s,334,10537 -fused_transactions_write32s,335,10532 -fused_transactions_write32s,336,10533 -fused_transactions_write32s,337,10537 -fused_transactions_write32s,338,10538 -fused_transactions_write32s,339,10534 -fused_transactions_write32s,340,10537 -fused_transactions_write32s,341,10536 -fused_transactions_write32s,342,10536 -fused_transactions_write32s,343,10538 -fused_transactions_write32s,344,10533 -fused_transactions_write32s,345,10533 -fused_transactions_write32s,346,10534 -fused_transactions_write32s,347,10535 -fused_transactions_write32s,348,10532 -fused_transactions_write32s,349,10531 -fused_transactions_write32s,350,10535 -fused_transactions_write32s,351,10531 -fused_transactions_write32s,352,10540 -fused_transactions_write32s,353,10542 -fused_transactions_write32s,354,10543 -fused_transactions_write32s,355,10543 -fused_transactions_write32s,356,10545 -fused_transactions_write32s,357,10544 -fused_transactions_write32s,358,10544 -fused_transactions_write32s,359,10537 -fused_transactions_write32s,360,10544 -fused_transactions_write32s,361,10547 -fused_transactions_write32s,362,10537 -fused_transactions_write32s,363,10535 -fused_transactions_write32s,364,10547 -fused_transactions_write32s,365,10550 -fused_transactions_write32s,366,10552 -fused_transactions_write32s,367,10562 -fused_transactions_write32s,368,10545 -fused_transactions_write32s,369,10542 -fused_transactions_write32s,370,10534 -fused_transactions_write32s,371,10538 -fused_transactions_write32s,372,10549 -fused_transactions_write32s,373,10544 -fused_transactions_write32s,374,10540 -fused_transactions_write32s,375,10538 -fused_transactions_write32s,376,10539 -fused_transactions_write32s,377,10534 -fused_transactions_write32s,378,10534 -fused_transactions_write32s,379,10534 -fused_transactions_write32s,380,10534 -fused_transactions_write32s,381,10538 -fused_transactions_write32s,382,10539 -fused_transactions_write32s,383,10535 -fused_transactions_write32s,384,10535 -fused_transactions_write32s,385,10545 -fused_transactions_write32s,386,10549 -fused_transactions_write32s,387,10537 -fused_transactions_write32s,388,10530 -fused_transactions_write32s,389,10542 -fused_transactions_write32s,390,10538 -fused_transactions_write32s,391,10536 -fused_transactions_write32s,392,10534 -fused_transactions_write32s,393,10534 -fused_transactions_write32s,394,10536 -fused_transactions_write32s,395,10539 -fused_transactions_write32s,396,10542 -fused_transactions_write32s,397,10538 -fused_transactions_write32s,398,10537 -fused_transactions_write32s,399,10535 -fused_transactions_write32s,400,10541 -fused_transactions_write32s,401,10540 -fused_transactions_write32s,402,10539 -fused_transactions_write32s,403,10540 -fused_transactions_write32s,404,10541 -fused_transactions_write32s,405,10538 -fused_transactions_write32s,406,10536 -fused_transactions_write32s,407,10541 -fused_transactions_write32s,408,10539 -fused_transactions_write32s,409,10546 -fused_transactions_write32s,410,10542 -fused_transactions_write32s,411,10546 -fused_transactions_write32s,412,10537 -fused_transactions_write32s,413,10535 -fused_transactions_write32s,414,10540 -fused_transactions_write32s,415,10539 -fused_transactions_write32s,416,10541 -fused_transactions_write32s,417,10539 -fused_transactions_write32s,418,10539 -fused_transactions_write32s,419,10545 -fused_transactions_write32s,420,10541 -fused_transactions_write32s,421,10545 -fused_transactions_write32s,422,10544 -fused_transactions_write32s,423,10544 -fused_transactions_write32s,424,10541 -fused_transactions_write32s,425,10543 -fused_transactions_write32s,426,10545 -fused_transactions_write32s,427,10542 -fused_transactions_write32s,428,10533 -fused_transactions_write32s,429,10539 -fused_transactions_write32s,430,10542 -fused_transactions_write32s,431,10538 -fused_transactions_write32s,432,10538 -fused_transactions_write32s,433,10543 -fused_transactions_write32s,434,10543 -fused_transactions_write32s,435,10536 -fused_transactions_write32s,436,10540 -fused_transactions_write32s,437,10538 -fused_transactions_write32s,438,10543 -fused_transactions_write32s,439,10542 -fused_transactions_write32s,440,10541 -fused_transactions_write32s,441,10540 -fused_transactions_write32s,442,10543 -fused_transactions_write32s,443,10545 -fused_transactions_write32s,444,10539 -fused_transactions_write32s,445,10539 -fused_transactions_write32s,446,10544 -fused_transactions_write32s,447,10546 -fused_transactions_write32s,448,10536 -fused_transactions_write32s,449,10536 -fused_transactions_write32s,450,10536 -fused_transactions_write32s,451,10536 -fused_transactions_write32s,452,10537 -fused_transactions_write32s,453,10536 -fused_transactions_write32s,454,10529 -fused_transactions_write32s,455,10531 -fused_transactions_write32s,456,10533 -fused_transactions_write32s,457,10533 -fused_transactions_write32s,458,10534 -fused_transactions_write32s,459,10529 -fused_transactions_write32s,460,10537 -fused_transactions_write32s,461,10535 -fused_transactions_write32s,462,10530 -fused_transactions_write32s,463,10531 -fused_transactions_write32s,464,10534 -fused_transactions_write32s,465,10531 -fused_transactions_write32s,466,10530 -fused_transactions_write32s,467,10551 -fused_transactions_write32s,468,10529 -fused_transactions_write32s,469,10532 -fused_transactions_write32s,470,10531 -fused_transactions_write32s,471,10538 -fused_transactions_write32s,472,10534 -fused_transactions_write32s,473,10528 -fused_transactions_write32s,474,10532 -fused_transactions_write32s,475,10537 -fused_transactions_write32s,476,10538 -fused_transactions_write32s,477,10532 -fused_transactions_write32s,478,10536 -fused_transactions_write32s,479,10533 -fused_transactions_write32s,480,10535 -fused_transactions_write32s,481,10536 -fused_transactions_write32s,482,10535 -fused_transactions_write32s,483,10535 -fused_transactions_write32s,484,10531 -fused_transactions_write32s,485,10535 -fused_transactions_write32s,486,10537 -fused_transactions_write32s,487,10540 -fused_transactions_write32s,488,10541 -fused_transactions_write32s,489,10538 -fused_transactions_write32s,490,10537 -fused_transactions_write32s,491,10531 -fused_transactions_write32s,492,10525 -fused_transactions_write32s,493,10524 -fused_transactions_write32s,494,10533 -fused_transactions_write32s,495,10512 -fused_transactions_write32s,496,10508 -fused_transactions_write32s,497,10517 -fused_transactions_write32s,498,10522 -fused_transactions_write32s,499,10525 -fused_transactions_write32s,500,10522 -fused_transactions_write32s,501,10524 -fused_transactions_write32s,502,10526 -fused_transactions_write32s,503,10522 -fused_transactions_write32s,504,10526 -fused_transactions_write32s,505,10531 -fused_transactions_write32s,506,10525 -fused_transactions_write32s,507,10520 -fused_transactions_write32s,508,10555 -fused_transactions_write32s,509,10541 -fused_transactions_write32s,510,10525 -fused_transactions_write32s,511,10527 -fused_transactions_write32s,512,10528 -fused_transactions_write32s,513,10540 -fused_transactions_write32s,514,10527 -fused_transactions_write32s,515,10528 -fused_transactions_write32s,516,10530 -fused_transactions_write32s,517,10532 -fused_transactions_write32s,518,10533 -fused_transactions_write32s,519,10529 -fused_transactions_write32s,520,10533 -fused_transactions_write32s,521,10524 -fused_transactions_write32s,522,10531 -fused_transactions_write32s,523,10530 -fused_transactions_write32s,524,10538 -fused_transactions_write32s,525,10530 -fused_transactions_write32s,526,10532 -fused_transactions_write32s,527,10527 -fused_transactions_write32s,528,10532 -fused_transactions_write32s,529,10529 -fused_transactions_write32s,530,10528 -fused_transactions_write32s,531,10533 -fused_transactions_write32s,532,10529 -fused_transactions_write32s,533,10530 -fused_transactions_write32s,534,10525 -fused_transactions_write32s,535,10524 -fused_transactions_write32s,536,10530 -fused_transactions_write32s,537,10529 -fused_transactions_write32s,538,10536 -fused_transactions_write32s,539,10531 -fused_transactions_write32s,540,10530 -fused_transactions_write32s,541,10532 -fused_transactions_write32s,542,10533 -fused_transactions_write32s,543,10538 -fused_transactions_write32s,544,10527 -fused_transactions_write32s,545,10530 -fused_transactions_write32s,546,10541 -fused_transactions_write32s,547,10549 -fused_transactions_write32s,548,10533 -fused_transactions_write32s,549,10529 -fused_transactions_write32s,550,10539 -fused_transactions_write32s,551,10533 -fused_transactions_write32s,552,10530 -fused_transactions_write32s,553,10535 -fused_transactions_write32s,554,10528 -fused_transactions_write32s,555,10530 -fused_transactions_write32s,556,10540 -fused_transactions_write32s,557,10531 -fused_transactions_write32s,558,10531 -fused_transactions_write32s,559,10532 -fused_transactions_write32s,560,10535 -fused_transactions_write32s,561,10534 -fused_transactions_write32s,562,10527 -fused_transactions_write32s,563,10531 -fused_transactions_write32s,564,10534 -fused_transactions_write32s,565,10532 -fused_transactions_write32s,566,10532 -fused_transactions_write32s,567,10537 -fused_transactions_write32s,568,10528 -fused_transactions_write32s,569,10533 -fused_transactions_write32s,570,10535 -fused_transactions_write32s,571,10530 -fused_transactions_write32s,572,10531 -fused_transactions_write32s,573,10530 -fused_transactions_write32s,574,10530 -fused_transactions_write32s,575,10532 -fused_transactions_write32s,576,10533 -fused_transactions_write32s,577,10531 -fused_transactions_write32s,578,10530 -fused_transactions_write32s,579,10538 -fused_transactions_write32s,580,10531 -fused_transactions_write32s,581,10536 -fused_transactions_write32s,582,10536 -fused_transactions_write32s,583,10533 -fused_transactions_write32s,584,10531 -fused_transactions_write32s,585,10529 -fused_transactions_write32s,586,10533 -fused_transactions_write32s,587,10537 -fused_transactions_write32s,588,10536 -fused_transactions_write32s,589,10538 -fused_transactions_write32s,590,10534 -fused_transactions_write32s,591,10546 -fused_transactions_write32s,592,10544 -fused_transactions_write32s,593,10532 -fused_transactions_write32s,594,10534 -fused_transactions_write32s,595,10530 -fused_transactions_write32s,596,10526 -fused_transactions_write32s,597,10520 -fused_transactions_write32s,598,10530 -fused_transactions_write32s,599,10517 -fused_transactions_write32s,600,10517 -fused_transactions_write32s,601,10517 -fused_transactions_write32s,602,10521 -fused_transactions_write32s,603,10515 -fused_transactions_write32s,604,10513 -fused_transactions_write32s,605,10519 -fused_transactions_write32s,606,10518 -fused_transactions_write32s,607,10514 -fused_transactions_write32s,608,10516 -fused_transactions_write32s,609,10518 -fused_transactions_write32s,610,10507 -fused_transactions_write32s,611,10509 -fused_transactions_write32s,612,10531 -fused_transactions_write32s,613,10543 -fused_transactions_write32s,614,10527 -fused_transactions_write32s,615,10537 -fused_transactions_write32s,616,10532 -fused_transactions_write32s,617,10533 -fused_transactions_write32s,618,10536 -fused_transactions_write32s,619,10534 -fused_transactions_write32s,620,10532 -fused_transactions_write32s,621,10535 -fused_transactions_write32s,622,10533 -fused_transactions_write32s,623,10530 -fused_transactions_write32s,624,10536 -fused_transactions_write32s,625,10528 -fused_transactions_write32s,626,10533 -fused_transactions_write32s,627,10537 -fused_transactions_write32s,628,10529 -fused_transactions_write32s,629,10530 -fused_transactions_write32s,630,10528 -fused_transactions_write32s,631,10532 -fused_transactions_write32s,632,10538 -fused_transactions_write32s,633,10527 -fused_transactions_write32s,634,10528 -fused_transactions_write32s,635,10534 -fused_transactions_write32s,636,10530 -fused_transactions_write32s,637,10538 -fused_transactions_write32s,638,10533 -fused_transactions_write32s,639,10537 -fused_transactions_write32s,640,10528 -fused_transactions_write32s,641,10530 -fused_transactions_write32s,642,10530 -fused_transactions_write32s,643,10531 -fused_transactions_write32s,644,10543 -fused_transactions_write32s,645,10531 -fused_transactions_write32s,646,10542 -fused_transactions_write32s,647,10531 -fused_transactions_write32s,648,10538 -fused_transactions_write32s,649,10541 -fused_transactions_write32s,650,10536 -fused_transactions_write32s,651,10534 -fused_transactions_write32s,652,10535 -fused_transactions_write32s,653,10537 -fused_transactions_write32s,654,10534 -fused_transactions_write32s,655,10538 -fused_transactions_write32s,656,10530 -fused_transactions_write32s,657,10530 -fused_transactions_write32s,658,10529 -fused_transactions_write32s,659,10530 -fused_transactions_write32s,660,10527 -fused_transactions_write32s,661,10533 -fused_transactions_write32s,662,10534 -fused_transactions_write32s,663,10537 -fused_transactions_write32s,664,10531 -fused_transactions_write32s,665,10537 -fused_transactions_write32s,666,10531 -fused_transactions_write32s,667,10530 -fused_transactions_write32s,668,10533 -fused_transactions_write32s,669,10536 -fused_transactions_write32s,670,10532 -fused_transactions_write32s,671,10535 -fused_transactions_write32s,672,10534 -fused_transactions_write32s,673,10529 -fused_transactions_write32s,674,10534 -fused_transactions_write32s,675,10535 -fused_transactions_write32s,676,10529 -fused_transactions_write32s,677,10527 -fused_transactions_write32s,678,10534 -fused_transactions_write32s,679,10537 -fused_transactions_write32s,680,10532 -fused_transactions_write32s,681,10536 -fused_transactions_write32s,682,10536 -fused_transactions_write32s,683,10537 -fused_transactions_write32s,684,10535 -fused_transactions_write32s,685,10529 -fused_transactions_write32s,686,10528 -fused_transactions_write32s,687,10533 -fused_transactions_write32s,688,10528 -fused_transactions_write32s,689,10530 -fused_transactions_write32s,690,10530 -fused_transactions_write32s,691,10534 -fused_transactions_write32s,692,10529 -fused_transactions_write32s,693,10530 -fused_transactions_write32s,694,10526 -fused_transactions_write32s,695,10531 -fused_transactions_write32s,696,10529 -fused_transactions_write32s,697,10533 -fused_transactions_write32s,698,10536 -fused_transactions_write32s,699,10532 -fused_transactions_write32s,700,10533 -fused_transactions_write32s,701,10531 -fused_transactions_write32s,702,10529 -fused_transactions_write32s,703,10536 -fused_transactions_write32s,704,10537 -fused_transactions_write32s,705,10531 -fused_transactions_write32s,706,10527 -fused_transactions_write32s,707,10533 -fused_transactions_write32s,708,10532 -fused_transactions_write32s,709,10533 -fused_transactions_write32s,710,10535 -fused_transactions_write32s,711,10533 -fused_transactions_write32s,712,10534 -fused_transactions_write32s,713,10535 -fused_transactions_write32s,714,10533 -fused_transactions_write32s,715,10529 -fused_transactions_write32s,716,10535 -fused_transactions_write32s,717,10530 -fused_transactions_write32s,718,10530 -fused_transactions_write32s,719,10533 -fused_transactions_write32s,720,10535 -fused_transactions_write32s,721,10532 -fused_transactions_write32s,722,10531 -fused_transactions_write32s,723,10534 -fused_transactions_write32s,724,10534 -fused_transactions_write32s,725,10534 -fused_transactions_write32s,726,10535 -fused_transactions_write32s,727,10529 -fused_transactions_write32s,728,10529 -fused_transactions_write32s,729,10535 -fused_transactions_write32s,730,10535 -fused_transactions_write32s,731,10536 -fused_transactions_write32s,732,10860 -fused_transactions_write32s,733,10540 -fused_transactions_write32s,734,10545 -fused_transactions_write32s,735,10540 -fused_transactions_write32s,736,10532 -fused_transactions_write32s,737,10538 -fused_transactions_write32s,738,10536 -fused_transactions_write32s,739,10528 -fused_transactions_write32s,740,10532 -fused_transactions_write32s,741,10541 -fused_transactions_write32s,742,10534 -fused_transactions_write32s,743,10542 -fused_transactions_write32s,744,10542 -fused_transactions_write32s,745,10537 -fused_transactions_write32s,746,10535 -fused_transactions_write32s,747,10538 -fused_transactions_write32s,748,10538 -fused_transactions_write32s,749,10538 -fused_transactions_write32s,750,10536 -fused_transactions_write32s,751,10538 -fused_transactions_write32s,752,10542 -fused_transactions_write32s,753,10537 -fused_transactions_write32s,754,10544 -fused_transactions_write32s,755,10536 -fused_transactions_write32s,756,10532 -fused_transactions_write32s,757,10532 -fused_transactions_write32s,758,10533 -fused_transactions_write32s,759,10540 -fused_transactions_write32s,760,10537 -fused_transactions_write32s,761,10536 -fused_transactions_write32s,762,10535 -fused_transactions_write32s,763,10543 -fused_transactions_write32s,764,10538 -fused_transactions_write32s,765,10533 -fused_transactions_write32s,766,10534 -fused_transactions_write32s,767,10533 -fused_transactions_write32s,768,10532 -fused_transactions_write32s,769,10533 -fused_transactions_write32s,770,10533 -fused_transactions_write32s,771,10536 -fused_transactions_write32s,772,10536 -fused_transactions_write32s,773,10532 -fused_transactions_write32s,774,10544 -fused_transactions_write32s,775,10538 -fused_transactions_write32s,776,10533 -fused_transactions_write32s,777,10534 -fused_transactions_write32s,778,10533 -fused_transactions_write32s,779,10532 -fused_transactions_write32s,780,10536 -fused_transactions_write32s,781,10543 -fused_transactions_write32s,782,10533 -fused_transactions_write32s,783,10534 -fused_transactions_write32s,784,10537 -fused_transactions_write32s,785,10539 -fused_transactions_write32s,786,10543 -fused_transactions_write32s,787,10541 -fused_transactions_write32s,788,10532 -fused_transactions_write32s,789,10537 -fused_transactions_write32s,790,10534 -fused_transactions_write32s,791,10536 -fused_transactions_write32s,792,10535 -fused_transactions_write32s,793,10531 -fused_transactions_write32s,794,10538 -fused_transactions_write32s,795,10535 -fused_transactions_write32s,796,10536 -fused_transactions_write32s,797,10538 -fused_transactions_write32s,798,10538 -fused_transactions_write32s,799,10531 -fused_transactions_write32s,800,10537 -fused_transactions_write32s,801,10535 -fused_transactions_write32s,802,10540 -fused_transactions_write32s,803,10532 -fused_transactions_write32s,804,10531 -fused_transactions_write32s,805,10537 -fused_transactions_write32s,806,10537 -fused_transactions_write32s,807,10535 -fused_transactions_write32s,808,10538 -fused_transactions_write32s,809,10538 -fused_transactions_write32s,810,10545 -fused_transactions_write32s,811,10531 -fused_transactions_write32s,812,10536 -fused_transactions_write32s,813,10538 -fused_transactions_write32s,814,10534 -fused_transactions_write32s,815,10539 -fused_transactions_write32s,816,10536 -fused_transactions_write32s,817,10532 -fused_transactions_write32s,818,10532 -fused_transactions_write32s,819,10541 -fused_transactions_write32s,820,10532 -fused_transactions_write32s,821,10539 -fused_transactions_write32s,822,10539 -fused_transactions_write32s,823,10532 -fused_transactions_write32s,824,10539 -fused_transactions_write32s,825,10531 -fused_transactions_write32s,826,10534 -fused_transactions_write32s,827,10539 -fused_transactions_write32s,828,10528 -fused_transactions_write32s,829,10542 -fused_transactions_write32s,830,10544 -fused_transactions_write32s,831,10541 -fused_transactions_write32s,832,10534 -fused_transactions_write32s,833,10534 -fused_transactions_write32s,834,10537 -fused_transactions_write32s,835,10539 -fused_transactions_write32s,836,10537 -fused_transactions_write32s,837,10535 -fused_transactions_write32s,838,10540 -fused_transactions_write32s,839,10534 -fused_transactions_write32s,840,10548 -fused_transactions_write32s,841,10540 -fused_transactions_write32s,842,10542 -fused_transactions_write32s,843,10533 -fused_transactions_write32s,844,10532 -fused_transactions_write32s,845,10534 -fused_transactions_write32s,846,10539 -fused_transactions_write32s,847,10531 -fused_transactions_write32s,848,10535 -fused_transactions_write32s,849,10540 -fused_transactions_write32s,850,10536 -fused_transactions_write32s,851,10538 -fused_transactions_write32s,852,10541 -fused_transactions_write32s,853,10541 -fused_transactions_write32s,854,10537 -fused_transactions_write32s,855,10532 -fused_transactions_write32s,856,10539 -fused_transactions_write32s,857,10540 -fused_transactions_write32s,858,10540 -fused_transactions_write32s,859,10542 -fused_transactions_write32s,860,10534 -fused_transactions_write32s,861,10532 -fused_transactions_write32s,862,10543 -fused_transactions_write32s,863,10542 -fused_transactions_write32s,864,10538 -fused_transactions_write32s,865,10538 -fused_transactions_write32s,866,10535 -fused_transactions_write32s,867,10540 -fused_transactions_write32s,868,10534 -fused_transactions_write32s,869,10537 -fused_transactions_write32s,870,10534 -fused_transactions_write32s,871,10538 -fused_transactions_write32s,872,10533 -fused_transactions_write32s,873,10533 -fused_transactions_write32s,874,10536 -fused_transactions_write32s,875,10539 -fused_transactions_write32s,876,10533 -fused_transactions_write32s,877,10534 -fused_transactions_write32s,878,10538 -fused_transactions_write32s,879,10538 -fused_transactions_write32s,880,10537 -fused_transactions_write32s,881,10533 -fused_transactions_write32s,882,10536 -fused_transactions_write32s,883,10534 -fused_transactions_write32s,884,10538 -fused_transactions_write32s,885,10540 -fused_transactions_write32s,886,10535 -fused_transactions_write32s,887,10533 -fused_transactions_write32s,888,10534 -fused_transactions_write32s,889,10532 -fused_transactions_write32s,890,10533 -fused_transactions_write32s,891,10534 -fused_transactions_write32s,892,10539 -fused_transactions_write32s,893,10532 -fused_transactions_write32s,894,10530 -fused_transactions_write32s,895,10541 -fused_transactions_write32s,896,10541 -fused_transactions_write32s,897,10540 -fused_transactions_write32s,898,10547 -fused_transactions_write32s,899,10546 -fused_transactions_write32s,900,10534 -fused_transactions_write32s,901,10539 -fused_transactions_write32s,902,10538 -fused_transactions_write32s,903,10539 -fused_transactions_write32s,904,10537 -fused_transactions_write32s,905,10537 -fused_transactions_write32s,906,10537 -fused_transactions_write32s,907,10535 -fused_transactions_write32s,908,10541 -fused_transactions_write32s,909,10538 -fused_transactions_write32s,910,10539 -fused_transactions_write32s,911,10533 -fused_transactions_write32s,912,10532 -fused_transactions_write32s,913,10535 -fused_transactions_write32s,914,10536 -fused_transactions_write32s,915,10537 -fused_transactions_write32s,916,10537 -fused_transactions_write32s,917,10544 -fused_transactions_write32s,918,10540 -fused_transactions_write32s,919,10532 -fused_transactions_write32s,920,10542 -fused_transactions_write32s,921,10538 -fused_transactions_write32s,922,10539 -fused_transactions_write32s,923,10535 -fused_transactions_write32s,924,10538 -fused_transactions_write32s,925,10536 -fused_transactions_write32s,926,10538 -fused_transactions_write32s,927,10535 -fused_transactions_write32s,928,10533 -fused_transactions_write32s,929,10537 -fused_transactions_write32s,930,10536 -fused_transactions_write32s,931,10533 -fused_transactions_write32s,932,10532 -fused_transactions_write32s,933,10537 -fused_transactions_write32s,934,10542 -fused_transactions_write32s,935,10532 -fused_transactions_write32s,936,10537 -fused_transactions_write32s,937,10538 -fused_transactions_write32s,938,10539 -fused_transactions_write32s,939,10536 -fused_transactions_write32s,940,10536 -fused_transactions_write32s,941,10532 -fused_transactions_write32s,942,10538 -fused_transactions_write32s,943,10536 -fused_transactions_write32s,944,10536 -fused_transactions_write32s,945,10531 -fused_transactions_write32s,946,10533 -fused_transactions_write32s,947,10534 -fused_transactions_write32s,948,10536 -fused_transactions_write32s,949,10536 -fused_transactions_write32s,950,10531 -fused_transactions_write32s,951,10537 -fused_transactions_write32s,952,10540 -fused_transactions_write32s,953,10543 -fused_transactions_write32s,954,10549 -fused_transactions_write32s,955,10546 -fused_transactions_write32s,956,10531 -fused_transactions_write32s,957,10541 -fused_transactions_write32s,958,10536 -fused_transactions_write32s,959,10537 -fused_transactions_write32s,960,10537 -fused_transactions_write32s,961,10538 -fused_transactions_write32s,962,10544 -fused_transactions_write32s,963,10536 -fused_transactions_write32s,964,10533 -fused_transactions_write32s,965,10539 -fused_transactions_write32s,966,10548 -fused_transactions_write32s,967,10542 -fused_transactions_write32s,968,10539 -fused_transactions_write32s,969,10533 -fused_transactions_write32s,970,10543 -fused_transactions_write32s,971,10541 -fused_transactions_write32s,972,10544 -fused_transactions_write32s,973,10534 -fused_transactions_write32s,974,10544 -fused_transactions_write32s,975,10540 -fused_transactions_write32s,976,10542 -fused_transactions_write32s,977,10541 -fused_transactions_write32s,978,10534 -fused_transactions_write32s,979,10538 -fused_transactions_write32s,980,10539 -fused_transactions_write32s,981,10542 -fused_transactions_write32s,982,10535 -fused_transactions_write32s,983,10544 -fused_transactions_write32s,984,10542 -fused_transactions_write32s,985,10541 -fused_transactions_write32s,986,10534 -fused_transactions_write32s,987,10538 -fused_transactions_write32s,988,10535 -fused_transactions_write32s,989,10536 -fused_transactions_write32s,990,10532 -fused_transactions_write32s,991,10541 -fused_transactions_write32s,992,10544 -fused_transactions_write32s,993,10538 -fused_transactions_write32s,994,10538 -fused_transactions_write32s,995,10539 -fused_transactions_write32s,996,10537 -fused_transactions_write32s,997,10531 -fused_transactions_write32s,998,10538 -fused_transactions_write32s,999,10539 \ No newline at end of file diff --git a/programming_examples/reconfiguration/ablation/2_write32s_reset_core_dma.csv b/programming_examples/reconfiguration/ablation/2_write32s_reset_core_dma.csv deleted file mode 100644 index e18ff1f0a27..00000000000 --- a/programming_examples/reconfiguration/ablation/2_write32s_reset_core_dma.csv +++ /dev/null @@ -1,1000 +0,0 @@ -fused_transactions_write32s,0,2521 -fused_transactions_write32s,1,2447 -fused_transactions_write32s,2,2443 -fused_transactions_write32s,3,2431 -fused_transactions_write32s,4,2418 -fused_transactions_write32s,5,2421 -fused_transactions_write32s,6,2407 -fused_transactions_write32s,7,2415 -fused_transactions_write32s,8,2408 -fused_transactions_write32s,9,2415 -fused_transactions_write32s,10,2421 -fused_transactions_write32s,11,2399 -fused_transactions_write32s,12,2403 -fused_transactions_write32s,13,2405 -fused_transactions_write32s,14,2390 -fused_transactions_write32s,15,2407 -fused_transactions_write32s,16,2412 -fused_transactions_write32s,17,2406 -fused_transactions_write32s,18,2416 -fused_transactions_write32s,19,2412 -fused_transactions_write32s,20,2412 -fused_transactions_write32s,21,2411 -fused_transactions_write32s,22,2421 -fused_transactions_write32s,23,2416 -fused_transactions_write32s,24,2414 -fused_transactions_write32s,25,2412 -fused_transactions_write32s,26,2413 -fused_transactions_write32s,27,2414 -fused_transactions_write32s,28,2419 -fused_transactions_write32s,29,2411 -fused_transactions_write32s,30,2411 -fused_transactions_write32s,31,2417 -fused_transactions_write32s,32,2411 -fused_transactions_write32s,33,2413 -fused_transactions_write32s,34,2415 -fused_transactions_write32s,35,2411 -fused_transactions_write32s,36,2429 -fused_transactions_write32s,37,2418 -fused_transactions_write32s,38,2415 -fused_transactions_write32s,39,2413 -fused_transactions_write32s,40,2413 -fused_transactions_write32s,41,2414 -fused_transactions_write32s,42,2413 -fused_transactions_write32s,43,2414 -fused_transactions_write32s,44,2412 -fused_transactions_write32s,45,2414 -fused_transactions_write32s,46,2414 -fused_transactions_write32s,47,2413 -fused_transactions_write32s,48,2412 -fused_transactions_write32s,49,2418 -fused_transactions_write32s,50,2411 -fused_transactions_write32s,51,2414 -fused_transactions_write32s,52,2411 -fused_transactions_write32s,53,2417 -fused_transactions_write32s,54,2411 -fused_transactions_write32s,55,2411 -fused_transactions_write32s,56,2414 -fused_transactions_write32s,57,2416 -fused_transactions_write32s,58,2413 -fused_transactions_write32s,59,2412 -fused_transactions_write32s,60,2411 -fused_transactions_write32s,61,2412 -fused_transactions_write32s,62,2415 -fused_transactions_write32s,63,2412 -fused_transactions_write32s,64,2414 -fused_transactions_write32s,65,2428 -fused_transactions_write32s,66,2413 -fused_transactions_write32s,67,2416 -fused_transactions_write32s,68,2414 -fused_transactions_write32s,69,2413 -fused_transactions_write32s,70,2416 -fused_transactions_write32s,71,2411 -fused_transactions_write32s,72,2412 -fused_transactions_write32s,73,2412 -fused_transactions_write32s,74,2410 -fused_transactions_write32s,75,2414 -fused_transactions_write32s,76,2414 -fused_transactions_write32s,77,2414 -fused_transactions_write32s,78,2414 -fused_transactions_write32s,79,2415 -fused_transactions_write32s,80,2410 -fused_transactions_write32s,81,2415 -fused_transactions_write32s,82,2409 -fused_transactions_write32s,83,2415 -fused_transactions_write32s,84,2411 -fused_transactions_write32s,85,2417 -fused_transactions_write32s,86,2414 -fused_transactions_write32s,87,2412 -fused_transactions_write32s,88,2410 -fused_transactions_write32s,89,2411 -fused_transactions_write32s,90,2411 -fused_transactions_write32s,91,2409 -fused_transactions_write32s,92,2415 -fused_transactions_write32s,93,2411 -fused_transactions_write32s,94,2419 -fused_transactions_write32s,95,2413 -fused_transactions_write32s,96,2417 -fused_transactions_write32s,97,2413 -fused_transactions_write32s,98,2423 -fused_transactions_write32s,99,2413 -fused_transactions_write32s,100,2412 -fused_transactions_write32s,101,2415 -fused_transactions_write32s,102,2412 -fused_transactions_write32s,103,2414 -fused_transactions_write32s,104,2414 -fused_transactions_write32s,105,2413 -fused_transactions_write32s,106,2414 -fused_transactions_write32s,107,2413 -fused_transactions_write32s,108,2410 -fused_transactions_write32s,109,2411 -fused_transactions_write32s,110,2412 -fused_transactions_write32s,111,2413 -fused_transactions_write32s,112,2409 -fused_transactions_write32s,113,2416 -fused_transactions_write32s,114,2412 -fused_transactions_write32s,115,2413 -fused_transactions_write32s,116,2411 -fused_transactions_write32s,117,2411 -fused_transactions_write32s,118,2413 -fused_transactions_write32s,119,2411 -fused_transactions_write32s,120,2413 -fused_transactions_write32s,121,2411 -fused_transactions_write32s,122,2412 -fused_transactions_write32s,123,2408 -fused_transactions_write32s,124,2411 -fused_transactions_write32s,125,2414 -fused_transactions_write32s,126,2413 -fused_transactions_write32s,127,2415 -fused_transactions_write32s,128,2411 -fused_transactions_write32s,129,2401 -fused_transactions_write32s,130,2398 -fused_transactions_write32s,131,2415 -fused_transactions_write32s,132,2412 -fused_transactions_write32s,133,2410 -fused_transactions_write32s,134,2412 -fused_transactions_write32s,135,2397 -fused_transactions_write32s,136,2412 -fused_transactions_write32s,137,2413 -fused_transactions_write32s,138,2411 -fused_transactions_write32s,139,2412 -fused_transactions_write32s,140,2416 -fused_transactions_write32s,141,2414 -fused_transactions_write32s,142,2413 -fused_transactions_write32s,143,2418 -fused_transactions_write32s,144,2417 -fused_transactions_write32s,145,2415 -fused_transactions_write32s,146,2417 -fused_transactions_write32s,147,2414 -fused_transactions_write32s,148,2414 -fused_transactions_write32s,149,2411 -fused_transactions_write32s,150,2412 -fused_transactions_write32s,151,2412 -fused_transactions_write32s,152,2410 -fused_transactions_write32s,153,2415 -fused_transactions_write32s,154,2414 -fused_transactions_write32s,155,2410 -fused_transactions_write32s,156,2414 -fused_transactions_write32s,157,2412 -fused_transactions_write32s,158,2412 -fused_transactions_write32s,159,2410 -fused_transactions_write32s,160,2411 -fused_transactions_write32s,161,2410 -fused_transactions_write32s,162,2410 -fused_transactions_write32s,163,2411 -fused_transactions_write32s,164,2414 -fused_transactions_write32s,165,2412 -fused_transactions_write32s,166,2412 -fused_transactions_write32s,167,2412 -fused_transactions_write32s,168,2416 -fused_transactions_write32s,169,2412 -fused_transactions_write32s,170,2412 -fused_transactions_write32s,171,2416 -fused_transactions_write32s,172,2412 -fused_transactions_write32s,173,2413 -fused_transactions_write32s,174,2410 -fused_transactions_write32s,175,2411 -fused_transactions_write32s,176,2412 -fused_transactions_write32s,177,2399 -fused_transactions_write32s,178,2409 -fused_transactions_write32s,179,2408 -fused_transactions_write32s,180,2414 -fused_transactions_write32s,181,2415 -fused_transactions_write32s,182,2413 -fused_transactions_write32s,183,2415 -fused_transactions_write32s,184,2411 -fused_transactions_write32s,185,2412 -fused_transactions_write32s,186,2416 -fused_transactions_write32s,187,2411 -fused_transactions_write32s,188,2413 -fused_transactions_write32s,189,2411 -fused_transactions_write32s,190,2411 -fused_transactions_write32s,191,2412 -fused_transactions_write32s,192,2411 -fused_transactions_write32s,193,2413 -fused_transactions_write32s,194,2411 -fused_transactions_write32s,195,2413 -fused_transactions_write32s,196,2411 -fused_transactions_write32s,197,2413 -fused_transactions_write32s,198,2415 -fused_transactions_write32s,199,2433 -fused_transactions_write32s,200,2417 -fused_transactions_write32s,201,2412 -fused_transactions_write32s,202,2411 -fused_transactions_write32s,203,2412 -fused_transactions_write32s,204,2410 -fused_transactions_write32s,205,2413 -fused_transactions_write32s,206,2414 -fused_transactions_write32s,207,2411 -fused_transactions_write32s,208,2413 -fused_transactions_write32s,209,2412 -fused_transactions_write32s,210,2414 -fused_transactions_write32s,211,2409 -fused_transactions_write32s,212,2412 -fused_transactions_write32s,213,2412 -fused_transactions_write32s,214,2415 -fused_transactions_write32s,215,2419 -fused_transactions_write32s,216,2416 -fused_transactions_write32s,217,2411 -fused_transactions_write32s,218,2413 -fused_transactions_write32s,219,2411 -fused_transactions_write32s,220,2410 -fused_transactions_write32s,221,2411 -fused_transactions_write32s,222,2412 -fused_transactions_write32s,223,2417 -fused_transactions_write32s,224,2411 -fused_transactions_write32s,225,2412 -fused_transactions_write32s,226,2416 -fused_transactions_write32s,227,2410 -fused_transactions_write32s,228,2411 -fused_transactions_write32s,229,2414 -fused_transactions_write32s,230,2412 -fused_transactions_write32s,231,2413 -fused_transactions_write32s,232,2408 -fused_transactions_write32s,233,2412 -fused_transactions_write32s,234,2411 -fused_transactions_write32s,235,2413 -fused_transactions_write32s,236,2410 -fused_transactions_write32s,237,2414 -fused_transactions_write32s,238,2413 -fused_transactions_write32s,239,2410 -fused_transactions_write32s,240,2411 -fused_transactions_write32s,241,2413 -fused_transactions_write32s,242,2413 -fused_transactions_write32s,243,2404 -fused_transactions_write32s,244,2412 -fused_transactions_write32s,245,2411 -fused_transactions_write32s,246,2412 -fused_transactions_write32s,247,2413 -fused_transactions_write32s,248,2413 -fused_transactions_write32s,249,2415 -fused_transactions_write32s,250,2413 -fused_transactions_write32s,251,2412 -fused_transactions_write32s,252,2411 -fused_transactions_write32s,253,2413 -fused_transactions_write32s,254,2414 -fused_transactions_write32s,255,2413 -fused_transactions_write32s,256,2412 -fused_transactions_write32s,257,2411 -fused_transactions_write32s,258,2411 -fused_transactions_write32s,259,2412 -fused_transactions_write32s,260,2412 -fused_transactions_write32s,261,2411 -fused_transactions_write32s,262,2413 -fused_transactions_write32s,263,2412 -fused_transactions_write32s,264,2418 -fused_transactions_write32s,265,2412 -fused_transactions_write32s,266,2410 -fused_transactions_write32s,267,2410 -fused_transactions_write32s,268,2413 -fused_transactions_write32s,269,2414 -fused_transactions_write32s,270,2411 -fused_transactions_write32s,271,2412 -fused_transactions_write32s,272,2430 -fused_transactions_write32s,273,2439 -fused_transactions_write32s,274,2413 -fused_transactions_write32s,275,2408 -fused_transactions_write32s,276,2409 -fused_transactions_write32s,277,2413 -fused_transactions_write32s,278,2408 -fused_transactions_write32s,279,2411 -fused_transactions_write32s,280,2420 -fused_transactions_write32s,281,2411 -fused_transactions_write32s,282,2408 -fused_transactions_write32s,283,2411 -fused_transactions_write32s,284,2413 -fused_transactions_write32s,285,2413 -fused_transactions_write32s,286,2420 -fused_transactions_write32s,287,2419 -fused_transactions_write32s,288,2416 -fused_transactions_write32s,289,2410 -fused_transactions_write32s,290,2413 -fused_transactions_write32s,291,2411 -fused_transactions_write32s,292,2410 -fused_transactions_write32s,293,2408 -fused_transactions_write32s,294,2409 -fused_transactions_write32s,295,2407 -fused_transactions_write32s,296,2413 -fused_transactions_write32s,297,2409 -fused_transactions_write32s,298,2410 -fused_transactions_write32s,299,2410 -fused_transactions_write32s,300,2410 -fused_transactions_write32s,301,2411 -fused_transactions_write32s,302,2409 -fused_transactions_write32s,303,2409 -fused_transactions_write32s,304,2407 -fused_transactions_write32s,305,2414 -fused_transactions_write32s,306,2408 -fused_transactions_write32s,307,2406 -fused_transactions_write32s,308,2408 -fused_transactions_write32s,309,2410 -fused_transactions_write32s,310,2408 -fused_transactions_write32s,311,2412 -fused_transactions_write32s,312,2416 -fused_transactions_write32s,313,2409 -fused_transactions_write32s,314,2409 -fused_transactions_write32s,315,2407 -fused_transactions_write32s,316,2412 -fused_transactions_write32s,317,2410 -fused_transactions_write32s,318,2408 -fused_transactions_write32s,319,2407 -fused_transactions_write32s,320,2410 -fused_transactions_write32s,321,2411 -fused_transactions_write32s,322,2408 -fused_transactions_write32s,323,2411 -fused_transactions_write32s,324,2410 -fused_transactions_write32s,325,2408 -fused_transactions_write32s,326,2411 -fused_transactions_write32s,327,2410 -fused_transactions_write32s,328,2416 -fused_transactions_write32s,329,2409 -fused_transactions_write32s,330,2417 -fused_transactions_write32s,331,2413 -fused_transactions_write32s,332,2412 -fused_transactions_write32s,333,2414 -fused_transactions_write32s,334,2409 -fused_transactions_write32s,335,2408 -fused_transactions_write32s,336,2414 -fused_transactions_write32s,337,2418 -fused_transactions_write32s,338,2409 -fused_transactions_write32s,339,2408 -fused_transactions_write32s,340,2411 -fused_transactions_write32s,341,2421 -fused_transactions_write32s,342,2412 -fused_transactions_write32s,343,2410 -fused_transactions_write32s,344,2411 -fused_transactions_write32s,345,2411 -fused_transactions_write32s,346,2412 -fused_transactions_write32s,347,2413 -fused_transactions_write32s,348,2413 -fused_transactions_write32s,349,2409 -fused_transactions_write32s,350,2420 -fused_transactions_write32s,351,2412 -fused_transactions_write32s,352,2428 -fused_transactions_write32s,353,2431 -fused_transactions_write32s,354,2418 -fused_transactions_write32s,355,2413 -fused_transactions_write32s,356,2415 -fused_transactions_write32s,357,2412 -fused_transactions_write32s,358,2413 -fused_transactions_write32s,359,2406 -fused_transactions_write32s,360,2415 -fused_transactions_write32s,361,2415 -fused_transactions_write32s,362,2410 -fused_transactions_write32s,363,2415 -fused_transactions_write32s,364,2410 -fused_transactions_write32s,365,2413 -fused_transactions_write32s,366,2417 -fused_transactions_write32s,367,2409 -fused_transactions_write32s,368,2416 -fused_transactions_write32s,369,2411 -fused_transactions_write32s,370,2412 -fused_transactions_write32s,371,2407 -fused_transactions_write32s,372,2414 -fused_transactions_write32s,373,2415 -fused_transactions_write32s,374,2412 -fused_transactions_write32s,375,2411 -fused_transactions_write32s,376,2409 -fused_transactions_write32s,377,2412 -fused_transactions_write32s,378,2412 -fused_transactions_write32s,379,2409 -fused_transactions_write32s,380,2417 -fused_transactions_write32s,381,2418 -fused_transactions_write32s,382,2439 -fused_transactions_write32s,383,2418 -fused_transactions_write32s,384,2417 -fused_transactions_write32s,385,2411 -fused_transactions_write32s,386,2411 -fused_transactions_write32s,387,2415 -fused_transactions_write32s,388,2416 -fused_transactions_write32s,389,2410 -fused_transactions_write32s,390,2418 -fused_transactions_write32s,391,2412 -fused_transactions_write32s,392,2413 -fused_transactions_write32s,393,2411 -fused_transactions_write32s,394,2415 -fused_transactions_write32s,395,2414 -fused_transactions_write32s,396,2410 -fused_transactions_write32s,397,2413 -fused_transactions_write32s,398,2409 -fused_transactions_write32s,399,2409 -fused_transactions_write32s,400,2414 -fused_transactions_write32s,401,2414 -fused_transactions_write32s,402,2411 -fused_transactions_write32s,403,2412 -fused_transactions_write32s,404,2415 -fused_transactions_write32s,405,2418 -fused_transactions_write32s,406,2419 -fused_transactions_write32s,407,2418 -fused_transactions_write32s,408,2417 -fused_transactions_write32s,409,2410 -fused_transactions_write32s,410,2406 -fused_transactions_write32s,411,2406 -fused_transactions_write32s,412,2404 -fused_transactions_write32s,413,2410 -fused_transactions_write32s,414,2409 -fused_transactions_write32s,415,2405 -fused_transactions_write32s,416,2406 -fused_transactions_write32s,417,2399 -fused_transactions_write32s,418,2410 -fused_transactions_write32s,419,2409 -fused_transactions_write32s,420,2410 -fused_transactions_write32s,421,2406 -fused_transactions_write32s,422,2414 -fused_transactions_write32s,423,2408 -fused_transactions_write32s,424,2408 -fused_transactions_write32s,425,2399 -fused_transactions_write32s,426,2407 -fused_transactions_write32s,427,2403 -fused_transactions_write32s,428,2398 -fused_transactions_write32s,429,2409 -fused_transactions_write32s,430,2415 -fused_transactions_write32s,431,2412 -fused_transactions_write32s,432,2421 -fused_transactions_write32s,433,2418 -fused_transactions_write32s,434,2419 -fused_transactions_write32s,435,2421 -fused_transactions_write32s,436,2411 -fused_transactions_write32s,437,2416 -fused_transactions_write32s,438,2417 -fused_transactions_write32s,439,2414 -fused_transactions_write32s,440,2412 -fused_transactions_write32s,441,2412 -fused_transactions_write32s,442,2409 -fused_transactions_write32s,443,2412 -fused_transactions_write32s,444,2413 -fused_transactions_write32s,445,2413 -fused_transactions_write32s,446,2411 -fused_transactions_write32s,447,2415 -fused_transactions_write32s,448,2409 -fused_transactions_write32s,449,2414 -fused_transactions_write32s,450,2413 -fused_transactions_write32s,451,2414 -fused_transactions_write32s,452,2412 -fused_transactions_write32s,453,2412 -fused_transactions_write32s,454,2412 -fused_transactions_write32s,455,2416 -fused_transactions_write32s,456,2410 -fused_transactions_write32s,457,2421 -fused_transactions_write32s,458,2414 -fused_transactions_write32s,459,2413 -fused_transactions_write32s,460,2414 -fused_transactions_write32s,461,2413 -fused_transactions_write32s,462,2410 -fused_transactions_write32s,463,2411 -fused_transactions_write32s,464,2410 -fused_transactions_write32s,465,2413 -fused_transactions_write32s,466,2421 -fused_transactions_write32s,467,2416 -fused_transactions_write32s,468,2411 -fused_transactions_write32s,469,2411 -fused_transactions_write32s,470,2410 -fused_transactions_write32s,471,2415 -fused_transactions_write32s,472,2413 -fused_transactions_write32s,473,2417 -fused_transactions_write32s,474,2420 -fused_transactions_write32s,475,2413 -fused_transactions_write32s,476,2414 -fused_transactions_write32s,477,2410 -fused_transactions_write32s,478,2416 -fused_transactions_write32s,479,2409 -fused_transactions_write32s,480,2413 -fused_transactions_write32s,481,2414 -fused_transactions_write32s,482,2413 -fused_transactions_write32s,483,2412 -fused_transactions_write32s,484,2417 -fused_transactions_write32s,485,2412 -fused_transactions_write32s,486,2411 -fused_transactions_write32s,487,2412 -fused_transactions_write32s,488,2414 -fused_transactions_write32s,489,2411 -fused_transactions_write32s,490,2412 -fused_transactions_write32s,491,2414 -fused_transactions_write32s,492,2414 -fused_transactions_write32s,493,2414 -fused_transactions_write32s,494,2414 -fused_transactions_write32s,495,2416 -fused_transactions_write32s,496,2412 -fused_transactions_write32s,497,2412 -fused_transactions_write32s,498,2410 -fused_transactions_write32s,499,2414 -fused_transactions_write32s,500,2410 -fused_transactions_write32s,501,2415 -fused_transactions_write32s,502,2413 -fused_transactions_write32s,503,2419 -fused_transactions_write32s,504,2414 -fused_transactions_write32s,505,2415 -fused_transactions_write32s,506,2414 -fused_transactions_write32s,507,2417 -fused_transactions_write32s,508,2411 -fused_transactions_write32s,509,2414 -fused_transactions_write32s,510,2411 -fused_transactions_write32s,511,2410 -fused_transactions_write32s,512,2412 -fused_transactions_write32s,513,2415 -fused_transactions_write32s,514,2413 -fused_transactions_write32s,515,2413 -fused_transactions_write32s,516,2411 -fused_transactions_write32s,517,2409 -fused_transactions_write32s,518,2419 -fused_transactions_write32s,519,2417 -fused_transactions_write32s,520,2410 -fused_transactions_write32s,521,2410 -fused_transactions_write32s,522,2406 -fused_transactions_write32s,523,2409 -fused_transactions_write32s,524,2413 -fused_transactions_write32s,525,2406 -fused_transactions_write32s,526,2396 -fused_transactions_write32s,527,2385 -fused_transactions_write32s,528,2385 -fused_transactions_write32s,529,2390 -fused_transactions_write32s,530,2392 -fused_transactions_write32s,531,2414 -fused_transactions_write32s,532,2416 -fused_transactions_write32s,533,2411 -fused_transactions_write32s,534,2411 -fused_transactions_write32s,535,2412 -fused_transactions_write32s,536,2411 -fused_transactions_write32s,537,2408 -fused_transactions_write32s,538,2413 -fused_transactions_write32s,539,2414 -fused_transactions_write32s,540,2412 -fused_transactions_write32s,541,2414 -fused_transactions_write32s,542,2412 -fused_transactions_write32s,543,2410 -fused_transactions_write32s,544,2412 -fused_transactions_write32s,545,2415 -fused_transactions_write32s,546,2418 -fused_transactions_write32s,547,2420 -fused_transactions_write32s,548,2412 -fused_transactions_write32s,549,2410 -fused_transactions_write32s,550,2407 -fused_transactions_write32s,551,2410 -fused_transactions_write32s,552,2411 -fused_transactions_write32s,553,2410 -fused_transactions_write32s,554,2411 -fused_transactions_write32s,555,2408 -fused_transactions_write32s,556,2408 -fused_transactions_write32s,557,2410 -fused_transactions_write32s,558,2408 -fused_transactions_write32s,559,2410 -fused_transactions_write32s,560,2410 -fused_transactions_write32s,561,2417 -fused_transactions_write32s,562,2419 -fused_transactions_write32s,563,2412 -fused_transactions_write32s,564,2412 -fused_transactions_write32s,565,2410 -fused_transactions_write32s,566,2410 -fused_transactions_write32s,567,2410 -fused_transactions_write32s,568,2408 -fused_transactions_write32s,569,2410 -fused_transactions_write32s,570,2412 -fused_transactions_write32s,571,2413 -fused_transactions_write32s,572,2412 -fused_transactions_write32s,573,2414 -fused_transactions_write32s,574,2414 -fused_transactions_write32s,575,2414 -fused_transactions_write32s,576,2410 -fused_transactions_write32s,577,2407 -fused_transactions_write32s,578,2412 -fused_transactions_write32s,579,2411 -fused_transactions_write32s,580,2413 -fused_transactions_write32s,581,2410 -fused_transactions_write32s,582,2409 -fused_transactions_write32s,583,2408 -fused_transactions_write32s,584,2412 -fused_transactions_write32s,585,2411 -fused_transactions_write32s,586,2413 -fused_transactions_write32s,587,2412 -fused_transactions_write32s,588,2408 -fused_transactions_write32s,589,2413 -fused_transactions_write32s,590,2409 -fused_transactions_write32s,591,2410 -fused_transactions_write32s,592,2410 -fused_transactions_write32s,593,2408 -fused_transactions_write32s,594,2413 -fused_transactions_write32s,595,2413 -fused_transactions_write32s,596,2409 -fused_transactions_write32s,597,2418 -fused_transactions_write32s,598,2413 -fused_transactions_write32s,599,2412 -fused_transactions_write32s,600,2415 -fused_transactions_write32s,601,2416 -fused_transactions_write32s,602,2410 -fused_transactions_write32s,603,2410 -fused_transactions_write32s,604,2416 -fused_transactions_write32s,605,2411 -fused_transactions_write32s,606,2411 -fused_transactions_write32s,607,2410 -fused_transactions_write32s,608,2412 -fused_transactions_write32s,609,2410 -fused_transactions_write32s,610,2412 -fused_transactions_write32s,611,2412 -fused_transactions_write32s,612,2411 -fused_transactions_write32s,613,2410 -fused_transactions_write32s,614,2409 -fused_transactions_write32s,615,2410 -fused_transactions_write32s,616,2411 -fused_transactions_write32s,617,2411 -fused_transactions_write32s,618,2413 -fused_transactions_write32s,619,2415 -fused_transactions_write32s,620,2409 -fused_transactions_write32s,621,2412 -fused_transactions_write32s,622,2409 -fused_transactions_write32s,623,2410 -fused_transactions_write32s,624,2411 -fused_transactions_write32s,625,2408 -fused_transactions_write32s,626,2415 -fused_transactions_write32s,627,2415 -fused_transactions_write32s,628,2412 -fused_transactions_write32s,629,2410 -fused_transactions_write32s,630,2416 -fused_transactions_write32s,631,2412 -fused_transactions_write32s,632,2414 -fused_transactions_write32s,633,2410 -fused_transactions_write32s,634,2410 -fused_transactions_write32s,635,2412 -fused_transactions_write32s,636,2410 -fused_transactions_write32s,637,2421 -fused_transactions_write32s,638,2418 -fused_transactions_write32s,639,2412 -fused_transactions_write32s,640,2409 -fused_transactions_write32s,641,2416 -fused_transactions_write32s,642,2417 -fused_transactions_write32s,643,2412 -fused_transactions_write32s,644,2409 -fused_transactions_write32s,645,2410 -fused_transactions_write32s,646,2415 -fused_transactions_write32s,647,2410 -fused_transactions_write32s,648,2411 -fused_transactions_write32s,649,2412 -fused_transactions_write32s,650,2415 -fused_transactions_write32s,651,2412 -fused_transactions_write32s,652,2409 -fused_transactions_write32s,653,2409 -fused_transactions_write32s,654,2408 -fused_transactions_write32s,655,2412 -fused_transactions_write32s,656,2411 -fused_transactions_write32s,657,2411 -fused_transactions_write32s,658,2409 -fused_transactions_write32s,659,2414 -fused_transactions_write32s,660,2421 -fused_transactions_write32s,661,2412 -fused_transactions_write32s,662,2409 -fused_transactions_write32s,663,2409 -fused_transactions_write32s,664,2407 -fused_transactions_write32s,665,2405 -fused_transactions_write32s,666,2406 -fused_transactions_write32s,667,2416 -fused_transactions_write32s,668,2415 -fused_transactions_write32s,669,2409 -fused_transactions_write32s,670,2412 -fused_transactions_write32s,671,2414 -fused_transactions_write32s,672,2414 -fused_transactions_write32s,673,2414 -fused_transactions_write32s,674,2409 -fused_transactions_write32s,675,2415 -fused_transactions_write32s,676,2410 -fused_transactions_write32s,677,2409 -fused_transactions_write32s,678,2422 -fused_transactions_write32s,679,2419 -fused_transactions_write32s,680,2411 -fused_transactions_write32s,681,2412 -fused_transactions_write32s,682,2411 -fused_transactions_write32s,683,2422 -fused_transactions_write32s,684,2409 -fused_transactions_write32s,685,2416 -fused_transactions_write32s,686,2411 -fused_transactions_write32s,687,2415 -fused_transactions_write32s,688,2410 -fused_transactions_write32s,689,2418 -fused_transactions_write32s,690,2414 -fused_transactions_write32s,691,2426 -fused_transactions_write32s,692,2413 -fused_transactions_write32s,693,2412 -fused_transactions_write32s,694,2413 -fused_transactions_write32s,695,2417 -fused_transactions_write32s,696,2412 -fused_transactions_write32s,697,2422 -fused_transactions_write32s,698,2415 -fused_transactions_write32s,699,2417 -fused_transactions_write32s,700,2414 -fused_transactions_write32s,701,2414 -fused_transactions_write32s,702,2412 -fused_transactions_write32s,703,2414 -fused_transactions_write32s,704,2405 -fused_transactions_write32s,705,2417 -fused_transactions_write32s,706,2414 -fused_transactions_write32s,707,2409 -fused_transactions_write32s,708,2408 -fused_transactions_write32s,709,2413 -fused_transactions_write32s,710,2409 -fused_transactions_write32s,711,2414 -fused_transactions_write32s,712,2410 -fused_transactions_write32s,713,2414 -fused_transactions_write32s,714,2412 -fused_transactions_write32s,715,2407 -fused_transactions_write32s,716,2412 -fused_transactions_write32s,717,2414 -fused_transactions_write32s,718,2414 -fused_transactions_write32s,719,2408 -fused_transactions_write32s,720,2410 -fused_transactions_write32s,721,2408 -fused_transactions_write32s,722,2416 -fused_transactions_write32s,723,2410 -fused_transactions_write32s,724,2409 -fused_transactions_write32s,725,2411 -fused_transactions_write32s,726,2413 -fused_transactions_write32s,727,2410 -fused_transactions_write32s,728,2416 -fused_transactions_write32s,729,2416 -fused_transactions_write32s,730,2414 -fused_transactions_write32s,731,2407 -fused_transactions_write32s,732,2407 -fused_transactions_write32s,733,2409 -fused_transactions_write32s,734,2414 -fused_transactions_write32s,735,2406 -fused_transactions_write32s,736,2415 -fused_transactions_write32s,737,2410 -fused_transactions_write32s,738,2411 -fused_transactions_write32s,739,2405 -fused_transactions_write32s,740,2408 -fused_transactions_write32s,741,2413 -fused_transactions_write32s,742,2409 -fused_transactions_write32s,743,2407 -fused_transactions_write32s,744,2410 -fused_transactions_write32s,745,2415 -fused_transactions_write32s,746,2413 -fused_transactions_write32s,747,2410 -fused_transactions_write32s,748,2412 -fused_transactions_write32s,749,2406 -fused_transactions_write32s,750,2412 -fused_transactions_write32s,751,2407 -fused_transactions_write32s,752,2406 -fused_transactions_write32s,753,2409 -fused_transactions_write32s,754,2415 -fused_transactions_write32s,755,2409 -fused_transactions_write32s,756,2412 -fused_transactions_write32s,757,2410 -fused_transactions_write32s,758,2407 -fused_transactions_write32s,759,2410 -fused_transactions_write32s,760,2411 -fused_transactions_write32s,761,2410 -fused_transactions_write32s,762,2407 -fused_transactions_write32s,763,2410 -fused_transactions_write32s,764,2406 -fused_transactions_write32s,765,2415 -fused_transactions_write32s,766,2410 -fused_transactions_write32s,767,2406 -fused_transactions_write32s,768,2409 -fused_transactions_write32s,769,2413 -fused_transactions_write32s,770,2407 -fused_transactions_write32s,771,2408 -fused_transactions_write32s,772,2408 -fused_transactions_write32s,773,2415 -fused_transactions_write32s,774,2409 -fused_transactions_write32s,775,2408 -fused_transactions_write32s,776,2407 -fused_transactions_write32s,777,2406 -fused_transactions_write32s,778,2417 -fused_transactions_write32s,779,2406 -fused_transactions_write32s,780,2410 -fused_transactions_write32s,781,2410 -fused_transactions_write32s,782,2409 -fused_transactions_write32s,783,2409 -fused_transactions_write32s,784,2407 -fused_transactions_write32s,785,2408 -fused_transactions_write32s,786,2413 -fused_transactions_write32s,787,2408 -fused_transactions_write32s,788,2412 -fused_transactions_write32s,789,2405 -fused_transactions_write32s,790,2413 -fused_transactions_write32s,791,2410 -fused_transactions_write32s,792,2410 -fused_transactions_write32s,793,2408 -fused_transactions_write32s,794,2411 -fused_transactions_write32s,795,2410 -fused_transactions_write32s,796,2410 -fused_transactions_write32s,797,2407 -fused_transactions_write32s,798,2412 -fused_transactions_write32s,799,2410 -fused_transactions_write32s,800,2410 -fused_transactions_write32s,801,2411 -fused_transactions_write32s,802,2409 -fused_transactions_write32s,803,2414 -fused_transactions_write32s,804,2417 -fused_transactions_write32s,805,2413 -fused_transactions_write32s,806,2406 -fused_transactions_write32s,807,2412 -fused_transactions_write32s,808,2410 -fused_transactions_write32s,809,2410 -fused_transactions_write32s,810,2409 -fused_transactions_write32s,811,2409 -fused_transactions_write32s,812,2408 -fused_transactions_write32s,813,2412 -fused_transactions_write32s,814,2406 -fused_transactions_write32s,815,2418 -fused_transactions_write32s,816,2416 -fused_transactions_write32s,817,2411 -fused_transactions_write32s,818,2410 -fused_transactions_write32s,819,2411 -fused_transactions_write32s,820,2408 -fused_transactions_write32s,821,2407 -fused_transactions_write32s,822,2410 -fused_transactions_write32s,823,2412 -fused_transactions_write32s,824,2413 -fused_transactions_write32s,825,2405 -fused_transactions_write32s,826,2410 -fused_transactions_write32s,827,2407 -fused_transactions_write32s,828,2412 -fused_transactions_write32s,829,2410 -fused_transactions_write32s,830,2410 -fused_transactions_write32s,831,2411 -fused_transactions_write32s,832,2410 -fused_transactions_write32s,833,2409 -fused_transactions_write32s,834,2416 -fused_transactions_write32s,835,2414 -fused_transactions_write32s,836,2414 -fused_transactions_write32s,837,2414 -fused_transactions_write32s,838,2413 -fused_transactions_write32s,839,2409 -fused_transactions_write32s,840,2407 -fused_transactions_write32s,841,2411 -fused_transactions_write32s,842,2407 -fused_transactions_write32s,843,2410 -fused_transactions_write32s,844,2415 -fused_transactions_write32s,845,2410 -fused_transactions_write32s,846,2413 -fused_transactions_write32s,847,2409 -fused_transactions_write32s,848,2410 -fused_transactions_write32s,849,2425 -fused_transactions_write32s,850,2412 -fused_transactions_write32s,851,2421 -fused_transactions_write32s,852,2417 -fused_transactions_write32s,853,2419 -fused_transactions_write32s,854,2413 -fused_transactions_write32s,855,2417 -fused_transactions_write32s,856,2412 -fused_transactions_write32s,857,2416 -fused_transactions_write32s,858,2410 -fused_transactions_write32s,859,2410 -fused_transactions_write32s,860,2411 -fused_transactions_write32s,861,2410 -fused_transactions_write32s,862,2747 -fused_transactions_write32s,863,2976 -fused_transactions_write32s,864,3019 -fused_transactions_write32s,865,2977 -fused_transactions_write32s,866,3019 -fused_transactions_write32s,867,2979 -fused_transactions_write32s,868,3016 -fused_transactions_write32s,869,2976 -fused_transactions_write32s,870,3015 -fused_transactions_write32s,871,2980 -fused_transactions_write32s,872,3018 -fused_transactions_write32s,873,2976 -fused_transactions_write32s,874,3068 -fused_transactions_write32s,875,2951 -fused_transactions_write32s,876,2966 -fused_transactions_write32s,877,2815 -fused_transactions_write32s,878,2785 -fused_transactions_write32s,879,2779 -fused_transactions_write32s,880,2818 -fused_transactions_write32s,881,2828 -fused_transactions_write32s,882,3086 -fused_transactions_write32s,883,2797 -fused_transactions_write32s,884,2797 -fused_transactions_write32s,885,2809 -fused_transactions_write32s,886,2785 -fused_transactions_write32s,887,2795 -fused_transactions_write32s,888,2937 -fused_transactions_write32s,889,2955 -fused_transactions_write32s,890,3038 -fused_transactions_write32s,891,2952 -fused_transactions_write32s,892,3000 -fused_transactions_write32s,893,2999 -fused_transactions_write32s,894,2999 -fused_transactions_write32s,895,2999 -fused_transactions_write32s,896,2994 -fused_transactions_write32s,897,3039 -fused_transactions_write32s,898,2954 -fused_transactions_write32s,899,3000 -fused_transactions_write32s,900,3002 -fused_transactions_write32s,901,2994 -fused_transactions_write32s,902,3042 -fused_transactions_write32s,903,2973 -fused_transactions_write32s,904,2957 -fused_transactions_write32s,905,3017 -fused_transactions_write32s,906,2996 -fused_transactions_write32s,907,3000 -fused_transactions_write32s,908,2601 -fused_transactions_write32s,909,2785 -fused_transactions_write32s,910,2792 -fused_transactions_write32s,911,2811 -fused_transactions_write32s,912,3004 -fused_transactions_write32s,913,2997 -fused_transactions_write32s,914,2999 -fused_transactions_write32s,915,3004 -fused_transactions_write32s,916,3034 -fused_transactions_write32s,917,2931 -fused_transactions_write32s,918,3025 -fused_transactions_write32s,919,2992 -fused_transactions_write32s,920,3004 -fused_transactions_write32s,921,2979 -fused_transactions_write32s,922,3108 -fused_transactions_write32s,923,2905 -fused_transactions_write32s,924,2991 -fused_transactions_write32s,925,3058 -fused_transactions_write32s,926,2932 -fused_transactions_write32s,927,2859 -fused_transactions_write32s,928,2495 -fused_transactions_write32s,929,2471 -fused_transactions_write32s,930,2413 -fused_transactions_write32s,931,2425 -fused_transactions_write32s,932,2410 -fused_transactions_write32s,933,2419 -fused_transactions_write32s,934,2416 -fused_transactions_write32s,935,2420 -fused_transactions_write32s,936,2411 -fused_transactions_write32s,937,2408 -fused_transactions_write32s,938,2411 -fused_transactions_write32s,939,2407 -fused_transactions_write32s,940,2413 -fused_transactions_write32s,941,2409 -fused_transactions_write32s,942,2413 -fused_transactions_write32s,943,2410 -fused_transactions_write32s,944,2410 -fused_transactions_write32s,945,2411 -fused_transactions_write32s,946,2406 -fused_transactions_write32s,947,2402 -fused_transactions_write32s,948,2402 -fused_transactions_write32s,949,2405 -fused_transactions_write32s,950,2408 -fused_transactions_write32s,951,2406 -fused_transactions_write32s,952,2723 -fused_transactions_write32s,953,2523 -fused_transactions_write32s,954,2486 -fused_transactions_write32s,955,2431 -fused_transactions_write32s,956,2418 -fused_transactions_write32s,957,2421 -fused_transactions_write32s,958,2472 -fused_transactions_write32s,959,2755 -fused_transactions_write32s,960,2875 -fused_transactions_write32s,961,2996 -fused_transactions_write32s,962,2986 -fused_transactions_write32s,963,3100 -fused_transactions_write32s,964,2893 -fused_transactions_write32s,965,3108 -fused_transactions_write32s,966,2893 -fused_transactions_write32s,967,3098 -fused_transactions_write32s,968,2892 -fused_transactions_write32s,969,3011 -fused_transactions_write32s,970,2990 -fused_transactions_write32s,971,2995 -fused_transactions_write32s,972,2998 -fused_transactions_write32s,973,2528 -fused_transactions_write32s,974,2779 -fused_transactions_write32s,975,2784 -fused_transactions_write32s,976,2892 -fused_transactions_write32s,977,3002 -fused_transactions_write32s,978,3002 -fused_transactions_write32s,979,2996 -fused_transactions_write32s,980,2996 -fused_transactions_write32s,981,2997 -fused_transactions_write32s,982,3006 -fused_transactions_write32s,983,2992 -fused_transactions_write32s,984,2996 -fused_transactions_write32s,985,2995 -fused_transactions_write32s,986,2997 -fused_transactions_write32s,987,2999 -fused_transactions_write32s,988,2999 -fused_transactions_write32s,989,2995 -fused_transactions_write32s,990,2994 -fused_transactions_write32s,991,3003 -fused_transactions_write32s,992,2787 -fused_transactions_write32s,993,2790 -fused_transactions_write32s,994,2785 -fused_transactions_write32s,995,2779 -fused_transactions_write32s,996,2839 -fused_transactions_write32s,997,2998 -fused_transactions_write32s,998,2982 -fused_transactions_write32s,999,2784 \ No newline at end of file diff --git a/programming_examples/reconfiguration/ablation/3_write32s_reset_core.csv b/programming_examples/reconfiguration/ablation/3_write32s_reset_core.csv deleted file mode 100644 index 76f248fc1d5..00000000000 --- a/programming_examples/reconfiguration/ablation/3_write32s_reset_core.csv +++ /dev/null @@ -1,1000 +0,0 @@ -fused_transactions_write32s,0,2376 -fused_transactions_write32s,1,2352 -fused_transactions_write32s,2,2317 -fused_transactions_write32s,3,2319 -fused_transactions_write32s,4,2318 -fused_transactions_write32s,5,2316 -fused_transactions_write32s,6,2313 -fused_transactions_write32s,7,2317 -fused_transactions_write32s,8,2318 -fused_transactions_write32s,9,2316 -fused_transactions_write32s,10,2315 -fused_transactions_write32s,11,2315 -fused_transactions_write32s,12,2316 -fused_transactions_write32s,13,2316 -fused_transactions_write32s,14,2315 -fused_transactions_write32s,15,2310 -fused_transactions_write32s,16,2314 -fused_transactions_write32s,17,2315 -fused_transactions_write32s,18,2317 -fused_transactions_write32s,19,2310 -fused_transactions_write32s,20,2318 -fused_transactions_write32s,21,2321 -fused_transactions_write32s,22,2310 -fused_transactions_write32s,23,2316 -fused_transactions_write32s,24,2309 -fused_transactions_write32s,25,2317 -fused_transactions_write32s,26,2316 -fused_transactions_write32s,27,2319 -fused_transactions_write32s,28,2313 -fused_transactions_write32s,29,2321 -fused_transactions_write32s,30,2319 -fused_transactions_write32s,31,2311 -fused_transactions_write32s,32,2312 -fused_transactions_write32s,33,2323 -fused_transactions_write32s,34,2317 -fused_transactions_write32s,35,2314 -fused_transactions_write32s,36,2318 -fused_transactions_write32s,37,2322 -fused_transactions_write32s,38,2318 -fused_transactions_write32s,39,2316 -fused_transactions_write32s,40,2313 -fused_transactions_write32s,41,2337 -fused_transactions_write32s,42,2314 -fused_transactions_write32s,43,2317 -fused_transactions_write32s,44,2312 -fused_transactions_write32s,45,2312 -fused_transactions_write32s,46,2315 -fused_transactions_write32s,47,2315 -fused_transactions_write32s,48,2318 -fused_transactions_write32s,49,2314 -fused_transactions_write32s,50,2320 -fused_transactions_write32s,51,2314 -fused_transactions_write32s,52,2311 -fused_transactions_write32s,53,2314 -fused_transactions_write32s,54,2312 -fused_transactions_write32s,55,2317 -fused_transactions_write32s,56,2315 -fused_transactions_write32s,57,2315 -fused_transactions_write32s,58,2311 -fused_transactions_write32s,59,2313 -fused_transactions_write32s,60,2313 -fused_transactions_write32s,61,2313 -fused_transactions_write32s,62,2312 -fused_transactions_write32s,63,2322 -fused_transactions_write32s,64,2316 -fused_transactions_write32s,65,2321 -fused_transactions_write32s,66,2317 -fused_transactions_write32s,67,2317 -fused_transactions_write32s,68,2312 -fused_transactions_write32s,69,2312 -fused_transactions_write32s,70,2322 -fused_transactions_write32s,71,2315 -fused_transactions_write32s,72,2313 -fused_transactions_write32s,73,2315 -fused_transactions_write32s,74,2317 -fused_transactions_write32s,75,2315 -fused_transactions_write32s,76,2317 -fused_transactions_write32s,77,2313 -fused_transactions_write32s,78,2311 -fused_transactions_write32s,79,2314 -fused_transactions_write32s,80,2313 -fused_transactions_write32s,81,2312 -fused_transactions_write32s,82,2317 -fused_transactions_write32s,83,2315 -fused_transactions_write32s,84,2319 -fused_transactions_write32s,85,2318 -fused_transactions_write32s,86,2319 -fused_transactions_write32s,87,2313 -fused_transactions_write32s,88,2321 -fused_transactions_write32s,89,2319 -fused_transactions_write32s,90,2317 -fused_transactions_write32s,91,2314 -fused_transactions_write32s,92,2315 -fused_transactions_write32s,93,2313 -fused_transactions_write32s,94,2313 -fused_transactions_write32s,95,2317 -fused_transactions_write32s,96,2311 -fused_transactions_write32s,97,2315 -fused_transactions_write32s,98,2314 -fused_transactions_write32s,99,2313 -fused_transactions_write32s,100,2316 -fused_transactions_write32s,101,2316 -fused_transactions_write32s,102,2313 -fused_transactions_write32s,103,2318 -fused_transactions_write32s,104,2318 -fused_transactions_write32s,105,2314 -fused_transactions_write32s,106,2320 -fused_transactions_write32s,107,2317 -fused_transactions_write32s,108,2319 -fused_transactions_write32s,109,2319 -fused_transactions_write32s,110,2315 -fused_transactions_write32s,111,2316 -fused_transactions_write32s,112,2311 -fused_transactions_write32s,113,2313 -fused_transactions_write32s,114,2312 -fused_transactions_write32s,115,2313 -fused_transactions_write32s,116,2318 -fused_transactions_write32s,117,2317 -fused_transactions_write32s,118,2320 -fused_transactions_write32s,119,2330 -fused_transactions_write32s,120,2313 -fused_transactions_write32s,121,2322 -fused_transactions_write32s,122,2314 -fused_transactions_write32s,123,2313 -fused_transactions_write32s,124,2322 -fused_transactions_write32s,125,2317 -fused_transactions_write32s,126,2313 -fused_transactions_write32s,127,2313 -fused_transactions_write32s,128,2314 -fused_transactions_write32s,129,2312 -fused_transactions_write32s,130,2312 -fused_transactions_write32s,131,2313 -fused_transactions_write32s,132,2312 -fused_transactions_write32s,133,2310 -fused_transactions_write32s,134,2310 -fused_transactions_write32s,135,2314 -fused_transactions_write32s,136,2316 -fused_transactions_write32s,137,2321 -fused_transactions_write32s,138,2320 -fused_transactions_write32s,139,2353 -fused_transactions_write32s,140,2317 -fused_transactions_write32s,141,2316 -fused_transactions_write32s,142,2320 -fused_transactions_write32s,143,2322 -fused_transactions_write32s,144,2312 -fused_transactions_write32s,145,2323 -fused_transactions_write32s,146,2317 -fused_transactions_write32s,147,2313 -fused_transactions_write32s,148,2310 -fused_transactions_write32s,149,2315 -fused_transactions_write32s,150,2310 -fused_transactions_write32s,151,2312 -fused_transactions_write32s,152,2303 -fused_transactions_write32s,153,2293 -fused_transactions_write32s,154,2305 -fused_transactions_write32s,155,2312 -fused_transactions_write32s,156,2316 -fused_transactions_write32s,157,2317 -fused_transactions_write32s,158,2317 -fused_transactions_write32s,159,2319 -fused_transactions_write32s,160,2317 -fused_transactions_write32s,161,2311 -fused_transactions_write32s,162,2312 -fused_transactions_write32s,163,2314 -fused_transactions_write32s,164,2310 -fused_transactions_write32s,165,2311 -fused_transactions_write32s,166,2309 -fused_transactions_write32s,167,2309 -fused_transactions_write32s,168,2309 -fused_transactions_write32s,169,2311 -fused_transactions_write32s,170,2309 -fused_transactions_write32s,171,2311 -fused_transactions_write32s,172,2316 -fused_transactions_write32s,173,2307 -fused_transactions_write32s,174,2312 -fused_transactions_write32s,175,2309 -fused_transactions_write32s,176,2311 -fused_transactions_write32s,177,2310 -fused_transactions_write32s,178,2313 -fused_transactions_write32s,179,2312 -fused_transactions_write32s,180,2311 -fused_transactions_write32s,181,2311 -fused_transactions_write32s,182,2319 -fused_transactions_write32s,183,2309 -fused_transactions_write32s,184,2310 -fused_transactions_write32s,185,2312 -fused_transactions_write32s,186,2318 -fused_transactions_write32s,187,2310 -fused_transactions_write32s,188,2310 -fused_transactions_write32s,189,2313 -fused_transactions_write32s,190,2310 -fused_transactions_write32s,191,2307 -fused_transactions_write32s,192,2315 -fused_transactions_write32s,193,2311 -fused_transactions_write32s,194,2309 -fused_transactions_write32s,195,2313 -fused_transactions_write32s,196,2317 -fused_transactions_write32s,197,2307 -fused_transactions_write32s,198,2293 -fused_transactions_write32s,199,2285 -fused_transactions_write32s,200,2289 -fused_transactions_write32s,201,2295 -fused_transactions_write32s,202,2290 -fused_transactions_write32s,203,2307 -fused_transactions_write32s,204,2308 -fused_transactions_write32s,205,2313 -fused_transactions_write32s,206,2319 -fused_transactions_write32s,207,2318 -fused_transactions_write32s,208,2323 -fused_transactions_write32s,209,2313 -fused_transactions_write32s,210,2310 -fused_transactions_write32s,211,2310 -fused_transactions_write32s,212,2315 -fused_transactions_write32s,213,2307 -fused_transactions_write32s,214,2325 -fused_transactions_write32s,215,2318 -fused_transactions_write32s,216,2310 -fused_transactions_write32s,217,2319 -fused_transactions_write32s,218,2319 -fused_transactions_write32s,219,2310 -fused_transactions_write32s,220,2317 -fused_transactions_write32s,221,2317 -fused_transactions_write32s,222,2317 -fused_transactions_write32s,223,2312 -fused_transactions_write32s,224,2310 -fused_transactions_write32s,225,2309 -fused_transactions_write32s,226,2313 -fused_transactions_write32s,227,2313 -fused_transactions_write32s,228,2317 -fused_transactions_write32s,229,2314 -fused_transactions_write32s,230,2316 -fused_transactions_write32s,231,2321 -fused_transactions_write32s,232,2311 -fused_transactions_write32s,233,2310 -fused_transactions_write32s,234,2311 -fused_transactions_write32s,235,2313 -fused_transactions_write32s,236,2318 -fused_transactions_write32s,237,2315 -fused_transactions_write32s,238,2331 -fused_transactions_write32s,239,2312 -fused_transactions_write32s,240,2315 -fused_transactions_write32s,241,2312 -fused_transactions_write32s,242,2313 -fused_transactions_write32s,243,2315 -fused_transactions_write32s,244,2315 -fused_transactions_write32s,245,2315 -fused_transactions_write32s,246,2316 -fused_transactions_write32s,247,2314 -fused_transactions_write32s,248,2313 -fused_transactions_write32s,249,2315 -fused_transactions_write32s,250,2316 -fused_transactions_write32s,251,2316 -fused_transactions_write32s,252,2309 -fused_transactions_write32s,253,2314 -fused_transactions_write32s,254,2316 -fused_transactions_write32s,255,2313 -fused_transactions_write32s,256,2315 -fused_transactions_write32s,257,2317 -fused_transactions_write32s,258,2316 -fused_transactions_write32s,259,2315 -fused_transactions_write32s,260,2313 -fused_transactions_write32s,261,2313 -fused_transactions_write32s,262,2311 -fused_transactions_write32s,263,2312 -fused_transactions_write32s,264,2314 -fused_transactions_write32s,265,2313 -fused_transactions_write32s,266,2312 -fused_transactions_write32s,267,2316 -fused_transactions_write32s,268,2318 -fused_transactions_write32s,269,2311 -fused_transactions_write32s,270,2313 -fused_transactions_write32s,271,2313 -fused_transactions_write32s,272,2319 -fused_transactions_write32s,273,2321 -fused_transactions_write32s,274,2317 -fused_transactions_write32s,275,2325 -fused_transactions_write32s,276,2315 -fused_transactions_write32s,277,2319 -fused_transactions_write32s,278,2320 -fused_transactions_write32s,279,2318 -fused_transactions_write32s,280,2316 -fused_transactions_write32s,281,2316 -fused_transactions_write32s,282,2312 -fused_transactions_write32s,283,2315 -fused_transactions_write32s,284,2315 -fused_transactions_write32s,285,2315 -fused_transactions_write32s,286,2314 -fused_transactions_write32s,287,2312 -fused_transactions_write32s,288,2316 -fused_transactions_write32s,289,2313 -fused_transactions_write32s,290,2311 -fused_transactions_write32s,291,2313 -fused_transactions_write32s,292,2317 -fused_transactions_write32s,293,2315 -fused_transactions_write32s,294,2313 -fused_transactions_write32s,295,2319 -fused_transactions_write32s,296,2311 -fused_transactions_write32s,297,2313 -fused_transactions_write32s,298,2311 -fused_transactions_write32s,299,2312 -fused_transactions_write32s,300,2315 -fused_transactions_write32s,301,2316 -fused_transactions_write32s,302,2314 -fused_transactions_write32s,303,2315 -fused_transactions_write32s,304,2310 -fused_transactions_write32s,305,2314 -fused_transactions_write32s,306,2313 -fused_transactions_write32s,307,2319 -fused_transactions_write32s,308,2315 -fused_transactions_write32s,309,2314 -fused_transactions_write32s,310,2316 -fused_transactions_write32s,311,2317 -fused_transactions_write32s,312,2316 -fused_transactions_write32s,313,2316 -fused_transactions_write32s,314,2315 -fused_transactions_write32s,315,2314 -fused_transactions_write32s,316,2314 -fused_transactions_write32s,317,2316 -fused_transactions_write32s,318,2316 -fused_transactions_write32s,319,2317 -fused_transactions_write32s,320,2313 -fused_transactions_write32s,321,2315 -fused_transactions_write32s,322,2317 -fused_transactions_write32s,323,2316 -fused_transactions_write32s,324,2313 -fused_transactions_write32s,325,2315 -fused_transactions_write32s,326,2315 -fused_transactions_write32s,327,2313 -fused_transactions_write32s,328,2313 -fused_transactions_write32s,329,2314 -fused_transactions_write32s,330,2313 -fused_transactions_write32s,331,2317 -fused_transactions_write32s,332,2314 -fused_transactions_write32s,333,2312 -fused_transactions_write32s,334,2314 -fused_transactions_write32s,335,2314 -fused_transactions_write32s,336,2312 -fused_transactions_write32s,337,2318 -fused_transactions_write32s,338,2316 -fused_transactions_write32s,339,2321 -fused_transactions_write32s,340,2314 -fused_transactions_write32s,341,2317 -fused_transactions_write32s,342,2313 -fused_transactions_write32s,343,2313 -fused_transactions_write32s,344,2312 -fused_transactions_write32s,345,2314 -fused_transactions_write32s,346,2315 -fused_transactions_write32s,347,2316 -fused_transactions_write32s,348,2316 -fused_transactions_write32s,349,2313 -fused_transactions_write32s,350,2312 -fused_transactions_write32s,351,2313 -fused_transactions_write32s,352,2316 -fused_transactions_write32s,353,2316 -fused_transactions_write32s,354,2313 -fused_transactions_write32s,355,2316 -fused_transactions_write32s,356,2313 -fused_transactions_write32s,357,2315 -fused_transactions_write32s,358,2320 -fused_transactions_write32s,359,2318 -fused_transactions_write32s,360,2314 -fused_transactions_write32s,361,2315 -fused_transactions_write32s,362,2311 -fused_transactions_write32s,363,2318 -fused_transactions_write32s,364,2314 -fused_transactions_write32s,365,2323 -fused_transactions_write32s,366,2314 -fused_transactions_write32s,367,2338 -fused_transactions_write32s,368,2316 -fused_transactions_write32s,369,2322 -fused_transactions_write32s,370,2319 -fused_transactions_write32s,371,2318 -fused_transactions_write32s,372,2318 -fused_transactions_write32s,373,2319 -fused_transactions_write32s,374,2314 -fused_transactions_write32s,375,2312 -fused_transactions_write32s,376,2310 -fused_transactions_write32s,377,2311 -fused_transactions_write32s,378,2316 -fused_transactions_write32s,379,2307 -fused_transactions_write32s,380,2311 -fused_transactions_write32s,381,2312 -fused_transactions_write32s,382,2313 -fused_transactions_write32s,383,2312 -fused_transactions_write32s,384,2314 -fused_transactions_write32s,385,2314 -fused_transactions_write32s,386,2309 -fused_transactions_write32s,387,2313 -fused_transactions_write32s,388,2313 -fused_transactions_write32s,389,2316 -fused_transactions_write32s,390,2314 -fused_transactions_write32s,391,2314 -fused_transactions_write32s,392,2310 -fused_transactions_write32s,393,2315 -fused_transactions_write32s,394,2316 -fused_transactions_write32s,395,2312 -fused_transactions_write32s,396,2313 -fused_transactions_write32s,397,2314 -fused_transactions_write32s,398,2317 -fused_transactions_write32s,399,2317 -fused_transactions_write32s,400,2316 -fused_transactions_write32s,401,2315 -fused_transactions_write32s,402,2313 -fused_transactions_write32s,403,2314 -fused_transactions_write32s,404,2317 -fused_transactions_write32s,405,2315 -fused_transactions_write32s,406,2320 -fused_transactions_write32s,407,2318 -fused_transactions_write32s,408,2322 -fused_transactions_write32s,409,2303 -fused_transactions_write32s,410,2295 -fused_transactions_write32s,411,2290 -fused_transactions_write32s,412,2289 -fused_transactions_write32s,413,2292 -fused_transactions_write32s,414,2290 -fused_transactions_write32s,415,2294 -fused_transactions_write32s,416,2312 -fused_transactions_write32s,417,2307 -fused_transactions_write32s,418,2306 -fused_transactions_write32s,419,2317 -fused_transactions_write32s,420,2311 -fused_transactions_write32s,421,2317 -fused_transactions_write32s,422,2314 -fused_transactions_write32s,423,2311 -fused_transactions_write32s,424,2312 -fused_transactions_write32s,425,2317 -fused_transactions_write32s,426,2313 -fused_transactions_write32s,427,2309 -fused_transactions_write32s,428,2310 -fused_transactions_write32s,429,2327 -fused_transactions_write32s,430,2324 -fused_transactions_write32s,431,2316 -fused_transactions_write32s,432,2321 -fused_transactions_write32s,433,2316 -fused_transactions_write32s,434,2321 -fused_transactions_write32s,435,2316 -fused_transactions_write32s,436,2310 -fused_transactions_write32s,437,2311 -fused_transactions_write32s,438,2311 -fused_transactions_write32s,439,2309 -fused_transactions_write32s,440,2312 -fused_transactions_write32s,441,2316 -fused_transactions_write32s,442,2311 -fused_transactions_write32s,443,2313 -fused_transactions_write32s,444,2309 -fused_transactions_write32s,445,2310 -fused_transactions_write32s,446,2333 -fused_transactions_write32s,447,2319 -fused_transactions_write32s,448,2312 -fused_transactions_write32s,449,2310 -fused_transactions_write32s,450,2315 -fused_transactions_write32s,451,2323 -fused_transactions_write32s,452,2318 -fused_transactions_write32s,453,2313 -fused_transactions_write32s,454,2316 -fused_transactions_write32s,455,2312 -fused_transactions_write32s,456,2323 -fused_transactions_write32s,457,2322 -fused_transactions_write32s,458,2321 -fused_transactions_write32s,459,2318 -fused_transactions_write32s,460,2311 -fused_transactions_write32s,461,2313 -fused_transactions_write32s,462,2313 -fused_transactions_write32s,463,2299 -fused_transactions_write32s,464,2293 -fused_transactions_write32s,465,2289 -fused_transactions_write32s,466,2290 -fused_transactions_write32s,467,2300 -fused_transactions_write32s,468,2300 -fused_transactions_write32s,469,2298 -fused_transactions_write32s,470,2303 -fused_transactions_write32s,471,2295 -fused_transactions_write32s,472,2290 -fused_transactions_write32s,473,2288 -fused_transactions_write32s,474,2290 -fused_transactions_write32s,475,2288 -fused_transactions_write32s,476,2294 -fused_transactions_write32s,477,2293 -fused_transactions_write32s,478,2289 -fused_transactions_write32s,479,2293 -fused_transactions_write32s,480,2289 -fused_transactions_write32s,481,2301 -fused_transactions_write32s,482,2297 -fused_transactions_write32s,483,2296 -fused_transactions_write32s,484,2299 -fused_transactions_write32s,485,2297 -fused_transactions_write32s,486,2301 -fused_transactions_write32s,487,2301 -fused_transactions_write32s,488,2300 -fused_transactions_write32s,489,2299 -fused_transactions_write32s,490,2299 -fused_transactions_write32s,491,2301 -fused_transactions_write32s,492,2303 -fused_transactions_write32s,493,2301 -fused_transactions_write32s,494,2298 -fused_transactions_write32s,495,2296 -fused_transactions_write32s,496,2302 -fused_transactions_write32s,497,2301 -fused_transactions_write32s,498,2305 -fused_transactions_write32s,499,2300 -fused_transactions_write32s,500,2297 -fused_transactions_write32s,501,2300 -fused_transactions_write32s,502,2308 -fused_transactions_write32s,503,2302 -fused_transactions_write32s,504,2298 -fused_transactions_write32s,505,2298 -fused_transactions_write32s,506,2301 -fused_transactions_write32s,507,2298 -fused_transactions_write32s,508,2298 -fused_transactions_write32s,509,2300 -fused_transactions_write32s,510,2301 -fused_transactions_write32s,511,2301 -fused_transactions_write32s,512,2301 -fused_transactions_write32s,513,2298 -fused_transactions_write32s,514,2300 -fused_transactions_write32s,515,2297 -fused_transactions_write32s,516,2299 -fused_transactions_write32s,517,2290 -fused_transactions_write32s,518,2299 -fused_transactions_write32s,519,2305 -fused_transactions_write32s,520,2301 -fused_transactions_write32s,521,2298 -fused_transactions_write32s,522,2300 -fused_transactions_write32s,523,2297 -fused_transactions_write32s,524,2297 -fused_transactions_write32s,525,2297 -fused_transactions_write32s,526,2303 -fused_transactions_write32s,527,2295 -fused_transactions_write32s,528,2299 -fused_transactions_write32s,529,2299 -fused_transactions_write32s,530,2297 -fused_transactions_write32s,531,2297 -fused_transactions_write32s,532,2298 -fused_transactions_write32s,533,2300 -fused_transactions_write32s,534,2301 -fused_transactions_write32s,535,2300 -fused_transactions_write32s,536,2298 -fused_transactions_write32s,537,2298 -fused_transactions_write32s,538,2299 -fused_transactions_write32s,539,2303 -fused_transactions_write32s,540,2298 -fused_transactions_write32s,541,2301 -fused_transactions_write32s,542,2310 -fused_transactions_write32s,543,2303 -fused_transactions_write32s,544,2297 -fused_transactions_write32s,545,2299 -fused_transactions_write32s,546,2301 -fused_transactions_write32s,547,2292 -fused_transactions_write32s,548,2298 -fused_transactions_write32s,549,2299 -fused_transactions_write32s,550,2298 -fused_transactions_write32s,551,2299 -fused_transactions_write32s,552,2307 -fused_transactions_write32s,553,2301 -fused_transactions_write32s,554,2300 -fused_transactions_write32s,555,2298 -fused_transactions_write32s,556,2304 -fused_transactions_write32s,557,2301 -fused_transactions_write32s,558,2299 -fused_transactions_write32s,559,2300 -fused_transactions_write32s,560,2302 -fused_transactions_write32s,561,2296 -fused_transactions_write32s,562,2298 -fused_transactions_write32s,563,2304 -fused_transactions_write32s,564,2297 -fused_transactions_write32s,565,2297 -fused_transactions_write32s,566,2299 -fused_transactions_write32s,567,2300 -fused_transactions_write32s,568,2297 -fused_transactions_write32s,569,2296 -fused_transactions_write32s,570,2302 -fused_transactions_write32s,571,2301 -fused_transactions_write32s,572,2298 -fused_transactions_write32s,573,2297 -fused_transactions_write32s,574,2302 -fused_transactions_write32s,575,2299 -fused_transactions_write32s,576,2297 -fused_transactions_write32s,577,2291 -fused_transactions_write32s,578,2299 -fused_transactions_write32s,579,2301 -fused_transactions_write32s,580,2296 -fused_transactions_write32s,581,2301 -fused_transactions_write32s,582,2307 -fused_transactions_write32s,583,2300 -fused_transactions_write32s,584,2302 -fused_transactions_write32s,585,2299 -fused_transactions_write32s,586,2300 -fused_transactions_write32s,587,2301 -fused_transactions_write32s,588,2297 -fused_transactions_write32s,589,2300 -fused_transactions_write32s,590,2298 -fused_transactions_write32s,591,2300 -fused_transactions_write32s,592,2301 -fused_transactions_write32s,593,2301 -fused_transactions_write32s,594,2302 -fused_transactions_write32s,595,2299 -fused_transactions_write32s,596,2298 -fused_transactions_write32s,597,2302 -fused_transactions_write32s,598,2300 -fused_transactions_write32s,599,2300 -fused_transactions_write32s,600,2301 -fused_transactions_write32s,601,2297 -fused_transactions_write32s,602,2301 -fused_transactions_write32s,603,2302 -fused_transactions_write32s,604,2300 -fused_transactions_write32s,605,2297 -fused_transactions_write32s,606,2297 -fused_transactions_write32s,607,2297 -fused_transactions_write32s,608,2298 -fused_transactions_write32s,609,2299 -fused_transactions_write32s,610,2304 -fused_transactions_write32s,611,2300 -fused_transactions_write32s,612,2296 -fused_transactions_write32s,613,2301 -fused_transactions_write32s,614,2302 -fused_transactions_write32s,615,2301 -fused_transactions_write32s,616,2300 -fused_transactions_write32s,617,2302 -fused_transactions_write32s,618,2304 -fused_transactions_write32s,619,2297 -fused_transactions_write32s,620,2297 -fused_transactions_write32s,621,2304 -fused_transactions_write32s,622,2302 -fused_transactions_write32s,623,2297 -fused_transactions_write32s,624,2297 -fused_transactions_write32s,625,2298 -fused_transactions_write32s,626,2301 -fused_transactions_write32s,627,2300 -fused_transactions_write32s,628,2296 -fused_transactions_write32s,629,2287 -fused_transactions_write32s,630,2289 -fused_transactions_write32s,631,2290 -fused_transactions_write32s,632,2288 -fused_transactions_write32s,633,2289 -fused_transactions_write32s,634,2286 -fused_transactions_write32s,635,2297 -fused_transactions_write32s,636,2301 -fused_transactions_write32s,637,2301 -fused_transactions_write32s,638,2302 -fused_transactions_write32s,639,2287 -fused_transactions_write32s,640,2298 -fused_transactions_write32s,641,2287 -fused_transactions_write32s,642,2302 -fused_transactions_write32s,643,2287 -fused_transactions_write32s,644,2285 -fused_transactions_write32s,645,2294 -fused_transactions_write32s,646,2291 -fused_transactions_write32s,647,2290 -fused_transactions_write32s,648,2298 -fused_transactions_write32s,649,2297 -fused_transactions_write32s,650,2300 -fused_transactions_write32s,651,2294 -fused_transactions_write32s,652,2297 -fused_transactions_write32s,653,2299 -fused_transactions_write32s,654,2298 -fused_transactions_write32s,655,2296 -fused_transactions_write32s,656,2297 -fused_transactions_write32s,657,2299 -fused_transactions_write32s,658,2300 -fused_transactions_write32s,659,2299 -fused_transactions_write32s,660,2298 -fused_transactions_write32s,661,2299 -fused_transactions_write32s,662,2295 -fused_transactions_write32s,663,2297 -fused_transactions_write32s,664,2297 -fused_transactions_write32s,665,2291 -fused_transactions_write32s,666,2295 -fused_transactions_write32s,667,2298 -fused_transactions_write32s,668,2301 -fused_transactions_write32s,669,2297 -fused_transactions_write32s,670,2296 -fused_transactions_write32s,671,2297 -fused_transactions_write32s,672,2299 -fused_transactions_write32s,673,2300 -fused_transactions_write32s,674,2303 -fused_transactions_write32s,675,2300 -fused_transactions_write32s,676,2295 -fused_transactions_write32s,677,2296 -fused_transactions_write32s,678,2296 -fused_transactions_write32s,679,2295 -fused_transactions_write32s,680,2297 -fused_transactions_write32s,681,2285 -fused_transactions_write32s,682,2299 -fused_transactions_write32s,683,2299 -fused_transactions_write32s,684,2301 -fused_transactions_write32s,685,2294 -fused_transactions_write32s,686,2296 -fused_transactions_write32s,687,2298 -fused_transactions_write32s,688,2296 -fused_transactions_write32s,689,2301 -fused_transactions_write32s,690,2303 -fused_transactions_write32s,691,2303 -fused_transactions_write32s,692,2298 -fused_transactions_write32s,693,2293 -fused_transactions_write32s,694,2296 -fused_transactions_write32s,695,2298 -fused_transactions_write32s,696,2293 -fused_transactions_write32s,697,2297 -fused_transactions_write32s,698,2291 -fused_transactions_write32s,699,2296 -fused_transactions_write32s,700,2294 -fused_transactions_write32s,701,2297 -fused_transactions_write32s,702,2296 -fused_transactions_write32s,703,2295 -fused_transactions_write32s,704,2294 -fused_transactions_write32s,705,2292 -fused_transactions_write32s,706,2301 -fused_transactions_write32s,707,2295 -fused_transactions_write32s,708,2294 -fused_transactions_write32s,709,2298 -fused_transactions_write32s,710,2297 -fused_transactions_write32s,711,2292 -fused_transactions_write32s,712,2298 -fused_transactions_write32s,713,2299 -fused_transactions_write32s,714,2294 -fused_transactions_write32s,715,2293 -fused_transactions_write32s,716,2296 -fused_transactions_write32s,717,2298 -fused_transactions_write32s,718,2299 -fused_transactions_write32s,719,2290 -fused_transactions_write32s,720,2293 -fused_transactions_write32s,721,2297 -fused_transactions_write32s,722,2298 -fused_transactions_write32s,723,2293 -fused_transactions_write32s,724,2294 -fused_transactions_write32s,725,2293 -fused_transactions_write32s,726,2293 -fused_transactions_write32s,727,2296 -fused_transactions_write32s,728,2300 -fused_transactions_write32s,729,2295 -fused_transactions_write32s,730,2298 -fused_transactions_write32s,731,2293 -fused_transactions_write32s,732,2293 -fused_transactions_write32s,733,2291 -fused_transactions_write32s,734,2294 -fused_transactions_write32s,735,2298 -fused_transactions_write32s,736,2295 -fused_transactions_write32s,737,2297 -fused_transactions_write32s,738,2298 -fused_transactions_write32s,739,2294 -fused_transactions_write32s,740,2305 -fused_transactions_write32s,741,2301 -fused_transactions_write32s,742,2296 -fused_transactions_write32s,743,2294 -fused_transactions_write32s,744,2294 -fused_transactions_write32s,745,2300 -fused_transactions_write32s,746,2299 -fused_transactions_write32s,747,2293 -fused_transactions_write32s,748,2296 -fused_transactions_write32s,749,2294 -fused_transactions_write32s,750,2299 -fused_transactions_write32s,751,2295 -fused_transactions_write32s,752,2292 -fused_transactions_write32s,753,2297 -fused_transactions_write32s,754,2295 -fused_transactions_write32s,755,2292 -fused_transactions_write32s,756,2301 -fused_transactions_write32s,757,2298 -fused_transactions_write32s,758,2297 -fused_transactions_write32s,759,2298 -fused_transactions_write32s,760,2294 -fused_transactions_write32s,761,2292 -fused_transactions_write32s,762,2294 -fused_transactions_write32s,763,2297 -fused_transactions_write32s,764,2294 -fused_transactions_write32s,765,2296 -fused_transactions_write32s,766,2294 -fused_transactions_write32s,767,2297 -fused_transactions_write32s,768,2297 -fused_transactions_write32s,769,2297 -fused_transactions_write32s,770,2297 -fused_transactions_write32s,771,2295 -fused_transactions_write32s,772,2291 -fused_transactions_write32s,773,2293 -fused_transactions_write32s,774,2293 -fused_transactions_write32s,775,2297 -fused_transactions_write32s,776,2301 -fused_transactions_write32s,777,2296 -fused_transactions_write32s,778,2294 -fused_transactions_write32s,779,2297 -fused_transactions_write32s,780,2293 -fused_transactions_write32s,781,2297 -fused_transactions_write32s,782,2294 -fused_transactions_write32s,783,2296 -fused_transactions_write32s,784,2294 -fused_transactions_write32s,785,2295 -fused_transactions_write32s,786,2299 -fused_transactions_write32s,787,2296 -fused_transactions_write32s,788,2298 -fused_transactions_write32s,789,2293 -fused_transactions_write32s,790,2296 -fused_transactions_write32s,791,2291 -fused_transactions_write32s,792,2297 -fused_transactions_write32s,793,2293 -fused_transactions_write32s,794,2301 -fused_transactions_write32s,795,2294 -fused_transactions_write32s,796,2293 -fused_transactions_write32s,797,2293 -fused_transactions_write32s,798,2293 -fused_transactions_write32s,799,2292 -fused_transactions_write32s,800,2299 -fused_transactions_write32s,801,2293 -fused_transactions_write32s,802,2293 -fused_transactions_write32s,803,2298 -fused_transactions_write32s,804,2296 -fused_transactions_write32s,805,2294 -fused_transactions_write32s,806,2294 -fused_transactions_write32s,807,2292 -fused_transactions_write32s,808,2296 -fused_transactions_write32s,809,2295 -fused_transactions_write32s,810,2296 -fused_transactions_write32s,811,2295 -fused_transactions_write32s,812,2299 -fused_transactions_write32s,813,2297 -fused_transactions_write32s,814,2296 -fused_transactions_write32s,815,2295 -fused_transactions_write32s,816,2294 -fused_transactions_write32s,817,2294 -fused_transactions_write32s,818,2293 -fused_transactions_write32s,819,2293 -fused_transactions_write32s,820,2292 -fused_transactions_write32s,821,2295 -fused_transactions_write32s,822,2293 -fused_transactions_write32s,823,2293 -fused_transactions_write32s,824,2295 -fused_transactions_write32s,825,2296 -fused_transactions_write32s,826,2295 -fused_transactions_write32s,827,2295 -fused_transactions_write32s,828,2297 -fused_transactions_write32s,829,2297 -fused_transactions_write32s,830,2297 -fused_transactions_write32s,831,2299 -fused_transactions_write32s,832,2299 -fused_transactions_write32s,833,2297 -fused_transactions_write32s,834,2299 -fused_transactions_write32s,835,2296 -fused_transactions_write32s,836,2289 -fused_transactions_write32s,837,2304 -fused_transactions_write32s,838,2298 -fused_transactions_write32s,839,2300 -fused_transactions_write32s,840,2295 -fused_transactions_write32s,841,2298 -fused_transactions_write32s,842,2294 -fused_transactions_write32s,843,2303 -fused_transactions_write32s,844,2297 -fused_transactions_write32s,845,2302 -fused_transactions_write32s,846,2293 -fused_transactions_write32s,847,2297 -fused_transactions_write32s,848,2295 -fused_transactions_write32s,849,2295 -fused_transactions_write32s,850,2301 -fused_transactions_write32s,851,2297 -fused_transactions_write32s,852,2297 -fused_transactions_write32s,853,2301 -fused_transactions_write32s,854,2293 -fused_transactions_write32s,855,2294 -fused_transactions_write32s,856,2296 -fused_transactions_write32s,857,2293 -fused_transactions_write32s,858,2301 -fused_transactions_write32s,859,2297 -fused_transactions_write32s,860,2297 -fused_transactions_write32s,861,2296 -fused_transactions_write32s,862,2300 -fused_transactions_write32s,863,2300 -fused_transactions_write32s,864,2299 -fused_transactions_write32s,865,2299 -fused_transactions_write32s,866,2298 -fused_transactions_write32s,867,2298 -fused_transactions_write32s,868,2295 -fused_transactions_write32s,869,2299 -fused_transactions_write32s,870,2295 -fused_transactions_write32s,871,2297 -fused_transactions_write32s,872,2299 -fused_transactions_write32s,873,2295 -fused_transactions_write32s,874,2296 -fused_transactions_write32s,875,2298 -fused_transactions_write32s,876,2301 -fused_transactions_write32s,877,2297 -fused_transactions_write32s,878,2299 -fused_transactions_write32s,879,2294 -fused_transactions_write32s,880,2295 -fused_transactions_write32s,881,2299 -fused_transactions_write32s,882,2298 -fused_transactions_write32s,883,2296 -fused_transactions_write32s,884,2293 -fused_transactions_write32s,885,2294 -fused_transactions_write32s,886,2298 -fused_transactions_write32s,887,2296 -fused_transactions_write32s,888,2301 -fused_transactions_write32s,889,2299 -fused_transactions_write32s,890,2293 -fused_transactions_write32s,891,2296 -fused_transactions_write32s,892,2296 -fused_transactions_write32s,893,2297 -fused_transactions_write32s,894,2297 -fused_transactions_write32s,895,2297 -fused_transactions_write32s,896,2296 -fused_transactions_write32s,897,2296 -fused_transactions_write32s,898,2299 -fused_transactions_write32s,899,2300 -fused_transactions_write32s,900,2301 -fused_transactions_write32s,901,2295 -fused_transactions_write32s,902,2297 -fused_transactions_write32s,903,2299 -fused_transactions_write32s,904,2295 -fused_transactions_write32s,905,2298 -fused_transactions_write32s,906,2300 -fused_transactions_write32s,907,2297 -fused_transactions_write32s,908,2296 -fused_transactions_write32s,909,2296 -fused_transactions_write32s,910,2296 -fused_transactions_write32s,911,2297 -fused_transactions_write32s,912,2301 -fused_transactions_write32s,913,2297 -fused_transactions_write32s,914,2296 -fused_transactions_write32s,915,2295 -fused_transactions_write32s,916,2295 -fused_transactions_write32s,917,2297 -fused_transactions_write32s,918,2296 -fused_transactions_write32s,919,2296 -fused_transactions_write32s,920,2303 -fused_transactions_write32s,921,2293 -fused_transactions_write32s,922,2299 -fused_transactions_write32s,923,2296 -fused_transactions_write32s,924,2297 -fused_transactions_write32s,925,2297 -fused_transactions_write32s,926,2298 -fused_transactions_write32s,927,2296 -fused_transactions_write32s,928,2297 -fused_transactions_write32s,929,2300 -fused_transactions_write32s,930,2299 -fused_transactions_write32s,931,2297 -fused_transactions_write32s,932,2299 -fused_transactions_write32s,933,2302 -fused_transactions_write32s,934,2299 -fused_transactions_write32s,935,2298 -fused_transactions_write32s,936,2295 -fused_transactions_write32s,937,2291 -fused_transactions_write32s,938,2296 -fused_transactions_write32s,939,2295 -fused_transactions_write32s,940,2299 -fused_transactions_write32s,941,2301 -fused_transactions_write32s,942,2295 -fused_transactions_write32s,943,2297 -fused_transactions_write32s,944,2294 -fused_transactions_write32s,945,2298 -fused_transactions_write32s,946,2294 -fused_transactions_write32s,947,2296 -fused_transactions_write32s,948,2298 -fused_transactions_write32s,949,2297 -fused_transactions_write32s,950,2296 -fused_transactions_write32s,951,2301 -fused_transactions_write32s,952,2301 -fused_transactions_write32s,953,2295 -fused_transactions_write32s,954,2305 -fused_transactions_write32s,955,2298 -fused_transactions_write32s,956,2299 -fused_transactions_write32s,957,2296 -fused_transactions_write32s,958,2299 -fused_transactions_write32s,959,2297 -fused_transactions_write32s,960,2300 -fused_transactions_write32s,961,2300 -fused_transactions_write32s,962,2302 -fused_transactions_write32s,963,2293 -fused_transactions_write32s,964,2299 -fused_transactions_write32s,965,2294 -fused_transactions_write32s,966,2297 -fused_transactions_write32s,967,2297 -fused_transactions_write32s,968,2297 -fused_transactions_write32s,969,2299 -fused_transactions_write32s,970,2299 -fused_transactions_write32s,971,2301 -fused_transactions_write32s,972,2296 -fused_transactions_write32s,973,2296 -fused_transactions_write32s,974,2301 -fused_transactions_write32s,975,2297 -fused_transactions_write32s,976,2298 -fused_transactions_write32s,977,2298 -fused_transactions_write32s,978,2299 -fused_transactions_write32s,979,2293 -fused_transactions_write32s,980,2295 -fused_transactions_write32s,981,2295 -fused_transactions_write32s,982,2298 -fused_transactions_write32s,983,2298 -fused_transactions_write32s,984,2296 -fused_transactions_write32s,985,2299 -fused_transactions_write32s,986,2299 -fused_transactions_write32s,987,2297 -fused_transactions_write32s,988,2297 -fused_transactions_write32s,989,2305 -fused_transactions_write32s,990,2294 -fused_transactions_write32s,991,2295 -fused_transactions_write32s,992,2297 -fused_transactions_write32s,993,2299 -fused_transactions_write32s,994,2296 -fused_transactions_write32s,995,2296 -fused_transactions_write32s,996,2298 -fused_transactions_write32s,997,2297 -fused_transactions_write32s,998,2298 -fused_transactions_write32s,999,2298 \ No newline at end of file diff --git a/programming_examples/reconfiguration/ablation/4_write32s_reset_nothing.csv b/programming_examples/reconfiguration/ablation/4_write32s_reset_nothing.csv deleted file mode 100644 index 2132182fd4c..00000000000 --- a/programming_examples/reconfiguration/ablation/4_write32s_reset_nothing.csv +++ /dev/null @@ -1,1000 +0,0 @@ -fused_transactions_write32s,0,2378 -fused_transactions_write32s,1,2311 -fused_transactions_write32s,2,2303 -fused_transactions_write32s,3,2297 -fused_transactions_write32s,4,2299 -fused_transactions_write32s,5,2293 -fused_transactions_write32s,6,2297 -fused_transactions_write32s,7,2297 -fused_transactions_write32s,8,2295 -fused_transactions_write32s,9,2296 -fused_transactions_write32s,10,2302 -fused_transactions_write32s,11,2299 -fused_transactions_write32s,12,2295 -fused_transactions_write32s,13,2299 -fused_transactions_write32s,14,2306 -fused_transactions_write32s,15,2307 -fused_transactions_write32s,16,2308 -fused_transactions_write32s,17,2304 -fused_transactions_write32s,18,2297 -fused_transactions_write32s,19,2302 -fused_transactions_write32s,20,2303 -fused_transactions_write32s,21,2297 -fused_transactions_write32s,22,2304 -fused_transactions_write32s,23,2305 -fused_transactions_write32s,24,2296 -fused_transactions_write32s,25,2305 -fused_transactions_write32s,26,2302 -fused_transactions_write32s,27,2301 -fused_transactions_write32s,28,2305 -fused_transactions_write32s,29,2303 -fused_transactions_write32s,30,2300 -fused_transactions_write32s,31,2298 -fused_transactions_write32s,32,2297 -fused_transactions_write32s,33,2298 -fused_transactions_write32s,34,2303 -fused_transactions_write32s,35,2305 -fused_transactions_write32s,36,2293 -fused_transactions_write32s,37,2297 -fused_transactions_write32s,38,2302 -fused_transactions_write32s,39,2297 -fused_transactions_write32s,40,2300 -fused_transactions_write32s,41,2297 -fused_transactions_write32s,42,2300 -fused_transactions_write32s,43,2302 -fused_transactions_write32s,44,2297 -fused_transactions_write32s,45,2300 -fused_transactions_write32s,46,2305 -fused_transactions_write32s,47,2301 -fused_transactions_write32s,48,2301 -fused_transactions_write32s,49,2305 -fused_transactions_write32s,50,2304 -fused_transactions_write32s,51,2300 -fused_transactions_write32s,52,2306 -fused_transactions_write32s,53,2304 -fused_transactions_write32s,54,2299 -fused_transactions_write32s,55,2297 -fused_transactions_write32s,56,2305 -fused_transactions_write32s,57,2296 -fused_transactions_write32s,58,2294 -fused_transactions_write32s,59,2307 -fused_transactions_write32s,60,2304 -fused_transactions_write32s,61,2298 -fused_transactions_write32s,62,2297 -fused_transactions_write32s,63,2302 -fused_transactions_write32s,64,2297 -fused_transactions_write32s,65,2302 -fused_transactions_write32s,66,2304 -fused_transactions_write32s,67,2278 -fused_transactions_write32s,68,2281 -fused_transactions_write32s,69,2276 -fused_transactions_write32s,70,2283 -fused_transactions_write32s,71,2284 -fused_transactions_write32s,72,2306 -fused_transactions_write32s,73,2301 -fused_transactions_write32s,74,2297 -fused_transactions_write32s,75,2301 -fused_transactions_write32s,76,2300 -fused_transactions_write32s,77,2301 -fused_transactions_write32s,78,2298 -fused_transactions_write32s,79,2299 -fused_transactions_write32s,80,2300 -fused_transactions_write32s,81,2295 -fused_transactions_write32s,82,2304 -fused_transactions_write32s,83,2303 -fused_transactions_write32s,84,2299 -fused_transactions_write32s,85,2307 -fused_transactions_write32s,86,2300 -fused_transactions_write32s,87,2300 -fused_transactions_write32s,88,2300 -fused_transactions_write32s,89,2287 -fused_transactions_write32s,90,2285 -fused_transactions_write32s,91,2304 -fused_transactions_write32s,92,2288 -fused_transactions_write32s,93,2290 -fused_transactions_write32s,94,2293 -fused_transactions_write32s,95,2293 -fused_transactions_write32s,96,2301 -fused_transactions_write32s,97,2306 -fused_transactions_write32s,98,2291 -fused_transactions_write32s,99,2279 -fused_transactions_write32s,100,2303 -fused_transactions_write32s,101,2305 -fused_transactions_write32s,102,2300 -fused_transactions_write32s,103,2300 -fused_transactions_write32s,104,2300 -fused_transactions_write32s,105,2301 -fused_transactions_write32s,106,2303 -fused_transactions_write32s,107,2304 -fused_transactions_write32s,108,2304 -fused_transactions_write32s,109,2299 -fused_transactions_write32s,110,2299 -fused_transactions_write32s,111,2300 -fused_transactions_write32s,112,2301 -fused_transactions_write32s,113,2298 -fused_transactions_write32s,114,2299 -fused_transactions_write32s,115,2301 -fused_transactions_write32s,116,2303 -fused_transactions_write32s,117,2299 -fused_transactions_write32s,118,2302 -fused_transactions_write32s,119,2300 -fused_transactions_write32s,120,2301 -fused_transactions_write32s,121,2299 -fused_transactions_write32s,122,2299 -fused_transactions_write32s,123,2300 -fused_transactions_write32s,124,2297 -fused_transactions_write32s,125,2301 -fused_transactions_write32s,126,2302 -fused_transactions_write32s,127,2297 -fused_transactions_write32s,128,2304 -fused_transactions_write32s,129,2299 -fused_transactions_write32s,130,2298 -fused_transactions_write32s,131,2300 -fused_transactions_write32s,132,2301 -fused_transactions_write32s,133,2300 -fused_transactions_write32s,134,2303 -fused_transactions_write32s,135,2301 -fused_transactions_write32s,136,2304 -fused_transactions_write32s,137,2303 -fused_transactions_write32s,138,2304 -fused_transactions_write32s,139,2305 -fused_transactions_write32s,140,2307 -fused_transactions_write32s,141,2304 -fused_transactions_write32s,142,2292 -fused_transactions_write32s,143,2282 -fused_transactions_write32s,144,2281 -fused_transactions_write32s,145,2277 -fused_transactions_write32s,146,2277 -fused_transactions_write32s,147,2277 -fused_transactions_write32s,148,2279 -fused_transactions_write32s,149,2280 -fused_transactions_write32s,150,2288 -fused_transactions_write32s,151,2297 -fused_transactions_write32s,152,2299 -fused_transactions_write32s,153,2297 -fused_transactions_write32s,154,2301 -fused_transactions_write32s,155,2291 -fused_transactions_write32s,156,2282 -fused_transactions_write32s,157,2285 -fused_transactions_write32s,158,2287 -fused_transactions_write32s,159,2291 -fused_transactions_write32s,160,2287 -fused_transactions_write32s,161,2302 -fused_transactions_write32s,162,2307 -fused_transactions_write32s,163,2297 -fused_transactions_write32s,164,2302 -fused_transactions_write32s,165,2301 -fused_transactions_write32s,166,2294 -fused_transactions_write32s,167,2303 -fused_transactions_write32s,168,2300 -fused_transactions_write32s,169,2296 -fused_transactions_write32s,170,2298 -fused_transactions_write32s,171,2295 -fused_transactions_write32s,172,2298 -fused_transactions_write32s,173,2299 -fused_transactions_write32s,174,2305 -fused_transactions_write32s,175,2303 -fused_transactions_write32s,176,2305 -fused_transactions_write32s,177,2301 -fused_transactions_write32s,178,2302 -fused_transactions_write32s,179,2305 -fused_transactions_write32s,180,2305 -fused_transactions_write32s,181,2292 -fused_transactions_write32s,182,2281 -fused_transactions_write32s,183,2285 -fused_transactions_write32s,184,2288 -fused_transactions_write32s,185,2293 -fused_transactions_write32s,186,2287 -fused_transactions_write32s,187,2309 -fused_transactions_write32s,188,2347 -fused_transactions_write32s,189,2331 -fused_transactions_write32s,190,2306 -fused_transactions_write32s,191,2303 -fused_transactions_write32s,192,2303 -fused_transactions_write32s,193,2303 -fused_transactions_write32s,194,2308 -fused_transactions_write32s,195,2301 -fused_transactions_write32s,196,2297 -fused_transactions_write32s,197,2306 -fused_transactions_write32s,198,2298 -fused_transactions_write32s,199,2308 -fused_transactions_write32s,200,2305 -fused_transactions_write32s,201,2299 -fused_transactions_write32s,202,2279 -fused_transactions_write32s,203,2282 -fused_transactions_write32s,204,2278 -fused_transactions_write32s,205,2276 -fused_transactions_write32s,206,2281 -fused_transactions_write32s,207,2281 -fused_transactions_write32s,208,2297 -fused_transactions_write32s,209,2309 -fused_transactions_write32s,210,2307 -fused_transactions_write32s,211,2302 -fused_transactions_write32s,212,2297 -fused_transactions_write32s,213,2303 -fused_transactions_write32s,214,2302 -fused_transactions_write32s,215,2295 -fused_transactions_write32s,216,2297 -fused_transactions_write32s,217,2299 -fused_transactions_write32s,218,2295 -fused_transactions_write32s,219,2300 -fused_transactions_write32s,220,2297 -fused_transactions_write32s,221,2299 -fused_transactions_write32s,222,2301 -fused_transactions_write32s,223,2295 -fused_transactions_write32s,224,2303 -fused_transactions_write32s,225,2301 -fused_transactions_write32s,226,2298 -fused_transactions_write32s,227,2305 -fused_transactions_write32s,228,2304 -fused_transactions_write32s,229,2306 -fused_transactions_write32s,230,2304 -fused_transactions_write32s,231,2312 -fused_transactions_write32s,232,2299 -fused_transactions_write32s,233,2297 -fused_transactions_write32s,234,2299 -fused_transactions_write32s,235,2298 -fused_transactions_write32s,236,2297 -fused_transactions_write32s,237,2300 -fused_transactions_write32s,238,2300 -fused_transactions_write32s,239,2304 -fused_transactions_write32s,240,2301 -fused_transactions_write32s,241,2297 -fused_transactions_write32s,242,2302 -fused_transactions_write32s,243,2302 -fused_transactions_write32s,244,2299 -fused_transactions_write32s,245,2299 -fused_transactions_write32s,246,2302 -fused_transactions_write32s,247,2298 -fused_transactions_write32s,248,2301 -fused_transactions_write32s,249,2297 -fused_transactions_write32s,250,2303 -fused_transactions_write32s,251,2301 -fused_transactions_write32s,252,2300 -fused_transactions_write32s,253,2301 -fused_transactions_write32s,254,2301 -fused_transactions_write32s,255,2306 -fused_transactions_write32s,256,2300 -fused_transactions_write32s,257,2299 -fused_transactions_write32s,258,2299 -fused_transactions_write32s,259,2307 -fused_transactions_write32s,260,2301 -fused_transactions_write32s,261,2300 -fused_transactions_write32s,262,2303 -fused_transactions_write32s,263,2305 -fused_transactions_write32s,264,2306 -fused_transactions_write32s,265,2300 -fused_transactions_write32s,266,2309 -fused_transactions_write32s,267,2307 -fused_transactions_write32s,268,2303 -fused_transactions_write32s,269,2308 -fused_transactions_write32s,270,2306 -fused_transactions_write32s,271,2300 -fused_transactions_write32s,272,2310 -fused_transactions_write32s,273,2301 -fused_transactions_write32s,274,2303 -fused_transactions_write32s,275,2306 -fused_transactions_write32s,276,2305 -fused_transactions_write32s,277,2301 -fused_transactions_write32s,278,2304 -fused_transactions_write32s,279,2303 -fused_transactions_write32s,280,2303 -fused_transactions_write32s,281,2302 -fused_transactions_write32s,282,2300 -fused_transactions_write32s,283,2300 -fused_transactions_write32s,284,2306 -fused_transactions_write32s,285,2304 -fused_transactions_write32s,286,2305 -fused_transactions_write32s,287,2307 -fused_transactions_write32s,288,2300 -fused_transactions_write32s,289,2299 -fused_transactions_write32s,290,2298 -fused_transactions_write32s,291,2295 -fused_transactions_write32s,292,2303 -fused_transactions_write32s,293,2299 -fused_transactions_write32s,294,2304 -fused_transactions_write32s,295,2297 -fused_transactions_write32s,296,2300 -fused_transactions_write32s,297,2304 -fused_transactions_write32s,298,2301 -fused_transactions_write32s,299,2300 -fused_transactions_write32s,300,2301 -fused_transactions_write32s,301,2300 -fused_transactions_write32s,302,2305 -fused_transactions_write32s,303,2305 -fused_transactions_write32s,304,2298 -fused_transactions_write32s,305,2302 -fused_transactions_write32s,306,2305 -fused_transactions_write32s,307,2300 -fused_transactions_write32s,308,2306 -fused_transactions_write32s,309,2308 -fused_transactions_write32s,310,2299 -fused_transactions_write32s,311,2311 -fused_transactions_write32s,312,2299 -fused_transactions_write32s,313,2297 -fused_transactions_write32s,314,2306 -fused_transactions_write32s,315,2298 -fused_transactions_write32s,316,2302 -fused_transactions_write32s,317,2300 -fused_transactions_write32s,318,2300 -fused_transactions_write32s,319,2297 -fused_transactions_write32s,320,2304 -fused_transactions_write32s,321,2300 -fused_transactions_write32s,322,2305 -fused_transactions_write32s,323,2304 -fused_transactions_write32s,324,2296 -fused_transactions_write32s,325,2306 -fused_transactions_write32s,326,2301 -fused_transactions_write32s,327,2315 -fused_transactions_write32s,328,2309 -fused_transactions_write32s,329,2305 -fused_transactions_write32s,330,2303 -fused_transactions_write32s,331,2295 -fused_transactions_write32s,332,2297 -fused_transactions_write32s,333,2296 -fused_transactions_write32s,334,2299 -fused_transactions_write32s,335,2302 -fused_transactions_write32s,336,2302 -fused_transactions_write32s,337,2303 -fused_transactions_write32s,338,2301 -fused_transactions_write32s,339,2301 -fused_transactions_write32s,340,2297 -fused_transactions_write32s,341,2306 -fused_transactions_write32s,342,2303 -fused_transactions_write32s,343,2303 -fused_transactions_write32s,344,2304 -fused_transactions_write32s,345,2303 -fused_transactions_write32s,346,2302 -fused_transactions_write32s,347,2296 -fused_transactions_write32s,348,2298 -fused_transactions_write32s,349,2297 -fused_transactions_write32s,350,2306 -fused_transactions_write32s,351,2294 -fused_transactions_write32s,352,2301 -fused_transactions_write32s,353,2297 -fused_transactions_write32s,354,2302 -fused_transactions_write32s,355,2307 -fused_transactions_write32s,356,2304 -fused_transactions_write32s,357,2299 -fused_transactions_write32s,358,2301 -fused_transactions_write32s,359,2298 -fused_transactions_write32s,360,2306 -fused_transactions_write32s,361,2304 -fused_transactions_write32s,362,2304 -fused_transactions_write32s,363,2303 -fused_transactions_write32s,364,2296 -fused_transactions_write32s,365,2302 -fused_transactions_write32s,366,2304 -fused_transactions_write32s,367,2305 -fused_transactions_write32s,368,2304 -fused_transactions_write32s,369,2304 -fused_transactions_write32s,370,2299 -fused_transactions_write32s,371,2299 -fused_transactions_write32s,372,2303 -fused_transactions_write32s,373,2303 -fused_transactions_write32s,374,2297 -fused_transactions_write32s,375,2303 -fused_transactions_write32s,376,2303 -fused_transactions_write32s,377,2297 -fused_transactions_write32s,378,2302 -fused_transactions_write32s,379,2306 -fused_transactions_write32s,380,2306 -fused_transactions_write32s,381,2293 -fused_transactions_write32s,382,2297 -fused_transactions_write32s,383,2301 -fused_transactions_write32s,384,2296 -fused_transactions_write32s,385,2296 -fused_transactions_write32s,386,2299 -fused_transactions_write32s,387,2300 -fused_transactions_write32s,388,2299 -fused_transactions_write32s,389,2306 -fused_transactions_write32s,390,2299 -fused_transactions_write32s,391,2300 -fused_transactions_write32s,392,2304 -fused_transactions_write32s,393,2305 -fused_transactions_write32s,394,2299 -fused_transactions_write32s,395,2304 -fused_transactions_write32s,396,2304 -fused_transactions_write32s,397,2294 -fused_transactions_write32s,398,2304 -fused_transactions_write32s,399,2301 -fused_transactions_write32s,400,2300 -fused_transactions_write32s,401,2303 -fused_transactions_write32s,402,2296 -fused_transactions_write32s,403,2301 -fused_transactions_write32s,404,2300 -fused_transactions_write32s,405,2303 -fused_transactions_write32s,406,2298 -fused_transactions_write32s,407,2307 -fused_transactions_write32s,408,2306 -fused_transactions_write32s,409,2301 -fused_transactions_write32s,410,2297 -fused_transactions_write32s,411,2305 -fused_transactions_write32s,412,2304 -fused_transactions_write32s,413,2312 -fused_transactions_write32s,414,2313 -fused_transactions_write32s,415,2305 -fused_transactions_write32s,416,2302 -fused_transactions_write32s,417,2300 -fused_transactions_write32s,418,2300 -fused_transactions_write32s,419,2295 -fused_transactions_write32s,420,2299 -fused_transactions_write32s,421,2300 -fused_transactions_write32s,422,2298 -fused_transactions_write32s,423,2298 -fused_transactions_write32s,424,2302 -fused_transactions_write32s,425,2295 -fused_transactions_write32s,426,2298 -fused_transactions_write32s,427,2294 -fused_transactions_write32s,428,2305 -fused_transactions_write32s,429,2301 -fused_transactions_write32s,430,2299 -fused_transactions_write32s,431,2300 -fused_transactions_write32s,432,2301 -fused_transactions_write32s,433,2298 -fused_transactions_write32s,434,2299 -fused_transactions_write32s,435,2301 -fused_transactions_write32s,436,2302 -fused_transactions_write32s,437,2297 -fused_transactions_write32s,438,2297 -fused_transactions_write32s,439,2295 -fused_transactions_write32s,440,2300 -fused_transactions_write32s,441,2299 -fused_transactions_write32s,442,2299 -fused_transactions_write32s,443,2297 -fused_transactions_write32s,444,2306 -fused_transactions_write32s,445,2295 -fused_transactions_write32s,446,2298 -fused_transactions_write32s,447,2297 -fused_transactions_write32s,448,2305 -fused_transactions_write32s,449,2301 -fused_transactions_write32s,450,2300 -fused_transactions_write32s,451,2295 -fused_transactions_write32s,452,2303 -fused_transactions_write32s,453,2299 -fused_transactions_write32s,454,2302 -fused_transactions_write32s,455,2298 -fused_transactions_write32s,456,2299 -fused_transactions_write32s,457,2302 -fused_transactions_write32s,458,2305 -fused_transactions_write32s,459,2296 -fused_transactions_write32s,460,2297 -fused_transactions_write32s,461,2298 -fused_transactions_write32s,462,2299 -fused_transactions_write32s,463,2299 -fused_transactions_write32s,464,2299 -fused_transactions_write32s,465,2301 -fused_transactions_write32s,466,2302 -fused_transactions_write32s,467,2298 -fused_transactions_write32s,468,2295 -fused_transactions_write32s,469,2293 -fused_transactions_write32s,470,2300 -fused_transactions_write32s,471,2301 -fused_transactions_write32s,472,2303 -fused_transactions_write32s,473,2299 -fused_transactions_write32s,474,2295 -fused_transactions_write32s,475,2299 -fused_transactions_write32s,476,2301 -fused_transactions_write32s,477,2297 -fused_transactions_write32s,478,2300 -fused_transactions_write32s,479,2300 -fused_transactions_write32s,480,2302 -fused_transactions_write32s,481,2296 -fused_transactions_write32s,482,2299 -fused_transactions_write32s,483,2299 -fused_transactions_write32s,484,2299 -fused_transactions_write32s,485,2300 -fused_transactions_write32s,486,2305 -fused_transactions_write32s,487,2311 -fused_transactions_write32s,488,2308 -fused_transactions_write32s,489,2309 -fused_transactions_write32s,490,2303 -fused_transactions_write32s,491,2303 -fused_transactions_write32s,492,2310 -fused_transactions_write32s,493,2297 -fused_transactions_write32s,494,2301 -fused_transactions_write32s,495,2302 -fused_transactions_write32s,496,2300 -fused_transactions_write32s,497,2297 -fused_transactions_write32s,498,2292 -fused_transactions_write32s,499,2279 -fused_transactions_write32s,500,2295 -fused_transactions_write32s,501,2302 -fused_transactions_write32s,502,2308 -fused_transactions_write32s,503,2289 -fused_transactions_write32s,504,2288 -fused_transactions_write32s,505,2293 -fused_transactions_write32s,506,2284 -fused_transactions_write32s,507,2281 -fused_transactions_write32s,508,2275 -fused_transactions_write32s,509,2274 -fused_transactions_write32s,510,2271 -fused_transactions_write32s,511,2274 -fused_transactions_write32s,512,2272 -fused_transactions_write32s,513,2289 -fused_transactions_write32s,514,2290 -fused_transactions_write32s,515,2290 -fused_transactions_write32s,516,2296 -fused_transactions_write32s,517,2292 -fused_transactions_write32s,518,2292 -fused_transactions_write32s,519,2296 -fused_transactions_write32s,520,2297 -fused_transactions_write32s,521,2290 -fused_transactions_write32s,522,2288 -fused_transactions_write32s,523,2298 -fused_transactions_write32s,524,2290 -fused_transactions_write32s,525,2294 -fused_transactions_write32s,526,2294 -fused_transactions_write32s,527,2298 -fused_transactions_write32s,528,2293 -fused_transactions_write32s,529,2290 -fused_transactions_write32s,530,2295 -fused_transactions_write32s,531,2290 -fused_transactions_write32s,532,2290 -fused_transactions_write32s,533,2299 -fused_transactions_write32s,534,2292 -fused_transactions_write32s,535,2292 -fused_transactions_write32s,536,2302 -fused_transactions_write32s,537,2290 -fused_transactions_write32s,538,2296 -fused_transactions_write32s,539,2290 -fused_transactions_write32s,540,2292 -fused_transactions_write32s,541,2291 -fused_transactions_write32s,542,2295 -fused_transactions_write32s,543,2295 -fused_transactions_write32s,544,2297 -fused_transactions_write32s,545,2291 -fused_transactions_write32s,546,2300 -fused_transactions_write32s,547,2293 -fused_transactions_write32s,548,2289 -fused_transactions_write32s,549,2295 -fused_transactions_write32s,550,2294 -fused_transactions_write32s,551,2292 -fused_transactions_write32s,552,2296 -fused_transactions_write32s,553,2300 -fused_transactions_write32s,554,2293 -fused_transactions_write32s,555,2294 -fused_transactions_write32s,556,2292 -fused_transactions_write32s,557,2294 -fused_transactions_write32s,558,2292 -fused_transactions_write32s,559,2293 -fused_transactions_write32s,560,2297 -fused_transactions_write32s,561,2294 -fused_transactions_write32s,562,2290 -fused_transactions_write32s,563,2292 -fused_transactions_write32s,564,2291 -fused_transactions_write32s,565,2293 -fused_transactions_write32s,566,2293 -fused_transactions_write32s,567,2294 -fused_transactions_write32s,568,2294 -fused_transactions_write32s,569,2292 -fused_transactions_write32s,570,2294 -fused_transactions_write32s,571,2291 -fused_transactions_write32s,572,2293 -fused_transactions_write32s,573,2293 -fused_transactions_write32s,574,2296 -fused_transactions_write32s,575,2300 -fused_transactions_write32s,576,2291 -fused_transactions_write32s,577,2295 -fused_transactions_write32s,578,2293 -fused_transactions_write32s,579,2297 -fused_transactions_write32s,580,2293 -fused_transactions_write32s,581,2298 -fused_transactions_write32s,582,2296 -fused_transactions_write32s,583,2290 -fused_transactions_write32s,584,2294 -fused_transactions_write32s,585,2292 -fused_transactions_write32s,586,2296 -fused_transactions_write32s,587,2294 -fused_transactions_write32s,588,2294 -fused_transactions_write32s,589,2292 -fused_transactions_write32s,590,2294 -fused_transactions_write32s,591,2295 -fused_transactions_write32s,592,2298 -fused_transactions_write32s,593,2294 -fused_transactions_write32s,594,2297 -fused_transactions_write32s,595,2311 -fused_transactions_write32s,596,2295 -fused_transactions_write32s,597,2292 -fused_transactions_write32s,598,2293 -fused_transactions_write32s,599,2292 -fused_transactions_write32s,600,2294 -fused_transactions_write32s,601,2292 -fused_transactions_write32s,602,2293 -fused_transactions_write32s,603,2294 -fused_transactions_write32s,604,2292 -fused_transactions_write32s,605,2296 -fused_transactions_write32s,606,2297 -fused_transactions_write32s,607,2293 -fused_transactions_write32s,608,2293 -fused_transactions_write32s,609,2299 -fused_transactions_write32s,610,2297 -fused_transactions_write32s,611,2292 -fused_transactions_write32s,612,2294 -fused_transactions_write32s,613,2294 -fused_transactions_write32s,614,2293 -fused_transactions_write32s,615,2294 -fused_transactions_write32s,616,2291 -fused_transactions_write32s,617,2300 -fused_transactions_write32s,618,2291 -fused_transactions_write32s,619,2293 -fused_transactions_write32s,620,2292 -fused_transactions_write32s,621,2294 -fused_transactions_write32s,622,2292 -fused_transactions_write32s,623,2300 -fused_transactions_write32s,624,2294 -fused_transactions_write32s,625,2298 -fused_transactions_write32s,626,2297 -fused_transactions_write32s,627,2300 -fused_transactions_write32s,628,2293 -fused_transactions_write32s,629,2292 -fused_transactions_write32s,630,2292 -fused_transactions_write32s,631,2294 -fused_transactions_write32s,632,2296 -fused_transactions_write32s,633,2293 -fused_transactions_write32s,634,2292 -fused_transactions_write32s,635,2290 -fused_transactions_write32s,636,2292 -fused_transactions_write32s,637,2291 -fused_transactions_write32s,638,2298 -fused_transactions_write32s,639,2304 -fused_transactions_write32s,640,2320 -fused_transactions_write32s,641,2299 -fused_transactions_write32s,642,2295 -fused_transactions_write32s,643,2293 -fused_transactions_write32s,644,2294 -fused_transactions_write32s,645,2297 -fused_transactions_write32s,646,2296 -fused_transactions_write32s,647,2290 -fused_transactions_write32s,648,2294 -fused_transactions_write32s,649,2298 -fused_transactions_write32s,650,2299 -fused_transactions_write32s,651,2295 -fused_transactions_write32s,652,2292 -fused_transactions_write32s,653,2290 -fused_transactions_write32s,654,2296 -fused_transactions_write32s,655,2295 -fused_transactions_write32s,656,2292 -fused_transactions_write32s,657,2294 -fused_transactions_write32s,658,2292 -fused_transactions_write32s,659,2293 -fused_transactions_write32s,660,2302 -fused_transactions_write32s,661,2317 -fused_transactions_write32s,662,2299 -fused_transactions_write32s,663,2294 -fused_transactions_write32s,664,2294 -fused_transactions_write32s,665,2295 -fused_transactions_write32s,666,2293 -fused_transactions_write32s,667,2295 -fused_transactions_write32s,668,2293 -fused_transactions_write32s,669,2293 -fused_transactions_write32s,670,2293 -fused_transactions_write32s,671,2294 -fused_transactions_write32s,672,2291 -fused_transactions_write32s,673,2293 -fused_transactions_write32s,674,2292 -fused_transactions_write32s,675,2295 -fused_transactions_write32s,676,2295 -fused_transactions_write32s,677,2296 -fused_transactions_write32s,678,2294 -fused_transactions_write32s,679,2296 -fused_transactions_write32s,680,2294 -fused_transactions_write32s,681,2301 -fused_transactions_write32s,682,2303 -fused_transactions_write32s,683,2295 -fused_transactions_write32s,684,2295 -fused_transactions_write32s,685,2292 -fused_transactions_write32s,686,2291 -fused_transactions_write32s,687,2293 -fused_transactions_write32s,688,2290 -fused_transactions_write32s,689,2291 -fused_transactions_write32s,690,2294 -fused_transactions_write32s,691,2292 -fused_transactions_write32s,692,2292 -fused_transactions_write32s,693,2309 -fused_transactions_write32s,694,2295 -fused_transactions_write32s,695,2292 -fused_transactions_write32s,696,2293 -fused_transactions_write32s,697,2297 -fused_transactions_write32s,698,2296 -fused_transactions_write32s,699,2298 -fused_transactions_write32s,700,2292 -fused_transactions_write32s,701,2289 -fused_transactions_write32s,702,2293 -fused_transactions_write32s,703,2293 -fused_transactions_write32s,704,2294 -fused_transactions_write32s,705,2300 -fused_transactions_write32s,706,2296 -fused_transactions_write32s,707,2293 -fused_transactions_write32s,708,2293 -fused_transactions_write32s,709,2293 -fused_transactions_write32s,710,2297 -fused_transactions_write32s,711,2294 -fused_transactions_write32s,712,2292 -fused_transactions_write32s,713,2293 -fused_transactions_write32s,714,2293 -fused_transactions_write32s,715,2290 -fused_transactions_write32s,716,2296 -fused_transactions_write32s,717,2296 -fused_transactions_write32s,718,2306 -fused_transactions_write32s,719,2300 -fused_transactions_write32s,720,2296 -fused_transactions_write32s,721,2294 -fused_transactions_write32s,722,2297 -fused_transactions_write32s,723,2293 -fused_transactions_write32s,724,2293 -fused_transactions_write32s,725,2293 -fused_transactions_write32s,726,2293 -fused_transactions_write32s,727,2297 -fused_transactions_write32s,728,2295 -fused_transactions_write32s,729,2294 -fused_transactions_write32s,730,2294 -fused_transactions_write32s,731,2297 -fused_transactions_write32s,732,2292 -fused_transactions_write32s,733,2294 -fused_transactions_write32s,734,2296 -fused_transactions_write32s,735,2293 -fused_transactions_write32s,736,2293 -fused_transactions_write32s,737,2291 -fused_transactions_write32s,738,2296 -fused_transactions_write32s,739,2291 -fused_transactions_write32s,740,2294 -fused_transactions_write32s,741,2292 -fused_transactions_write32s,742,2294 -fused_transactions_write32s,743,2293 -fused_transactions_write32s,744,2293 -fused_transactions_write32s,745,2294 -fused_transactions_write32s,746,2299 -fused_transactions_write32s,747,2292 -fused_transactions_write32s,748,2297 -fused_transactions_write32s,749,2298 -fused_transactions_write32s,750,2299 -fused_transactions_write32s,751,2293 -fused_transactions_write32s,752,2294 -fused_transactions_write32s,753,2303 -fused_transactions_write32s,754,2301 -fused_transactions_write32s,755,2294 -fused_transactions_write32s,756,2293 -fused_transactions_write32s,757,2293 -fused_transactions_write32s,758,2293 -fused_transactions_write32s,759,2295 -fused_transactions_write32s,760,2296 -fused_transactions_write32s,761,2294 -fused_transactions_write32s,762,2289 -fused_transactions_write32s,763,2295 -fused_transactions_write32s,764,2295 -fused_transactions_write32s,765,2295 -fused_transactions_write32s,766,2295 -fused_transactions_write32s,767,2293 -fused_transactions_write32s,768,2292 -fused_transactions_write32s,769,2291 -fused_transactions_write32s,770,2292 -fused_transactions_write32s,771,2293 -fused_transactions_write32s,772,2292 -fused_transactions_write32s,773,2292 -fused_transactions_write32s,774,2292 -fused_transactions_write32s,775,2291 -fused_transactions_write32s,776,2292 -fused_transactions_write32s,777,2303 -fused_transactions_write32s,778,2299 -fused_transactions_write32s,779,2296 -fused_transactions_write32s,780,2293 -fused_transactions_write32s,781,2292 -fused_transactions_write32s,782,2299 -fused_transactions_write32s,783,2298 -fused_transactions_write32s,784,2297 -fused_transactions_write32s,785,2299 -fused_transactions_write32s,786,2293 -fused_transactions_write32s,787,2291 -fused_transactions_write32s,788,2295 -fused_transactions_write32s,789,2292 -fused_transactions_write32s,790,2296 -fused_transactions_write32s,791,2293 -fused_transactions_write32s,792,2294 -fused_transactions_write32s,793,2292 -fused_transactions_write32s,794,2291 -fused_transactions_write32s,795,2294 -fused_transactions_write32s,796,2292 -fused_transactions_write32s,797,2292 -fused_transactions_write32s,798,2292 -fused_transactions_write32s,799,2292 -fused_transactions_write32s,800,2296 -fused_transactions_write32s,801,2292 -fused_transactions_write32s,802,2294 -fused_transactions_write32s,803,2297 -fused_transactions_write32s,804,2292 -fused_transactions_write32s,805,2293 -fused_transactions_write32s,806,2294 -fused_transactions_write32s,807,2293 -fused_transactions_write32s,808,2293 -fused_transactions_write32s,809,2292 -fused_transactions_write32s,810,2294 -fused_transactions_write32s,811,2292 -fused_transactions_write32s,812,2294 -fused_transactions_write32s,813,2300 -fused_transactions_write32s,814,2295 -fused_transactions_write32s,815,2302 -fused_transactions_write32s,816,2296 -fused_transactions_write32s,817,2294 -fused_transactions_write32s,818,2293 -fused_transactions_write32s,819,2294 -fused_transactions_write32s,820,2298 -fused_transactions_write32s,821,2295 -fused_transactions_write32s,822,2298 -fused_transactions_write32s,823,2295 -fused_transactions_write32s,824,2293 -fused_transactions_write32s,825,2293 -fused_transactions_write32s,826,2294 -fused_transactions_write32s,827,2296 -fused_transactions_write32s,828,2294 -fused_transactions_write32s,829,2297 -fused_transactions_write32s,830,2293 -fused_transactions_write32s,831,2292 -fused_transactions_write32s,832,2292 -fused_transactions_write32s,833,2292 -fused_transactions_write32s,834,2296 -fused_transactions_write32s,835,2290 -fused_transactions_write32s,836,2292 -fused_transactions_write32s,837,2298 -fused_transactions_write32s,838,2294 -fused_transactions_write32s,839,2295 -fused_transactions_write32s,840,2297 -fused_transactions_write32s,841,2308 -fused_transactions_write32s,842,2295 -fused_transactions_write32s,843,2630 -fused_transactions_write32s,844,2599 -fused_transactions_write32s,845,2857 -fused_transactions_write32s,846,2656 -fused_transactions_write32s,847,2570 -fused_transactions_write32s,848,2308 -fused_transactions_write32s,849,2295 -fused_transactions_write32s,850,2298 -fused_transactions_write32s,851,2297 -fused_transactions_write32s,852,2300 -fused_transactions_write32s,853,2301 -fused_transactions_write32s,854,2297 -fused_transactions_write32s,855,2300 -fused_transactions_write32s,856,2290 -fused_transactions_write32s,857,2298 -fused_transactions_write32s,858,2297 -fused_transactions_write32s,859,2299 -fused_transactions_write32s,860,2292 -fused_transactions_write32s,861,2291 -fused_transactions_write32s,862,2300 -fused_transactions_write32s,863,2292 -fused_transactions_write32s,864,2301 -fused_transactions_write32s,865,2298 -fused_transactions_write32s,866,2317 -fused_transactions_write32s,867,2317 -fused_transactions_write32s,868,2300 -fused_transactions_write32s,869,2291 -fused_transactions_write32s,870,2294 -fused_transactions_write32s,871,2295 -fused_transactions_write32s,872,2294 -fused_transactions_write32s,873,2292 -fused_transactions_write32s,874,2295 -fused_transactions_write32s,875,2296 -fused_transactions_write32s,876,2294 -fused_transactions_write32s,877,2292 -fused_transactions_write32s,878,2295 -fused_transactions_write32s,879,2292 -fused_transactions_write32s,880,2293 -fused_transactions_write32s,881,2292 -fused_transactions_write32s,882,2294 -fused_transactions_write32s,883,2293 -fused_transactions_write32s,884,2291 -fused_transactions_write32s,885,2291 -fused_transactions_write32s,886,2294 -fused_transactions_write32s,887,2294 -fused_transactions_write32s,888,2294 -fused_transactions_write32s,889,2289 -fused_transactions_write32s,890,2297 -fused_transactions_write32s,891,2277 -fused_transactions_write32s,892,2286 -fused_transactions_write32s,893,2289 -fused_transactions_write32s,894,2293 -fused_transactions_write32s,895,2289 -fused_transactions_write32s,896,2296 -fused_transactions_write32s,897,2294 -fused_transactions_write32s,898,2299 -fused_transactions_write32s,899,2297 -fused_transactions_write32s,900,2293 -fused_transactions_write32s,901,2294 -fused_transactions_write32s,902,2291 -fused_transactions_write32s,903,2295 -fused_transactions_write32s,904,2297 -fused_transactions_write32s,905,2294 -fused_transactions_write32s,906,2292 -fused_transactions_write32s,907,2293 -fused_transactions_write32s,908,2295 -fused_transactions_write32s,909,2295 -fused_transactions_write32s,910,2291 -fused_transactions_write32s,911,2291 -fused_transactions_write32s,912,2295 -fused_transactions_write32s,913,2291 -fused_transactions_write32s,914,2296 -fused_transactions_write32s,915,2293 -fused_transactions_write32s,916,2297 -fused_transactions_write32s,917,2291 -fused_transactions_write32s,918,2294 -fused_transactions_write32s,919,2294 -fused_transactions_write32s,920,2293 -fused_transactions_write32s,921,2294 -fused_transactions_write32s,922,2299 -fused_transactions_write32s,923,2294 -fused_transactions_write32s,924,2298 -fused_transactions_write32s,925,2294 -fused_transactions_write32s,926,2291 -fused_transactions_write32s,927,2298 -fused_transactions_write32s,928,2294 -fused_transactions_write32s,929,2292 -fused_transactions_write32s,930,2284 -fused_transactions_write32s,931,2272 -fused_transactions_write32s,932,2282 -fused_transactions_write32s,933,2283 -fused_transactions_write32s,934,2287 -fused_transactions_write32s,935,2278 -fused_transactions_write32s,936,2301 -fused_transactions_write32s,937,2298 -fused_transactions_write32s,938,2293 -fused_transactions_write32s,939,2292 -fused_transactions_write32s,940,2291 -fused_transactions_write32s,941,2280 -fused_transactions_write32s,942,2281 -fused_transactions_write32s,943,2282 -fused_transactions_write32s,944,2301 -fused_transactions_write32s,945,2303 -fused_transactions_write32s,946,2281 -fused_transactions_write32s,947,2276 -fused_transactions_write32s,948,2293 -fused_transactions_write32s,949,2291 -fused_transactions_write32s,950,2293 -fused_transactions_write32s,951,2296 -fused_transactions_write32s,952,2296 -fused_transactions_write32s,953,2295 -fused_transactions_write32s,954,2292 -fused_transactions_write32s,955,2291 -fused_transactions_write32s,956,2294 -fused_transactions_write32s,957,2291 -fused_transactions_write32s,958,2289 -fused_transactions_write32s,959,2292 -fused_transactions_write32s,960,2294 -fused_transactions_write32s,961,2294 -fused_transactions_write32s,962,2294 -fused_transactions_write32s,963,2288 -fused_transactions_write32s,964,2299 -fused_transactions_write32s,965,2291 -fused_transactions_write32s,966,2297 -fused_transactions_write32s,967,2301 -fused_transactions_write32s,968,2299 -fused_transactions_write32s,969,2292 -fused_transactions_write32s,970,2301 -fused_transactions_write32s,971,2292 -fused_transactions_write32s,972,2296 -fused_transactions_write32s,973,2298 -fused_transactions_write32s,974,2294 -fused_transactions_write32s,975,2292 -fused_transactions_write32s,976,2291 -fused_transactions_write32s,977,2295 -fused_transactions_write32s,978,2293 -fused_transactions_write32s,979,2293 -fused_transactions_write32s,980,2294 -fused_transactions_write32s,981,2292 -fused_transactions_write32s,982,2293 -fused_transactions_write32s,983,2291 -fused_transactions_write32s,984,2290 -fused_transactions_write32s,985,2293 -fused_transactions_write32s,986,2298 -fused_transactions_write32s,987,2294 -fused_transactions_write32s,988,2292 -fused_transactions_write32s,989,2291 -fused_transactions_write32s,990,2292 -fused_transactions_write32s,991,2300 -fused_transactions_write32s,992,2295 -fused_transactions_write32s,993,2299 -fused_transactions_write32s,994,2292 -fused_transactions_write32s,995,2293 -fused_transactions_write32s,996,2296 -fused_transactions_write32s,997,2297 -fused_transactions_write32s,998,2290 -fused_transactions_write32s,999,2294 \ No newline at end of file diff --git a/programming_examples/reconfiguration/ablation/ablation_results.png b/programming_examples/reconfiguration/ablation/ablation_results.png deleted file mode 100644 index 7e9228442bfed5c368d933d66c67d29cd40a636f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238506 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≫@)xxH0?G&FxgQ+>BDWu&RZ>%P@lerSv%NbMP6?t1^n>OJtao8} z-q5NnD=y`(v8fa^W#kXl4;J#~rWiT-S1;A$F%eRTW?J_$%K<5oca+e<%@cTyM0^bJ zpbWO?2*x8Y&^veS+7(tf>X{cPGbq_uz;t!{^ll$@A(@y_Vd9F&Zl`&YwM5{+D_8- zon-Yve$XudP|T4_h&D*KXtzikb90dws_#ElZdakBt{z;y^a=#@?xCSfJXI2yRiY=w zcu$!V^^8aZ{|U9u^54 zByU#Xz9*{(QygR_VXq>KPBmV-bSd$p!m~zPMKHQC!GsYL)6HAA(0!aC{*(;?Trzw8 zifTLtW#w(tJ_}AV^ddVR)OOnt-Sd%M*E!)17`TX~4ZR$(tfAL~(sKbX;RK1KZVLJN z>eZ`NPXb2_ti4oi!i;|HNOo9H^Q-C93oBEOmDeY}u2Rne##seoZL0|4iCrB1M4R}V zOk=$gu#WT5KjCD-OD)K!v_m&94NquMr4}PAr8xa<)aZKl-*#6vzO^C-dH_4wdM2#3 zyS1?3ir|5Wr;Bb`E?(p^)Ced?Flb#C3{;i~oM!o>jg3Q2*g#_Nmubn#fsjfqZdhS` za!@u`J!`hR4JD{3zBE1ZKBgqvPR=_UvpkC2?)_|9z;y8`BGod+y`P^V4`^po!V1NQ z82Us}uzAksr|V_XCN=5X@X)tQx&1T3%=?+V19PK-cQH73l}U8R{qbQ2Z^0{Yrnm@1 z3k*-WPdH1OFe-=Yr6#?$6%F}kyq|h4AH}p@L5%9e$wTD)1Y=lKZXoqReI33dR{IMN zk4-pelLz2dKAyDFogaMf5BCT*Nd-!_eZmY5uMposSLo#oX5^$=9CFVdB&vMYwZx*bQy#pGew`K3?GN8DAv^^B)S-Tn6)(Ip)h|?uJn|*OQ z$0mf*D7+no>1rPOg^n+G^Zfd2r~n;Zb0NI%32>I7-)cK=!t$Gh5>8zHO0)EkhTbMX z9B9vP(5mXCz)I;BR?&Mg(&oXZZ9#Hlx0B0I6E1=}Q zefvipy%|a3_ z3hd>(>kg_y@Kz^usmj`JScWUPJznkc2C&}Ccm7*uysmIN(e1m%o~@aE_t_&EHV&WO zJt-(vX&Sn;-r)GjlQ;PlUk-NzCWRn z0;j)MigO6-t5N7^PHAt549bRQ!%LFZCcS0rR!|>S1%e_9MKPmo^`w}`y12|vSFa#m zUyw-_RSICL!@UPva#P_PRAG9-3THj=-Htf;kJ%MYQlH_Rkf7yz!0znUO?mq{435Hn zJdFec)p!rYZNbU}n2^DOC*4r$ zlDmPGvafwup}8VZ+^w>%CUoeMe>4@^M3J>hjv?Mar569Sz0!V@c%vOX$h%@r5?MDrW# z(sQxo2m56#504=Ip%iO!^!`u++%J%E!uV~Nl8hxT^^cm#K0zckts<>2l<|;l1oD7- zlL&|e=}Y(cR&%dU|D%d5o|v5M1H=|(Y~8xG&HVriQL`4V&ML9Z7fi3=tboTqT{S&5 z)n6^q@yh-qIsoMY6sz856*U3Pv|S9sB%`V5tr|| zf-egXo3(RcLOMqe=jt_UjH*blB;0TgVqN^&gb|!GPVU7*7?dH7GyZwVipOq}A)knaL|uyzHS+ym z7JRh7fja!s3S7O@blw-lsFALtK_ryvym#_MV1wVqrfQr?Q$stPFJ%qcFjQ?BCkDQB zr?Y9;0KsXuslLQ@I9FYC9G;T*@82s=A}K55lc_f3h~F*8U(7YBW>2)(l8suUBY(oF z^^u)wLs3_tOzZBYl|+0f0Pi8~bwCN@cj^z%99mygwGqzYP&d<9laCnAF^zGn2npSG z6xb;tDphU2lOGPwZF?|h@TbJqi6gWvCtK3;F10egC)d+XrM6>wn~&DYj`+{a%;=fF z?DB-Z7pk^op0M6hPeO~@QYzDC=Av6dEbG9rr;_wCgHeR24D(ePtGLPw1{+_4u@8X> zBUk~JD>#;e2PUu+I$mTl>prq-bcz=IIAOd@-D1~={93Rj$$<`2rE!8%uQSRP!vrB{ zMdK=TC(6VHMx3uYKCpm=&gXrH0Q3Kt-R9f{@q{{qOx0Q{q$_U4Vypcb)0!fs6HkN3 zF~>@D6Ngr;r?^$i9!e>8t-mfYNJckD>CBmXCN)v!Rbeo?^hMISZUhJ4M;(nE25Vmj z19nu(Bq8k~?tF1+3fVZH@4^SVPkgPxLm09smrx;Nsgwj|QMt}H8<9TtFi?6L;uKf; zSzI0O46t+}}1}3J_0p7o#VU!#JXiXz!!C z=w%wnN3$|c;F(!3wgyRxkAeQreFZey+~@uA34Dx_G)4@fm%wsGi!wm9P&W_013B2M zS&s{GX{C|J-h!I=s9r(_fkK>fPM0s@lCpmm>;smcj4t>wiG58?juosVXUxEW#1t$D zDwA-xk*SjePgNenZ~3a5`|pXp$Eu(NzUnNn)f$Uea=xCMomQE|Y|V>gg{O*x zlhCD7L7h`dZ8}P|=l(N`%wgkZG>0i=GDDHi(n9^abn)WZqIM{3ci=?{AO7+nYKL=a z5X;Ob)!We@rho-n*wQJbr$K2?126MVKKKC^hd{9x$*9aF`HbY#`NLnDbT=n6Xt_p zLTKo(%&Uf4a;ZHl-VQ$fwzL0PuxJNn?=nlqB6R1YnRorT-(t8{D6Cm#@@hlx2#9H? zWRas+uUvU3+b%ahGeQ{f1G&B{xl*v!9gLVX-W5CGgd_#tuYWCx@CFbs(H}VjhO#4f#MSPbIYlTCh7D_zveHZS`TJB&$zp z$C!{!>10B+9hvS*%`CO3TD)kH1)6?1FmEe)K|0Y!kJ^a_Qwv1p#})(pe~#y*JvH*D(#akU3~s&1 zkbY1LHi8A2FnkytXao!mBn^yQ$!c$J$81L=roIxP56nd87v88|O-`VUO9nskv=`OD z$_)vT3>6mDD_Nh)wFu#-!54|vvvH6eKZzwHO~kn$p9nRQ%JG>@ECBFS3(;*Gk%^LF zwV`+u(iYyr0qGhy4-X~~V}9{x&@D$XE#$0}X&e2$EhtAvbf${%&?7z7+0zvh;ERYy zZl#)fNbJYf0*ax}Y%c#0_yQ2H%!ifS4k?3#(||3(xTrnd`BkAtDTOrVsPo5(D@JD? zK;aF#Rg;2`hVxTlbzYJeFz{oWL6rmX-ayV03~OGaZxjnrXreN}yT`BIdblZS6py@s zobQ2@Tu3n#5OIgyy8pp$~0MdF8wAuQ#{T;WyA;fN*MgQ>2e|6I|S7NsUBI6SiIgsLNA6jW9 z9e+YxYgR6Z6YW6gx!2A8Pj9HeDD=m6XIIxp#sQ$$*$Elpp`NNKq~#L}`}sppufY^_ zc_z=EKM(Iu#1IS$4B!w%MnMm;Z&p9d8E=KXn9hwX9suQvowQ8o8^jtgTnU^Fb?T9n2jS()Zz>L5tZnYKVyGUdQ z!>rcR1RS&>a<5g@o*rzaFbn?4X3ae|?X5l2@-BmVaX3PID;qQP>8CIZX5NZ3pg%aS zFh3b&tcDJ_0>wT6w?S+mqyaC6CCQM8X>JI1}RLWOiq zr1RR&VM>1`>wUlIlb!bc6Aa>rEdKBu7RW()U)@XTmW8-}AlIMRDu^W$t9%wU=j8Xx-1dsAs9@FU{3f;fna zhyVED$E-98N<$Y&KM8EnhfkKUB!;GvNjP0EYwLDXVAKG3@LOht*FrE+#$6CSL)Oqf zR+jv#mBCXW-#zuI=hH=IIS3cJr_Veq(`O@qVs5G`SS?XFPK?F}+xB*h6 zo;r2A+DAzeE>uyQcG)h}%RQvRQ)^8%bCp5`&A~luHyVI6I)SH(G~y7qI16utVBH4Y zUI)bt79^RoBPH}4^IMR&#i(`|xHybj5C9q9nB9n3+*ifwRp<)QGI-dWi3o=j>c8dC z)$ab@@PCaEU5;8Y5={TzWj(%+6PBW#oxooP-3Vk^Z<8}(Qw?p|QPP?P+rULiMp>b{ zankdIkVsGBu(TSCBQVH}8lBk_($sVcGa>Dx^@`{U12&2g!%?=>7?LK`yd+qA&*(G) z=v9Y{DI!6(lz8MLzV4Ix(gOQKaLJINQ=oPYKs}^C735jrl0dK{av0awfw~V2YNKO- z(-@JEWrizTY@oB`bj1x zCJSUlG6_nc8JUX3WGC^kGlqt2w8w$u*+CIuy0Kr~@P!WCnq(vuTiWbdXi2UYfUQ7~ ziSdR*L}$l#nm3~Zw@JDM;{pg_!jGOwx{G)K;H#n8;!pK)s~3!#vJ$G>j@n z#3+FRn+!ZH%wl1bNR4Ds421>r58-A7oU0Uav-;p`T|H2+nc zT5?~<0jLwlA?Kc?P&6?7KsFHXE-tru4$dTZh{f=P6KwX>)LV8ZeJV4R&funzSwJNLHBsC??0Mr;vewZLpK5 zlX^y`K!MhoK?-xPK{}F&4bt@!tMlYp7V-iUG^G99C8^7(Ty_~$8S=6~x!Y%1(YBEB zq>)(3Bs?Zb0l|~VM8}DH7g5(!;pd2`QIa5xIa#D456mJq1oKn&z|viph1$yO^y8_q zpMkT~)S($yr@(h-(?`y<5EG0LF@%2EL+6jLv4^;=B?*`$8B4Kj)vDT@IpTkUBg+i6 z+PQSMCA4&+8nBQVBSUk~HJ^l~seufzBU=#z2wFW7;$%Drw?>@RQIMB6AZQK|tKZKr zKx|#a0UJ5rGlEAz$njR@t@?V#H`#PgrY--s*%WgFeWKv|sCaH@o=^1pS|w+snK3<1bBXoNDj*Rrr{>EoNrF+@U4xT?iUjiJK&78BFcy;Go$qP*YT0qfT_&@8l4&{;_fYyO z&``qw8s%jbWBbZ}`!Lif)z zk&7;}gHUmM`%V9AVqeANPx`L3JnkSapULig=we8ln=13?fv4coXbAQJWOMMO+p3&9 zmj+JXrfT|Y_o*GIqN36O83FglD3InQ-HVifPCf>%z4%ZgGgMD7ANcn$4^#tNvss)t z5Vx9StWt?C=lbc6PQG|84A!sO$`YR?a3?c zsfkXN87ig_D}b(w3r76mmoFK`ER{}-%K&~S0U=~4=RW!x``6aAxwZOx3)RU8Gi=0N zH-n=SNQ_BH@WRnH!`Fa_2#F>^B7pk*i}J_n50|0d4Qdy=s}pA{T(WeuNB5AliMQ5na+ z9c(uHRew7+u9Gp0-@aU^LT3EX)AUY^iNKLMS@{e*Qm^mQ7Scucvz$W{x)TF}!9HlO zFytS7uCf-_tPm0d_CA8Z6Wxiy2ExWDcKnO3*jAVeQsRScG~9V5b5qO|-TVx4SrdG{ zewI-(E~)^&6aWKG?joQpkoZT4CHr1n92dI>magQ}Q*wR9U0s_EpBDO_-T}Y&+8E&E z1H^X>89o#3JaJbdxm}0HE*Mu&pmO&k9fJ0X9ew(f2uYnpc3;QAG3^q7{|N7w_SpIk zNf*y8fF{NRV^WAP#54Gpcoe3>*+tKy!1j?pqhQ#Po50$-R&q+-0k>!Yp~5?DnLjpFCwh9;~ z+TAPFq-i}1b$geV@6yYtmcKPm{vt$>*Z51BaKALk2_s!&=C_m-7BJt8-~D1RlX(Jv z)Ib4XA!SQCRj=LyozZ*l1-F^L7`@fy9+Mmt5UjTlX>$K^P1OiLH5 zxO7gvwu@rg*Ff8MgtU+h_aD@l%b;p{hr1n!Z5D0@a)59_+EK+IZl`1eNQN;!b8h5z z2Rs0&X*sY(VjYgb`?1oC+dB02?Ii5KMfZyv;idB?+tF-7*u8>)?R|~AP_P2-*cn1x z6){cmQ87tHmNCbkaV&rQER`5(MliZj^Vc;r-P|HaGv;}$zk^P;?yH!YO#yJVXvs-N z3Q0inz z2t$km7Qo%WWAS)AGSz+aKC&d)qwja82a!}_lY+Z53nHu~PhE5Wd54)`;L)`!eq^J74`&J_%d1||~J$8q$y z#kFtAAaN)oe}1`n4YvdkScVJ}9=INQ9$|EFXycIo3uYH-25P(EiazC4vY*bATXMiQ zrvOmmek`JqIAL3mz_myh56?>o=IUqzCLo_2kUEPIx+&k95E2UbCk0DOC?-H!VjTiT zB$xBRiAuvE%D|?Y0dSK+>$Wu=ZZ|RQ;xyE*j|Q-|W7-Hhsv}IBXzEqrj--)f_~TE% zcK3fS0^IJ0eVJT70@P2!jaWzl&TtXlW-?|@#CZ^b_UVZnB#mGbBq)REWnr?4BHT3d zFPTdFZ<&gX?Xi)Yn_D01)lO87gc)$bd%R~RWc$hOtGI171Sm9;_Y9dyo*Em7ROI?r zp)~|7NhZ!CSn(+!{Yea>jZOl8L5djkFRMm9usS3Q`1|{F z4t~9BtNRkF!R%}Yyt@GST0~|kcD1W3B<@5sZ6O#*jTHKJ71s;ne}&IL8t*~d=jbTN z4M7gKzIwIuca=YwuZ{2+{csn~IH|=&-xlWG(&CZtQ9wSygYAG5q>#FgeSCTLtLOW- zo1@4=yT2_2n{DLp`~Puyt+fOUKqS2ZodcezsnJj&Nb5}u7*OeL9sIs5&8D)WxSK~H zvls&3bO*V)^2^tGz5llR5s-g~!cF=Xd{zo}TODo(Q0_Z$odRGiyvQ2L%KoJ12J$fn z69=Fe4bSv&q1Trey?$-^){$6oT0qW zTYvqFyHe(#mxuoK{V#ubwDE7G^zWaru?3a?ef#2n`Pt*HU4LJn_FsPXN%EhY`0pRe z{$uds-#_`k^>!1HFcd@N-dVnDE)ZzB+etV75)iYAd&i3M*T_X9g+gq$M^Fb#jqmg^|~yEwD4y^|vMgA&IdWe`xgCeE6z5>ue$ zW|N(UrNzj_iAcIXE?QIthYLUh$;{~9b1+HqyrKd(bP>J-yS$E@JA>TDDy(-3==@t0 z5ECre3xrS9;tc-S>)EGHYb`s`5VBl zu>-e3-Qz*bhPz)9s!DhIWi3=Xuu~xnX*3u07|ZQy9B>D9k4mkMns1e{2DlUzsKBY{ zHv@bFnN8`m z#a2^*f6<}uW`GkOvR6PVBF;TV7KXIQb$7xYFRW8*XIu}sqweE=He4L~=+Prx`!jw} zv-%)}od8c-Cyr{Dh9xn_W}sgQ!#yQ2eSIGS2}g)4RN?^kKx#MGyJF;yLBzrjL?wXH zYZTWAnBjY>;|?-z6PlA(r~k)YYSPZPlFCR0sKi+<1r~408Qx#s9w^j&eg2ok|s7Qin_XbyZB!>x}2v+{QCm) z7aq{{Zj_bzB(#z{3uw4!fTq)v&dXtY(78)L-7x;xIx62|3>LiDwHz@${~33P5DbU&|Vj%CjH-T&Nw-S_SBIFG|n zeZQaY`+Y61>-BnFV*8bBE|r`^yAK`I=q=_%MhFYZI&aUoyDwje(i>?b^}Zl`+b29* z5n0MNJ1&^m*?5bTf)No#UHb9IDU{g`@s76Nez-1a=+{ zi&Q>^^f7}!xLW9?M3Y=ZUf>W_oZ`6fgZJN0J=pE1a=Wq&GZ4@q=lA~AL9kP#g)f6% z>4Vp6C?y9MI<&M+IZoc&QYevmPoH0?q1bXB(=}(r<6-i3S7>BN}aZf z`Aab|NBmka*)pZRzeKCAVY|J@@QG~%niSAB`BEu8#F7{ex+U~gY0q70tue6~NQ^^{ z2@N?Bw7hc^b&AkEmuDi8X)sGY&v6~mA`}m1yr~BtBgRR*p|V>2IWC@m{&$p~RdZe$ z=BM6xjWMaDRC;zxH_d3#hvtYGq?U_~Pzs0h zbG;3vmDj)8aBTJO6M5yjMh^URPT({Zx0l7x#*#Pcf>ZYQq7H@6U9@OXWGUFSXume! z#SZ<-h`M{5J|LfstdzO1AY+=1;@8PM%4h=Uwa??+RH206a|Ea-kYZfw@W76ZkV7HCHVKBA)2F^#hIT;XGVMuat7)# zX3}CAJ(fw5kpr=JNb&piA;53>p}HfDhEQ4o`_KD7y&XGLAd#hzU6kVzQLp7@BzEam zI&KIjh6WlZpGlEkP@N$D{>!4v*qc|9YzkFG2OZEEvq%p7z35})Kh9x6&5xhFphqN$ z_$F8qi-Y8I4v=ALQ6q$3oRv-)q%o;niPC?j;{EyBo z_R&NDLBj){Q`n0%bF(cEc?R)&cx717C%?e|Mqoa*8I0zZM3Imp%gMzZ4Qn@T+Oz_vpEboLpdsQ5d&naS zTSw_aC?5_3H`0A>g9#LXjTK}VaWs-an@RkFSg2eB(Pu>6za0?b_$+fDVKS}s{6d(R zakR<76Al5z|Acl7VQ*+OVvra-Q>F@Jz)z-i`;0>VFgA-LI($PFCt4zS6*7Jk{V;Y? zZ6;Gz>9_rMSDC;mdj=H=mg?Rt7lAxzACuNST(Y?q@A<0%0HMJR9mkx)2M!|j9Iy=D z)0g5jCBjTtEX1`)E=|o}+7V#;XsX-M8NNiXWx?-PS5+KQMaBFL`8_eFjDMx6_N&t* z6t9nn3IZralbx~4?o0D0@v8d}%L{bSNw7NjJ{sA6z0oMnhD+tfJW%92)U*lIOd_M; z{MJB-_s)6(da7VJ?{c8CKAp9A(Fxck5t?(-zI}U?kp5z;#rds)?<6u$AdVpA+6o`> zZ*x6~GxQfbKm4m@Q&Rdu(ev-~mp10YZ}&d~@tQ)}=9Ea>*0pM2dON%rf`Ql%DMvTN zd$;7y+s|e5Q58oYsM6<;+rh-{R6LYVdwB$<#Cc~+r0*;9AT+#K@PIKU9+ziRy_yo1 zxAev~$==MHnR}!gNbjn|2r3_&w9lt5PtuI}qrQFw2CXa5?-lO5Pi24RDTmva(>t!b zv%@41dQH#IhcB5F-pJg4Ty8iI_4n1Wc*9k|#T+Jh@E_H`4(lL>DOXV)4adqF!o%44 z<(r9$x#8Ro>uDnh?u*QmF?rdXf_!=j1McO~!U4!ySSNbv5>eVVHHulFcn@iA&o+Y* zy73`-O!v5EjN;}N`Cj+0j?r#$38Rr{bEZOqasT=i=4ZaR5B|#Aa4xaI;`dyS@gB!d zKR-h{+eW%dZ%Lf6=#)|gMfdTT%_zotgGkE!O4+0Qb6*~I&|O-UUOax?lXYGG_tW{! z_m6I`uK&&CA~0ec$*gn4VveG1rUI&Q?D7{?he~a#s~Y1uw*(V?{|={zHD1L8YWLmp zMKRu<^Wb`VKE8JmJi(X(@lfsU?f|hD8PST~4obLU-!VAJmtZqVG_0WuDA?EOb0hfZ zxn8cWn3mUjgX3v5;8@kEcqN#iOwJVxJPkoiT%x-pC8HRhPGy&d8+B;(4kM7#n8Sw; z8>E3E={B1ae{4PM#itBU_886UV$ayZ4fVk2!yvoj-sL!}HakKp+Q2$LU1rQkDmFi2 z4w;KDPuy@Cl}m8awP1aqnN2VKhRop#Z95Y{wUf6A3jKXB@mG+sMA@91`96#+ap2Q+ zi4=vMq6b5`@ehCNA`lHr3~oDjPR7b(4%sirS?VYNd_VgxFQ4?AjruA3J7S_*DcCF% z+C#Po9*l&dn(<|qe#qaVxEVptq_AAqZ>%MqRf^@KSTsG+wlmy&^WLU*GT2~NF)z{D z@X*<69lO92wBg8FJ>fy+O(6!*_W>r=}U;JhaL_E9_JtbE0pPjIEy>sDf zQ6W7aP}{r;8hy})$54{R7i6|Cg?@-LKfz_6dI`0y76Q!mxVp9f=p(17EBLkS=TxLs zo^38&&36}1ac#A}=L-P*k6;XwdigZWw`d00#*{X$Q8RffOv|+q^Y`6}7ASx>ZR zlw{Z)u8VA@jycZi3{h5rT8Ye1WT-A9e41~8JFz7u(Qd-N@l-<=$#xe3R9&0umjjVT zk#|I+R(U|8-ZOA@*B8z16de5ym88sLvx30hkgM-ltfg0}>sxhDJ%q*YMQR|<%W;RuY1UaLT zz9QUq#Zyk)$}$E`;&KpB6wF+N&k zod~CjlfQ#u?Txa;6U>ih(9yPWO`7?RvZg|8F@cxoLt#L2Zd(jjDxu(;&f^bIjjZGt zcY3lKE=CQE(OuNOmGvBN5L$CgCIu#8YEA9ek)h*RX9NBqIE0{UP&!;vBPgzTNG965 z>%i3cfUZbBrm137P|M5Aa}C$vQEYftqs9Sr>Eu|hLIDn7;nqeQeRSP6zVh7Tmsd_n z{eNk65)Yl8Pa@O!idnBUMAx-xk8R^Kt)p#w_*}%Q^2Av^zIWs?AcK zy&rfnt*p>j#_N^OrL8()>xDQhP^8z6LdAzJke@8Z%f2FOGR6C{JbT;Ty?ZU!4+XZ- zT$p`y@#zt!dYlQhtp;6=VfbW zKYRML2NR>=Gebu&HmiWX>2$bz%+l-RWy=>~2-3?EvS0%>x0EwKJIfu}M(n$GqzK$} zDM30gi893ob%yR`aiJ75Y>O*1rcE0*Wm}KM*a=wpY2tnQkb!6~zCN%*$Fa#&sjIVILSNh4dVb?-picjBBGER}a|mRnqIgI>)*%gD$`%*l4!{zJ~& z6!s6scYmhFv>rmK$yk}NAk$-r!U0%m`F%J-m*XDNf9H)F0?tz(nH%D`L=SeGRU^;r z>)aO$NHTWW<~PPQ3wl2SpWd(yb>rM8Zle0Fpmqz4e=eLsw!ti28;dc}^=UI^j4U>T zEgtva!?mSOn~%}Q@U-kfmk{ACgh~ta1#S+ zqMG@YyJeXtZn!ynPTbU+%MIPh4wZ0tjI#|GZhanZQjueVr# zgtjT}g&n}bLMe>z5)y|LKg74-NtP7!xy=IWb6-x_3e_CoV^n1w+l6p$Dmpm9{vq>J zKr4at1)@TqSj3MN&y=EcL1yH0RjxU$B0wsE$U3JF>lYpruH^8|Be@!+33ZRL49!Wf z(RxV}kg(=5b~dVTxsI{CL3TJJf3|k11jeWi0Iy>2ahcw8(%N>#L6QLnL9CCoKEXs#Xn;DOksW)&JoxUdy~effq$RAIY?_ zTBhGj%dZ<(Q>%-@GXT#T^T*J#Wii5<;+_bVEu|#?y<92pE@iKIt>iEVCAf;!_kMGGfc0av;KMX0s$c#>MW2gqsJKM?Q5wG1e z#%dOEw!2bnE`1Q=CL0;(!mP($31luSrBWxu_CG~nMp6TXU|1y`%wgDs7ovit$ODDi zHK-bv97OBU#&xmQJzBiF+=N3eaapP64`@R3tjHnpP~8E$yt@Y^<4WKG^iSPAj{=FPTH zfz#6OdrJj`k=$5N$31}pptvS_n;Z$B+XoxGx!z5`pms6Tjrpjv!$8t9HO8(%Yw7c4 zGsunDnjo9-;g!Pkk$gE*!AMc8It)eNl~)t2%dykPn;`rzZ#8Mf868~ni>2Czoa&Gx zMlT6*+g~uu$q}4xU>&dWA1uk6S=Kg5(Y(5Y{olnciB{|HBnjz*H`n;zn|iu z(C|+dQ!NBG-5a1GRISK}qN1WC6g|0a=&MCVzWFY$Ehc4URjq~&TL1a(%abjSEzmfo zOO_6J4)g##fY1)(FfN{Tj#y;?V+<*Fn*<3=c8S0QNF6oEXRH^)6$x5{`rx~(Fsg2? z0aJ{$q)x7^sHkw|;mIISueEukQ5@`*_8)(oXqhF4?xTU$h2i%v8`hYC@JCiwKNB0W zwB%ydPp%nG*g0PuIp7x`I{V=2vD40dl7eqnS@V_>oA1pE9epus!GWv+J(_5?44Q;} zK&xctm&xuNgEZ7OD@dd>pEPif#*V+DB3Y*LNL>GymwsdDsn>@Qt3w8%d>Pced-v+( zX9Or=q6~_-vFQVyp(s+|WSJ8G)oxJ2>4HHxfXc760I1SmHO?L*m~>B2*9 z)5d`#+?eZ4i63bR{8l=*M696Fp*PV{EF6Rjfdp_(wfu7{p~fVKuAAsD7kjgsMiVOp z4AS6{)Iecc8=cimXWoVq7T|eB7)`SDhVv9zN<=Cxo6kpTD4tI(guo$+G9&^(LE(c~ zpk_#mn{HWh1JvmLqpRc_f_F$g*X8^gJ5sntEj;C`H5*h{Qsl33tc#$Dx6Tn#HVEjA zTpnd;xZSTRCW>|@ihsX+U|-FAbC8h#{s$ifIrAc1ELtEZiupr;BltE+STh?9h9O+K zf`G(yvk50E%?#5QC20Uy!iCOr9&2`uiB!?jhVSSEEGC$(r}1)#^2WHOO=B`sF&5?} zII{f~BIazd#1copke%KVO$l-eP>Ff6|G{(hWof+Dmbqs;UjtJ=BCyTx!9p0JjL@tV z%rh?JTtkc~{G3g?^nq<;1%Q+nPy)6tT7k!Co|=Ta3G37L8 zd=_K-evIv(YzcXgU#Pt?2racnb7H8wcIFRX=#%EOM3&oTe$f~^K;1OO!78wX@!fX- zdI_;#>dQ2iL-l94!!s}U{<2DZ+-7di@62t(PY!+!G0Gvz(XHsD`mE3OaO*fvVM{3Da zv_s%MM!_R({Djud`5KedaTb36!;3b3&ObNeehn+m{l zZD+96OD{7c0}HTI2DyZoQPh6QHHS!3k)?c;Hj!2x zdJ`~rrld3#?iW7#ZjZEIRxQ~Io8_uy7RD}tO;D3gl;+Z+TgEM(K{q3%McDo4|0S3z zDW$&mCS*TAe16o)cNQtf=yG$_rk4aC-AmUMv|$2-uu9*%I$MAE;oKuxKBMV4Avwv) zqKnQ|*+_BlVR#%kciPE(_K$iJV#U{{()YS>IcGRwf)zsB_*57MefdB5-qV}F+1SvdHI*uZf5ph|rX5-o%52;k!8^-D3~3j