<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/122501>122501</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[slp] vectorizer ICEs with "InstructionsState is invalid" with neoverse-v1 but not neoverse-n1
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ashermancinelli
</td>
</tr>
</table>
<pre>
```
> clang++ --version
clang version 20.0.0git (https://github.com/llvm/llvm-project 3def49cb64ec1298290724081bd37dbdeb2ea5f8)
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /install/llvm/bin
Build config: +assertions
```
Started sometime in the range `(211bcf67aadb1175af382f55403ae759177281c7, 3def49cb64ec1298290724081bd37dbdeb2ea5f8]`.
I see some potentially related changes like this:
```
commit 760f550de25792db83cd39c88ef57ab6d80a41a0
Author: Han-Kuan Chen <hankuan.chen@sifive.com>
Commit: GitHub <noreply@github.com>
[SLP] NFC. Replace MainOp and AltOp in TreeEntry with InstructionsState. (#120198)
Add TreeEntry::hasState.
Add assert for getTreeEntry.
Remove the OpValue parameter from the canReuseExtract function.
Remove the Opcode parameter from the ComputeMaxBitWidth lambda function.
```
Maybe @HanKuanChen could you help us narrow this down?
Only ICEs with neoverse-v1
```
# ok
> clang++ -O2 -mcpu=neoverse-n1 -S ./reduced.ll
# ICE
> clang++ -O2 -mcpu=neoverse-v1 -S ./first-reduced.ll
clang++: /install/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:821: llvm::Instruction* {anonymous}::InstructionsState::getMainOp() const: Assertion `valid() && "InstructionsState is invalid."' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: clang++ -O2 -mcpu=neoverse-v1 -S ./first-reduced.ll
1. Optimizer
2. Running pass "function<eager-inv>(float2int,lower-constant-intrinsics,loop(loop-rotate<header-duplication;no-prepare-for-lto>,loop-deletion),loop-distribute,inject-tli-mappings,loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>,infer-alignment,loop-load-elim,instcombine<max-iterations=1;no-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;no-hoist-loads-stores-with-cond-faulting;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,slp-vectorizer,vector-combine,instcombine<max-iterations=1;no-verify-fixpoint>,loop-unroll<O2>,transform-warning,sroa<preserve-cfg>,infer-alignment,instcombine<max-iterations=1;no-verify-fixpoint>,loop-mssa(licm<allowspeculation>),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;speculate-unpredictables>)" on module "./first-reduced.ll"
3. Running pass "slp-vectorizer" on function "foo"
#0 0x0000aaad9a2828e0 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/install/llvm/bin/clang-20+0x46028e0)
#1 0x0000aaad9a280638 llvm::sys::RunSignalHandlers() (/install/llvm/bin/clang-20+0x4600638)
#2 0x0000aaad9a2809f0 llvm::sys::CleanupOnSignal(unsigned long) (/install/llvm/bin/clang-20+0x46009f0)
#3 0x0000aaad9a1d64c4 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#4 0x0000ffff156908dc (linux-vdso.so.1+0x8dc)
#5 0x0000ffff1530f200 __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#6 0x0000ffff152ca67c gsignal ./signal/../sysdeps/posix/raise.c:27:6
#7 0x0000ffff152b7130 abort ./stdlib/abort.c:81:7
#8 0x0000ffff152c3fd0 __assert_fail_base ./assert/assert.c:89:7
#9 0x0000ffff152c4040 __assert_perror_fail ./assert/assert-perr.c:31:1
#10 0x0000aaad9be052c0 (anonymous namespace)::InstructionsState::getAltOp() const (.part.0) SLPVectorizer.cpp:0:0
#11 0x0000aaad9bebb060 llvm::slpvectorizer::BoUpSLP::transformNodes() (/install/llvm/bin/clang-20+0x623b060)
#12 0x0000aaad9bececf4 (anonymous namespace)::HorizontalReduction::tryToReduce(llvm::slpvectorizer::BoUpSLP&, llvm::DataLayout const&, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo const&, llvm::AssumptionCache*) SLPVectorizer.cpp:0:0
#13 0x0000aaad9bed0de8 llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Instruction*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&) (/install/llvm/bin/clang-20+0x6250de8)
#14 0x0000aaad9bed4f84 llvm::SLPVectorizerPass::vectorizeRootInstruction(llvm::PHINode*, llvm::Instruction*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (.constprop.0) SLPVectorizer.cpp:0:0
#15 0x0000aaad9bed8a50 llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (/install/llvm/bin/clang-20+0x6258a50)
#16 0x0000aaad9bede468 llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) (.part.0) SLPVectorizer.cpp:0:0
#17 0x0000aaad9bedee90 llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/install/llvm/bin/clang-20+0x625ee90)
#18 0x0000aaad9b94ca24 llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilder.cpp:0:0
#19 0x0000aaad99d26a28 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/install/llvm/bin/clang-20+0x40a6a28)
#20 0x0000aaad98dc5c44 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) NVPTXTargetMachine.cpp:0:0
#21 0x0000aaad99d254ac llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/install/llvm/bin/clang-20+0x40a54ac)
#22 0x0000aaad98dc5bf4 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) NVPTXTargetMachine.cpp:0:0
#23 0x0000aaad99d24ed4 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/install/llvm/bin/clang-20+0x40a4ed4)
#24 0x0000aaad9ac070ac (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&, clang::BackendConsumer*) BackendUtil.cpp:0:0
#25 0x0000aaad9ac09cbc clang::emitBackendOutput(clang::CompilerInstance&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) (/install/llvm/bin/clang-20+0x4f89cbc)
#26 0x0000aaad9ad4554c clang::CodeGenAction::ExecuteAction() (/install/llvm/bin/clang-20+0x50c554c)
#27 0x0000aaad9b0ca580 clang::FrontendAction::Execute() (/install/llvm/bin/clang-20+0x544a580)
#28 0x0000aaad9b05ed00 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/install/llvm/bin/clang-20+0x53ded00)
#29 0x0000aaad9b1b7c40 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/install/llvm/bin/clang-20+0x5537c40)
#30 0x0000aaad98d80868 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/install/llvm/bin/clang-20+0x3100868)
#31 0x0000aaad98d78f54 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#32 0x0000aaad9aeafef8 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#33 0x0000aaad9a1d69c8 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/install/llvm/bin/clang-20+0x45569c8)
#34 0x0000aaad9aeb04c8 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#35 0x0000aaad9ae76aa4 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/install/llvm/bin/clang-20+0x51f6aa4)
#36 0x0000aaad9ae776f4 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/install/llvm/bin/clang-20+0x51f76f4)
#37 0x0000aaad9ae7f098 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/install/llvm/bin/clang-20+0x51ff098)
#38 0x0000aaad98d7d664 clang_main(int, char**, llvm::ToolContext const&) (/install/llvm/bin/clang-20+0x30fd664)
#39 0x0000aaad98d8d09c main (/install/llvm/bin/clang-20+0x310d09c)
#40 0x0000ffff152b73fc __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#41 0x0000ffff152b74cc call_init ./csu/../csu/libc-start.c:128:20
#42 0x0000ffff152b74cc __libc_start_main ./csu/../csu/libc-start.c:379:5
#43 0x0000aaad98d78a44 _start (/install/llvm/bin/clang-20+0x30f8a44)
clang++: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 20.0.0git (https://github.com/llvm/llvm-project bbb53d1a8cd37cbb31ec5ec7938a0f24f628c821)
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /install/llvm/bin
Build config: +assertions
clang++: note: diagnostic msg: Error generating preprocessed source(s) - no preprocessable inputs.
```
<details><summary>IR</summary>
```
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32"
target triple = "aarch64-unknown-linux-gnu"
define void @foo(ptr %0, ptr %1, ptr %2, ptr %3, i64 %4, i64 %5) {
br label %7
7: ; preds = %8, %6
br label %8
8: ; preds = %25, %7
%9 = phi i32 [ %26, %25 ], [ 0, %7 ]
%10 = phi i64 [ %27, %25 ], [ %4, %7 ]
%11 = icmp sgt i64 %10, 0
br i1 %11, label %12, label %7
12: ; preds = %8
%13 = load i32, ptr %0, align 4
%14 = icmp eq i32 %13, 0
br i1 %14, label %15, label %25
15: ; preds = %12
%16 = zext i32 %9 to i64
%17 = add i64 %16, 1
%18 = getelementptr float, ptr %1, i64 %17
store float 0.000000e+00, ptr %18, align 4
store float 0.000000e+00, ptr %1, align 4
%19 = getelementptr float, ptr %1, i64 %5
%20 = getelementptr float, ptr %19, i64 %17
store float 0.000000e+00, ptr %20, align 4
%21 = getelementptr float, ptr %3, i64 %17
%22 = getelementptr float, ptr %2, i64 %17
%23 = load float, ptr %22, align 4
%24 = fadd float %23, 0.000000e+00
store float %24, ptr %21, align 4
br label %25
25: ; preds = %15, %12
%26 = add i32 %9, 1
%27 = add i64 %10, -1
br label %8
}
```
</details>
<details><summary>IR before slp vectorize</summary>
```shell
> opt -passes=slp-vectorizer -S vect-reduced.ll
opt: /install/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:821: llvm::Instruction* {anonymous}::InstructionsState::getMainOp() const: Assertion `valid() && "InstructionsState is invalid."' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: opt -passes=slp-vectorizer -S vect-reduced.ll
1. Running pass "function(slp-vectorizer)" on module "vect-reduced.ll"
2. Running pass "slp-vectorizer" on function "foo"
```
`vect-reduced.ll`:
```
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32"
target triple = "aarch64-unknown-linux-gnu"
define void @foo(ptr %0) {
vector.scevcheck:
%scevgep = getelementptr i8, ptr %0, i64 4
%scevgep3 = getelementptr i8, ptr null, i64 4
%bound011 = icmp ult ptr %scevgep, null
%found.conflict13 = and i1 %bound011, false
%bound014 = icmp ult ptr %scevgep, null
%found.conflict16 = and i1 %bound014, false
%conflict.rdx17 = or i1 %found.conflict13, %found.conflict16
%bound018 = icmp ult ptr %scevgep, null
%found.conflict20 = and i1 %bound018, false
%conflict.rdx21 = or i1 %conflict.rdx17, %found.conflict20
%bound022 = icmp ult ptr %0, null
%found.conflict24 = and i1 %bound022, false
%conflict.rdx25 = or i1 %conflict.rdx21, %found.conflict24
%bound026 = icmp ult ptr %0, null
%found.conflict28 = and i1 %bound026, false
%conflict.rdx29 = or i1 %conflict.rdx25, %found.conflict28
%bound030 = icmp ult ptr %0, null
%found.conflict32 = and i1 %bound030, false
%conflict.rdx33 = or i1 %conflict.rdx29, %found.conflict32
%bound034 = icmp ult ptr %0, null
%found.conflict36 = and i1 %bound034, false
%conflict.rdx37 = or i1 %conflict.rdx33, %found.conflict36
%bound038 = icmp ult ptr %scevgep3, null
%found.conflict40 = and i1 %bound038, false
%conflict.rdx41 = or i1 %conflict.rdx37, %found.conflict40
br i1 %conflict.rdx41, label %.lr.ph, label %vector.ph
vector.ph: ; preds = %vector.scevcheck
ret void
.lr.ph: ; preds = %vector.scevcheck
ret void
}
```
</details>
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsfFuTmzzS_6chNypcQoCNL3Lh8cxssv9kk5rJPvu_mxJC2HpHSKwk5rCf_q0WYANmJnaeZw9V-6YmGSPU3b8-qLsFcqi1Yqc4_xikV0F6_YE2bq_NR2r33FRUMaG4lOJDrovXj8ESdz94E8Q3iEmqdgG5CsgVCsMnbqzQCgV442-gfoDgBV7gnXAoINneudoG8SYgtwG53Qm3b_IF01VAbqV86n-FtdH_w5lDccHLZM3yZcJZRNYZWeMVSXAW5UW8KvKC54TTtMwCsg7w5gc1O-6CeIMoNWy_TMJGPSr9rEIpVPMS7lQDs_aG0wJVuuAS5tbaipcAbz4r66iUvLgWBsYDcivaoSO4XKgAb64aIQvEtCrFrp15Ra3lxgmtLBhnaCi8uXfUOF4gqyvuRMWRUMjtOTJU7TiCaSQjUZSzcrmitMijaJXSMs5ImaYJjilfpetotSJZxFYB2Z5vlPQ6WOJFC-Izspx7CKjWjisnqJSvyHBJARvbAxiLpHjkyO2F99FYE6arSji0WuIyTXHBSbpakyLPYlbEa5ZlvExXNF8WGaZJRIFi44MJLPSJqvD_NVSh7Z4rFMTbPVWPDVULtucqSLAVpXjiPhDimwBvtl4WUP5JuE9NDiRKG17L1yDBg7DxswO8QQihIL26__I9SK_RX263C3THa0kZR1-pUN9qRFWBNtJ9q8H8PwznN8qZV_Qs3B6B603DvP_uHXV8AbEakDgiOFp30eVFtL82RXFkAZaKN3vaUQ6mtEGBSm3QjrsDQT_ljlf6iftQ-Fb_RmXDUU0NrbjjBpVGV_4Wo-qON5bfvDhDmUNlozzQWS5MF7NMtrqqG8e_0pcr4f4mCrdHklZ5QUfsht7-Sl9zjoIEf6IKPOcdx3QjC_SqG7TnskaNRYoao599xKBCP6sgvm0d8k3JV_R5e2NbCyuuIR_w8CmaLhASI_04l1K-ERRWrG6C-PpAriIU3qNFQG4NLxrGi4WUrUDg83l7cy6jpwOjUhjrwhG7AfVbmUCKPCC3PwxVttSmsgG5_Y0zp434Bw_I7f2X74dLs2B1HcSbjETAzTPwMTMIu4BsULC6okqr10o3Nlhdn8xpA6wd3nHXxrWP0zUkI-vXy6ZPRJBYnqgURTcjIMuALFFAyAlLJCwSyk9eBIQEZIVKKiQvICi-f7nZ3N8g2-Sw-inKmx0yvNbGIafRZfkcDGltw8FafkEKxWRTtNHLDLV7lFP2CIHOIdPVhtdGM26tT5-NaYeBklqrmfC5yzQKWWZE7RZttmWPqGiquk1heIH8n-9G7wytEDW7puLKAerfGSZRx_pb7UQFjg7whnRjd41SQu1QTa0Fo_frLIi3nO64CYV6guxFslJq6ohQLiBbqZ-5Cb0zqXKhUM4IZQWz_p4Gb8Ov0Og2FLZ7TgtuwqKppWC0FXCldAiWo4aHpTahdNpL8hzCgkveRtz6MCSsMyJvHFhXKPBU6KQIK1rXQu164eHTIcAhGwM6biSnT14M40WolXxt5R-mTm61QIQquQmpFDsFruj5S02LkEtR-SnWMV3lQoG0ir6EwnFD2xIbX0e9GCPK17AUL7UGC3ruVlS1FOUrK3dBvM21amwI7EK3N9zutSw6BqU2z9QUoX0Wju3B7EUQX3VXvjqHToeCQSj1w06HUuvHpm4BPHIOuDUsgqu9FtaFUCe18hJtO6kdB-1saJ023IaQFL3AsKSNdELtQIRQj1NyW3PWQI0Oc6nZox_q9Gvpc0MV27eCjpMbVRteCOZoLrnt7CIHLjQB2bYXYW_m32V078BGGS1lEG-_kXbU9fkxfKYG1gPAMJoG8bY23HLzxEPvpvmo-L14KmspLBnBqiDeUin1c28iv1Ju2kVwEBlCwQyptU1Vt0I6RuCZDk9v_YBsC_EUGl6FNRUGpjoqJIMWsg3hs-NQ6fCiUARPn0bjKBQPUTcJp3NDEUT8rmh8NxTXASFIK-jBG8khPc5mWEICvInfSKjTaPYM-yzrM67WLQcUkBgj_IIxxpTSYk1JRjKOB5XYvtr2w3cjlPMl5EdbhLLjJEOfH7R1htPKF9Mt8kl73faK85sFcutLTEhwQK7wS7LEILlrKKHBnODCyzibw3XXqHuxU1R-oqqQHMItu1g0MD-KJlPR63LWJFvJqWrqbx2AgGSN8pvGAkkNK_pSFOtyYIB4hCIqlglL0BZagTvOoAi_jvQOSNYZfTRnq5XjL65rtLD_2_JPOv5lWZZRulzjrGDI5wTYET4VVi-sXkQeXFawI7B0RBjjkmCMHh5q57ePD49CygcIfQ6Jw-cT3yao2oEFhtMWLIg3SRLEm9WyY74cMSeMLlcM7azX1LOxna1vF_7q1Ra8hq6p3aySW0OF5Z4xWQXxpue7GvPNV1GMEc2hWfN8XNH2rX7Ik2fQk6468mwCKy4L0LndxzxAT_iQU8s9r3bw8KFlth4wW0-YJTgZMKu5Mdp4nnPsQrjvecYAMGob_Gi0jHOOU8IwePPQNyNFK25rv3TXP-ug_XZw2EADq0VNjVtAhKK5Jr6PLUATjdHkOV6OVpCsBwnKD13pv9awR_UXh-L4F13wyxf0ksQgsI1Yv1cdw2GclcnPjPMJ0GnlqLyDvNuWxRbc6w_tx8ZJ8B2l2px4nHpNHf1CX3Xjuu3JdEL7vOawh_qsSh2QzdycLyI31LzCjDd4bQ5Fe0vZnns-P_dgPDZZgQs-TL8j8u_UdhnxYIBP2hzNNrTS90-fwakn2ox3fON7V9QKdgVl9eTWBUa_r6iULejPVQ292PHe3zj1Ze1RqN1vn3wlXl4acymY6BhzycSASZklFxjwTms3ssm_zYbeCgsfW7XR9XkJIJ1on9EUX6D9dk-Fsp9VBzj7w_Q435uA-OjN5UQfnizPWA6mUT7Uhgrc9tvdk_hkVFJz86RlM-vBX8oJJzM2mztuG-nsyZ0vWtezJNe6Eoo6bX4Yfhp0c-llRM0rqgpeXIkZmd3zAd8k3PGKmsebSjgH3cymj7zzq85q6iS-PiPoTKPOc9BGUflqhf1KFd1BhG1niH4tdQDSY7BlIz3WCaNkmDoKDtupLhVQa7-2z-vn0IwD7ET_X1IPfv6JdgNg_jXCrIvXQ9OsC7KkZLgOvTneE_OfqPEFewRMQeFDpJBR15cVLGXJHxEp_zQz_iea_y-_ff_x_9vE-ZWyvVD8NO5INIm7NKFsIPGr367_0D13MOCmoLXTZh57S3AR8o7k18IG8B7DhkzDJi8vC5se_vZMG_yCkm95_Q-w3FkejyceT3iRnLFE5izzb1f4olABRY-hMmpjKcMrTNnPtk5QwzfW8iqXr5-4rPtu7K5Rw4L_XdRc-serWfu2oWvw2CNXxeaQaKwr2juNEn9v-EPtxsoa-vxQPxvh-EP_CGpAVHD_7O7BP9znPyHsktTyHLE_tJbfGlc37la0Dj9H5oRqKPDUBlutbFMdmqFu9K9OyJl4TSeOWrOcDXnySriOQwtgbPatrmohufHv-hU7jbd7Z4Ta3fFybtV3jd17bhxuU5xprHjid7zcKvd9YtinsmvMwEL3r9bxqisd__pIOMMrF6ytMgOnHNfWaFNBiyRNk5HLtrrgf-JqM3j4cPPCWeN4b9YLH4ykmIGMI4Jxx4wZTTM8RHBrtHJHNw4hXC48SYD9Ufi4zcUpLzBG74XkrAXeRntp7kvjAiAcAY6azTzKVywZAeygHHE-6e5N40-W1oWBk6YxiD4AiydtX4azZYYYix4qKsbFY2MMfYVFG2_Znpr-EdGmj-7RGNmiJy2Ki_HFEQYER3zRGN8qK9ME9dbaRpAERyhPH82cgp0-IdNads-2B8-91qgw4mlu5zB5qM9pycvMqztg2r8keTDeYv5uG-eH6syolDlljw-lAphHL7eCO49vo62uYN87XTKznjmkKO330XTcax0T7yEpHQgeHtjLSxS1Fzm1gkEC8y-qvAlHk2HgwRkKG_Hu9oQdlRIiGJrWw32Y4kMj917bDM9UwA9ZtedlArI6mopk_QuQP-t8xhkn7zbWbLiNm3uDcWgh7mnJ5evIlu_77bIknaYA5hjL4waI5zhhGfpv9vvkocy8g8fdCF8tKU3etJrPj_SkwvSmHCXTCSFMGD33Pm_qppvd6jZQ7NyMHJWg0TFKlhN9V8vyYn3_rHP7trJ_1vkXYd96YXCaQQ_OrakAv7bHaM62z7Az_R1WAjscrbSaWKnE6zfX0vXg86jQzlTYt6z7L7TSRfU8KkHzo12ySb0slssuevqK3uPya3tz-tz3jWp4QQ3HJUg9YlpPeowCrxkCNJc1BkB2YJrg6VvYuGTo4UGKHBIYNe4B6qtX2r_7ZLY5fdPbvUieI1rsg3izSoJ4E3cSo6nEhDHk5wsl3FRI-xE4h56zf88akSyIN6RLbQmZ4zjSYQ7-LOd4BTvmtGMcT7smmiSoZXmZI4GwtfnkuKZ_s3w43YfKrl9GrIvr9mxjey6VvwiIpYKjKPYvSxvLUfiEnPbnpcWg2V3_oSfb8zxP4yKiGSviFcvzOOIs5Wy1jjOKS5KUS5KxjET_WSfbJ5ZW2r9NR4WgO6WtEwxV1hPegA_Qjit_XEvt5o9yZhaWb4iUHtynuQTD142z00PJ_nDvtn1w508SxVvbVBU1r0F88_kuiLewhA4jHcWAgfN2RAV1VLZvpoP4GgWE8BByDA9rsoICHxP_D1xG40v4tEz8P6GAFZO1t0S0hEW07K4OU9plFZEsVHFLG97D1S1c-uNJHSZnRC15j-dtN3uaAMNGXyje9vZBgv1pp6x2BgUkxf7wbPs5Gnwmg8-xP8C0hKBPk8Hn1GfU1ZU_Xp4bJGnOJdxYtXJXPi7iK_BYYTu8aQYcApIuT8iyliybJSNpR-cPjcCHtb9V7wUSMUFBeuWnLbtpJEVBeu0v0iuEe2I_2DGI8JEDaNRxWM1y6HU_YRJ5JoJVNbI719sm8hJxr6OI2rm-SvX6RmR02VktIm-YrRcY-yGpaQGKD_zkRfoTiig5zE6O8PjfW0sBjzl0yRhdOrokaQcvnYUXkYPEpR_7B5TeTtwakiQEej9l5afQojiYy7stOkzI_IQdd7w9NQUa-tPP03Dt6duo8OcU24kIL7D_w6EKjMI8m9rpPLIJFQytL4SZ9goSfA7l-hc1JHORQKIzRManEoGUnEFK5kkH0XpCQeZgtgFbQnC0anouPl7H-k7N4YmH7KceGyWbPp7JG_Hcp5tjYJPlMWq7uB4FLTmNau-HMJrPdKvr2ZoVkNtB2WpHf1rPUM5LsISVNRqevX-vyNk9b78RE98gXTsU1lDAbRBfjw_MovDe8xyct0UBhj36_33j5d_0jZeLv71yoX8H31h589spJJueqz49qz1l6zuSt773cv4x7emiWeKpoCUOTr6V-N_T0fVdWWvNhWX8ie05e2xt4pMVjO14PZPXRTZtKSCb9SWvo4vfJVQN-HpACJS5blSBh-1SI10vp2MLRJ64oymBZgGbDCmY6zofvzaiIUsgK6m0fCIr-R2ylvOykpGsgKQ9wcIUL11fo_uOagq_KylTSRPU2a-j7tqKE9TZe6i7xuCAeqzRLGaCx5i7BmGKGf8EbTKLtm0L3kSbvo22rfgzciZol7-ENptHu3wX7fodtOk82myMNsa_gjYms2hj_B7aOH4H7XoWbUwmaOfX3M_Qzq-2-N3VFq_eRhvPr7V4stbid9da_D7oZH6xxe8utuSdxRbPL7Zksk8bsxtt0hbSLOr9aKirAfW-rRzHy7mu96RggGDDXfsa1DPoRPwS9WnHO2l3PxQf42Idr-kH_jFaxcs0xlkaf9h_zNIs5ywpaZziIqMYFxyveUxwtsLrJSk-iI8EkxRHEY5WCU7JgkclZYSv1-V6vWacBAnmFRVyAT3XQpvdB99tfYwIkH3w9rL-_7YgRPFn5O9CwU2vP5iPvlHLm50NEiyFdfbIxgkn_X-KYWUdpNdo0Fgdv9T-k84Smp3pl99R3jiktEODb7R_aIz8-OttZafr00fyvwEAAP__oy7BCw">