<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/120189>120189</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Mlir][affine] --affine-loop-fusion="fusion-compute-tolerance=0" crashes in Utils.cpp:293: mlir::presburger::mergeLocalVars
</td>
</tr>
<tr>
<th>Labels</th>
<td>
mlir
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Emilyaxe
</td>
</tr>
</table>
<pre>
git version: b3d2548d5b04
system: `Ubuntu 18.04.6 LTS`
reproduce with: `/data/szy/MLIR/llvm-debug/llvm-project/build/bin/mlir-opt a.mlir --affine-loop-fusion="fusion-compute-tolerance=0"`
a.mlir:
```
#map = affine_map<()[s0, s1] -> (s0 * 23 + s1)>
module {
func.func @func1(%arg0: memref<1x23x26xi32, strided<[?, ?, ?], offset: ?>>) -> () {
%cst = arith.constant 63.9809875 : f32
%cst_0 = arith.constant 1.19825836E-6 : f32
%cst_1 = arith.constant 1.18534706E-4 : f32
%cst_2 = arith.constant 0.00226843474 : f32
%cst_3 = arith.constant 0.00489352504 : f32
%cst_4 = arith.constant -2.76076837E-16 : f32
%cst_5 = arith.constant 2.00018794E-13 : f32
%cst_6 = arith.constant -8.60467184E-11 : f32
%cst_7 = arith.constant 5.12229725E-8 : f32
%cst_8 = arith.constant 1.48572235E-5 : f32
%cst_9 = arith.constant 6.37261954E-4 : f32
%cst_10 = arith.constant 0.00489352457 : f32
%cst_11 = arith.constant 7.99881172 : f32
%cst_12 = arith.constant 0.000000e+00 : f32
%alloc = memref.alloc() {alignment = 64 : i64} : memref<23x26xf32>
affine.for %arg1 = 0 to 23 {
affine.for %arg2 = 0 to 26 {
%0 = math.fma %cst, %cst_4, %cst_5 : f32
%1 = math.fma %cst, %0, %cst_6 : f32
%2 = math.fma %cst, %1, %cst_7 : f32
%3 = math.fma %cst, %2, %cst_8 : f32
%4 = math.fma %cst, %3, %cst_9 : f32
%5 = math.fma %cst, %4, %cst_10 : f32
%6 = arith.mulf %5, %cst_11 : f32
%7 = math.fma %cst, %cst_0, %cst_1 : f32
%8 = math.fma %cst, %7, %cst_2 : f32
%9 = math.fma %cst, %8, %cst_3 : f32
%10 = arith.divf %6, %9 : f32
affine.store %10, %alloc[%arg1, %arg2] : memref<23x26xf32>
}
}
%alloc_13 = memref.alloc() {alignment = 64 : i64} : memref<1x26xf32>
affine.for %arg1 = 0 to 1 {
affine.for %arg2 = 0 to 23 {
affine.for %arg3 = 0 to 26 {
%0 = affine.apply #map()[%arg1, %arg2]
%1 = affine.load %alloc[%0, %arg3] : memref<23x26xf32>
%2 = affine.load %alloc_13[%arg1, %arg3] : memref<1x26xf32>
%3 = arith.addf %1, %2 : f32
affine.store %3, %alloc_13[%arg1, %arg3] : memref<1x26xf32>
}
}
}
return
}
}
```
stack trace:
```
mlir-opt: /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Analysis/Presburger/Utils.cpp:293: void mlir::presburger::mergeLocalVars(IntegerRelation &, IntegerRelation &, llvm::function_ref<bool (unsigned int, unsigned int)>): Assertion `relA.getSpace().isCompatible(relB.getSpace()) && "Spaces should be compatible."' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /data/szy/MLIR/llvm-debug/llvm-project/build/bin/mlir-opt a.mlir --affine-loop-fusion=fusion-compute-tolerance=0
#0 0x0000563e79ba6919 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /data/szy/MLIR/llvm-debug/llvm-project/llvm/lib/Support/Unix/Signals.inc:723:11
#1 0x0000563e79ba6dcb PrintStackTraceSignalHandler(void*) /data/szy/MLIR/llvm-debug/llvm-project/llvm/lib/Support/Unix/Signals.inc:798:1
#2 0x0000563e79ba4fff llvm::sys::RunSignalHandlers() /data/szy/MLIR/llvm-debug/llvm-project/llvm/lib/Support/Signals.cpp:105:5
#3 0x0000563e79ba749e SignalHandler(int) /data/szy/MLIR/llvm-debug/llvm-project/llvm/lib/Support/Unix/Signals.inc:413:1
#4 0x00007ff5ee152420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#5 0x00007ff5ed78f00b raise /build/glibc-LcI20x/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
#6 0x00007ff5ed76e859 abort /build/glibc-LcI20x/glibc-2.31/stdlib/abort.c:81:7
#7 0x00007ff5ed76e729 get_sysdep_segment_value /build/glibc-LcI20x/glibc-2.31/intl/loadmsgcat.c:509:8
#8 0x00007ff5ed76e729 _nl_load_domain /build/glibc-LcI20x/glibc-2.31/intl/loadmsgcat.c:970:34
#9 0x00007ff5ed77ffd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
#10 0x0000563e83959bdb mlir::presburger::mergeLocalVars(mlir::presburger::IntegerRelation&, mlir::presburger::IntegerRelation&, llvm::function_ref<bool (unsigned int, unsigned int)>) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Analysis/Presburger/Utils.cpp:298:25
#11 0x0000563e838bbf77 mlir::presburger::IntegerRelation::mergeLocalVars(mlir::presburger::IntegerRelation&) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Analysis/Presburger/IntegerRelation.cpp:1384:10
#12 0x0000563e7ea6fc50 mlir::affine::MemRefAccess::getAccessRelation(mlir::presburger::IntegerRelation&) const /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/Affine/Analysis/AffineAnalysis.cpp:497:3
#13 0x0000563e7ea6edca mlir::affine::checkMemrefAccessDependence(mlir::affine::MemRefAccess const&, mlir::affine::MemRefAccess const&, unsigned int, mlir::affine::FlatAffineValueConstraints*, llvm::SmallVector<mlir::affine::DependenceComponent, 2u>*, bool) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/Affine/Analysis/AffineAnalysis.cpp:637:24
#14 0x0000563e7ea6eaca mlir::affine::isLoopMemoryParallel(mlir::affine::AffineForOp) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/Affine/Analysis/AffineAnalysis.cpp:179:11
#15 0x0000563e7ea6e905 mlir::affine::isLoopParallel(mlir::affine::AffineForOp, llvm::SmallVectorImpl<mlir::affine::LoopReduction>*) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/Affine/Analysis/AffineAnalysis.cpp:120:3
#16 0x0000563e7ea8771a mlir::affine::isLoopParallelAndContainsReduction(mlir::affine::AffineForOp) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/Affine/Analysis/Utils.cpp:1964:7
#17 0x0000563e79e29b8c mlir::affine::fuseLoops(mlir::affine::AffineForOp, mlir::affine::AffineForOp, mlir::affine::ComputationSliceState const&, bool) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/Affine/Utils/LoopFusionUtils.cpp:461:51
#18 0x0000563e79dc901d (anonymous namespace)::GreedyFusion::performFusionsIntoDest(unsigned int, unsigned int) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp:988:24
#19 0x0000563e79dc8267 (anonymous namespace)::GreedyFusion::fuseProducerConsumerNodes(unsigned int) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp:1064:5
#20 0x0000563e79dc817e (anonymous namespace)::GreedyFusion::runGreedyFusion() /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp:754:5
#21 0x0000563e79dc8047 (anonymous namespace)::LoopFusion::runOnBlock(mlir::Block*) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp:0:12
#22 0x0000563e79dc7e41 (anonymous namespace)::LoopFusion::runOnOperation()::$_0::operator()(mlir::Operation*) const /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp:1399:7
#23 0x0000563e79dc7d3d void llvm::function_ref<void (mlir::Operation*)>::callback_fn<(anonymous namespace)::LoopFusion::runOnOperation()::$_0>(long, mlir::Operation*) /data/szy/MLIR/llvm-debug/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:5
#24 0x0000563e79daa5c1 llvm::function_ref<void (mlir::Operation*)>::operator()(mlir::Operation*) const /data/szy/MLIR/llvm-debug/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:5
#25 0x0000563e79daa592 void mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) /data/szy/MLIR/llvm-debug/llvm-project/mlir/include/mlir/IR/Visitors.h:187:1
#26 0x0000563e79daa54e void mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) /data/szy/MLIR/llvm-debug/llvm-project/mlir/include/mlir/IR/Visitors.h:179:27
#27 0x0000563e79dc7ce2 std::enable_if<llvm::is_one_of<mlir::Operation*, mlir::Operation*, mlir::Region*, mlir::Block*>::value, void>::type mlir::detail::walk<(mlir::WalkOrder)1, mlir::ForwardIterator, (anonymous namespace)::LoopFusion::runOnOperation()::$_0, mlir::Operation*, void>(mlir::Operation*, (anonymous namespace)::LoopFusion::runOnOperation()::$_0&&) /data/szy/MLIR/llvm-debug/llvm-project/mlir/include/mlir/IR/Visitors.h:312:3
#28 0x0000563e79dc7c8d std::enable_if<llvm::function_traits<std::decay<(anonymous namespace)::LoopFusion::runOnOperation()::$_0>::type>::num_args == 1, void>::type mlir::Operation::walk<(mlir::WalkOrder)1, mlir::ForwardIterator, (anonymous namespace)::LoopFusion::runOnOperation()::$_0, void>((anonymous namespace)::LoopFusion::runOnOperation()::$_0&&) /data/szy/MLIR/llvm-debug/llvm-project/mlir/include/mlir/IR/Operation.h:794:5
#29 0x0000563e79dc79fd (anonymous namespace)::LoopFusion::runOnOperation() /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp:1406:1
#30 0x0000563e7eaf9c04 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::$_1::operator()() const /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Pass/Pass.cpp:0:17
#31 0x0000563e7eaf9ba5 void llvm::function_ref<void ()>::callback_fn<mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::$_1>(long) /data/szy/MLIR/llvm-debug/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:5
#32 0x0000563e79bca9d9 llvm::function_ref<void ()>::operator()() const /data/szy/MLIR/llvm-debug/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:5
#33 0x0000563e7eafc96b void mlir::MLIRContext::executeAction<mlir::PassExecutionAction, mlir::Pass&>(llvm::function_ref<void ()>, llvm::ArrayRef<mlir::IRUnit>, mlir::Pass&) /data/szy/MLIR/llvm-debug/llvm-project/mlir/include/mlir/IR/MLIRContext.h:281:3
#34 0x0000563e7eaf57e7 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Pass/Pass.cpp:532:17
#35 0x0000563e7eaf5d07 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Pass/Pass.cpp:592:16
#36 0x0000563e7eaf7618 mlir::PassManager::runPasses(mlir::Operation*, mlir::AnalysisManager) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Pass/Pass.cpp:905:10
#37 0x0000563e7eaf754d mlir::PassManager::run(mlir::Operation*) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Pass/Pass.cpp:885:60
#38 0x0000563e7eae8d65 performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:474:17
#39 0x0000563e7eae8956 processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::MlirOptMainConfig const&, mlir::DialectRegistry&, llvm::ThreadPoolInterface*) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:542:12
#40 0x0000563e7eae871c mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_0::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:625:12
#41 0x0000563e7eae86b6 llvm::LogicalResult llvm::function_ref<llvm::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_0>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) /data/szy/MLIR/llvm-debug/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:12
#42 0x0000563e7ec68062 llvm::function_ref<llvm::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const /data/szy/MLIR/llvm-debug/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:12
#43 0x0000563e7ec67675 mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<llvm::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, llvm::StringRef, llvm::StringRef) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Support/ToolUtilities.cpp:27:12
#44 0x0000563e7eae5203 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:628:10
#45 0x0000563e7eae55a5 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:669:14
#46 0x0000563e7eae5778 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) /data/szy/MLIR/llvm-debug/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:685:10
#47 0x0000563e79b2ff63 main /data/szy/MLIR/llvm-debug/llvm-project/mlir/tools/mlir-opt/mlir-opt.cpp:325:33
#48 0x00007ff5ed770083 __libc_start_main /build/glibc-LcI20x/glibc-2.31/csu/../csu/libc-start.c:342:3
#49 0x0000563e79b2fb6e _start (/data/szy/MLIR/llvm-debug/llvm-project/build/bin/mlir-opt+0x2713b6e)
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsXNlu4ziXfhrmhrDARetFLpzFMwGqpoKkuufSoCTK4ZS2IanqZJ5-QFK2JUV2NtfSf_-NRlkLD3m-7yw8pKQwpcSm5vwcBBcguDpjnX5o5Pl1Jcon9sjP0iZ_Ot8IDb9zqURTA7qEKc1J4Md5kCIfoCVAS_WkNK_MPRCiP9Ku1h3EsYd8L4Sfvt6DELl2kreyybuMw7-EfujbA7LKmWaArNT_PQGy-vzp5g6QVVl-rxY5T7vN9qSVzf_wTAOySjtR5uZX1ICsqlLIRdNqyDxzCBcLVhSi5ouyadpF0Tm9rwAh7niRNVXbab7QTcklqzMO6BUChOz0BGjp-rIqoqW5Yf-3J4RWrIWAXkE3zrpiLaCXgMSAJCC4UAiQS6gwCK7gAtBrCEisEARkCQmFgFyYeyQB9BqgZdXkXckhiC4AWkJYdHXmmX8g8JH5xbbbgMkNMspUvJK8APQSPxL6SMJHQYkdTUuR89yoEVwAujLXBj_BlTlqikJxbTHRlRmeXgOS7HQ0x70egASZ0g6jFPrBy5paaVZrGFIviVESRwE0HRWUWL1hL7JGc0LYw0lMgpiG14twXg4fkIsD6kcovF74Q7leiMwJIQ8hQsLYp37kzw9GD8n5cUIDEqADcv6c3IJ4UYiiMKbR9QKHM2oGc2LEQwjhOEr86wWm8-OFs-PFXoj8MMKxkcTzktGcZOBhQkgSkeB6Ec_oGc_bwI-DiBAaXC8O2DyZdRSPRiTESeBPbDew-ayz7O3gB9GMlnjWVSIvSeIY44gcGOugr5j_OCAXCD2XZGXZZFbQBZ5nL-xjhZViU1e8dqESOpwi9EF0BUfh6oLV9G2j3nTvkodXNBK6AHe4ENSNzRN9RphtSgZNw1FTq7bjtWL6wSsq1lNgc0Hvx4PjqU37LvCRLtBAfBrOvTg5Io4H4tG8OD0iTgbi8by4f0ScDsSTefHgiPiQOowm7jmM16orC9vZUGAarf2A0Qv2GhJ-oIv4SBfRQHwaHr14ckQ8HohPE9XWW4aRnIvvFnnYy41Y7l1Z6UZyJ9m3cpEVXPSxsL0qN8TMoy8FE4QgurJWcD-D8F1jeooIxuMxj0Uvfn3w7uL8WSt6JMQHQd7LsbYtn6ArTXaFyCyV027wsJuyYfnEGGgvTl-0xC7y5_pbYzqn1PNe8bNOhxM2y_NimEbmPBo-8zM6dLP3agJHrjY53h9JrjtZw7079v-6_4e1pNIs-wa1ZKYGnWuwrW1t0fb2QtnWsGRVihSQ1bJm5ZMSCpDVreQq7eSGm7t_aFEqL2tbQJckoWao743IYV8AA7ps983tecXlhn9qMlb-yaQCJL6pNd9wecdLpkVTQ0Bs8B-4bJR0HZkK19xZO7rTpilNJdrVdlWSQ1HbJDQ-T1zdavRcKsWl6zpEkpdLb8P1fWvotEHgCXXZVC3TIi3NJcnLi0kTmweMXiEEhNgbCqqHpitzmHKY7cQ9s0IgESyYKHnuAbS8_XS9vL-GqksroSGDabeBkreN1CZqH7RulYFJVoCsNkI_dKmXNVVvpefGEkp13FgHstpAzcou51A_cJhJph5gyrJv1lXM2PfWc_Kuap3jIM_5461sNpJVkMlNZ9KaeqfnvGuJdXR9ZSOZIogeTcUVhJRHScrCBCcDh1BPyh3cSlFrC_KrdLbaN5Lsr3WjtOSs6j3K-cV7cG5NYSPkvmuN9UxM1OLRXBCbmpXKE3UG6DIiJjgw7qHgKZQ8S-FEb9fBf7I6L02sxSawAFn-DGWT2Cjb60omuvpFUczRftfVI5XVdqY8mbJbLV2-wSgAdBn0WtKJlpGfcDil8OfY2sd0QJ_fKxYVRcA5DohPEFyvJbfzy1pqt37uu36Mw3XoL0pRd4-LTd25G61-kJzlnmo8ZJYbj9j3CTIZyI0RDMfIo7hAKIWSCWXmr108bkqRZotP2Q1Bj7tT4lFsiLAIAFl5njl7UjlvTT7pHED1pL5bVerOnNquPYM1wAOo4ViNkMdBAlnaWIyvU0PnjgcrZUeIzQhRP0I0HSEiCdxwvXYarxXfmMy1_s7K7tXYRa0NclNwVGqTMTdugMw0EfcDx3MDr-tybaTWeVMxUX9svCRCgC6p3w-YjAeMiiIPX-EpmfGR0PoIpUUeOh8xGWeYPWOaBEmap2-Zpw83nUzVfV59a_vTzOw_qdIx-ZEEPbN4xGycpkUUvQH-Kej-cbgno21zL419m4J7CkZzBGdhkQVoQIGb8d3xZ17d8WKZZVz1E8eGa3e6h_Rm-HZb5sMkXAlWustLp_GIF3dte6Fnwk8iE7Y9D3TCA88zdoCH7IFn3z7b1YJDf8VbXue8thXLy9w5yM-C7VXNp6E0L74qmXaY_zTp9NJ0IJkwhaEpQ4Yhe1-xsvyTZ7qRgF7Od7fHZ-rqpuZubNLZyLUdmlA_hTO_w44hNXYkfm9If2pIdtCQQn1qmvYzrxr5dMskK0teHrSgG3vVyC_tLwKKo2RbiRqgwRRogoKjQN8G8YCT3FRtedBRzCh3PO8ylx6v31_0fpgrggbBHY6piqMIH_eJLVXLOr9sas1Erfa4fgsPGc5qOAn9vtQyaKNRQc1JksbZAbRFp7jBq17rEx9odGkXiDb135ci4_eaaT5Kbj8wiVi6AFkZsCu7YB0S6IfYVcSOwHhEYJ4lCOemjmF1Uz9VTadgzSqu3HZC4tD9h-Q8f1r1i2I7_XFZNLJyl9RNrZsrbqC-VA79CPhfJauV0WbMQQ8_ieNhBk0m8GMSRm-Hb1zr1j34lWYC6iou_6vJuXrGwC9AjJGNmL4OJGiKGEf87YhlV48uvnsR_TFsUTCEhqfQkP-iMfdd7oB9qS_KJvs2ShP9lR-V4o-jRDbJ9yDJBGTEffwukF9aLreF7K4lIP4aucPG3m_kdhdxwMZAdPlD69oXPJsmyX4uIHTKTE5zt9F7cNVm7x6DZl8isIUwK8uUZd_WRe1ehTgp39eAxGVTb8YzypTm9-8I9Xut-wvLq6-ArO6_flr1hLDy-lFLprwHO0cMosof08pYkOFTMPoz_Ot98MNkAD94Bj8h08cHOddMlO74L1Z-GxWNq0b-xWR-o3u41tiHsB7ZYXgVsyP_-W9Wfvsic7NC_kjW2rPXX7CCfwoldCMdYziO-h02Q1n4jDKf_5uyKWV2hUO2ySuaJq-ME6h07tTiNUtLvhYG1B6tUOum5uumGJE3Zec1d-74Zu7ybtbbxqzdsTRt7Db_9qp-avlx045sMOQYjwecGt4-uTxpqj1KyBbVMWc7tT7hh7fGXuFsFJP9EpFMa_4oi_OXfG0XWVoyoRWglzuBnGfs6YdMijvv2p3UXbVmcqMgoFeAXkH8kjPuB_ht_XHvdX8X39qNaZ0rSoZF-HRFFSXFiwvK1wD7BeWlj8L9rDZ-sMtZkWTIP5D1vrRfmy_tLVNqmbPWzmA9rJHjmQZvSNLbHZHPrGZ223u7izDzlGHrBPhArXW6qt2BsD_D5Uo_r42fIRvWUha8sig_XH7_DVjfV_S_qG6fPhHPWJInbyP9tF7z8VqcTh5cFFkSptPC0mhy2dSaP-p-PnvkWaf5st-ovRx7wrW9K5q6vz-yvXOVsLfmK6kbFaRLKdnTHR9XaDd3f9RCP6s9t6P9gIQ9IMWySuzz6r4eoJPHCEUQ8eg3zWw_IF0FlAwTVjAlI0dvJ-NWtLy0c8yokjRNdxjDk7MzdaabWmlpX5IyMbw81mBQIm11v2WS1_qmLprtxvVJdr9mDJBYA4S9ASYPMIooxPFE7y0TO7qZUlwdLduP0PkjMCX2tZ_tk2caTTEFfv4CpqMbIqdXOI6NwuFW4XisMI_zMID9Lr_LlOqFN9Z2ywP1wCTP162WowXFfdPJjH_emNX9gafEw1Q-teLnUsgvrf7MRH3Z1IXYDPr4OD9fm8Y-Qtm9nUpWgwG3T1Iif5g4killSRDCVjYZV-qiKwr7bterGOtq8b8df8aYe3i77WrQPucF60q9znnJNT8s038Q9Voah-364vmOb4TS8unZ2zBf7atft01T3tSay8JW9ydx1VeZIvDJYI_cR1NTRDibB_0bmmSe6ld6_mgBPVvD_TxIh4k91drjVb4RkmDoG3jqG2EaDlT91GxExso7rrpSHy6XDwn8LgS_uHD6p8TA8MnKb2GZn7wa3Pn9-OW3LIxRSP4F_PtfLb99YJW8MzWdmDoKo-HbUqothV7W-e2kNvkVzP0N3e5oi9GbZFqKemMW_4cuf7w62r_kb-bCP7QohRZ89wpwNHSLyTKfBwTRf0ZV9LMKjXiw5vODKd0BCw7S3a_fswfmVurTN1dfdKWXuPpZHLhM1L9e5YdTDqIoPgkHvwfYeLjI98ePcFNSFCGF208u3qmNfq7H9rBXgtrylvZ7ef7kE5AIoZjC9boUabZWmkm9fstHIJnqtl_buEN70_ZjPweh_uC5op9MCUhDDt2o_Uchp_lIz344QiJM05D3n47sPik9y89pntCEnfFzHFHfx1EQkLOHc0aCDEWYJEWahmHOkjTBRZTH3PcRwUVyJs4JIj4mOEIhTTDxSMZRkCeEMhrjPKTAR7xiovSMkl4jN2f2g8ZzTBCOk7OSpbxU9u_MEOLMR0BwdSbPLai02yjgo1IorfY9aKFL-7dpjHeB4AoEF_17pMHV-__OC3QfVHIFRQ1nvn6tDn63MP7C46yT5fn7P_Psifl-Tv4_AAD__9uqxvw">