<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/67687>67687</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] Crash from struct field initializer lambda
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang:frontend,
crash-on-invalid
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
hazohelet
</td>
</tr>
</table>
<pre>
The following code causes clang (>= 17) ICE:
```c++
struct S {
int n;
int d = (4, []() { return [=]() { return n; }(); }());
};
```
Live demo: https://godbolt.org/z/cGjM397eo
Backtrace:
```console
clang++: /root/llvm-project/clang/include/clang/AST/APValue.h:553: clang::APValue& clang::APValue::getStructField(unsigned int):
Assertion `i < getStructNumFields() && "field index OOB"' 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: /opt/compiler-explorer/clang-assertions-trunk/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -std=c++2b <source>
1. <eof> parser at end of file
2. <source>:1:1: parsing struct/union/class body 'S'
#0 0x0000000003708fb8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3708fb8)
#1 0x0000000003706c7c llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3706c7c)
#2 0x000000000364f8d8 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#3 0x00007f8391fc9420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#4 0x00007f8391a8c00b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
#5 0x00007f8391a6b859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
#6 0x00007f8391a6b729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
#7 0x00007f8391a7cfd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
#8 0x0000000006eed520 clang::CXXConstructorDecl::getExplicitSpecifier() const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6eed520)
#9 0x0000000006f95077 (anonymous namespace)::ExtractSubobjectHandler::result_type findSubobject<(anonymous namespace)::ExtractSubobjectHandler>((anonymous namespace)::EvalInfo&, clang::Expr const*, (anonymous namespace)::CompleteObject const&, (anonymous namespace)::SubobjectDesignator const&, (anonymous namespace)::ExtractSubobjectHandler&) ExprConstant.cpp:0:0
#10 0x0000000006fa42e7 handleLValueToRValueConversion((anonymous namespace)::EvalInfo&, clang::Expr const*, clang::QualType, (anonymous namespace)::LValue const&, clang::APValue&, bool) ExprConstant.cpp:0:0
#11 0x0000000006fe07d2 (anonymous namespace)::IntExprEvaluator::VisitCastExpr(clang::CastExpr const*) ExprConstant.cpp:0:0
#12 0x0000000006faba34 clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::IntExprEvaluator, bool>::Visit(clang::Stmt const*) ExprConstant.cpp:0:0
#13 0x0000000006f9a57e Evaluate(clang::APValue&, (anonymous namespace)::EvalInfo&, clang::Expr const*) ExprConstant.cpp:0:0
#14 0x0000000006fbeda6 EvaluateStmt((anonymous namespace)::StmtResult&, (anonymous namespace)::EvalInfo&, clang::Stmt const*, clang::SwitchCase const*) (.part.0) ExprConstant.cpp:0:0
#15 0x0000000006fbe0cf EvaluateStmt((anonymous namespace)::StmtResult&, (anonymous namespace)::EvalInfo&, clang::Stmt const*, clang::SwitchCase const*) (.part.0) ExprConstant.cpp:0:0
#16 0x0000000006fc30eb HandleFunctionCall(clang::SourceLocation, clang::FunctionDecl const*, (anonymous namespace)::LValue const*, clang::Expr const*, llvm::ArrayRef<clang::Expr const*>, (anonymous namespace)::CallRef, clang::Stmt const*, (anonymous namespace)::EvalInfo&, clang::APValue&, (anonymous namespace)::LValue const*) ExprConstant.cpp:0:0
#17 0x00000000070022b2 (anonymous namespace)::IntExprEvaluator::VisitCallExpr(clang::CallExpr const*) ExprConstant.cpp:0:0
#18 0x0000000006fab7f6 clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::IntExprEvaluator, bool>::Visit(clang::Stmt const*) ExprConstant.cpp:0:0
#19 0x0000000006fab277 clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::IntExprEvaluator, bool>::Visit(clang::Stmt const*) ExprConstant.cpp:0:0
#20 0x0000000006f9a57e Evaluate(clang::APValue&, (anonymous namespace)::EvalInfo&, clang::Expr const*) ExprConstant.cpp:0:0
#21 0x0000000006fbeda6 EvaluateStmt((anonymous namespace)::StmtResult&, (anonymous namespace)::EvalInfo&, clang::Stmt const*, clang::SwitchCase const*) (.part.0) ExprConstant.cpp:0:0
#22 0x0000000006fbe0cf EvaluateStmt((anonymous namespace)::StmtResult&, (anonymous namespace)::EvalInfo&, clang::Stmt const*, clang::SwitchCase const*) (.part.0) ExprConstant.cpp:0:0
#23 0x0000000006fc30eb HandleFunctionCall(clang::SourceLocation, clang::FunctionDecl const*, (anonymous namespace)::LValue const*, clang::Expr const*, llvm::ArrayRef<clang::Expr const*>, (anonymous namespace)::CallRef, clang::Stmt const*, (anonymous namespace)::EvalInfo&, clang::APValue&, (anonymous namespace)::LValue const*) ExprConstant.cpp:0:0
#24 0x00000000070022b2 (anonymous namespace)::IntExprEvaluator::VisitCallExpr(clang::CallExpr const*) ExprConstant.cpp:0:0
#25 0x0000000006fab7f6 clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::IntExprEvaluator, bool>::Visit(clang::Stmt const*) ExprConstant.cpp:0:0
#26 0x0000000006f9a57e Evaluate(clang::APValue&, (anonymous namespace)::EvalInfo&, clang::Expr const*) ExprConstant.cpp:0:0
#27 0x0000000006f9cf1e (anonymous namespace)::DataRecursiveIntBinOpEvaluator::process((anonymous namespace)::DataRecursiveIntBinOpEvaluator::EvalResult&) ExprConstant.cpp:0:0
#28 0x0000000006ffc333 (anonymous namespace)::IntExprEvaluator::VisitBinaryOperator(clang::BinaryOperator const*) ExprConstant.cpp:0:0
#29 0x0000000006faba9d clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous namespace)::IntExprEvaluator, bool>::Visit(clang::Stmt const*) ExprConstant.cpp:0:0
#30 0x0000000006f9a57e Evaluate(clang::APValue&, (anonymous namespace)::EvalInfo&, clang::Expr const*) ExprConstant.cpp:0:0
#31 0x0000000006fa4809 EvaluateAsRValue((anonymous namespace)::EvalInfo&, clang::Expr const*, clang::APValue&) ExprConstant.cpp:0:0
#32 0x0000000006fa545f clang::Expr::EvaluateForOverflow(clang::ASTContext const&) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6fa545f)
#33 0x0000000006030465 clang::Sema::CheckForIntOverflow(clang::Expr const*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6030465)
#34 0x000000000608faf4 clang::Sema::CheckCompletedExpr(clang::Expr*, clang::SourceLocation, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x608faf4)
#35 0x00000000065153c4 clang::Sema::ActOnFinishFullExpr(clang::Expr*, clang::SourceLocation, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x65153c4)
#36 0x0000000006261af7 clang::Sema::ActOnFinishCXXInClassMemberInitializer(clang::Decl*, clang::SourceLocation, clang::Expr*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x6261af7)
#37 0x0000000005e8020b clang::Parser::ParseLexedMemberInitializer(clang::Parser::LateParsedMemberInitializer&) (.part.0) ParseCXXInlineMethods.cpp:0:0
#38 0x0000000005e8135d clang::Parser::ParseLexedMemberInitializers(clang::Parser::ParsingClass&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5e8135d)
#39 0x0000000005ecc7ab clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation, clang::SourceLocation, clang::ParsedAttributes&, unsigned int, clang::Decl*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5ecc7ab)
#40 0x0000000005ece720 clang::Parser::ParseClassSpecifier(clang::tok::TokenKind, clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, bool, clang::Parser::DeclSpecContext, clang::ParsedAttributes&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5ece720)
#41 0x0000000005ea7e80 clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*, clang::ImplicitTypenameContext) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5ea7e80)
#42 0x0000000005e72ea4 clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5e72ea4)
#43 0x0000000005e737df clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) (.part.0) Parser.cpp:0:0
#44 0x0000000005e79ef4 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5e79ef4)
#45 0x0000000005e7a71d clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5e7a71d)
#46 0x0000000005e7ab60 clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5e7ab60)
#47 0x0000000005e6ea22 clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x5e6ea22)
#48 0x00000000049724d8 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x49724d8)
#49 0x00000000041d6509 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x41d6509)
#50 0x00000000041571ee clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x41571ee)
#51 0x00000000042b584e clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x42b584e)
#52 0x0000000000bdcb46 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xbdcb46)
#53 0x0000000000bd440a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#54 0x0000000003fb4a69 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
#55 0x000000000364fd84 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x364fd84)
#56 0x0000000003fb505f 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
#57 0x0000000003f7d3a5 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f7d3a5)
#58 0x0000000003f7de0d clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f7de0d)
#59 0x0000000003f85d35 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f85d35)
#60 0x0000000000bd9fec clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xbd9fec)
#61 0x0000000000ad4d61 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xad4d61)
#62 0x00007f8391a6d083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#63 0x0000000000bd3eee _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xbd3eee)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW19z2zYS_zT0C0YeEvz_4AdZtnruOedc5OnkTQOCoIQaAngA6Mj99DcAKYmgJFtOrc4lvU7SiPiz-O1vF7tLkERK0QUn5MqLr7345gI1eink1RL9IZaEEX1RiPLl6nFJQCUYE98oXwAsSgIwahRRADPEF8CDmRfeeuENCFIP5uBucuuFY8-_8fyxl_jtH-zBa_PHtiotG6zBDHhp1-JNoDf2AeUacC_cbyyBke_BLPLgBLRwzbowNzKAJLqR3LaHNwe7jFTgpV2Pe2GvuyXTm93vDfb28p4-E1CSlfDCMVhqXSujJZx6cLoQZSGYvhRy4cHpHx6c4l9-_xTmKRHt3GuEn7REmBwgRnAlGGlbLaEdU-EYeHAqhdAenDL2vBrVUvxOsLnsxk0px6wpSa9lPHs0___8G2INuVx64TiOQyOrHRCOvXDc9XowOdRqLxZEz6yRppSw0oNZw62rlMYalrBOj7FSRGoqOPASnwIvnIDt3H81KztdbcwBE7OmB2FlmgHlJVmDh4drD0IPpqBClJHyshX8-f52PLsFqilWVAMEimYBJKmF1ECLIf9UL5viEotVR9U-Y1SphigPTgHiZmXLG9BLArBEagmKrYXgBNSS1FJgohQpgRKNbJvNTKSUwBRpUgLZcKCwpLXuIM80wk-gbFb1lh7_0vPzz1IsJFoBJBfNinCtOtuK2tpSrGrKiByRdc2EJHJjzRHacKtGWjb8yYPTgvKdsY2bgNGi_IZkNYrAaAFGwshFdW2kN7pu9KUCo5XhAoxG6ywZIbUaqReu0doLbyjXhIHRDIxGC4xHWgiGl4hys4leg2cGK45qtRQajCosmJCjkqIFF0pTrMCo4mJkiXWblS698KaLBbAw7tLRG962hAWGMC-cEFF54S2okVREAqQB4SUQFajoZq_AbuROQDgOur92nolWbaTx4LThVHTUKQVMXAMeTGceTFtpwIOhD_y1v_kvTP2sKjJg3cnuCfWi2h-fJeXaGvux9ZhsN0iib3OhtCRoZd190m0YGyU_xuQevPbXHTyzFbf4gwH-BKf4EP4JI4g39QOf0QVHrL-7mTCrnAOtAeOghQ7aJKqyMgMT4zNfCBbPRL608P6BeMnMolnHpDNmIrgma32Ja7PpfPt3u0TYLZFWWZgHFc4j6IP5XBKlhSRzqTs9GS08OF1nyTyJRozyZj1a8KbtqPVSElReKnHpW12CKIK-o0nkLIMy7PsFkIgqcoJ8bCQnVnIU-n7hSI5dyUmRxTlAhTgJeU8yhFmcO5KToeR0a_WTZabQlZm6MlNclcn7ZIZhVSaOzKzvJQkhZQz9ftaafP06Ebzd5kLeEMy2Cex2XTOKqZ7VBNOKWhcy_mMyrv5oD--gOdhzB3uVx36amnURF_xlJRoFOFoRVdsYkre4b9cmC-lZU4jCpK6N97fBhaiG6bl-qQmoKC-3o7xw8r1yby0Rr899RuyOV6ILaD32b9e1bPn04NhWZq9LmohVzYgmDxbDZmZywswt8BtiQhXSQr5n-jH1zeQcGDWsFyF-IJKYyOq7pkQRJClYWiH3tmx6FF_svxPBn4lUNtl8IK-9vn83iD2-1OQErVtoDk8Hy0DTUQjBTuMicLkgflrCt5DccbMdpdG4MbZrW3-jiuoJUrbPg1l_X3etPRZOwQYHdipQGPV1numVtqsKeY0U8cLJLj-u0BOZ2-XmtZYn0Lun1IZGW4ts9HP1MgDeqVM4CCMoTgnoFiWudNekH-V-p4CMXJAFKVGyBWmUfns7mFFfbIT7s_gHJLt936jGywlSxNHQg9lljaQ2Sf4UfeOhvj6ufmZ9E1dfHPqkAG0UnTYcmxQ5QYwNnN2W5vcCI20DogNsM83k7PfkEDeoDdXdi5y7_T2WEr18IZUXTo5OMOnw7SyGGDNy3jDCd5vzXbt4j45TrJn2rZn6PoTFnwvhjB0K4W3rO7FlwxCeVsmPHsLzoU4wTX9wnaD_A6QlGPy90hKEf6-0BMP_p6WfJy3B6H83LcH450tLMPkRQng6AImrgLwF4AZp9IXgRir6TO64vqb8oR64SHfC_3ZAPEWYuewFzVP0GtQ5FQ7D8E84-zXlSL481ES2DtM3ntv3Tv73aheUlz-444c_Qu0SBsMzp8zPtyDH6kuH6zynTH21TwE7PHiJo7garrXDYzSYCvnwTGTFxLcB47PH7lS_d3J1rmPbFun22Nao4tYUfuhHSew4PFmhLpUsCX6aCnnH9WFV9qz-0fBbdA589yTGzypURa_A3xzJlvuZsm3Zq9z2qqfN0eGHK2exO8q5WTgO4hAfUW6M9QOfUk7VctocqgPep93w34_XtlXG0dbNzzAJUJW-qe3k69c7PmFIqU9kVRB5x6mmiNE_yIAA-7DkBAIOcfbx6rfaOeo7mT8mmQ_9oo_ms3043Pt9T9akfEPr_qR7pIm9PjQp2b8fsWMtv4xy8onopSjV4XiYDbAHYVx-B3Z1HPzn9hG3tfQO7UfapIPt2CR39cI4Ra_bZPL1a6tV9xhu41cn35C92tlab6y1pEWjieqSnPu2ijNj6_VnoMuy0acr8gd0kdR9fLlPlzFn_4llb7AWT-2PR_FE-D8pL99DlVHcCN6vA_ZAlI9kVTOkiakbjj4-wqZ87kHdhcgjsjcIuux-iinPYSRjA8dIgWsklJLsdSMZRZC0JG_1V_vB9cxsfz_Le-HPsH5PD9WBd6v2IfrjS01MbbmVegbLWOIdy0DXMikkKHrTMg9yd4ZT3XFNZPuSy9th490jKF8cN_Seyc5AmWXEoSwcUBamZXWqMzvMUZOFhpH6LMTt3XscJG6Yh-XBxBtFA_1zUr3uMrfr1kN6PPw1Op_DHYy2jjvEAzpQGrxehzyK-p48E9bmyT4PDzX6T0M-a-meVJqBv0jR1PYM8_bAMfC2Sv0kyoaRu1UtpJ5pe6t9nhhv1XR4SIY8FMnrMX5KpdI_CRlF4obVQWGdEAThHhn2TeJsCL3_ssjZ7oU6SA5mp6CO8hRGZea8CCZK8gvhYxu-NncrBDeadE2bd5A_FGkHxEHqlMhRUCaxnztPGKTJobw8APVMIFsMfZCx74KM04AQl8522Tt76IPJYUaPa3UWX-5wOoo4xVsEiziLiHvLaiHv9HkWh25B9vQ9S4Tu8DkKODWOX5S4iBKAcTBfISMjO_ykaIn2Hg-5bXACngUtz6NHi9JRIxyoEUU-AhvyJ8GjjRQ9ZWYrxNhvBGshTY15UKfEfVJmZBw6GSwlfT5SDsROORBWRYSS3BLTk1t1Rc9cWm5t7-Y7ke7YGSPGCoSf5hV3A367dudDk2AiVivEy-GmPmhD-zK8aRO1WR0x5-h8piXliy6NtAbeTpjP8XodBO1FgRTFc2WHdyw6g03DXEtEtdp0D8QhxsyeELLXb4aMdyF-vD2Bbad4MGVoVZTIg-mOKpht3h__VRSH7REP3_ous6hnikPvdrc9Xxo-QxVhLw6dr5vuDC-yt4gdz08GLhb77tH3385FBtX6UV9IXeLSMkTxUeKs7dBextyw6QTzwUQz4Nh99StDx4M3Y8_yAKJT23GobMgL8cv38vKrKNRxUn4Vhbndd0h5LTRv_aBG1LjA_rHaqzx2zvLXsEl8p_KPc5fNLC7Do1520_vtFA4HKoZjVvgL2fz48NbS0-cv8QeJPa8IbrFuKpQNfhtWxnsvuBxL2x9ekxhkDnSnNvRRGZVJAAzoj167Fe2sDQcf2JR-FoL5nNHCRGIk9bwH5NRPbiI_C51VhlVXSAgBrfyP59cI362--YD1orwKyzzM0QW5CpI8zoMg9IOL5VUa-XGcJXEcBjgiWZ4HSeLncZQFOUz9ilzQK-jD0M9hFkQwg8FlXIYwicskCbCPyzD3Ip-sEGWXxpkuhVxc2M84r5I0ydILhgrClP12GcLN5qm62xD7SenEdNivEAUfUf6MGLUd8c2FvLIfiBbNQnmRz6jSareKpprZj6JbqfFN-80ZqKRYdZ8Ugs0nrNtHNaAtiC4aya6-__NUq9p_AwAA___XsOpi">