[MDEV-17838] AddressSanitizer: heap-use-after-free in my_strcasecmp_utf8 / Item_field::rename_fields_processor Created: 2018-11-26  Updated: 2019-08-25  Resolved: 2019-08-25

Status: Closed
Project: MariaDB Server
Component/s: Data Definition - Alter Table
Affects Version/s: 10.4
Fix Version/s: 10.4.8

Type: Bug Priority: Major
Reporter: Alice Sherepa Assignee: Unassigned
Resolution: Fixed Votes: 0
Labels: None

Attachments: File dt.7z    
Issue Links:
Relates
relates to MDEV-18154 Deadlock and assertion upon no-op ALT... Closed

 Description   

10.4 27f3329ff6cb755b600d5363

==24262==ERROR: AddressSanitizer: heap-use-after-free on address 0x60400033f530 at pc 0x5651683ed6ba bp 0x7f825cabf350 sp 0x7f825cabf340
READ of size 1 at 0x60400033f530 thread T32
    #0 0x5651683ed6b9 in my_strcasecmp_utf8 /git/10.4/strings/ctype-utf8.c:5109
    #1 0x565167139e51 in Item_field::rename_fields_processor(void*) /git/10.4/sql/item.cc:721
    #2 0x56516679bf61 in Item::walk(bool (Item::*)(void*), bool, void*) /git/10.4/sql/item.h:1722
    #3 0x565166bfd8f2 in mysql_prepare_alter_table(THD*, TABLE*, HA_CREATE_INFO*, Alter_info*, Alter_table_ctx*) /git/10.4/sql/sql_table.cc:7953
    #4 0x565166c06693 in mysql_alter_table(THD*, st_mysql_const_lex_string const*, st_mysql_const_lex_string const*, HA_CREATE_INFO*, TABLE_LIST*, Alter_info*, unsigned int, st_order*, bool) /git/10.4/sql/sql_table.cc:9388
    #5 0x565166d4f509 in Sql_cmd_alter_table::execute(THD*) /git/10.4/sql/sql_alter.cc:497
    #6 0x5651669fbb1f in mysql_execute_command(THD*) /git/10.4/sql/sql_parse.cc:6289
    #7 0x565166a0632e in mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool) /git/10.4/sql/sql_parse.cc:8091
    #8 0x5651669e10ab in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool) /git/10.4/sql/sql_parse.cc:1851
    #9 0x5651669de243 in do_command(THD*) /git/10.4/sql/sql_parse.cc:1396
    #10 0x565166d3f7d8 in do_handle_one_connection(CONNECT*) /git/10.4/sql/sql_connect.cc:1402
    #11 0x565166d3f1b5 in handle_one_connection /git/10.4/sql/sql_connect.cc:1308
    #12 0x7f828ba9f6b9 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x76b9)
    #13 0x7f828af3441c in clone (/lib/x86_64-linux-gnu/libc.so.6+0x10741c)
 
0x60400033f530 is located 32 bytes inside of 40-byte region [0x60400033f510,0x60400033f538)
freed by thread T32 here:
    #0 0x7f828c5a32ca in __interceptor_free (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x982ca)
    #1 0x565168243a33 in my_free /git/10.4/mysys/my_malloc.c:221
    #2 0x56516821f793 in free_root /git/10.4/mysys/my_alloc.c:419
    #3 0x5651669e42b0 in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool) /git/10.4/sql/sql_parse.cc:2441
    #4 0x5651669de243 in do_command(THD*) /git/10.4/sql/sql_parse.cc:1396
    #5 0x565166d3f7d8 in do_handle_one_connection(CONNECT*) /git/10.4/sql/sql_connect.cc:1402
    #6 0x565166d3f1b5 in handle_one_connection /git/10.4/sql/sql_connect.cc:1308
    #7 0x7f828ba9f6b9 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x76b9)
 
