<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/64978>64978</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[mlir] `ForOpIterArgsFolder::matchAndRewrite` crashed with assertion failure "cast<Ty>() argument of incompatible type!"
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Colloportus0
</td>
</tr>
</table>
<pre>
MLIR built at commit 5624e86a
Reproduced with:
`mlir-opt inline temp.mlir`
temp.mlir:
``` milr
module {
func.func private @__mlir_math_fpowi_f32_i32(%arg0: f32, %arg1: i32) -> f32 attributes {llvm.linkage = #llvm.linkage<linkonce_odr>} {
%cst = arith.constant 1.000000e+00 : f32
%c0_i32 = arith.constant 0 : i32
%c1_i32 = arith.constant 1 : i32
%c-2147483648_i32 = arith.constant -2147483648 : i32
%c2147483647_i32 = arith.constant 2147483647 : i32
%1 = arith.cmpi sle, %arg1, %c0_i32 : i32
%2 = arith.cmpi eq, %arg1, %c-2147483648_i32 : i32
%3 = arith.subi %c0_i32, %arg1 : i32
%4 = arith.select %1, %3, %arg1 : i32
%5 = arith.select %2, %c2147483647_i32, %4 : i32
cf.br ^bb3(%cst, %arg0, %5 : f32, f32, i32)
^bb3(%6: f32, %7: f32, %8: i32): // 2 preds: ^bb2, ^bb6
%11 = arith.mulf %6, %7 : f32
cf.br ^bb5(%11 : f32)
^bb5(%12: f32): // 2 preds: ^bb3, ^bb4
%13 = arith.shrui %8, %c1_i32 : i32
%15 = arith.mulf %7, %7 : f32
cf.br ^bb3(%12, %15, %13 : f32, f32, i32)
}
func.func private @__mlir_math_ipowi_i16(%arg0: i16, %arg1: i16) -> i16 attributes {llvm.linkage = #llvm.linkage<linkonce_odr>} {
%c0_i16 = arith.constant 0 : i16
%c1_i16 = arith.constant 1 : i16
%c-1_i16 = arith.constant -1 : i16
%0 = arith.cmpi eq, %arg1, %c0_i16 : i16
cf.cond_br %0, ^bb1(%c1_i16 : i16), ^bb2
^bb1(%1: i16): // 6 preds: ^bb0, ^bb5, ^bb6, ^bb7, ^bb7, ^bb10
return %1 : i16
^bb2: // pred: ^bb0
%7 = arith.andi %arg1, %c1_i16 : i16
%8 = arith.cmpi ne, %7, %c0_i16 : i16
cf.cond_br %8, ^bb1(%c-1_i16 : i16), ^bb1(%c1_i16 : i16)
^bb8(%9: i16, %10: i16, %11: i16): // 2 preds: ^bb2, ^bb11
%12 = arith.andi %11, %c1_i16 : i16
%14 = arith.muli %9, %10 : i16
cf.br ^bb10(%14 : i16)
^bb10(%15: i16): // 2 preds: ^bb8, ^bb9
%16 = arith.shrui %11, %c1_i16 : i16
%18 = arith.muli %10, %10 : i16
cf.br ^bb8(%15, %18, %16 : i16, i16, i16)
}
func.func private @__mlir_math_ipowi_i1(%arg0: i1, %arg1: i1) -> i1 attributes {llvm.linkage = #llvm.linkage<linkonce_odr>} {
%false = arith.constant false
%true = arith.constant true
%0 = arith.cmpi eq, %arg1, %false : i1
cf.cond_br %0, ^bb1(%true : i1), ^bb2
^bb1(%1: i1): // 6 preds: ^bb0, ^bb5, ^bb6, ^bb7, ^bb7, ^bb10
return %1 : i1
^bb2: // pred: ^bb0
%6 = arith.cmpi eq, %arg0, %true : i1
cf.cond_br %6, ^bb7, ^bb1(%false : i1)
^bb7: // pred: ^bb6
%7 = arith.cmpi ne, %arg1, %false : i1
cf.cond_br %7, ^bb1(%true : i1), ^bb1(%true : i1)
^bb8(%8: i1, %9: i1, %10: i1): // 2 preds: ^bb2, ^bb11
%12 = arith.muli %8, %9 : i1
cf.br ^bb10(%12 : i1)
^bb10(%13: i1): // 2 preds: ^bb8, ^bb9
%14 = arith.shrui %10, %true : i1
%16 = arith.muli %9, %9 : i1
cf.br ^bb8(%13, %16, %14 : i1, i1, i1)
}
func.func private @__mlir_math_fpowi_f16_i32(%arg0: f16, %arg1: i32) -> f16 attributes {llvm.linkage = #llvm.linkage<linkonce_odr>} {
%cst = arith.constant 1.000000e+00 : f16
%c0_i32 = arith.constant 0 : i32
%c1_i32 = arith.constant 1 : i32
%c-2147483648_i32 = arith.constant -2147483648 : i32
%c2147483647_i32 = arith.constant 2147483647 : i32
%1 = arith.cmpi sle, %arg1, %c0_i32 : i32
%2 = arith.cmpi eq, %arg1, %c-2147483648_i32 : i32
%3 = arith.subi %c0_i32, %arg1 : i32
%4 = arith.select %1, %3, %arg1 : i32
%5 = arith.select %2, %c2147483647_i32, %4 : i32
cf.br ^bb3(%cst, %arg0, %5 : f16, f16, i32)
^bb3(%6: f16, %7: f16, %8: i32): // 2 preds: ^bb2, ^bb6
%11 = arith.mulf %6, %7 : f16
cf.br ^bb5(%11 : f16)
^bb5(%12: f16): // 2 preds: ^bb3, ^bb4
%13 = arith.shrui %8, %c1_i32 : i32
%15 = arith.mulf %7, %7 : f16
cf.br ^bb3(%12, %15, %13 : f16, f16, i32)
^bb9(%18: f16): // 2 preds: ^bb7, ^bb8
%19 = arith.divf %cst, %18 : f16
cf.br ^bb11(%19 : f16)
^bb11(%20: f16): // 2 preds: ^bb9, ^bb10
return %20 : f16
}
func.func private @parallel_compute_fn(%arg0: index, %arg1: index, %arg2: index, %arg3: index, %arg4: index, %arg5: index, %arg6: index, %arg7: index, %arg8: index, %arg9: index, %arg10: i1, %arg11: memref<?xi16>, %arg12: i1, %arg13: i1, %arg14: index, %arg15: memref<?xi16>) {
%cst = arith.constant dense<25277> : vector<8xi16>
%c0 = arith.constant 0 : index
%c1 = arith.constant 1 : index
%0 = arith.muli %arg2, %arg3 : index
%1 = arith.muli %arg0, %arg1 : index
%2 = arith.addi %1, %arg1 : index
%3 = arith.minsi %2, %0 : index
%4 = arith.subi %3, %c1 : index
%5 = arith.remsi %1, %arg3 : index
%6 = arith.divsi %1, %arg3 : index
%7 = arith.remsi %6, %arg2 : index
%8 = arith.remsi %4, %arg3 : index
%9 = arith.divsi %4, %arg3 : index
%10 = arith.remsi %9, %arg2 : index
%11 = arith.addi %10, %c1 : index
%12 = arith.addi %8, %c1 : index
scf.for %arg16 = %7 to %11 step %c1 {
%13 = arith.cmpi eq, %arg16, %7 : index
%14 = arith.cmpi eq, %arg16, %10 : index
%15 = arith.select %13, %5, %c0 : index
%16 = arith.select %14, %12, %arg3 : index
scf.for %arg17 = %15 to %16 step %c1 {
%18 = func.call @__mlir_math_ipowi_i1(%arg12, %arg13) : (i1, i1) -> i1
%19 = vector.broadcast %arg14 : index to vector<8xindex>
%20 = vector.broadcast %arg10 : i1 to vector<8xi1>
vector.scatter %arg15[%c0] [%19], %20, %cst : memref<?xi16>, vector<8xindex>, vector<8xi1>, vector<8xi16>
}
}
return
}
func.func private @async_dispatch_fn(%arg0: !async.group, %arg1: index, %arg2: index, %arg3: index, %arg4: index, %arg5: index, %arg6: index, %arg7: index, %arg8: index, %arg9: index, %arg10: index, %arg11: index, %arg12: i1, %arg13: memref<?xi16>, %arg14: i1, %arg15: i1, %arg16: index, %arg17: memref<?xi16>) {
call @parallel_compute_fn(%arg1, %arg3, %arg4, %arg5, %arg6, %arg7, %arg8, %arg9, %arg10, %arg11, %arg12, %arg13, %arg14, %arg15, %arg16, %arg17) : (index, index, index, index, index, index, index, index, index, index, i1, memref<?xi16>, i1, i1, index, memref<?xi16>) -> ()
return
}
}
```
trace:
```console
Assertion failed: (isa<To>(Val) && "cast<Ty>() argument of incompatible type!"), function cast, file Casting.h, line 578.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: mlir-opt -inline temp.mlir
#0 0x0000000102653774 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/workspace/build/bin/mlir-opt+0x1002f7774)
#1 0x0000000102651910 llvm::sys::RunSignalHandlers() (/workspace/build/bin/mlir-opt+0x1002f5910)
#2 0x0000000102653e3c SignalHandler(int) (/workspace/build/bin/mlir-opt+0x1002f7e3c)
#3 0x00000001b0a454c4 (/usr/lib/system/libsystem_platform.dylib+0x1803414c4)
#4 0x00000001b0a2dee0 (/usr/lib/system/libsystem_pthread.dylib+0x180329ee0)
#5 0x00000001b0968340 (/usr/lib/system/libsystem_c.dylib+0x180264340)
#6 0x00000001b0967754 (/usr/lib/system/libsystem_c.dylib+0x180263754)
#7 0x0000000106ae9a90 (anonymous namespace)::ForOpIterArgsFolder::matchAndRewrite(mlir::scf::ForOp, mlir::PatternRewriter&) const (.cold.4) (/workspace/build/bin/mlir-opt+0x10478da90)
#8 0x0000000103bf1130 (anonymous namespace)::ForOpIterArgsFolder::matchAndRewrite(mlir::scf::ForOp, mlir::PatternRewriter&) const (/workspace/build/bin/mlir-opt+0x101895130)
#9 0x00000001065214e8 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&)>)::$_2::operator()() const (/workspace/build/bin/mlir-opt+0x1041c54e8)
#10 0x000000010651e7e4 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&)>) (/workspace/build/bin/mlir-opt+0x1041c27e4)
#11 0x0000000104ede7b4 (anonymous namespace)::GreedyPatternRewriteDriver::processWorklist() (/workspace/build/bin/mlir-opt+0x102b827b4)
#12 0x0000000104edbfe4 mlir::applyPatternsAndFoldGreedily(mlir::Region&, mlir::FrozenRewritePatternSet const&, mlir::GreedyRewriteConfig, bool*) (/workspace/build/bin/mlir-opt+0x102b7ffe4)
#13 0x0000000104e87c64 (anonymous namespace)::Canonicalizer::runOnOperation() (/workspace/build/bin/mlir-opt+0x102b2bc64)
#14 0x0000000104e70ecc mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/workspace/build/bin/mlir-opt+0x102b14ecc)
#15 0x0000000104e715bc mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/workspace/build/bin/mlir-opt+0x102b155bc)
#16 0x0000000104e96d18 (anonymous namespace)::InlinerPass::optimizeSCCAsync(llvm::MutableArrayRef<mlir::CallGraphNode*>, mlir::MLIRContext*)::$_0::operator()(mlir::CallGraphNode*) const (/workspace/build/bin/mlir-opt+0x102b3ad18)
#17 0x0000000104e9683c (anonymous namespace)::InlinerPass::inlineSCC((anonymous namespace)::Inliner&, (anonymous namespace)::CGUseList&, (anonymous namespace)::CallGraphSCC&, mlir::MLIRContext*) (/workspace/build/bin/mlir-opt+0x102b3a83c)
#18 0x0000000104e8ead4 (anonymous namespace)::InlinerPass::runOnOperation() (/workspace/build/bin/mlir-opt+0x102b32ad4)
#19 0x0000000104e70ecc mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/workspace/build/bin/mlir-opt+0x102b14ecc)
#20 0x0000000104e715bc mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/workspace/build/bin/mlir-opt+0x102b155bc)
#21 0x0000000104e73474 mlir::PassManager::run(mlir::Operation*) (/workspace/build/bin/mlir-opt+0x102b17474)
#22 0x0000000104e6b6d8 performActions(llvm::raw_ostream&, std::__1::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) (/workspace/build/bin/mlir-opt+0x102b0f6d8)
#23 0x0000000104e6ac00 mlir::LogicalResult llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_1>(long, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) (/workspace/build/bin/mlir-opt+0x102b0ec00)
#24 0x0000000104ef80c8 mlir::splitAndProcessBuffer(std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) (/workspace/build/bin/mlir-opt+0x102b9c0c8)
#25 0x0000000104e655b4 mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (/workspace/build/bin/mlir-opt+0x102b095b4)
#26 0x0000000104e65a24 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (/workspace/build/bin/mlir-opt+0x102b09a24)
#27 0x000000010235ed40 main (/workspace/build/bin/mlir-opt+0x100002d40)
#28 0x000000010df65088
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsXEtz2zgS_jX0BRUVAL4PPiiyPZuqZOOyZ3ePKpAEJWz4GgB04vn1WwBJCeBDkjXJztQ8asqiQKDR_XXj625SFSIE21WU3jr-e8e_uyGt3Nf8dlMXRd3UXLYC3iR19nr76eOHJ5C0rJCASJDWZckkAH6APRoFxIF3Dlw_0YbXWZvSDHxlcu-4awC6O04Ay4Lxd3UjAasKVlEgadms1KATwH6S_nscd9eHxd3_oGQF7yWWddYWFDjh-34AgLyt0pX6AxrOXoikwPHgdqtkbUsi99u8qb-ybe7iLXOxgyMH-4TvoNIzVwMb0I0gNaKnxOCd496ru4BIyVnSSirUpkXxUq4KVn0hOwoc9w442DXHHHejruoqpds6445774R3auGgLFB7pULqxYQzuV-ldSUkqSRAK6j_ow5-DyEY9LNWQmXD3OJuPhvPR0vz0Wi-mvwOIy_0IjfwoqVlxpT5DQ_3wyURxxmzEpC5pmwYEAU1fdRdHoCYCsBjAfSXmfVTW6eSXEOSaBN23NgQOLvSM1fSgqZSm9Yvc88t92eXD7uOMO5HvamkNF8lHDj-fZK4XdynQh73hv2lD4yj0H90x2AQZYoI7HMT2l-j4xlSVw5-cPADwKDhNBN6RInqZqurwPa96fyyLXKgN-x3mp4Iw0C_0w6hozG2-sMEbNzXTDWvontQ0bNVtIJiz1vWmd27Bi0GE_JnbAsXbJt6Dg0II3-4cM_7Lby7mCWZZkmGApsh9YDNkGqkZ0iGgh_DkFBpcoLnUDDhufn5aDRfn_3F2e_G0zvx8CJKGXQerU9zJT_bKodiHx7iCvVHElnLcHyYgK347acbLjDDNxiF73Eb3zhrw1U4c4XgUWVOZcurgY0t-DrFjJ3Vvsa2JmyhARupMjYGDM0Dps7TGPCKHvjmLWhHE7TfLcK96A_TC1E3KbaPBhodFbTgpWUeRMgmCzwDHboAOOTZLKMXxgc1Z_EamAbBPsS8JesPM3zbvgXzjujHtpLBHIdeZF40Yx6Cl9kXHZTvpw-sbbp7Y338JiYdE-mERw0a_c4s6mA_J4Wgcxynb1ioSt7OzlTjb-fBYWNt4aUs2KvQo3IRBf44BpzSn6XGpfQXnEJriFnT8AWw5rTuobCwHh3WcFHNYJGlba59o1Mn2i04df7uDMtG1rmJrW8IzkbBdQw7MMlACPGcpROaxAvaHya4F6m4yJLeLEueDJwxuY4zwEnDooPaAy0OFx44Yn_8exU59s04Cmaa8WmpaTbjP6rUvLwZHxedP6wZ7-f_3Y__lfvx7jT0H-f68cPRCe2vo378RzTkC9XWqCGfFpN2Q36ulvxd-vEF08625OdcF_cCItv0JduPiTWyTYgNEzL2kgMrpFB00go0lFPxkoeGGRhepmd8ppnEEx49lzkawklR0GKb1mXTSrrNq1FVXWX02zhr2GN4ZsydGfNmxvyZsWBmLJwZi2bG4jmdp-2BNqOkJae5424c9-Gb6kbce2MKnixyJyNzFnWt26zs-NLcmNFKqOyKfRyGKjcrkS80lTV33E00CLRz5Yk8qTW0M-WJLDmZDWcKHu33o7snK0eJzVgGJ8lgsqHVnGd9c35-mclUJasEM5PIEhTeTM5zD-y2sMikNk5LMdZwise0Y8nYy8Xrwrn9jGIOL6yL5tZ55_eL5_Q8uW54OjDZLT6vpZUED_6G55yA5sIkOrlKpPkqr_kQR0Ff1fohkHWviZC0GQSYp3WaDKe1lp24R3tPe45lAWg2Wqdp1Si1hpj1DwXjsohgXsTgYHTyZIMZIMMBSOQPSAYnkDQfNem0lJKiOPuUx1RLmdulVQdHRsc0PO6Z7taFdEeiq4TXJEuJkAcmP5qpDDC5Vptusu1AUvCkxOFR2VgcmsjqJYiUSEn5MY3477UbHf8OdNcodvy7HgN8OB46hSxmszlLRsNobiwYqWkUEqMvXflxacFBxGuVbjMmGiLT_aTccDDSM1Y7XrfNn6LuGA3OWbJUbJyuULzJIn8yMmcTCi-tUIZjeapKNLOXibkBtYGwAayBpwGjiZ4JmomVxQIGHCYQU07tLDdYY0Dl-19odRecZz3kGVYsOEOTmUY6Xjhvh-N2vDD_Dr_wGGbrD8lJSqe_AlFlYF30z6PXQlAuWV2BnLCif7SJIyaI425-rrV-0b9JofHEgYMD4GCs-E_df-3uq5uE79qSVhLUOWCVih8iWVJQIF8b6mDkYNw_ulRMoXfUUtQAKyjYECFZtVvt1Yj-gYsfRqtOyceP9-vneyDapGQSEJC0O8BpU3OpSHcvZaNap66X2jG5b5NVWpcOfiiKl-HjXcPr_9JUOviBCdFSofouUmVK2aLNKJB7ClJOxB4kJP2iseu3f5Yk_QKytmwOYMKVA-NHXu84KQ-m6_7t8DOdd5Pf6QwFlAsB_NY9FIMI4sB3w9ADWld37bhr8Sq6i0fOKql3_1m7EkfHSZx83dZCckpK7RcVZLLzUuTgh681_yIaveghaVmRqU9WOfhhUNDB7-E3BCHOwzD0jpHnYBeN9EMxgnP6PbXVM9tVpPgHqbKCctHHwttV8GNFA4YKeAwRdVNgbaZP9rUWUze1tnON7RJIPN9LvV5uK7gKIZY4-EG8CknL7mt3vW0KIvOal6vsVc9RW0TQ9ZCX2qB69hY4oxReuIXcc0qy0Q44ptTGzLd2iIPI9S7cIbVl48BzPVt2MJIdhv6FAE1ku6FvIxOavg4IjUms9SZVXb2WdStARUra-zbuQu-h5p-bD5LyNd-Jh7rIKO9ulKrcWFfZE_3KmVRnZvgtnLsWaW6s1nx8uPeoi7KqX8b1mYqBbpmVLqu0LrKVd0W4eWGUkdhGMzItdpMcIfcPZ_FbbERR7CPXtjG2vOpj5NFouvu6aQqWEl2PnjPmc0M5UZnDwevzpmwMxhpSzrZLvkldF8AS3QvorO-Q6NP4opCXmmW_Wchx8cd6x1JSPFHRFvIyuX1gONjb4u6y1gjVvC8lOja-yqMeSn2PHgsSlRWg7VFEQ-r97dHv6tEr3IRD6llusrK3RzMaJt45cvmJU5q92qDfcfYycEzD65QK8Z-afymYUvmaPI-TCIeJrSweKZvkVkyRpikGtcS6yhTvaV1Z8Woh-kR3OowCO4weeP0rHQzq5TxTaQBvzu5Q6Gdv6ipnOzVBBZcO0CssDvN85B7XtjgK0-Csezbqpgom9uvgEd5Wnyvj_FznEJykga2eZ6sXQpqmBkQZlYQVw-n9uf7cPBIh1hlpDgeet9Uo2IWYnO_lk7-uSPEqmPhEKrJTJ39wwAa0lf6xfXZlqYsT5NE0tcz1R-YiP3m7uY-soarWH3GbmnqwIvju9tt0KcSHSkiuGxGVACZ8ak7odu5u9Lo_Ek4r-aHK6-FwXBfwyPcTG-LAhjgOMhSdC_gPunfiOnT6zCZZyX6lz5vNWrxWqdULfWolSQq65py8Po1YeEOK4idOmv0_64wqozr-Pk749PHD06auJP3W23zMqnAhq56Qfm2-xYlLMmTn23AMXOSmbwau60KfNxut0CVr-1g9R0k__UvQj-zAomcZrAdKaxKcccE16EWuHXbRiGcpyc7y7AS978OyLiaZzbLxX4plMfybZX8wy-JR1Re6XuiNNBtsnY0fG6prVAq90ApyPKrtgiTIItBQnte8XOuaWZx5pCVk1t3ablHf0O4Jp9m2kdxxN8elz3XLU_ppxx33fqG4G5OMda9g_HMjPxFWdWWfWZm_HQqYB5lF5XhU9AUkhRAstQrX9BZTpNqK_dLSCVKfaFnz1_dtnndRP12Y0Zy0hdxmtKCSLi927ye90NiDuqvRd1JSFAlJv2zzyjLEQP7NsfD_s_Co7x0jBU2lajeE5K_TKDsVScfKonsVFxV1tfu9bTvhvSsin6YQWpE_6ifyCKbmYyDRFEyuq-yxazAHy_4g8fynOH8nZxzTXvd5hc_jFKY2242aqsD3E2_-jPz5z_wVZyj27YckOBjjSfAynn3Vku5JV5-s7QB4lpxVO9UlnbXxKt0JtnW3mhjs-jTzICgJq9782gZCnHk2uVg1fpYHPowiMPtiFNxkt24WuzG5obcoiHHsuxjhm_1t6CYZyVwXJgnM3cRLSJ7meZznMEcZduENu8UQuzDCPoy8wPNXGKc0ICiIYEQiHCHHg7QkrFjp38zXfHej3zDeBl4cRjcFSWgh9L8PgHFFvwJ908HY8e9u-K1-N5m0O-F4sGBCiqMUyWSh_2EB7Sb_DjgBvPgtQAC7t5n9vyUAiPWit-X0-ve4Ny0vbq9_66ph-V8AAAD__1itLxs">