<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/61385>61385</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[MLIR] Converting tosa to linalg triggers Assertion Failure `Index < Length && "Invalid index!"'
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
BealZephyr
</td>
</tr>
</table>
<pre>
Test on [LLVM 16](https://github.com/llvm/llvm-project/tree/release/16.x)
steps to reproduce:
```
mlir-opt -pass-pipeline=builtin.module(func.func(tosa-to-linalg-named,tosa-to-linalg)) test.mlir
```
test case:
```
module {
func.func @main(%arg0: tensor<78x98x1x5xf32>, %arg1: tensor<3x3x5x1xf32>, %arg2: tensor<5xf32>, %arg3: tensor<78x66xi64>, %arg4: tensor<30x79xi1>, %arg5: tensor<1x96x0x1xf32>, %arg6: tensor<1x1x0x5xi1>) {
%0 = "tosa.depthwise_conv2d"(%arg0, %arg1, %arg2) {dilation = array<i64: 2, 2>, pad = array<i64: 1, 1, 2, 1>, stride = array<i64: 1, 1>} : (tensor<78x98x1x5xf32>, tensor<3x3x5x1xf32>, tensor<5xf32>) -> tensor<78x96x0x5xf32>
%3 = "tosa.equal"(%0, %arg5) : (tensor<78x96x0x5xf32>, tensor<1x96x0x1xf32>) -> tensor<78x96x0x5xi1>
%4 = "tosa.sub"(%3, %arg6) : (tensor<78x96x0x5xi1>, tensor<1x1x0x5xi1>) -> tensor<78x96x0x5xi1>
return
}
}
```
crash trace:
```
mlir-opt: /home/ty/llvm16/llvm/include/llvm/ADT/ArrayRef.h:255: const T &llvm::ArrayRef<long>::operator[](size_t) const [T = long]: Assertion `Index < Length && "Invalid index!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /home/ty/llvm16/llvm/mlir/build/bin/mlir-opt -pass-pipeline=builtin.module(func.func(tosa-to-linalg-named,tosa-to-linalg)) test.mlir
#0 0x0000000000481d7d llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/ty/llvm16/llvm/lib/Support/Unix/Signals.inc:567:11
#1 0x000000000048220b PrintStackTraceSignalHandler(void*) /home/ty/llvm16/llvm/lib/Support/Unix/Signals.inc:641:1
#2 0x00000000004805a6 llvm::sys::RunSignalHandlers() /home/ty/llvm16/llvm/lib/Support/Signals.cpp:104:5
#3 0x0000000000482935 SignalHandler(int) /home/ty/llvm16/llvm/lib/Support/Unix/Signals.inc:412:1
#4 0x00007f4b0a1a3980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
#5 0x00007f4b09093e87 raise /build/glibc-CVJwZb/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
#6 0x00007f4b090957f1 abort /build/glibc-CVJwZb/glibc-2.27/stdlib/abort.c:81:0
#7 0x00007f4b090853fa __assert_fail_base /build/glibc-CVJwZb/glibc-2.27/assert/assert.c:89:0
#8 0x00007f4b09085472 (/lib/x86_64-linux-gnu/libc.so.6+0x30472)
#9 0x00000000005be329 llvm::ArrayRef<long>::operator[](unsigned long) const /home/ty/llvm16/llvm/include/llvm/ADT/ArrayRef.h:0:7
#10 0x000000000316dae9 createReassociationMapsForCollapse(mlir::PatternRewriter&, llvm::ArrayRef<long>, llvm::ArrayRef<long>, llvm::SmallVector<llvm::SmallVector<mlir::AffineExpr, 2u>, 4u>&, bool) /home/ty/llvm16/mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp:915:18
#11 0x000000000316ef4c (anonymous namespace)::ReshapeConverterExpand::matchAndRewrite(mlir::tosa::ReshapeOp, mlir::tosa::ReshapeOpAdaptor, mlir::ConversionPatternRewriter&) const /home/ty/llvm16/mlir/lib/Conversion/TosaToLinalg/TosaToLinalg.cpp:1005:9
#12 0x00000000031aed89 mlir::OpConversionPattern<mlir::tosa::ReshapeOp>::matchAndRewrite(mlir::Operation*, llvm::ArrayRef<mlir::Value>, mlir::ConversionPatternRewriter&) const /home/ty/llvm16/mlir/include/mlir/Transforms/DialectConversion.h:427:12
#13 0x0000000003b050bb mlir::ConversionPattern::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const /home/ty/llvm16/mlir/lib/Transforms/Utils/DialectConversion.cpp:1705:10
#14 0x0000000004a54ee0 mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<mlir::LogicalResult (mlir::Pattern const&)>) /home/ty/llvm16/mlir/lib/Rewrite/PatternApplicator.cpp:200:25
#15 0x0000000003b10ec0 (anonymous namespace)::OperationLegalizer::legalizeWithPattern(mlir::Operation*, mlir::ConversionPatternRewriter&) /home/ty/llvm16/mlir/lib/Transforms/Utils/DialectConversion.cpp:1987:21
#16 0x0000000003b105db (anonymous namespace)::OperationLegalizer::legalize(mlir::Operation*, mlir::ConversionPatternRewriter&) /home/ty/llvm16/mlir/lib/Transforms/Utils/DialectConversion.cpp:1895:17
#17 0x0000000003b1349e (anonymous namespace)::OperationLegalizer::legalizePatternCreatedOperations(mlir::ConversionPatternRewriter&, mlir::detail::ConversionPatternRewriterImpl&, (anonymous namespace)::RewriterState&, (anonymous namespace)::RewriterState&) /home/ty/llvm16/mlir/lib/Transforms/Utils/DialectConversion.cpp:2111:16
#18 0x0000000003b12d3e (anonymous namespace)::OperationLegalizer::legalizePatternResult(mlir::Operation*, mlir::Pattern const&, mlir::ConversionPatternRewriter&, (anonymous namespace)::RewriterState&) /home/ty/llvm16/mlir/lib/Transforms/Utils/DialectConversion.cpp:2044:14
#19 0x0000000003b12ac7 (anonymous namespace)::OperationLegalizer::legalizeWithPattern(mlir::Operation*, mlir::ConversionPatternRewriter&)::$_20::operator()(mlir::Pattern const&) const /home/ty/llvm16/mlir/lib/Transforms/Utils/DialectConversion.cpp:1979:19
#20 0x0000000003b12a7d mlir::LogicalResult llvm::function_ref<mlir::LogicalResult (mlir::Pattern const&)>::callback_fn<(anonymous namespace)::OperationLegalizer::legalizeWithPattern(mlir::Operation*, mlir::ConversionPatternRewriter&)::$_20>(long, mlir::Pattern const&) /home/ty/llvm16/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:12
#21 0x0000000004a57d89 llvm::function_ref<mlir::LogicalResult (mlir::Pattern const&)>::operator()(mlir::Pattern const&) const /home/ty/llvm16/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:12
#22 0x0000000004a5500f mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<mlir::LogicalResult (mlir::Pattern const&)>) /home/ty/llvm16/mlir/lib/Rewrite/PatternApplicator.cpp:207:50
#23 0x0000000003b10ec0 (anonymous namespace)::OperationLegalizer::legalizeWithPattern(mlir::Operation*, mlir::ConversionPatternRewriter&) /home/ty/llvm16/mlir/lib/Transforms/Utils/DialectConversion.cpp:1987:21
#24 0x0000000003b105db (anonymous namespace)::OperationLegalizer::legalize(mlir::Operation*, mlir::ConversionPatternRewriter&) /home/ty/llvm16/mlir/lib/Transforms/Utils/DialectConversion.cpp:1895:17
#25 0x0000000003b0fb1f (anonymous namespace)::OperationConverter::convert(mlir::ConversionPatternRewriter&, mlir::Operation*) /home/ty/llvm16/mlir/lib/Transforms/Utils/DialectConversion.cpp:2406:26
#26 0x0000000003b073ab (anonymous namespace)::OperationConverter::convertOperations(llvm::ArrayRef<mlir::Operation*>, llvm::function_ref<void (mlir::Diagnostic&)>) /home/ty/llvm16/mlir/lib/Transforms/Utils/DialectConversion.cpp:2455:16
#27 0x0000000003b07687 mlir::applyFullConversion(llvm::ArrayRef<mlir::Operation*>, mlir::ConversionTarget&, mlir::FrozenRewritePatternSet const&) /home/ty/llvm16/mlir/lib/Transforms/Utils/DialectConversion.cpp:3377:22
#28 0x0000000003b076e6 mlir::applyFullConversion(mlir::Operation*, mlir::ConversionTarget&, mlir::FrozenRewritePatternSet const&) /home/ty/llvm16/mlir/lib/Transforms/Utils/DialectConversion.cpp:3382:10
#29 0x00000000031645a1 (anonymous namespace)::TosaToLinalg::runOnOperation() /home/ty/llvm16/mlir/lib/Conversion/TosaToLinalg/TosaToLinalgPass.cpp:65:16
#30 0x0000000003a697a7 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) /home/ty/llvm16/mlir/lib/Pass/Pass.cpp:471:21
#31 0x0000000003a69dbd mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) /home/ty/llvm16/mlir/lib/Pass/Pass.cpp:534:16
#32 0x0000000003a6f228 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14::operator()(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&) const /home/ty/llvm16/mlir/lib/Pass/Pass.cpp:754:36
#33 0x0000000003a6ee99 mlir::LogicalResult mlir::failableParallelForEach<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14&>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14&) /home/ty/llvm16/mlir/include/mlir/IR/Threading.h:46:18
#34 0x0000000003a6b063 mlir::LogicalResult mlir::failableParallelForEach<std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>&, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14&>(mlir::MLIRContext*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>&, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14&) /home/ty/llvm16/mlir/include/mlir/IR/Threading.h:92:10
#35 0x0000000003a6a907 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool) /home/ty/llvm16/mlir/lib/Pass/Pass.cpp:764:14
#36 0x0000000003a69a77 mlir::detail::OpToOpPassAdaptor::runOnOperation(bool) /home/ty/llvm16/mlir/lib/Pass/Pass.cpp:655:5
#37 0x0000000003a69798 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) /home/ty/llvm16/mlir/lib/Pass/Pass.cpp:468:5
#38 0x0000000003a69dbd mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) /home/ty/llvm16/mlir/lib/Pass/Pass.cpp:534:16
#39 0x0000000003a6b6fc mlir::PassManager::runPasses(mlir::Operation*, mlir::AnalysisManager) /home/ty/llvm16/mlir/lib/Pass/Pass.cpp:839:10
#40 0x0000000003a6b621 mlir::PassManager::run(mlir::Operation*) /home/ty/llvm16/mlir/lib/Pass/Pass.cpp:819:60
#41 0x0000000003a61f82 performActions(llvm::raw_ostream&, bool, bool, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, bool, bool) /home/ty/llvm16/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:91:17
#42 0x0000000003a61bdf processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, bool, bool, bool, bool, bool, bool, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, llvm::ThreadPool*) /home/ty/llvm16/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:139:12
#43 0x0000000003a61998 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool)::$_0::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const /home/ty/llvm16/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:181:12
#44 0x0000000003a6188d mlir::LogicalResult llvm::function_ref<mlir::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>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool)::$_0>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) /home/ty/llvm16/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:12
#45 0x0000000003b93ae9 llvm::function_ref<mlir::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 /home/ty/llvm16/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:12
#46 0x0000000003b930c5 mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) /home/ty/llvm16/mlir/lib/Support/ToolUtilities.cpp:28:12
#47 0x0000000003a608c3 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool) /home/ty/llvm16/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:186:10
#48 0x0000000003a60a5f mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::PassPipelineCLParser const&, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool, bool) /home/ty/llvm16/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:209:10
#49 0x0000000003a616a1 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) /home/ty/llvm16/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:306:14
#50 0x00000000004116d9 main /home/ty/llvm16/mlir/tools/mlir-opt/mlir-opt.cpp:271:7
#51 0x00007f4b09076c87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#52 0x00000000004113ba _start (/home/ty/llvm16/llvm/mlir/build/bin/mlir-opt+0x4113ba)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsXFlv4zgS_jXMCxFDJHU-5MHtxNgsEiRIMr3AvBiURNvcoSUNSXU78-sXpGTrcHwm6TF20mjEOiiy6qtiXaREleKzjLEr4H0D3vUFLfU8l1ffGBW_s2L-Ki_iPH29emFKwzyDwPt2d_f9HiIfeNcAh3OtCwXIEOAxwOMZ1_MyHiT5AuCxED9WP5eFzP_LEg3wWEvGAB5LJhhV5gj5gyXAEXCugTNUmhUK6hxKVsg8LRNm-ra3gO_U_-3pQnB5mRcaXhZUqcuCF0zwjAFyHZdcaJ4NFnlaCgZwOC2zZGD-ABzqXNFLnV8KnlExu8zogqUAj7qXDTk4gpopPTDjvEmAuQsTw8M2Cu34EATfqnMI14RA4DoLyjOAQ4A9KmcOIEOoWaZyCcgoCJdRuERLbzklGJAbgEewaoc67ciSLL0l2miFO602eyH90Xx_yX2308btjuQsg2jJUaeJ12mClpG_dN6gxu81Q0tn6a36imAbIGgecSAg1xBgbIQySFmh5z-5YpMkz37gFGDcQq0FTIt7HJlOUy6o5kZnyTWkUtJXQEaWzSHEpvmKzIKmb7WxXaKqoT2qWistecp2PEBuQHANzQWjb7tkukOQb0gvgpeA3HS1xLdY1i3aIJIOiOzPkoo1ck5bhAarN0jtdNymZ0PM28mqRFxRBbDndkhSZbwmiLSVZSdBaw3crk-HUAMhlEyXMoOrCyC4rifx-qA7mxNJ1RxqSfebpIr88TxfGPumX2sjiPzGKPIsEWXKmgvD6xfz1yjUE5sO5oAMsWcnWJJnSsMXCLBv25IhIMNVQ0BGIs9mhjN7PS-YpDqXlTEHOFT8LzbRBpeqH-B9e7FysI9512aEoVJMVjPFd26zlC0hICN4x7KZnptxAfaN3G6zH1TwFHLTBGBk5RfAKeWCpYMKg8e7m-HzDVRlvOAaUhiXM2PLc6mNVT_aW3ClSqYAHkOamYEtalDPGazkEdPkDyuTevhnTZM_YFouirWQnAFwokeZzyRdQCpn5YJlWh0gI2v58di4k9T8GnM9_vVuBwJMHOgsnfU_N0RpkMJGG9Srqg4eJc-0xeDFKioOm0aS_pzkSktGF1akI8gzqxh7YBA8Bnj8XBZGiACPf8v40lzgs4wKNeBZAsjQ8wNAhgg1JKMeyRg7MezRV_XxL5qlgkmAwx85TwEefhRRvmvcZYsm3KPJ8aj_FoxPZdYhTVkzdTRRK2qSwmgjcoyT8BpqSB-hiHiwD8kHyshFuAuHWxMQTN3YoYiSKHTgZCKZ0rlkE6mh5bvufRn6E981qlouL2dZWd0o9Fwymg5UPnAA_uYsEY5CZx3PmWG89jCRExEWBlBSrhhsTa-Z4HFyOfr-75-_x-tTPMABwGNl-QB4PBiYs1eVssIYhbJiU72qH5aarDSntuuB1Uojf6ehxO9R4gVTBGmcW04Po0SnFRr2KTtI2Bsk6A4SemRK4WRCrZGdGGM5ienhvFfPrQ-qIaPukGF_SDfAB8guMVLzrdSI4wa4I7Woo51ezAiO4AkOqMxsfpFWDqfxQ-_3jyZmDmpHjAnq2EiC_JSyCCaSUc2eGFUqT7gNB-9poca5HOVC0MJkIKG1tZX9pFozmT2xn5JrM_-sndzJ9VH3nxdUiO8s0TY22Xa9oWc4nfKM3SwLacPQsu7QrQ4scXGei10WovZilR6M8uwHk4rnxpW95Iq-5He16-mc1iYrQiYCQWEDMuqBzKZuYjSNZnn2ushLBY1rU4V1PlFtTZma04JVY2smb5YFzdLq3oLqZD7M0hrxjjCMc-z08FAYhnc2GKa0MCB22jVcvyXffRr5HgCR4xgEowZA3AWQsjSMWqQ-FBvEdhTiLUxWU28Xlg92Wlqyh1tVtmn-nYqS1cr2wTg2M7u-8CJppqa5XBiLfs2pYIluRrIz3cU2usANjB3fSWLHc-J4F6XHI7TbKBylNB0Of9NcvM1prTKBVRnkNMy6bWZd6rmMOZv0DYtC8MTa3g9mtq0uJp41D06kVRljfeBbJrTCp8Jqwwz2OjFh37s7aR6-y2c8oeKJqVLow_o90HyuoRxvYF5LDzuOzdwa4XldTUUOS5x9FnMtnjs2o4L_xWryRX36H67nK8U-TKz7pu4n6HEUmkmLUQOF34fCS-P3QnG-_IeRncetCCXo8U_ciL2X_5qdkY1z0nVr1cFlN_dtnFKmKRd7nrpdFKJ-cq_rr5541tRMm9Me-QzpYIRsbug30gl70sEp-SjpVKboOAvcslGHK_K5oOu4JtdFboNu1EeXJsHZmcGqEcDuBDu9dMYWAPb5ks8LCqIgsj9rQLGzAWiQwm1O8FO8pr2XUCFimvwxmZpA9bwFegNwWGWhu-fb3nLLluz0-eVuXMNLxc1SS6qq8NXrRq8Y9QK6wCQBnyejD1Xi0yDwwx4EuAeB5zjTr5j2TGNaE8h5TUKCyVdMu4LC_WfHtLiX3jjTGE0P5n9dEqp9SXV6YujaBepTwhrX8c1PEzTiXkrjBIQeLv632e_E8HvqNB2ej7ZI15zOslxpnhxvNo4Ezi5ltqJtHPSB88OgJUxaFOJ1XArRLridgMZbivRC5YxtRtZjmf_FVupVK9sz0wfFBadDQ0hgTUrLNYYb0DB_LzTHGYwzgyDE3YoXjnplZtejaN-06lRjqxXPMnvIWnDsXMM7qcz7SNVqec_vaXh3zZZQPwposCXTfihe8ofCdLaqX6_o73l6pTaEul3cw4yKV8XVPc3ojMlmsWAE14sye5YXO6BUw49bPLsB6rrD7qqvYTqN06OZflwtqnfV2jRd87LT-J-EQjdiVOo2U1razQImct4IKdsNqpGrGzXtj1SyTN9m03w1ew53SptAe8TtaRfuAT3FODwa6NbsGKrXLKkKO2G9pNQkT8jdm0h83IAPxeO9we34lHoTt8AzlJMWbqSHG2NRtDVtbq5PKRc0FkasVAgmxrm8ockckNFkMsvKSbJcVg0nkyyXCyomJkah_fW8z0BpWG1KqxfUfmwuIn7GoK0RqRB58is4NenszYZf_3BNx35VKWiGuL-7fRrlmWZLXcP9JfS_Q-hfqP__TbX9PnFjwfj2yURhdtsRz2ZVhc3v7lMgbs_Mx45P3mXm_zlS37Uk9MsM7Bfc5zfJol6WRrzeJKORc3yGs5uTkwM_v7cARfx-ZkKDdxH7fhp9WxRptgqQYCNjjI6P6c88Y7QLAS2ew6-E8dckjFHfI_rTpEffiuM1rFQppg4sLm3AdjLtIYm6hsbtl1JiH6M9tO-g-nTCkCHMbxHWL3egaYhhweQ0l4thslnE3dyDv1Kt1e_aDak5lSydFLq3UzQvZcLuZxKQmy1bBDa96XsXmLrTaLVs1SX90Mpgntti4GL1rgwe3wsuHwp9T3m23nfaXWVw-9UOFKdTWMg8YUp9K6dTu1V-F8xrWMuM_1myDVjv2SKXr6uuWu1TNqWl0JOUCabZ9mfW4XJfoPt-P0c2nSK_YIl-YjOutHzdWPysfPyjpeaIdZNDxIiqidyUtt1-9QVFHQ_X6uJs5Pn3yOdYLdoI_LbtX_k7gOuL77h9Mgdpmn0Jo61p_QQQheHHbo85CyC3bMP5mlGfM6PaG4jOQv6fvFHJ7a3uR4Sy0zYqnQVa2zdEnQV5v2Tjlev3ReokXmvyqEJwPczSx15wdd7m4Szkt7fFiSFz81qn8YW_aS645myVlOC-gPtVBCdMyFeM9XEe4UPDFr-X6fbLIQ71pmcuvK4gVuWM0d0jlYrJLTnqR0rkMySDnX4Nol8_QT5FWyVT14eSOa0qQb0s_FlLns2e2PRwUD6SOWK3sbWKo17v-wII-WkEF5Rn-0bVm-OtDldI2j0iTS7voe7LyoGfhAGcTASPk4nSVOrJauBDXo9OVLl6L7w6tDdtP_ZVaWLfRGjk6OE-qySmsBq4fmX65G9C2Depqx7Xr1KvPxFykV6RNCIRvWBXyA_CAHtBhC7mV4z6PkbETZAXRmkaExfHmBHCCCZB6qQX_Ao7mDgEEeS7BKEB9iMUIuwz7IcOQgi4DltQLgaGyEEuZxf2sxlXPiKhdyFozISyn3fCOGM_ob0JMAbe9YW8Ms9cxuVMAdcRXGnV9KK5Fva7UPd3t0_Au4b1hkWezaDOFYU6h9WXK6CWfDZjUrW-JTKmXJSSnfZNkYtSiqvTvxZiOf9fAAAA__9pwSJg">