previously allocated by thread T32 here:
    #0 0x7f828c5a3602 in malloc (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x98602)
    #1 0x565168242f6a in my_malloc /git/10.4/mysys/my_malloc.c:101
    #2 0x56516821eea0 in alloc_root /git/10.4/mysys/my_alloc.c:194
    #3 0x56516822006d in strmake_root /git/10.4/mysys/my_alloc.c:479
    #4 0x56516681017b in THD::make_lex_string(st_mysql_const_lex_string*, char const*, unsigned long) /git/10.4/sql/sql_class.h:3634
    #5 0x5651669ae90e in Lex_ident_sys_st::copy_keyword(THD*, Lex_ident_cli_st const*) /git/10.4/sql/sql_lex.cc:8625
    #6 0x5651669ae959 in Lex_ident_sys_st::copy_or_convert(THD*, Lex_ident_cli_st const*, charset_info_st const*) /git/10.4/sql/sql_lex.cc:8634
    #7 0x5651668f5cfc in THD::to_ident_sys_alloc(Lex_ident_sys_st*, Lex_ident_cli_st const*) /git/10.4/sql/sql_class.cc:2422
    #8 0x565166f80a1c in MYSQLparse(THD*) /git/10.4/sql/sql_yacc.yy:15382
    #9 0x565166a123d2 in parse_sql(THD*, Parser_state*, Object_creation_ctx*, bool) /git/10.4/sql/sql_parse.cc:10108
    #10 0x565166a05ec4 in mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool) /git/10.4/sql/sql_parse.cc:8044
    #11 0x5651669e10ab in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool) /git/10.4/sql/sql_parse.cc:1851
    #12 0x5651669de243 in do_command(THD*) /git/10.4/sql/sql_parse.cc:1396
    #13 0x565166d3f7d8 in do_handle_one_connection(CONNECT*) /git/10.4/sql/sql_connect.cc:1402
    #14 0x565166d3f1b5 in handle_one_connection /git/10.4/sql/sql_connect.cc:1308
    #15 0x7f828ba9f6b9 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x76b9)
 
Thread T32 created by T0 here:
    #0 0x7f828c541253 in pthread_create (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x36253)
    #1 0x5651682a55c3 in spawn_thread_noop /git/10.4/mysys/psi_noop.c:187
    #2 0x56516674cfb4 in inline_mysql_thread_create /git/10.4/include/mysql/psi/mysql_thread.h:1268
    #3 0x5651667627c4 in create_thread_to_handle_connection(CONNECT*) /git/10.4/sql/mysqld.cc:6330
    #4 0x565166762ec4 in create_new_thread(CONNECT*) /git/10.4/sql/mysqld.cc:6400
    #5 0x56516676324f in handle_accepted_socket(st_mysql_socket, st_mysql_socket) /git/10.4/sql/mysqld.cc:6517
    #6 0x565166763ecc in handle_connections_sockets() /git/10.4/sql/mysqld.cc:6682
    #7 0x565166761c89 in mysqld_main(int, char**) /git/10.4/sql/mysqld.cc:5952
    #8 0x56516674b29f in main /git/10.4/sql/main.cc:25
    #9 0x7f828ae4d82f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)

perl ./runall-new.pl --no-mask --seed=1543230130 --duration=400 --queries=100M --reporters=Backtrace,ErrorLog,Deadlock --validators=TransformerNoComparator --transformers=ConvertSubqueriesToViews,ConvertTablesToDerived,Count,DisableIndexes,DisableOptimizations,Distinct,EnableOptimizations,ExecuteAsCTE,ExecuteAsDeleteReturning,ExecuteAsDerived,ExecuteAsExcept,ExecuteAsExecuteImmediate,ExecuteAsInsertSelect,ExecuteAsIntersect,ExecuteAsSelectItem,ExecuteAsUnion,ExecuteAsUpdateDelete,ExecuteAsView,ExecuteAsWhereSubquery,Having,InlineSubqueries,InlineVirtualColumns,LimitRowsExamined,OrderBy,StraightJoin,ExecuteAsPreparedTwice,ExecuteAsTrigger,ExecuteAsSPTwice,ExecuteAsFunctionTwice --mysqld=--log_output=FILE --querytimeout=30 --vcols --threads=1 --grammar=conf/mariadb/instant_add.yy --gendata=conf/optimizer/blobs.zz --engine=MyIsam --mtr-build-thread=304 --basedir1=/git/10.4 --vardir1=/1



 Comments   
Comment by Elena Stepanova [ 2018-11-26 ]

Strangely enough, I can't reproduce it right away, neither from the log nor by RQG. It should be easy, given that it's a single-thread test.

Comment by Elena Stepanova [ 2019-01-15 ]

Here is another occurrence of the same failure on 10.4: https://travis-ci.org/elenst/travis-tests/jobs/479014665

10.4 301bd62b2536

