<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/128798>128798</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[MLIR] Assertion `rankedTensorArg.hasOneUse()' failed.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
mlir
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
RiRi114
</td>
</tr>
</table>
<pre>
Test on commit: release 19.1.4
steps to reproduce:
`mlir-opt --pass-pipeline="builtin.module(func.func(mesh-spmdization,test-constant-fold))" test.mlir `
test caseļ¼
> module {
func.func @sharded_operations_example(%arg0: tensor<4x4xf32>) -> tensor<4x4xf32> {
%0 = mesh.shard %arg0 to <@mesh_2d, [[]]> : tensor<4x4xf32>
%1 = mesh.shard %0 to <@mesh_2d, [[0]]> annotate_for_users: tensor<4x4xf32>
%2 = tosa.add %1, %arg0 : (tensor<4x4xf32>, tensor<4x4xf32>) -> tensor<4x4xf32>
%3 = mesh.shard %2 to <@mesh_2d, [[1]]> : tensor<4x4xf32>
return %3 : tensor<4x4xf32>
}
mesh.mesh @mesh_2d(shape = 4)
}
crash trace:
>
mlir-opt: /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Dialect/Mesh/Transforms/Spmdization.cpp:535: auto mlir::mesh::shardedBlockArgumentTypes(mlir::Block &, mlir::SymbolTableCollection &)::(anonymous class)::operator()(mlir::BlockArgument) const: Assertion `rankedTensorArg.hasOneUse()' 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/fuzzing/llvm-project-llvmorg-19.1.4/build/bin/mlir-opt --pass-pipeline=builtin.module(func.func(mesh-spmdization,test-constant-fold)) test.mlir
#0 0x00000000013906e7 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/fuzzing/llvm-project-llvmorg-19.1.4/llvm/lib/Support/Unix/Signals.inc:723:13
#1 0x000000000138c27a llvm::sys::RunSignalHandlers() /home/fuzzing/llvm-project-llvmorg-19.1.4/llvm/lib/Support/Signals.cpp:0:5
#2 0x0000000001391c24 SignalHandler(int) /home/fuzzing/llvm-project-llvmorg-19.1.4/llvm/lib/Support/Unix/Signals.inc:413:1
#3 0x00007fab7e466520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007fab7e4ba9fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#5 0x00007fab7e466476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#6 0x00007fab7e44c7f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#7 0x00007fab7e44c71b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
#8 0x00007fab7e45de96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#9 0x00000000049c57ce decltype(auto) llvm::dyn_cast<mlir::detail::TypedValue<mlir::RankedTensorType>, mlir::BlockArgument>(mlir::BlockArgument&) /home/fuzzing/llvm-project-llvmorg-19.1.4/llvm/include/llvm/Support/Casting.h:656:3
#10 0x00000000049c57ce mlir::mesh::shardedBlockArgumentTypes(mlir::Block&, mlir::SymbolTableCollection&)::$_1::operator()(mlir::BlockArgument) const /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Dialect/Mesh/Transforms/Spmdization.cpp:530:32
#11 0x00000000049c57ce std::back_insert_iterator<llvm::SmallVector<mlir::Type, 6u> > std::transform<mlir::BlockArgument*, std::back_insert_iterator<llvm::SmallVector<mlir::Type, 6u> >, mlir::mesh::shardedBlockArgumentTypes(mlir::Block&, mlir::SymbolTableCollection&)::$_1>(mlir::BlockArgument*, mlir::BlockArgument*, std::back_insert_iterator<llvm::SmallVector<mlir::Type, 6u> >, mlir::mesh::shardedBlockArgumentTypes(mlir::Block&, mlir::SymbolTableCollection&)::$_1) /usr/lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/stl_algo.h:4296:14
#12 0x00000000049c57ce std::back_insert_iterator<llvm::SmallVector<mlir::Type, 6u> > llvm::transform<llvm::MutableArrayRef<mlir::BlockArgument>, std::back_insert_iterator<llvm::SmallVector<mlir::Type, 6u> >, mlir::mesh::shardedBlockArgumentTypes(mlir::Block&, mlir::SymbolTableCollection&)::$_1>(llvm::MutableArrayRef<mlir::BlockArgument>&&, std::back_insert_iterator<llvm::SmallVector<mlir::Type, 6u> >, mlir::mesh::shardedBlockArgumentTypes(mlir::Block&, mlir::SymbolTableCollection&)::$_1) /home/fuzzing/llvm-project-llvmorg-19.1.4/llvm/include/llvm/ADT/STLExtras.h:1929:10
#13 0x00000000049c57ce mlir::mesh::shardedBlockArgumentTypes(mlir::Block&, mlir::SymbolTableCollection&) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Dialect/Mesh/Transforms/Spmdization.cpp:527:3
#14 0x00000000049ca603 mlir::mesh::spmdizeBlock(mlir::Block&, mlir::IRMapping&, mlir::SymbolTableCollection&, mlir::OpBuilder&) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Dialect/Mesh/Transforms/Spmdization.cpp:0:7
#15 0x00000000049c9b33 mlir::mesh::spmdizeFuncOp(mlir::FunctionOpInterface, mlir::IRMapping&, mlir::SymbolTableCollection&) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Dialect/Mesh/Transforms/Spmdization.cpp:0:16
#16 0x00000000049c9b33 mlir::mesh::(anonymous namespace)::Spmdization::runOnOperation() /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Dialect/Mesh/Transforms/Spmdization.cpp:735:16
#17 0x0000000008792bb3 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::$_7::operator()() const /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Pass/Pass.cpp:0:17
#18 0x0000000008792bb3 void llvm::function_ref<void ()>::callback_fn<mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::$_7>(long) /home/fuzzing/llvm-project-llvmorg-19.1.4/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:12
#19 0x0000000008792bb3 llvm::function_ref<void ()>::operator()() const /home/fuzzing/llvm-project-llvmorg-19.1.4/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:12
#20 0x0000000008792bb3 void mlir::MLIRContext::executeAction<mlir::PassExecutionAction, mlir::Pass&>(llvm::function_ref<void ()>, llvm::ArrayRef<mlir::IRUnit>, mlir::Pass&) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/include/mlir/IR/MLIRContext.h:275:7
#21 0x0000000008792bb3 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Pass/Pass.cpp:521:21
#22 0x0000000008793940 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Pass/Pass.cpp:0:16
#23 0x00000000087a1e67 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_15::operator()(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&) const /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Pass/Pass.cpp:818:5
#24 0x00000000087963e3 llvm::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)::$_15&>(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)::$_15&) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/include/mlir/IR/Threading.h:0:18
#25 0x00000000087963e3 llvm::LogicalResult mlir::failableParallelForEach<std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo> >&, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_15&>(mlir::MLIRContext*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo> >&, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_15&) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/include/mlir/IR/Threading.h:92:10
#26 0x00000000087963e3 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Pass/Pass.cpp:823:14
#27 0x0000000008792997 mlir::detail::OpToOpPassAdaptor::runOnOperation(bool) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Pass/Pass.cpp:0:5
#28 0x0000000008792997 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::$_7::operator()() const /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Pass/Pass.cpp:525:20
#29 0x0000000008792997 void llvm::function_ref<void ()>::callback_fn<mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::$_7>(long) /home/fuzzing/llvm-project-llvmorg-19.1.4/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:12
#30 0x0000000008792997 llvm::function_ref<void ()>::operator()() const /home/fuzzing/llvm-project-llvmorg-19.1.4/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:12
#31 0x0000000008792997 void mlir::MLIRContext::executeAction<mlir::PassExecutionAction, mlir::Pass&>(llvm::function_ref<void ()>, llvm::ArrayRef<mlir::IRUnit>, mlir::Pass&) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/include/mlir/IR/MLIRContext.h:275:7
#32 0x0000000008792997 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Pass/Pass.cpp:521:21
#33 0x0000000008793940 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Pass/Pass.cpp:0:16
#34 0x0000000008798b92 mlir::PassManager::run(mlir::Operation*) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Pass/Pass.cpp:0:0
#35 0x000000000878224b performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:0:17
#36 0x0000000008781a78 processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer> >, mlir::MlirOptMainConfig const&, mlir::DialectRegistry&, llvm::ThreadPoolInterface*) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:473:12
#37 0x0000000008781a78 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer> >, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_3::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer> >, llvm::raw_ostream&) const /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:548:12
#38 0x0000000008781a78 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&)::$_3>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer> >, llvm::raw_ostream&) /home/fuzzing/llvm-project-llvmorg-19.1.4/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:12
#39 0x00000000089a9a3a 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 /home/fuzzing/llvm-project-llvmorg-19.1.4/llvm/include/llvm/ADT/STLFunctionalExtras.h:0:12
#40 0x00000000089a932d 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) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Support/ToolUtilities.cpp:0:12
#41 0x000000000877832a mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer> >, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:0:10
#42 0x0000000008778b58 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:0:14
#43 0x00000000087796f3 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:605:10
#44 0x0000000001305e9d main /home/fuzzing/llvm-project-llvmorg-19.1.4/mlir/tools/mlir-opt/mlir-opt.cpp:0:33
#45 0x00007fab7e44dd90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#46 0x00007fab7e44de40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#47 0x00000000013057f5 _start (/home/fuzzing/llvm-project-llvmorg-19.1.4/build/bin/mlir-opt+0x13057f5)
Aborted (core dumped)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsXFlP47ze_zTmxqJK7KwXXIRC9SINAgHz3FZO4rR-x7VzbGcOPJ_-yE5K0rRlWArMqgo6sfNffv7vbSBas4Wg9ASEpyA8OyKNWUp1csNumO8HR7ksH07uqDZQCljI1YoZgDOoKKdEU-inE38SAC_ThtYaGgkVrZUsm4ICnAEvA5G34kwdy9pACOHxcU20Pq5ZTTkTFOAzgFDeMG6YmKxk2XAKUFI1opjYHwAlK6qXx7pelexfYpgUAE0N1ea4kEIbIsxxJXkJUOpeCEJoVyeWJwSRZyXwMnsJFkRTcD4Dp1OQZu11-8LnsOULQXwKvAzCR-4QBJ5eElXSci5rqhx_Paf3ZFU7OQEKiVp4FhBDhZYK4GlwH9xXGAF8DlAKjy39HWuPzAAKPQjwGbR6Thw32JG1aAI8BYFn1-aoBGgK3SnZg7IvS2cP7462v4P2U4S9njIRQhpi6LySat5oqvQPeCHHy0hNJqR0nHxHuNPG3g1QshOo6UvxW_PEO_RDT-jnPw85RU2jxJrBvn0gPgNe5pjbH3DIMNFLUlMnXWBNc70beFmhiF5Co8ijj7RmaGl1rtJiNVvKFQVoVjX__svEAqAZ599Xx7WS_08Lc2z_I9XiuPNBNLN3200sB2h2xginhQFodkn1EqDZnSJCV1KtNECz296hJkVdA5yFOLRcSWMkdIRwBrBTrn3XOcIpl8W3TC2aFRXm7qGm2vro4363DAGKLOT95duHVS75Hck5nUpu5WJStNvSdgdACRFSPKxko2HBidaPS63rSeUcLt1mt5bG2ouLClaPTGuqWi6Rp4j4Rss7d4iZWkyWRF8J-lXTNckYVoRxWk6Al11_Oc9uz6Fu8hUzkMC8WdigJpWxdrU0ptZO3hlAswUzyyafFHLVHc7ojACaMa0bC9IMElFCJgrelBSaJYWtHeSk-OZswfK-NaT4BstmVbeW4U2g-3et5EKRFSSdqvp1BmIDbWl_M9GZi4vL20H5UBG5D8bWrQDCHvTuvfU_H6deRGPogGuN7EG3b64VE8ahcef8BCX9JkX-O5faKEpWnaGx9vBfDsj6yJzH3Da1PWWAZl8Fu7cX2EIQridMFABnMcIAZz7uNPE3NUkKFJNdmtw0oqXzf0SU3EZRZ3OHE3YtZevGNhmFnYhoBLZfoABuCANQ8iHYBb7DrpMLd3LFFcljGkRRiDzoYOmo3SfRPAqOORPN_fFCNO1CMdFyEgF06t0HKEReG1YtwWCTYE7SqoC1WSpKyvk3xvnLqKdRWhU99XAsbhBHcKGdgi8VO4ijnnC0STgo4gpDkttI8yKyKIkr3JONt8j6-YsJ-nlPMNkkGJY0jV5GEKc0HSieDg0zSIswLigsacHNQ2193SYha5S9O5UPYl4QG9qnffQvqSGMt-9tKir_IbyhG1tuBpHfbumqjX0ZxK7uTy_RmxylC_39hd5npkQbJhYTm2qjMAI4s1HGBhlvF1JvTM_Py86byTmY-69Mxh9fx9gQiFEHoL8LQG3KVmSbfOdM2FJhzkynGZ72dne7Ipz_Q4v2eq-rsyU0hVHTlpLnPU2zlm_jhhE4mb35HcTYPNiPNY8nfSd7yu1-RzjaUNHo3pIXRbE7Vvo-QLPJZPtHHzIKgE7dq92cM2OtXxs-J3whXeAIUGojhx90lo8-yvL7e4am31-9bIwFK1OKPNzQ6gm3aA_s97ID5xavBSPquP5ekBw0i2ZndzYP3H05vzeKaOcKfuoY-l7nCviTs-iH50AUD2qIYKQ9iTy8W3tHiHbq_VDhi5tLUtdOmWdDMdx1VZ_aftR2IZ8Bki0T4g6icARRmuMnIZo1oriqNzCylyz1q_pCGKoq17W-Fa5PAcWPOlSi56KyMbwRZEV17dTvvH7ApuvgG3ElrtYT1Vc3xG_SNHbzrkdd46GuSZyiPB_qOmw1ruo7eVVfE62zktQu0HZKbRjEtZthZWObf1R6tJIJwh8005dEkIX1iSnMpeT2dyPciL7s5hx9KI331OQHK75bHdyvoYGs3SbZBdp3ycpBTVB1fjFXLtu51U5QfN5uKQjnLrFVYm9_91OB7lK6tGC-SyZbhxLCBzktcOa6bmvSXci_CPSDGs3rVIqSgUrI22tM_Xldfrm4mUph6L1pL9B7WjSGZm3IHBqPtYRzt8qk6NY3zr41lWhcoD0NHZoOUN5ZxF3cfBXMbBVYa25vCXQ9vN2Fixsb7npMHKooDvvMhvxfJ64dPliFyLeA-B0WaIQFTgPvxVhcr6fkQ0zarY8qbhU6bwZnbEoXQhvlylPrwdlTGwZ5dy37NVFUmAtRye4DE0vhHfAfVhMIb6JPfBrFL0Z_UDZk-kEUF6uaA5S0oA2bjPCH46rDMbyqry8tmJ1_v1PmTfykm-1bNIORLUeYDhPAF7lgBeE3VDfcDFCuCOO2zrwminBO-Uyqc1IsAZ7O5wvRzIv7-3bjfC6kWhE-7DLfF7vNGdD37Rb2PZgOOBLOZfERmnZjk60UcXAPWCe33fmzBfzvsX_Osf_F_Xd0t8NXd3fuQ8z1h0MuoSZdCggPnQL-HGvYKtE-Jfb-xfuXcr4UDWbKKNrlfYdV8B1qyPY7LN1HRGhr6JWmbyrJ31N0b1D8bs2dXiP3HzCsC5Ftg9DaZLeGRha2v-O69x_X4a3ZlkX-lx7X4a3B0qMx_R3XvXpch8cjqp84sr33uA7jv-O6zxvX4fGAKclTNBJ6DcNOu9tE8Z2k7TIbHrVCCUJBDmuqKqlWbTDRP_gK8WNlrJdE0XJem9H3KmSjCnq5ULai7U5hZDfbBf5gjTN1VZtLwsRUiootBjTejM2dlFwPvtBto0zPb8cHd3hUvCY-iRNYK1lQrU-bqnLfDH4WXI1g_2noFlyXdCXVw5rUYH9JK9JwMy8pp4buv2dXx_4UiMN93UfBN3TBtFEP3XrPqC3rr6Xkg4_qD2GkzzqIIMbDPBrvOoqdOv-MR7Ib6mfafV-k4T1FzgfqtB_aA5XnzzKOMNgospJdxrFvxLO3KNp3w08D8A9biz_GC_pW5UNVecr4P6dj2uxVU5ISTH4HC__dQtzrztobHHXgjY8ao2ETqWvOTCbK61F58inA_Yp29-SO4dqtUUwsbIe87_KbK6T-mRebDr8axplhdKMBWZvFaMAQJxiRP6Qw-riGoGugAjQGOw_3V6Fdi1ssSdvMZi81ox8B9YEAdKPwYDRsiNOowgcB4GfQNPLC4WEHm8-FeiFNS7giTLxeGLMtxvrtAG3cfSU9GD1SGZRl-sInQFFapt0ToJbg-FHKkgYenM_tPXNtiDLzTr8XsaDBgEU8Ri2uQtgS7-ge5Glsx7oj3zLPcqkMdWPNQirqHg-nZbt2VJ7gMsUpOaInfhx4IY5xEh0tT6qkCJOgioq4LGkZhWGKChpESRFVOQ5y_4idIA-FHkKRh3CEoklA08qvSBjnOMnzqASBR1eE8YkVfCLV4sg9yn7ioyROkyNOcsq1-6shCLVWgEB4dqROnNZ5s9Ag8DjTRvcUDDPc_aWRyy8XNyA8e-1j-keN4ievfxS_U-H7CfpfAAAA___hdGXn">