[ https://issues.apache.org/jira/browse/ARROW-14839?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jonathan Keane updated ARROW-14839: ----------------------------------- Description: [A recent build failure|https://dev.azure.com/ursacomputing/crossbow/_build/results?buildId=16168&view=logs&j=0da5d1d9-276d-5173-c4c4-9d4d4ed14fdb&t=d9b15392-e4ce-5e4c-0c8c-b69645229181&l=12205] We could consider mentioning this upstream to the snappy project. They [explicitly support clang|https://github.com/google/snappy/blob/master/CONTRIBUTING.md] clang. I have confirmed (locally, by setting {{ARROW_VERBOSE_THIRDPARTY_BUILD=ON}} that snapy 1.1.9 definitely is being installed (which we bumped in ARROW-14594). We might also try building with the master branch of snappy (which can be accomplished by changing https://github.com/apache/arrow/blob/master/cpp/thirdparty/versions.txt#L80-L81 to point to the master branch tar.gz. {code} #7 0x7f39908049c0 in arrow::util::internal::(anonymous namespace)::SnappyCodec::Decompress(long, unsigned char const*, long, unsigned char*) /arrow/cpp/src/arrow/util/compression_snappy.cc:56:10 #8 0x7f398f1489d7 in parquet::(anonymous namespace)::SerializedPageReader::DecompressIfNeeded(std::__1::shared_ptr<arrow::Buffer>, int, int, int) /arrow/cpp/src/parquet/column_reader.cc:492:3 #9 0x7f398f144897 in parquet::(anonymous namespace)::SerializedPageReader::NextPage() /arrow/cpp/src/parquet/column_reader.cc:404:11 #10 0x7f398f1ab37f in parquet::(anonymous namespace)::ColumnReaderImplBase<parquet::PhysicalType<(parquet::Type::type)5> >::ReadNewPage() /arrow/cpp/src/parquet/column_reader.cc:595:31 #11 0x7f398f1aaf04 in parquet::(anonymous namespace)::ColumnReaderImplBase<parquet::PhysicalType<(parquet::Type::type)5> >::HasNextInternal() /arrow/cpp/src/parquet/column_reader.cc:575:12 #12 0x7f398f2130ef in parquet::internal::(anonymous namespace)::TypedRecordReader<parquet::PhysicalType<(parquet::Type::type)5> >::ReadRecords(long) /arrow/cpp/src/parquet/column_reader.cc:1227:18 #13 0x7f398efbe8d8 in parquet::arrow::(anonymous namespace)::LeafReader::LoadBatch(long) /arrow/cpp/src/parquet/arrow/reader.cc:467:46 #14 0x7f398efe86db in parquet::arrow::ColumnReaderImpl::NextBatch(long, std::__1::shared_ptr<arrow::ChunkedArray>*) /arrow/cpp/src/parquet/arrow/reader.cc:108:5 #15 0x7f398efce3a2 in parquet::arrow::(anonymous namespace)::FileReaderImpl::ReadColumn(int, std::__1::vector<int, std::__1::allocator<int> > const&, parquet::arrow::ColumnReader*, std::__1::shared_ptr<arrow::ChunkedArray>*) /arrow/cpp/src/parquet/arrow/reader.cc:273:20 #16 0x7f398efda5bc in parquet::arrow::(anonymous namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > const&, std::__1::vector<int, std::__1::allocator<int> > const&, arrow::internal::Executor*)::$_4::operator()(unsigned long, std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl>) const /arrow/cpp/src/parquet/arrow/reader.cc:1180:5 #17 0x7f398efdb2e7 in std::__1::enable_if<((!(std::is_void<arrow::Result<std::__1::shared_ptr<arrow::ChunkedArray> > >::value)) && (!(is_future<arrow::Result<std::__1::shared_ptr<arrow::ChunkedArray> > >::value))) && ((!(arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> >::is_empty)) || (std::is_same<arrow::Result<std::__1::shared_ptr<arrow::ChunkedArray> >, arrow::Status>::value)), void>::type arrow::detail::ContinueFuture::operator()<parquet::arrow::(anonymous namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > const&, std::__1::vector<int, std::__1::allocator<int> > const&, arrow::internal::Executor*)::$_4&, unsigned long&, std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl>&, arrow::Result<std::__1::shared_ptr<arrow::ChunkedArray> >, arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> > >(arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> >, parquet::arrow::(anonymous namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > const&, std::__1::vector<int, std::__1::allocator<int> > const&, arrow::internal::Executor*)::$_4&, unsigned long&, std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl>&) const /arrow/cpp/src/arrow/util/future.h:148:23 #18 0x7f398efdb2e7 in decltype(std::__1::forward<arrow::detail::ContinueFuture&>(fp)(std::__1::forward<arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> >&>(fp0), std::__1::forward<parquet::arrow::(anonymous namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > const&, std::__1::vector<int, std::__1::allocator<int> > const&, arrow::internal::Executor*)::$_4&>(fp0), std::__1::forward<unsigned long&>(fp0), std::__1::forward<std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl>&>(fp0))) std::__1::__invoke<arrow::detail::ContinueFuture&, arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> >&, parquet::arrow::(anonymous namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > const&, std::__1::vector<int, std::__1::allocator<int> > const&, arrow::internal::Executor*)::$_4&, unsigned long&, std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl>&>(arrow::detail::ContinueFuture&, arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> >&, parquet::arrow::(anonymous namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > const&, std::__1::vector<int, std::__1::allocator<int> > const&, arrow::internal::Executor*)::$_4&, unsigned long&, std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl>&) /usr/bin/../include/c++/v1/type_traits:3899:1 #19 0x7f398efdb0a5 in std::__1::__bind_return<arrow::detail::ContinueFuture, std::__1::tuple<arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> >, parquet::arrow::(anonymous namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > const&, std::__1::vector<int, std::__1::allocator<int> > const&, arrow::internal::Executor*)::$_4, unsigned long, std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl> >, std::__1::tuple<>, __is_valid_bind_return<arrow::detail::ContinueFuture, std::__1::tuple<arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> >, parquet::arrow::(anonymous namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > const&, std::__1::vector<int, std::__1::allocator<int> > const&, arrow::internal::Executor*)::$_4, unsigned long, std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl> >, std::__1::tuple<> >::value>::type std::__1::__bind<arrow::detail::ContinueFuture, arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> >&, parquet::arrow::(anonymous namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > const&, std::__1::vector<int, std::__1::allocator<int> > const&, arrow::internal::Executor*)::$_4&, unsigned long&, std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl> >::operator()<>() /usr/bin/../include/c++/v1/functional:2886:20 #20 0x7f398efdb0a5 in arrow::internal::FnOnce<void ()>::FnImpl<std::__1::__bind<arrow::detail::ContinueFuture, arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> >&, parquet::arrow::(anonymous namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > const&, std::__1::vector<int, std::__1::allocator<int> > const&, arrow::internal::Executor*)::$_4&, unsigned long&, std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl> > >::invoke() /arrow/cpp/src/arrow/util/functional.h:152:42 #21 0x7f39907017d7 in arrow::internal::FnOnce<void ()>::operator()() && /arrow/cpp/src/arrow/util/functional.h:140:17 #22 0x7f39907002f5 in arrow::internal::WorkerLoop(std::__1::shared_ptr<arrow::internal::ThreadPool::State>, std::__1::__list_iterator<std::__1::thread, void*>) /arrow/cpp/src/arrow/util/thread_pool.cc:177:11 #23 0x7f39906ffd0b in arrow::internal::ThreadPool::LaunchWorkersUnlocked(int)::$_3::operator()() const /arrow/cpp/src/arrow/util/thread_pool.cc:344:7 #24 0x7f39906ffd0b in decltype(std::__1::forward<arrow::internal::ThreadPool::LaunchWorkersUnlocked(int)::$_3>(fp)()) std::__1::__invoke<arrow::internal::ThreadPool::LaunchWorkersUnlocked(int)::$_3>(arrow::internal::ThreadPool::LaunchWorkersUnlocked(int)::$_3&&) /usr/bin/../include/c++/v1/type_traits:3899:1 #25 0x7f39906ff62c in void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, arrow::internal::ThreadPool::LaunchWorkersUnlocked(int)::$_3> >(void*) /usr/bin/../include/c++/v1/thread:291:5 #26 0x7f39a0e0c3f8 in start_thread (/lib64/libpthread.so.0+0x93f8) #27 0x7f39a0c4f4c2 in clone (/lib64/libc.so.6+0x1014c2) SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /tmp/RtmpZTvzHP/file587026c727/snappy_ep-prefix/src/snappy_ep/snappy.cc:351:43 in > head(df) {code} > [R] test-fedora-r-clang-sanitizer job failing due to snappy causing a > sanitizer error > ------------------------------------------------------------------------------------- > > Key: ARROW-14839 > URL: https://issues.apache.org/jira/browse/ARROW-14839 > Project: Apache Arrow > Issue Type: Bug > Components: R > Reporter: Nicola Crane > Priority: Major > > [A recent build > failure|https://dev.azure.com/ursacomputing/crossbow/_build/results?buildId=16168&view=logs&j=0da5d1d9-276d-5173-c4c4-9d4d4ed14fdb&t=d9b15392-e4ce-5e4c-0c8c-b69645229181&l=12205] > We could consider mentioning this upstream to the snappy project. They > [explicitly support > clang|https://github.com/google/snappy/blob/master/CONTRIBUTING.md] clang. I > have confirmed (locally, by setting {{ARROW_VERBOSE_THIRDPARTY_BUILD=ON}} > that snapy 1.1.9 definitely is being installed (which we bumped in > ARROW-14594). > We might also try building with the master branch of snappy (which can be > accomplished by changing > https://github.com/apache/arrow/blob/master/cpp/thirdparty/versions.txt#L80-L81 > to point to the master branch tar.gz. > {code} > #7 0x7f39908049c0 in arrow::util::internal::(anonymous > namespace)::SnappyCodec::Decompress(long, unsigned char const*, long, > unsigned char*) /arrow/cpp/src/arrow/util/compression_snappy.cc:56:10 > #8 0x7f398f1489d7 in parquet::(anonymous > namespace)::SerializedPageReader::DecompressIfNeeded(std::__1::shared_ptr<arrow::Buffer>, > int, int, int) /arrow/cpp/src/parquet/column_reader.cc:492:3 > #9 0x7f398f144897 in parquet::(anonymous > namespace)::SerializedPageReader::NextPage() > /arrow/cpp/src/parquet/column_reader.cc:404:11 > #10 0x7f398f1ab37f in parquet::(anonymous > namespace)::ColumnReaderImplBase<parquet::PhysicalType<(parquet::Type::type)5> > >::ReadNewPage() /arrow/cpp/src/parquet/column_reader.cc:595:31 > #11 0x7f398f1aaf04 in parquet::(anonymous > namespace)::ColumnReaderImplBase<parquet::PhysicalType<(parquet::Type::type)5> > >::HasNextInternal() /arrow/cpp/src/parquet/column_reader.cc:575:12 > #12 0x7f398f2130ef in parquet::internal::(anonymous > namespace)::TypedRecordReader<parquet::PhysicalType<(parquet::Type::type)5> > >::ReadRecords(long) /arrow/cpp/src/parquet/column_reader.cc:1227:18 > #13 0x7f398efbe8d8 in parquet::arrow::(anonymous > namespace)::LeafReader::LoadBatch(long) > /arrow/cpp/src/parquet/arrow/reader.cc:467:46 > #14 0x7f398efe86db in parquet::arrow::ColumnReaderImpl::NextBatch(long, > std::__1::shared_ptr<arrow::ChunkedArray>*) > /arrow/cpp/src/parquet/arrow/reader.cc:108:5 > #15 0x7f398efce3a2 in parquet::arrow::(anonymous > namespace)::FileReaderImpl::ReadColumn(int, std::__1::vector<int, > std::__1::allocator<int> > const&, parquet::arrow::ColumnReader*, > std::__1::shared_ptr<arrow::ChunkedArray>*) > /arrow/cpp/src/parquet/arrow/reader.cc:273:20 > #16 0x7f398efda5bc in parquet::arrow::(anonymous > namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous > namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > > const&, std::__1::vector<int, std::__1::allocator<int> > const&, > arrow::internal::Executor*)::$_4::operator()(unsigned long, > std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl>) const > /arrow/cpp/src/parquet/arrow/reader.cc:1180:5 > #17 0x7f398efdb2e7 in > std::__1::enable_if<((!(std::is_void<arrow::Result<std::__1::shared_ptr<arrow::ChunkedArray> > > >::value)) && > (!(is_future<arrow::Result<std::__1::shared_ptr<arrow::ChunkedArray> > > >::value))) && ((!(arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> > >::is_empty)) || > (std::is_same<arrow::Result<std::__1::shared_ptr<arrow::ChunkedArray> >, > arrow::Status>::value)), void>::type > arrow::detail::ContinueFuture::operator()<parquet::arrow::(anonymous > namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous > namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > > const&, std::__1::vector<int, std::__1::allocator<int> > const&, > arrow::internal::Executor*)::$_4&, unsigned long&, > std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl>&, > arrow::Result<std::__1::shared_ptr<arrow::ChunkedArray> >, > arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> > > >(arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> >, > parquet::arrow::(anonymous > namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous > namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > > const&, std::__1::vector<int, std::__1::allocator<int> > const&, > arrow::internal::Executor*)::$_4&, unsigned long&, > std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl>&) const > /arrow/cpp/src/arrow/util/future.h:148:23 > #18 0x7f398efdb2e7 in > decltype(std::__1::forward<arrow::detail::ContinueFuture&>(fp)(std::__1::forward<arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> > >&>(fp0), std::__1::forward<parquet::arrow::(anonymous > namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous > namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > > const&, std::__1::vector<int, std::__1::allocator<int> > const&, > arrow::internal::Executor*)::$_4&>(fp0), std::__1::forward<unsigned > long&>(fp0), > std::__1::forward<std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl>&>(fp0))) > std::__1::__invoke<arrow::detail::ContinueFuture&, > arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> >&, > parquet::arrow::(anonymous > namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous > namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > > const&, std::__1::vector<int, std::__1::allocator<int> > const&, > arrow::internal::Executor*)::$_4&, unsigned long&, > std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl>&>(arrow::detail::ContinueFuture&, > arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> >&, > parquet::arrow::(anonymous > namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous > namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > > const&, std::__1::vector<int, std::__1::allocator<int> > const&, > arrow::internal::Executor*)::$_4&, unsigned long&, > std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl>&) > /usr/bin/../include/c++/v1/type_traits:3899:1 > #19 0x7f398efdb0a5 in > std::__1::__bind_return<arrow::detail::ContinueFuture, > std::__1::tuple<arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> >, > parquet::arrow::(anonymous > namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous > namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > > const&, std::__1::vector<int, std::__1::allocator<int> > const&, > arrow::internal::Executor*)::$_4, unsigned long, > std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl> >, std::__1::tuple<>, > __is_valid_bind_return<arrow::detail::ContinueFuture, > std::__1::tuple<arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> >, > parquet::arrow::(anonymous > namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous > namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > > const&, std::__1::vector<int, std::__1::allocator<int> > const&, > arrow::internal::Executor*)::$_4, unsigned long, > std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl> >, std::__1::tuple<> > >::value>::type std::__1::__bind<arrow::detail::ContinueFuture, > arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> >&, > parquet::arrow::(anonymous > namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous > namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > > const&, std::__1::vector<int, std::__1::allocator<int> > const&, > arrow::internal::Executor*)::$_4&, unsigned long&, > std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl> >::operator()<>() > /usr/bin/../include/c++/v1/functional:2886:20 > #20 0x7f398efdb0a5 in arrow::internal::FnOnce<void > ()>::FnImpl<std::__1::__bind<arrow::detail::ContinueFuture, > arrow::Future<std::__1::shared_ptr<arrow::ChunkedArray> >&, > parquet::arrow::(anonymous > namespace)::FileReaderImpl::DecodeRowGroups(std::__1::shared_ptr<parquet::arrow::(anonymous > namespace)::FileReaderImpl>, std::__1::vector<int, std::__1::allocator<int> > > const&, std::__1::vector<int, std::__1::allocator<int> > const&, > arrow::internal::Executor*)::$_4&, unsigned long&, > std::__1::shared_ptr<parquet::arrow::ColumnReaderImpl> > >::invoke() > /arrow/cpp/src/arrow/util/functional.h:152:42 > #21 0x7f39907017d7 in arrow::internal::FnOnce<void ()>::operator()() && > /arrow/cpp/src/arrow/util/functional.h:140:17 > #22 0x7f39907002f5 in > arrow::internal::WorkerLoop(std::__1::shared_ptr<arrow::internal::ThreadPool::State>, > std::__1::__list_iterator<std::__1::thread, void*>) > /arrow/cpp/src/arrow/util/thread_pool.cc:177:11 > #23 0x7f39906ffd0b in > arrow::internal::ThreadPool::LaunchWorkersUnlocked(int)::$_3::operator()() > const /arrow/cpp/src/arrow/util/thread_pool.cc:344:7 > #24 0x7f39906ffd0b in > decltype(std::__1::forward<arrow::internal::ThreadPool::LaunchWorkersUnlocked(int)::$_3>(fp)()) > > std::__1::__invoke<arrow::internal::ThreadPool::LaunchWorkersUnlocked(int)::$_3>(arrow::internal::ThreadPool::LaunchWorkersUnlocked(int)::$_3&&) > /usr/bin/../include/c++/v1/type_traits:3899:1 > #25 0x7f39906ff62c in void* > std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, > std::__1::default_delete<std::__1::__thread_struct> >, > arrow::internal::ThreadPool::LaunchWorkersUnlocked(int)::$_3> >(void*) > /usr/bin/../include/c++/v1/thread:291:5 > #26 0x7f39a0e0c3f8 in start_thread (/lib64/libpthread.so.0+0x93f8) > #27 0x7f39a0c4f4c2 in clone (/lib64/libc.so.6+0x1014c2) > SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior > /tmp/RtmpZTvzHP/file587026c727/snappy_ep-prefix/src/snappy_ep/snappy.cc:351:43 > in > > head(df) > {code} -- This message was sent by Atlassian Jira (v8.20.1#820001)