==6802==ERROR: AddressSanitizer: use-after-poison on address 0x62b000150c50 at pc 0x5617a67376ac bp 0x7f95377b8530 sp 0x7f95377b8520
READ of size 1 at 0x62b000150c50 thread T36
    #0 0x5617a67376ab in my_strcasecmp_utf8 /home/travis/src/strings/ctype-utf8.c:5109
    #1 0x5617a55f34a9 in Item_field::rename_fields_processor(void*) /home/travis/src/sql/item.cc:730
    #2 0x5617a4c6059d in Item::walk(bool (Item::*)(void*), bool, void*) /home/travis/src/sql/item.h:1796
    #3 0x5617a4d7fe6e in Item_args::walk_args(bool (Item::*)(void*), bool, void*) /home/travis/src/sql/item.h:2462
    #4 0x5617a4d80f72 in Item_func_or_sum::walk(bool (Item::*)(void*), bool, void*) /home/travis/src/sql/item.h:5076
    #5 0x5617a50c3408 in mysql_prepare_alter_table(THD*, TABLE*, HA_CREATE_INFO*, Alter_info*, Alter_table_ctx*) /home/travis/src/sql/sql_table.cc:8423
    #6 0x5617a50c8289 in mysql_alter_table(THD*, st_mysql_const_lex_string const*, st_mysql_const_lex_string const*, HA_CREATE_INFO*, TABLE_LIST*, Alter_info*, unsigned int, st_order*, bool) /home/travis/src/sql/sql_table.cc:9380
    #7 0x5617a520a671 in Sql_cmd_alter_table::execute(THD*) /home/travis/src/sql/sql_alter.cc:497
    #8 0x5617a4ec13d9 in mysql_execute_command(THD*) /home/travis/src/sql/sql_parse.cc:6302
    #9 0x5617a4ecbc21 in mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool) /home/travis/src/sql/sql_parse.cc:8104
    #10 0x5617a4ea6a43 in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool) /home/travis/src/sql/sql_parse.cc:1851
    #11 0x5617a4ea3bdb in do_command(THD*) /home/travis/src/sql/sql_parse.cc:1396
    #12 0x5617a51fb7b6 in do_handle_one_connection(CONNECT*) /home/travis/src/sql/sql_connect.cc:1402
    #13 0x5617a51fb193 in handle_one_connection /home/travis/src/sql/sql_connect.cc:1308
    #14 0x7f95ea74d6b9 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x76b9)
    #15 0x7f95e9be241c in clone (/lib/x86_64-linux-gnu/libc.so.6+0x10741c)
ASAN:SIGSEGV

But now I can't reproduce it because I keep hitting various other bugs instead.

Comment by Elena Stepanova [ 2019-01-25 ]

Another occurrence: https://travis-ci.org/elenst/travis-tests/jobs/483398657
Poorly reproducible, and intermittent with MDEV-18322.

Comment by Elena Stepanova [ 2019-08-25 ]

Just when I got the test case, the problem happened to be fixed.
The test case below reproduces the failure reliably for me on 10.4 ASAN builds up to and including 235cf969:

CREATE TABLE t1 (a INT CHECK (a < 4));
--connect (con1,localhost,root,,)
--error ER_BAD_FIELD_ERROR
ALTER TABLE t1 CHANGE a b INT, MODIFY COLUMN a SMALLINT;
--connection default
--error ER_BAD_FIELD_ERROR
ALTER TABLE t1 CHANGE COLUMN c d INT;
 
# Cleanup
--disconnect con1
--connection default
DROP TABLE t1;

10.4 ASAN 235cf969

