<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/185540>185540</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[flang][OpenMP] Crash on COLLAPSE applied to TILE
</td>
</tr>
<tr>
<th>Labels</th>
<td>
flang:openmp
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
kparzysz
</td>
</tr>
</table>
<pre>
Testcase
```
subroutine f(a, b, k1, k2, k3, k4)
implicit none
real :: a(:,:,:), b(:,:,:)
integer :: k1, k2, k3, k4
integer :: j1, j2, j3
!$omp target teams distribute parallel do collapse(3)
!$omp tile sizes(1,256,1)
do j1 = 1, k1
do j2 = k2, k3
do j3 = 1, k4
a(j3,j1,j2) = b(j2,j3,j1)
enddo
enddo
enddo
!$omp end tile
!$omp end target teams distribute parallel do
end
```
Compile with
`flang -c -fopenmp -fopenmp-version=60 test.f90`
Result
```
warning: OpenMP support for version 60 in flang is still incomplete
flang: /work/kparzysz/git/llvm.org/flang/lib/Lower/OpenMP/Utils.cpp:813: pft::Evaluation *Fortran::lower::omp::getNestedDoConstruct(pft::Evaluation &): Assertion `nested.getIf<parser::DoConstruct>() && "Unexpected construct in the nested evaluations"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and instructions to reproduce the bug.
Stack dump:
0. Program arguments: /work2/kparzysz/c/org/bin/flang -fc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelocation-model pic -pic-level 2 -pic-is-pie -target-cpu x86-64 -fopenmp -fopenmp-version=60 -resource-dir /work2/kparzysz/c/org/lib/clang/23 -mframe-pointer=all -o tile2.o -x f95 tile2.f90
#0 0x00007c833d1d01a8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/work2/kparzysz/c/org/bin/../lib/libLLVMSupport.so.23.0git+0x1d01a8)
#1 0x00007c833d1cd045 llvm::sys::RunSignalHandlers() (/work2/kparzysz/c/org/bin/../lib/libLLVMSupport.so.23.0git+0x1cd045)
#2 0x00007c833d1d0fc1 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#3 0x00007c833c842520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007c833c8969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x00007c833c8969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#6 0x00007c833c8969fc pthread_kill ./nptl/pthread_kill.c:89:10
#7 0x00007c833c842476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
#8 0x00007c833c8287f3 abort ./stdlib/abort.c:81:7
#9 0x00007c833c82871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x00007c833c839e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#11 0x00007c833b3c9a21 (/work2/kparzysz/c/org/bin/../lib/../lib/libFortranLower.so.23.0git+0x5c9a21)
#12 0x00007c833b31a13d Fortran::lower::omp::ClauseProcessor::processCollapse(mlir::Location, Fortran::lower::pft::Evaluation&, mlir::omp::LoopRelatedClauseOps&, mlir::omp::CollapseClauseOps&, llvm::SmallVectorImpl<Fortran::semantics::Symbol const*>&) const (/work2/kparzysz/c/org/bin/../lib/../lib/libFortranLower.so.23.0git+0x51a13d)
#13 0x00007c833b3ae398 std::_Function_handler<void (Fortran::lower::pft::Evaluation&, llvm::SmallVector<Fortran::lower::omp::Clause, 0u> const&), processHostEvalClauses(Fortran::lower::AbstractConverter&, Fortran::semantics::SemanticsContext&, Fortran::lower::StatementContext&, Fortran::lower::pft::Evaluation&, mlir::Location)::$_0>::_M_invoke(std::_Any_data const&, Fortran::lower::pft::Evaluation&, llvm::SmallVector<Fortran::lower::omp::Clause, 0u> const&) OpenMP.cpp:0:0
#14 0x00007c833b3a265f genOMPDispatch(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, mlir::Location, llvm::SmallVector<tomp::DirectiveWithClauses<Fortran::lower::omp::Clause>, 0u> const&, tomp::DirectiveWithClauses<Fortran::lower::omp::Clause> const*) OpenMP.cpp:0:0
#15 0x00007c833b396ddc void Fortran::common::log2visit::Log2VisitHelper<0ul, 11ul, void, genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::$_0, std::variant<Fortran::parser::OpenMPStandaloneConstruct, Fortran::parser::OpenMPSectionsConstruct, Fortran::parser::OpenMPSectionConstruct, Fortran::parser::OpenMPLoopConstruct, Fortran::parser::OmpBlockConstruct, Fortran::parser::OpenMPAtomicConstruct, Fortran::parser::OmpAllocateDirective, Fortran::parser::OpenMPDispatchConstruct, Fortran::parser::OpenMPUtilityConstruct, Fortran::parser::OpenMPAllocatorsConstruct, Fortran::parser::OpenMPAssumeConstruct, Fortran::parser::OpenMPCriticalConstruct> const&>(genOMP(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&)::$_0&&, unsigned long, std::variant<Fortran::parser::OpenMPStandaloneConstruct, Fortran::parser::OpenMPSectionsConstruct, Fortran::parser::OpenMPSectionConstruct, Fortran::parser::OpenMPLoopConstruct, Fortran::parser::OmpBlockConstruct, Fortran::parser::OpenMPAtomicConstruct, Fortran::parser::OmpAllocateDirective, Fortran::parser::OpenMPDispatchConstruct, Fortran::parser::OpenMPUtilityConstruct, Fortran::parser::OpenMPAllocatorsConstruct, Fortran::parser::OpenMPAssumeConstruct, Fortran::parser::OpenMPCriticalConstruct> const&) OpenMP.cpp:0:0
#16 0x00007c833b39100a Fortran::lower::genOpenMPConstruct(Fortran::lower::AbstractConverter&, Fortran::lower::SymMap&, Fortran::semantics::SemanticsContext&, Fortran::lower::pft::Evaluation&, Fortran::parser::OpenMPConstruct const&) (/work2/kparzysz/c/org/bin/../lib/../lib/libFortranLower.so.23.0git+0x59100a)
#17 0x00007c833af6d694 auto auto Fortran::lower::pft::ReferenceVariantBase<true, Fortran::parser::AllocateStmt, Fortran::parser::AssignmentStmt, Fortran::parser::BackspaceStmt, Fortran::parser::CallStmt, Fortran::parser::CloseStmt, Fortran::parser::ContinueStmt, Fortran::parser::CycleStmt, Fortran::parser::DeallocateStmt, Fortran::parser::EndfileStmt, Fortran::parser::EventPostStmt, Fortran::parser::EventWaitStmt, Fortran::parser::ExitStmt, Fortran::parser::FailImageStmt, Fortran::parser::FlushStmt, Fortran::parser::FormTeamStmt, Fortran::parser::GotoStmt, Fortran::parser::IfStmt, Fortran::parser::InquireStmt, Fortran::parser::LockStmt, Fortran::parser::NotifyWaitStmt, Fortran::parser::NullifyStmt, Fortran::parser::OpenStmt, Fortran::parser::PointerAssignmentStmt, Fortran::parser::PrintStmt, Fortran::parser::ReadStmt, Fortran::parser::ReturnStmt, Fortran::parser::RewindStmt, Fortran::parser::StopStmt, Fortran::parser::SyncAllStmt, Fortran::parser::SyncImagesStmt, Fortran::parser::SyncMemoryStmt, Fortran::parser::SyncTeamStmt, Fortran::parser::UnlockStmt, Fortran::parser::WaitStmt, Fortran::parser::WhereStmt, Fortran::parser::WriteStmt, Fortran::parser::ComputedGotoStmt, Fortran::parser::ForallStmt, Fortran::parser::ArithmeticIfStmt, Fortran::parser::AssignStmt, Fortran::parser::AssignedGotoStmt, Fortran::parser::PauseStmt, Fortran::parser::EntryStmt, Fortran::parser::FormatStmt, Fortran::parser::AssociateStmt, Fortran::parser::EndAssociateStmt, Fortran::parser::BlockStmt, Fortran::parser::EndBlockStmt, Fortran::parser::SelectCaseStmt, Fortran::parser::CaseStmt, Fortran::parser::EndSelectStmt, Fortran::parser::ChangeTeamStmt, Fortran::parser::EndChangeTeamStmt, Fortran::parser::CriticalStmt, Fortran::parser::EndCriticalStmt, Fortran::parser::NonLabelDoStmt, Fortran::parser::EndDoStmt, Fortran::parser::IfThenStmt, Fortran::parser::ElseIfStmt, Fortran::parser::ElseStmt, Fortran::parser::EndIfStmt, Fortran::parser::SelectRankStmt, Fortran::parser::SelectRankCaseStmt, Fortran::parser::SelectTypeStmt, Fortran::parser::TypeGuardStmt, Fortran::parser::WhereConstructStmt, Fortran::parser::MaskedElsewhereStmt, Fortran::parser::ElsewhereStmt, Fortran::parser::EndWhereStmt, Fortran::parser::ForallConstructStmt, Fortran::parser::EndForallStmt, Fortran::parser::EndProgramStmt, Fortran::parser::EndFunctionStmt, Fortran::parser::EndSubroutineStmt, Fortran::parser::EndMpSubprogramStmt, Fortran::parser::AssociateConstruct, Fortran::parser::BlockConstruct, Fortran::parser::CaseConstruct, Fortran::parser::ChangeTeamConstruct, Fortran::parser::CriticalConstruct, Fortran::parser::DoConstruct, Fortran::parser::IfConstruct, Fortran::parser::SelectRankConstruct, Fortran::parser::SelectTypeConstruct, Fortran::parser::WhereConstruct, Fortran::parser::ForallConstruct, Fortran::parser::CompilerDirective, Fortran::parser::OpenACCConstruct, Fortran::parser::OpenACCRoutineConstruct, Fortran::parser::OpenACCDeclarativeConstruct, Fortran::parser::OpenMPConstruct, Fortran::parser::OpenMPDeclarativeConstruct, Fortran::parser::OmpEndLoopDirective, Fortran::parser::CUFKernelDoConstruct>::visit<(anonymous namespace)::FirConverter::genFIR(Fortran::lower::pft::Evaluation&, bool)::'lambda'(auto const&)>(auto&&) const::'lambda'(auto)::operator()<Fortran::common::Reference<Fortran::parser::OpenMPConstruct const>>(auto) const Bridge.cpp:0:0
#18 0x00007c833af39042 (anonymous namespace)::FirConverter::genFIR(Fortran::lower::pft::Evaluation&, bool) Bridge.cpp:0:0
#19 0x00007c833af72621 (anonymous namespace)::FirConverter::lowerFunc(Fortran::lower::pft::FunctionLikeUnit&) Bridge.cpp:0:0
#20 0x00007c833af2ea4e Fortran::lower::LoweringBridge::lower(Fortran::parser::Program const&, Fortran::semantics::SemanticsContext const&) (/work2/kparzysz/c/org/bin/../lib/../lib/libFortranLower.so.23.0git+0x12ea4e)
#21 0x00007c8344399d7b Fortran::frontend::CodeGenAction::beginSourceFileAction() (/work2/kparzysz/c/org/bin/../lib/libflangFrontend.so.23.0git+0x147d7b)
#22 0x00007c8344397219 Fortran::frontend::FrontendAction::beginSourceFile(Fortran::frontend::CompilerInstance&, Fortran::frontend::FrontendInputFile const&) (/work2/kparzysz/c/org/bin/../lib/libflangFrontend.so.23.0git+0x145219)
#23 0x00007c8344271b43 Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&) (/work2/kparzysz/c/org/bin/../lib/libflangFrontend.so.23.0git+0x1fb43)
#24 0x00007c8344c19c1a Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*) (/work2/kparzysz/c/org/bin/../lib/libflangFrontendTool.so.23.0git+0x4c1a)
#25 0x000057ab6249da3c fc1_main(llvm::ArrayRef<char const*>, char const*) (/work2/kparzysz/c/org/bin/flang+0x8a3c)
#26 0x000057ab6249bc4a main (/work2/kparzysz/c/org/bin/flang+0x6c4a)
#27 0x00007c833c829d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#28 0x00007c833c829e40 call_init ./csu/../csu/libc-start.c:128:20
#29 0x00007c833c829e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#30 0x000057ab6249a9e5 _start (/work2/kparzysz/c/org/bin/flang+0x59e5)
flang-23: error: unable to execute command: Aborted (core dumped)
flang-23: error: flang frontend command failed with exit code -2 (use -v to see invocation)
flang version 23.0.0git (https://github.com/llvm/llvm-project af7c352fa38d49096888df6c99d010d274362aa6)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /work2/kparzysz/c/org/bin
Build config: +assertions
flang-23: note: diagnostic msg:
********************
PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
flang-23: note: diagnostic msg: /tmp/tile2-08b758
flang-23: note: diagnostic msg: /tmp/tile2-08b758.sh
flang-23: note: diagnostic msg:
********************
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsW11z26qb_zTKDeOMhGTZusiF4thtZtM2k6Snlx4E2KZBoAWUJufT7wCS35pEuD3d_-zsmWkVGf14eN5B6AFpzdaC0otofBmNr85QazZSXTw2SP39ov8-qyR5uXig2mCkaRSXUR53_-JSt5WSrWGCglUEpyiCM1DZy2PirtBdU3fNIlhEcQkAqxvOMDNASEFdi6KIgygto7QEKIJTewtne9eiI_zak7gETBi6pqon8ergbuRD3HeH--5w31MrmgVFMIlgJusGGKTW1ABDUa0BYdooVrWGggYpxDnlgEiAJeeo0TSC07QXcI8C4xRo9jfVEZza0eA4j-As6ZFEgu8JiNIrkHRas62-Hbr2rRT-gX-U7nXJtk-A0913K7CTzApWOKTVnBNz-7DY9qKCENn92t3v7nbCUEGcQK81D2sqiksqyJH_RHE5k3VjtfSDmY1_uuJIrMEIg9FKNlTUzfZm9ESVZlJE6VUeA0O1OV8VO1JRXN5R3XJzNMoPpAQTa2vyLw0Vn26BbptGKgNWUoGOJshjwATwgzMNtGGcAyawrBtOjZXaPbNUIrj4IdVjBBd9lERwsWYmggvOn-pzqdYRXHg4XHBWRXBxI39QFcGF5yCCi6-GcX2OmyZKy2mSWrrNynjXnD8h3iJj2YpguZDKKCT8I-7ouFtZN_5mTc1nqg0lV3ImhTaqxSaC09fJ5db6aQlKranybXksXPfzNTXXqyidNUjpfpR9muncxqD1KksmBxGEXwV9big2lADc46wizYYCTxXQ7fA6gjCCE7BCjFNyHsXl7c28vJ8D3VY1MwCBql0DRZ1xjAQbYxrt4nzhNbxpq3Ms607R3Z9Ro-R3akVeMK1bG2wLgASx1uMtoY4XrJDegArhR6MQpt1zz6_lzA6naKMkabHvUbVry-G9QfgRkNYrOy7jcx84t0quFaoBUuu2psLoPc-Ah66BI7jwPlEx0XsGGK1wAkZGsYZT8DzNl3k2asWjkD_EiDPRPo_WogUjWjMzktV3MKoV5RI7RY5qSSgHDcNg1DA84vSJcgD9D6ZHDaNg5KNyhJvWkh_l2VBEjRTVslWYjghTg7J4v8adl8MUjOqVQjUdNdImWhWlV4hzMJIua8BzCUbPYFWMu582cmOrsTQG8XMcx_EET9OUJCRO0BQ4-zoH1C_a39wqJowzx4M1YQSnO5BCP5ZSG0VR7XxzZpO999RpmFHOz7cycVbd3Pz16d5niXMtz2F6HrsAv4yfPYNdDo1gmhyyj0mcjV9j_64V92wtEP-IBOFU6W0s_eMcOh52HMJjBVvPO-AlglOnrxnQbM3ESi5NBO0kC54kI-626Hr0OSt2__0A6f4AeJrBMYw7uTy_nXtv3do_wJbx3LHsuuw4zg4JFnmxwmC5bMxGUUSWj4zzpV1HUBt5PrNZ5YjG8Agu9mHnOErLLIvScpJ3xMchxK0HC8TfJTux65GkV0L-Gtn9Pu_Smhb7tCbHCs0mOVhrZwBHxt_2TqFfNKGNzXuN1Ow5gguFmKaOMJxEadmLPj2kC6eTVQpQZdOto2OIt5dr8nwlVtCue_FT96QCS8GXXCKyJLJGzBuCCSelba71GiNPK0kmlhlrZBs38SG1tKBFfprXuC7eayzBg0isUlwgmPxSeB1GWjf_uhn8ONTGbpAdC_CQhQQlKQGDE_iMo1bTWyUx1Vp2Txv_c7ZbYdacdc9uunnARuhb1F-Z_rvUuKOz5eBGyuaOcmQo8cx8se70Frrn6Ri6y3r3NeL8L4qNVNd1w6N0dsCmpjUShuEuNd6_1JXkfgFhk41dZ1i7-pY_bUJnpJ0J00MTIpoWU6AN8awuF61wK4blpkud6czmSMvk6ZZ4VWHHynrbYyyJuI3Sea-6vHtX6nzno9TGjunR-h0Wy0rbdZGZSfFElZ29PYPvWq3_OZPC0GfzWpe9Ie4NMi5fh8FD3HcXBoVviGC2jK37eFt9WjLxJB9t7OwMWIqXJUEG7ensV7j4E6br3k-OZljrlNmRU8J8vAJrKr58ur1iukEGb37Xuvumeqk_oeafd4HTbPq2js1WmVdMUWzYE_3GzKZ383Aj2ETzsx1m4B8cYJfV3rPv-NC-RU4IdmuvQ11iWddyO-oaPjHNTK-3NfzL_vxIeePSUtxyK0uS-L9-JTfrvOb_tLcc9Nh_WfX63b6wHqTFvQRh17l9PnhCiiFhjm36M9V7gwRBXAq695I9yMs99e-Xv9DnlC52_g7E180ll_jxFOqlkTXDwfRL7t5T6TZ2Aobos9gpbH01jDPzcpIknjWpTjJIqXVbn2T2mWKGYcT390523uj2Uf6NQ7-LZAm1wm1CE8ClWP8bnv-G5380PN-bqPOjiTqJY_Rm5NgQP4yE_3fh_qdf3pwBdi9vBxsnaJWTvMgAao30l0GZ7-iKKiow_cvnnUtkF3Ezo9r3o6SPqXtTv-9_pfvcZl-DBqGXCD_qBuFhojPE-TCISx1ASgrDRBsAfMF8GHVFUahm5oKsWADJ-RMV5lbqYQU65DfEApDPAaAFYvy6RuthFhe81ZthlFT1A0X1IPCDNHIQdL0ahoj_bpkaZv9G4sdB0Gdp2OolSLufW87Z6mUQZ9PIIOjWf104IY667wYDqDuKSADItGqYxzv6g4lhavdGNsOgF4HLgPC2OOedOgj6idZSDZvEQoN89KvgIV4T5C_fNjTAS78pFpBVZrJuWkNJUAwtpArJpKViZlNTw3BA0HlHDYQF8nmL2oBUPhcmwMI2C6Fhm5RaS8wC83g4-DLIa-aChAHvKafYzFDIRBcCmgviSQ6T2yCxpkGhMhfkBHS_VA0iG4r9LMUNqii_Gva1uSABqOvVwyYgec-5pgExY2EhjAWQ8ua7QyLUeSw0yDc8_OGlGYZa0IcWqeEpwaW-7UJ6EP4J6UdKrLp-BOXME5CChKVhnzPDWZ4LEphm54J0RRZBRLvvMkExva1bC0F_au7bqgnkZJv6wl5HT3jXt04ZiNxml0D8T2_D7y7pZRjuehWG2wu7E_A2pMLwhyF1ii8PLiwYpyp8F6WczcL3KMrZ7M676El9rijmSCHLz0n7ISdgTx-ibuaC3EjZhOlq9nXxX1QJOzsdlJ65h90Xj1kEp0hI8VLLVgOBaurelLf7iwumdvsormVNxeL67pe-0lZS8r2dywlHdUVQBCeWidbIw-3Nedfa7252X7Hf7L2lLBuqkJHK1wUd73juf_rZ7lIMb4seb8pYPe447L-wXypG1vSV7a7p4X5KWsQZBP8B3b_NYXHI4QTmvujjNA4dL3YKCWGyn2pu2CP9Kli_0_UWizA-ZBFSlNE3t6LcNhcTa09t__ERZ4evuL4Y8c1P2gNbgv-LO3aJE3-7Ywf3i3ayLC0KMqkOeV8py6Qgfd4l9AMVpbOAb6romol7V7m4YJx2j36rus6VaC66gX8SIZuQSbUTAR6JMIFJ8Z4IPd13ZDg29rEO_NxzLbRBNg28YvHXh7wWTWvsAL9t8WEljWFS7JSUHigJTpIqS9-385GMrpU-U9yanYnDtfwHJV1VWboTNDsQFCcFTtB7gnYi7eR92lZAnOYD5T8l4IOU_FjIDCe7bXbYlyuMJ6jKYVYQlGKwwsmyRpb4XmFuqRR6uaOrKJ3hDVKHNV4zcNh2Cv9def1l_DxFKd6xlh-xVuEMAVeY-Aukc5ztSX1UlQkLUsRgueSswkttkDJLjDhfbqsgsW5_rtDsCkBf63S-idJy7IpK827I44LNgmYxcB2YYOZ4FH9rSY8caV916Y7NwH4yOq7hdBQPhHiN_1cppxM7n4494W0Zd694VNAx8CR_RfXjgnYlzK5tBN0RCaqUq48ErUAVp8BI0MUPsAsk5KIDlJVUhrqaPCwVddX7lLxDzVfk9wHWk-rOKbizKYA-MztNEgpGbgXUagpGT5YBTSlge1G7HWV7tsQGkgsl2_G0Qw0ArSY4HcMVSqckK-Iin06nZJXjoiBxEhM4ydIcItSVwT64mn8r0lsnCizI1R4Dd4bAnTtxRcNx6VIJ55RcuWKsoNMMcXnZMu4Of6xYdzrmEvVnS_SRwoU0NpEDwtBaSG0YBrW2vZwP_cY_d_qnO0xSPjyUs4_g4eMcLL7c3Hz5dv35A1hc38zvwcMX13z59QO4m99-uXvwQ9-6kx-Yak0J8EcgIjjVNh9ZN0D9Oz0BqhVAY8UaswUoCvwXLgKQ8fSCRLbqNXVjr4xTOIqn1WQ8_b3e53pzisZ_X-n9MaszcpGSIi3QGb1IJpM0iZM0Tc82FwRmKE9zOEXjcZZM83ExXsXpJB8TOM4mMD9jFzCGeZwmNndMx-l5QeLpBGYYJhOU5lMaZTGtEePn_dmqM3fK5yKZjsdZfMZRRbl2pxch7I9o-dMtEYTR-OpMXbiAqtq1jrKYM230jpZhhruzj77r-CoaX3ZntMZXYOZODUkBZl9ubsrb-zlATcMZJTbuH65v5met4he_fkypk-HpAv5PAAAA__88SQh1">