==27577==ERROR: AddressSanitizer: use-after-poison on address 0x62b00008cab0 at pc 0x55bb2177a7c9 bp 0x7ff8ce944460 sp 0x7ff8ce944458
READ of size 1 at 0x62b00008cab0 thread T5
    #0 0x55bb2177a7c8 in my_strcasecmp_utf8 /data/src/10.4-bug/strings/ctype-utf8.c:5109
    #1 0x55bb20646915 in Item_field::rename_fields_processor(void*) /data/src/10.4-bug/sql/item.cc:787
    #2 0x55bb1fc63f68 in Item::walk(bool (Item::*)(void*), bool, void*) /data/src/10.4-bug/sql/item.h:1804
    #3 0x55bb1fd88958 in Item_args::walk_args(bool (Item::*)(void*), bool, void*) /data/src/10.4-bug/sql/item.h:2494
    #4 0x55bb1fd897c2 in Item_func_or_sum::walk(bool (Item::*)(void*), bool, void*) /data/src/10.4-bug/sql/item.h:5060
    #5 0x55bb200e6241 in mysql_prepare_alter_table(THD*, TABLE*, HA_CREATE_INFO*, Alter_info*, Alter_table_ctx*) /data/src/10.4-bug/sql/sql_table.cc:8077
    #6 0x55bb200f073f in mysql_alter_table(THD*, st_mysql_const_lex_string const*, st_mysql_const_lex_string const*, HA_CREATE_INFO*, TABLE_LIST*, Alter_info*, unsigned int, st_order*, bool) /data/src/10.4-bug/sql/sql_table.cc:9737
    #7 0x55bb2024212f in Sql_cmd_alter_table::execute(THD*) /data/src/10.4-bug/sql/sql_alter.cc:508
    #8 0x55bb1fed6754 in mysql_execute_command(THD*) /data/src/10.4-bug/sql/sql_parse.cc:6098
    #9 0x55bb1fee0bd9 in mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool) /data/src/10.4-bug/sql/sql_parse.cc:7908
    #10 0x55bb1febb10d in dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool) /data/src/10.4-bug/sql/sql_parse.cc:1843
    #11 0x55bb1feb801b in do_command(THD*) /data/src/10.4-bug/sql/sql_parse.cc:1360
    #12 0x55bb2022d314 in do_handle_one_connection(CONNECT*) /data/src/10.4-bug/sql/sql_connect.cc:1404
    #13 0x55bb2022ccc8 in handle_one_connection /data/src/10.4-bug/sql/sql_connect.cc:1306
    #14 0x55bb215aebf9 in pfs_spawn_thread /data/src/10.4-bug/storage/perfschema/pfs.cc:1862
    #15 0x7ff8d91524a3 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x74a3)
    #16 0x7ff8d769ad0e in __clone (/lib/x86_64-linux-gnu/libc.so.6+0xe8d0e)
 
0x62b00008cab0 is located 2224 bytes inside of 24716-byte region [0x62b00008c200,0x62b00009228c)
allocated by thread T6 here:
    #0 0x7ff8d9429d28 in malloc (/usr/lib/x86_64-linux-gnu/libasan.so.3+0xc1d28)
    #1 0x55bb216d7e7d in sf_malloc /data/src/10.4-bug/mysys/safemalloc.c:118
    #2 0x55bb216aa190 in my_malloc /data/src/10.4-bug/mysys/my_malloc.c:101
    #3 0x55bb2168a335 in reset_root_defaults /data/src/10.4-bug/mysys/my_alloc.c:151
    #4 0x55bb1fdbfe61 in THD::init_for_queries() /data/src/10.4-bug/sql/sql_class.cc:1387
    #5 0x55bb2022c685 in prepare_new_connection_state(THD*) /data/src/10.4-bug/sql/sql_connect.cc:1237
    #6 0x55bb2022cd0e in thd_prepare_connection(THD*) /data/src/10.4-bug/sql/sql_connect.cc:1321
    #7 0x55bb2022d2be in do_handle_one_connection(CONNECT*) /data/src/10.4-bug/sql/sql_connect.cc:1391
    #8 0x55bb2022ccc8 in handle_one_connection /data/src/10.4-bug/sql/sql_connect.cc:1306
    #9 0x55bb215aebf9 in pfs_spawn_thread /data/src/10.4-bug/storage/perfschema/pfs.cc:1862
    #10 0x7ff8d91524a3 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x74a3)
 
Thread T5 created by T0 here:
    #0 0x7ff8d9398f59 in __interceptor_pthread_create (/usr/lib/x86_64-linux-gnu/libasan.so.3+0x30f59)
    #1 0x55bb215aefe6 in spawn_thread_v1 /data/src/10.4-bug/storage/perfschema/pfs.cc:1912
    #2 0x55bb1fc1f6f8 in inline_mysql_thread_create /data/src/10.4-bug/include/mysql/psi/mysql_thread.h:1268
    #3 0x55bb1fc3382a in create_thread_to_handle_connection(CONNECT*) /data/src/10.4-bug/sql/mysqld.cc:6238
    #4 0x55bb1fc33f0d in create_new_thread(CONNECT*) /data/src/10.4-bug/sql/mysqld.cc:6308
    #5 0x55bb1fc34298 in handle_accepted_socket(st_mysql_socket, st_mysql_socket) /data/src/10.4-bug/sql/mysqld.cc:6406
    #6 0x55bb1fc34eea in handle_connections_sockets() /data/src/10.4-bug/sql/mysqld.cc:6564
    #7 0x55bb1fc330ab in mysqld_main(int, char**) /data/src/10.4-bug/sql/mysqld.cc:5896
    #8 0x55bb1fc1d5df in main /data/src/10.4-bug/sql/main.cc:25
    #9 0x7ff8d75d22e0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x202e0)
 
Thread T6 created by T0 here:
    #0 0x7ff8d9398f59 in __interceptor_pthread_create (/usr/lib/x86_64-linux-gnu/libasan.so.3+0x30f59)
    #1 0x55bb215aefe6 in spawn_thread_v1 /data/src/10.4-bug/storage/perfschema/pfs.cc:1912
    #2 0x55bb1fc1f6f8 in inline_mysql_thread_create /data/src/10.4-bug/include/mysql/psi/mysql_thread.h:1268
    #3 0x55bb1fc3382a in create_thread_to_handle_connection(CONNECT*) /data/src/10.4-bug/sql/mysqld.cc:6238
    #4 0x55bb1fc33f0d in create_new_thread(CONNECT*) /data/src/10.4-bug/sql/mysqld.cc:6308
    #5 0x55bb1fc34298 in handle_accepted_socket(st_mysql_socket, st_mysql_socket) /data/src/10.4-bug/sql/mysqld.cc:6406
    #6 0x55bb1fc34eea in handle_connections_sockets() /data/src/10.4-bug/sql/mysqld.cc:6564
    #7 0x55bb1fc330ab in mysqld_main(int, char**) /data/src/10.4-bug/sql/mysqld.cc:5896
    #8 0x55bb1fc1d5df in main /data/src/10.4-bug/sql/main.cc:25
    #9 0x7ff8d75d22e0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x202e0)
 
SUMMARY: AddressSanitizer: use-after-poison /data/src/10.4-bug/strings/ctype-utf8.c:5109 in my_strcasecmp_utf8
Shadow bytes around the buggy address:
  0x0c5680009900: f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7
  0x0c5680009910: f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7
  0x0c5680009920: f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7
  0x0c5680009930: f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7
  0x0c5680009940: f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7
=>0x0c5680009950: f7 f7 f7 f7 f7 f7[f7]f7 f7 f7 f7 f7 f7 f7 f7 f7
  0x0c5680009960: f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7
  0x0c5680009970: f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7
  0x0c5680009980: f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7
  0x0c5680009990: f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7
  0x0c56800099a0: f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7 f7
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Heap right redzone:      fb
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack partial redzone:   f4
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==27577==ABORTING

It stopped happening after this merge:

commit efb8485d85b19a2a729310adc6779ca649198f29
Merge: 235cf969d21 b96e4424fb4
Author: Marko Mäkelä
Date:   Fri Aug 23 08:06:17 2019 +0300
 
    Merge 10.3 into 10.4, except for MDEV-20265

In particular, after this change in sql/sql_table.cc:

diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index be3f9b46c0f..1543a445d7b 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -7831,7 +7831,6 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
   Create_field *def;
   Field **f_ptr,*field;
   MY_BITMAP *dropped_fields= NULL; // if it's NULL - no dropped fields
-  bool save_reopen= table->m_needs_reopen;
   DBUG_ENTER("mysql_prepare_alter_table");
 
   /*
@@ -8511,9 +8510,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
   alter_info->create_list.swap(new_create_list);
   alter_info->key_list.swap(new_key_list);
   alter_info->check_constraint_list.swap(new_constraint_list);
-  DBUG_RETURN(rc);
 err:
-  table->m_needs_reopen= save_reopen;
   DBUG_RETURN(rc);
 }

which came from this patch:

commit 1639873671e85748f0dcf89ce76ef4efce9a087c
Author: Aleksey Midenkov
Date:   Thu Aug 15 22:32:59 2019 +0300
 
    MDEV-18154 Deadlock and assertion upon no-op ALTER under LOCK TABLES
    
    1. Revert incorrect treatment of m_needs_reopen;
    2. Close single instance of TABLE instead of all instances since
       reopened only those that are marked for reopen.

Comment by Elena Stepanova [ 2019-08-25 ]

Thus closing as fixed by the patch for MDEV-18154.

Generated at Thu Feb 08 08:39:29 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.