328 lines
18 KiB
Plaintext
328 lines
18 KiB
Plaintext
*** Comments ***
|
|
Tests for OpenTitan at commit f243e6802143374741739d2c164c4f2f61697669
|
|
|
|
*** Variables ***
|
|
${UART} sysbus.uart0
|
|
${AES_BIN} @https://dl.antmicro.com/projects/renode/aes_smoketest_prog_fpga_cw310.elf-s_325384-ef59f6e8ac7f56e8f3ee0f151652464a95023ad7
|
|
${CSRNG_BIN} @https://dl.antmicro.com/projects/renode/csrng_smoketest_prog_fpga_cw310.elf-s_336108-1a49396335efc0975ac5d4d99241028bb4711419
|
|
${FLASH_CTRL_BIN} @https://dl.antmicro.com/projects/renode/flash_ctrl_test_prog_fpga_cw310.elf-s_424784-c8fa392bab21661e29224b2ee8678076502aa242
|
|
${GPIO_BIN} @https://dl.antmicro.com/projects/renode/gpio_smoketest_prog_fpga_cw310.elf-s_362872-de8f5853a07e44dd8ba55651d5293bd33f9b66d6
|
|
${HMAC_BIN} @https://dl.antmicro.com/projects/renode/hmac_smoketest_prog_fpga_cw310.elf-s_323008-274f6dd2f28ca66f6baa1be5304497c0ce7b6201
|
|
${KMAC_BIN} @https://dl.antmicro.com/projects/renode/kmac_smoketest_prog_fpga_cw310.elf-s_347412-b12dd1cc85f45d1e3256613441c41afe2ed127f0
|
|
${KMAC_CSHAKE_BIN} @https://dl.antmicro.com/projects/renode/kmac_mode_cshake_test_prog_fpga_cw310.elf-s_334036-371c0b874622b5468d391bf76c2d4494a2621020
|
|
${KMAC_KMAC_BIN} @https://dl.antmicro.com/projects/renode/kmac_mode_kmac_test_prog_fpga_cw310.elf-s_336072-7200324f9eb2f9feba7b3c9d0a99e8faaf0b118c
|
|
${LC_OTP_CFG} @https://dl.antmicro.com/projects/renode/lc_ctrl_otp_hw_cfg_test_prog_fpga_cw310.elf-s_351476-97168d00236be711f39cd24ec343b8ee593852ef
|
|
${OTP_VMEM} @https://dl.antmicro.com/projects/renode/otp_img_fpga_cw310.vmem-s_49520-971ccda1d11a9f0c690f4f32b72f1b5f3b458059
|
|
${RESET_BIN} @https://dl.antmicro.com/projects/renode/rstmgr_smoketest_prog_fpga_cw310.elf-s_288244-c3d023ac96dc447e626ead042e1d8337d5ceaee6
|
|
${SW_RESET_BIN} @https://dl.antmicro.com/projects/renode/rstmgr_sw_req_test_prog_fpga_cw310.elf-s_306308-2cc96fe5320d0c1b54153ddc6506e09d90133917
|
|
${TEST_ROM} @https://dl.antmicro.com/projects/renode/test_rom_fpga_cw310.elf-s_447072-1cdfd7b2a98b0c09f158d8267c5e9fbbf34dd33b
|
|
${TEST_ROM_SCR_VMEM} @https://dl.antmicro.com/projects/renode/test_rom_fpga_cw310.39.scr.vmem-s_103772-d3a8f17879eedbcbf18e554bfd7871ccd992414e
|
|
${TIMER_BIN} @https://dl.antmicro.com/projects/renode/rv_timer_smoketest_prog_fpga_cw310.elf-s_310476-ace649750b26ef6ae36c099bf777fe280212ef21
|
|
${UART_BIN} @https://dl.antmicro.com/projects/renode/uart_smoketest_prog_fpga_cw310.elf-s_282560-87570a6fcb3684b126ef3c0ca9bfd53a0dc68936
|
|
${ALERT_HANDLER} @https://dl.antmicro.com/projects/renode/alert_test_prog_fpga_cw310.elf-s_681764-d7203f6da5d986ce9a57d641ff1261a450a4c63d
|
|
${ALERT_HANDLER_PING} @https://dl.antmicro.com/projects/renode/alert_handler_ping_timeout_test_prog_fpga_cw310.elf-s_484472-9abdc0b5e973cde8b9746d2e8ec8a997dbc8d0ba
|
|
${SPI_HOST} @https://dl.antmicro.com/projects/renode/spi_host_smoketest_prog_fpga_cw310.elf-s_321216-41ad0ca0446549371d07b4d8209ddfbc08c8be33
|
|
${AON_TIMER_IRQ_BIN} @https://dl.antmicro.com/projects/renode/aon_timer_irq_test_prog_fpga_cw310.elf-s_388756-3411f90c38a58858140ae754bc06d7b6c2c2eff5
|
|
${AON_TIMER_WDOG_SLEEP_BIN} @https://dl.antmicro.com/projects/renode/aon_timer_sleep_wdog_sleep_pause_test_prog_fpga_cw310.elf-s_373448-c0d65458130e457165e7575712a0ccb66ad27f80
|
|
${AON_TIMER_BIN} @https://dl.antmicro.com/projects/renode/aon_timer_smoketest_prog_fpga_cw310.elf-s_317844-46f92ea7a8772be2afcf695e7fdb9df44216c852
|
|
${AON_TIMER_WDOG_BITE_BIN} @https://dl.antmicro.com/projects/renode/aon_timer_wdog_bite_reset_test_prog_fpga_cw310.elf-s_371232-16ea5f84891ef4973add5fcf42b3e7fb9eb236d2
|
|
${ENTROPY_SRC_AST_REQ_BIN} @https://dl.antmicro.com/projects/renode/entropy_src_ast_rng_req_test_prog_fpga_cw310.elf-s_322228-5d384e67d50472d80b8d66cf180ceb3b71e5ab15
|
|
${ENTROPY_SRC_FW_OVR_BIN} @https://dl.antmicro.com/projects/renode/entropy_src_fw_ovr_test_prog_fpga_cw310.elf-s_347200-0e9636ca3c57e66a7a471143a0c48012d2c3753f
|
|
${ENTROPY_SRC_KAT_BIN} @https://dl.antmicro.com/projects/renode/entropy_src_kat_test_prog_fpga_cw310.elf-s_391260-76d830cb1746909c033f1f8930cae428855b4b24
|
|
${SRAM_CTRL_BIN} @https://dl.antmicro.com/projects/renode/sram_ctrl_smoketest_prog_fpga_cw310.elf-s_291188-63360ab9786db3a84da77b8766e458d119227dd5
|
|
${OTBN_ECDSA_BIN} @https://dl.antmicro.com/projects/renode/otbn_ecdsa_op_irq_test_prog_fpga_cw310.elf-s_460328-d9b26904a2e79a6df89bda0d74c267351d839a2d
|
|
${OTBN_IRQ_BIN} @https://dl.antmicro.com/projects/renode/otbn_irq_test_prog_fpga_cw310.elf-s_445860-54133c6721deb5c0ac8713a06da7f93253276f7e
|
|
${OTBN_SCRAMBLE_BIN} @https://dl.antmicro.com/projects/renode/otbn_mem_scramble_test_prog_fpga_cw310.elf-s_357976-17001e15e1ccc12075ff0bb108b0bc8fa0a96427
|
|
${OTBN_RAND_BIN} @https://dl.antmicro.com/projects/renode/otbn_randomness_test_prog_fpga_cw310.elf-s_481904-c61657cd5db42f70c7814644b436405610850e33
|
|
${OTBN_SMOKETEST_BIN} @https://dl.antmicro.com/projects/renode/otbn_smoketest_prog_fpga_cw310.elf-s_444776-8169ee20540f64f867206d17a18e8de5e6270f8e
|
|
${OTBN_RSA_BIN} @https://dl.antmicro.com/projects/renode/otbn_rsa_test_prog_fpga_cw310.elf-s_446140-6d6a4c0197d9fcc54c44cbe68db0003d7cb44783
|
|
${OTBN_SIMPLE_SMOKETEST_BIN} @https://dl.antmicro.com/projects/renode/open_titan-earlgrey--otbn_simple_smoketest.elf-s_9164-5362a0be6d650280b2f732460e786a8d7263126b
|
|
|
|
|
|
${LEDS}= SEPARATOR=
|
|
... """ ${\n}
|
|
... gpio: ${\n}
|
|
... ${SPACE*4}0 -> led0@0 ${\n}
|
|
... ${SPACE*4}1 -> led1@0 ${\n}
|
|
... ${SPACE*4}2 -> led2@0 ${\n}
|
|
... ${SPACE*4}3 -> led3@0 ${\n}
|
|
... ${\n}
|
|
... led0: Miscellaneous.LED @ gpio 0 ${\n}
|
|
... led1: Miscellaneous.LED @ gpio 1 ${\n}
|
|
... led2: Miscellaneous.LED @ gpio 2 ${\n}
|
|
... led3: Miscellaneous.LED @ gpio 3 ${\n}
|
|
... """
|
|
|
|
${SPI_FLASH}= SEPARATOR=
|
|
... """ ${\n}
|
|
... spi_flash: Memory.MappedMemory ${\n}
|
|
... ${SPACE*4}size: 0x1000000 ${\n}
|
|
... ${\n}
|
|
... mt25q: SPI.Micron_MT25Q @ spi_host0 0 ${\n}
|
|
... ${SPACE*4}underlyingMemory: spi_flash ${\n}
|
|
... """
|
|
|
|
*** Keywords ***
|
|
Setup Machine
|
|
Execute Command include @scripts/single-node/opentitan-earlgrey.resc
|
|
Execute Command machine LoadPlatformDescriptionFromString ${LEDS}
|
|
Execute Command machine LoadPlatformDescriptionFromString ${SPI_FLASH}
|
|
Execute Command sysbus.otp_ctrl LoadVmem ${OTP_VMEM}
|
|
Execute Command rom_ctrl LoadVmem ${TEST_ROM_SCR_VMEM}
|
|
Execute Command cpu0 PC 0x00008084
|
|
|
|
Set Default Uart Timeout 1
|
|
Create Terminal Tester ${UART}
|
|
|
|
Prepare Test
|
|
[Arguments] ${bin}
|
|
Execute Command $bin=${bin}
|
|
Execute Command $boot=${TEST_ROM}
|
|
Setup Machine
|
|
|
|
Execute Test
|
|
Start Emulation
|
|
Wait For Line On UART PASS
|
|
|
|
Run Test
|
|
[Arguments] ${bin}
|
|
Prepare Test ${bin}
|
|
Execute Test
|
|
|
|
Core Register Should Be Equal
|
|
[Arguments] ${idx} ${expected_value}
|
|
|
|
${val}= Execute Command otbn GetCoreRegister ${idx}
|
|
Should Be Equal As Numbers ${val} ${expected_value} Register x${idx} value mismatch (actual != expected)
|
|
|
|
Wide Register Should Be Equal
|
|
[Arguments] ${idx} ${expected_value}
|
|
|
|
${val}= Execute Command otbn GetWideRegister ${idx} False
|
|
Should Be Equal ${val.strip()} ${expected_value} Register w${idx} value mismatch (actual != expected)
|
|
|
|
*** Test Cases ***
|
|
Should Print To Uart
|
|
Setup Machine
|
|
Start Emulation
|
|
|
|
Wait For Line On Uart The LEDs show the lower nibble of the ASCII code of the last character.
|
|
|
|
Provides initialization
|
|
|
|
Should Echo On Uart
|
|
Requires initialization
|
|
|
|
Write Line To Uart Testing testing 1-2-3
|
|
|
|
Provides working-uart
|
|
|
|
Should Display Output on GPIO
|
|
Requires working-uart
|
|
|
|
${led0}= Create LED Tester sysbus.gpio.led0 defaultTimeout=0.2
|
|
${led1}= Create LED Tester sysbus.gpio.led1 defaultTimeout=0.2
|
|
${led2}= Create LED Tester sysbus.gpio.led2 defaultTimeout=0.2
|
|
${led3}= Create LED Tester sysbus.gpio.led3 defaultTimeout=0.2
|
|
|
|
Send Key To Uart 0x0
|
|
|
|
Assert LED State false testerId=${led0}
|
|
Assert LED State false testerId=${led1}
|
|
Assert LED State false testerId=${led2}
|
|
Assert LED State false testerId=${led3}
|
|
|
|
Write Char On Uart B
|
|
# B is 0100 0010. Take the lower 4 bits.
|
|
|
|
Assert LED State false testerId=${led0}
|
|
Assert LED State true testerId=${led1}
|
|
Assert LED State false testerId=${led2}
|
|
Assert LED State false testerId=${led3}
|
|
|
|
Should Pass AES Smoketest
|
|
Run Test ${AES_BIN}
|
|
|
|
Should Pass UART Smoketest
|
|
Run Test ${UART_BIN}
|
|
|
|
Should Pass HMAC Smoketest
|
|
Run Test ${HMAC_BIN}
|
|
|
|
Should Pass Flash Smoketest
|
|
Run Test ${FLASH_CTRL_BIN}
|
|
|
|
Should Pass Timer Smoketest
|
|
Run Test ${TIMER_BIN}
|
|
|
|
Should Pass KMAC Smoketest
|
|
Run Test ${KMAC_BIN}
|
|
|
|
Should Pass KMAC CSHAKE Mode
|
|
Run Test ${KMAC_CSHAKE_BIN}
|
|
|
|
Should Pass KMAC KMAC Mode
|
|
Run Test ${KMAC_KMAC_BIN}
|
|
|
|
Should Pass Reset Smoketest
|
|
Run Test ${RESET_BIN}
|
|
|
|
Should Pass Software Reset Test
|
|
Run Test ${SW_RESET_BIN}
|
|
|
|
Should Pass Life Cycle Smoketest
|
|
Run Test ${LC_OTP_CFG}
|
|
|
|
Should Pass CSRNG Smoketest
|
|
Run Test ${CSRNG_BIN}
|
|
|
|
Should Pass GPIO Smoketest
|
|
Run Test ${GPIO_BIN}
|
|
|
|
Should Pass Alert Handler Smoketest
|
|
Run Test ${ALERT_HANDLER}
|
|
|
|
Should Pass Alert Handler Ping Smoketest
|
|
Run Test ${ALERT_HANDLER_PING}
|
|
|
|
Should Pass SPI Host Smoketest
|
|
Run Test ${SPI_HOST}
|
|
|
|
Should Pass Aon Timer Interrupt Smoketest
|
|
Run Test ${AON_TIMER_IRQ_BIN}
|
|
|
|
Should Pass Aon Timer Watchdog Sleep Pause Smoketest
|
|
Run Test ${AON_TIMER_WDOG_SLEEP_BIN}
|
|
|
|
Should Pass Aon Timer Smoketest
|
|
Run Test ${AON_TIMER_BIN}
|
|
|
|
Should Pass Aon Timer Watchdog Bite Reset Smoketest
|
|
Run Test ${AON_TIMER_WDOG_BITE_BIN}
|
|
|
|
Should Try To Reset On The System Reset Control Combo
|
|
Setup Machine
|
|
Create Log Tester 0
|
|
Execute Command sysbus.sysrst_ctrl WriteDoubleWord 0x54 0x8 # Set combo0 to just pwrButton
|
|
Execute Command sysbus.sysrst_ctrl WriteDoubleWord 0x74 0x8 # Set combo0 action to rstReq
|
|
Execute Command sysbus.sysrst_ctrl WriteDoubleWord 0x30 0x40 # Invert the pwrButton input
|
|
# Expect error as this should work only when done by CPU
|
|
Wait For Log Entry Couldn't find the CPU requesting translation block restart.
|
|
Wait For Log Entry Software reset failed.
|
|
|
|
Should Pass Entropy Source Analog Sensor Top Request Smoketest
|
|
Run Test ${ENTROPY_SRC_AST_REQ_BIN}
|
|
|
|
Should Pass Entropy Source Firmware Override Smoketest
|
|
Run Test ${ENTROPY_SRC_FW_OVR_BIN}
|
|
|
|
Should Pass Entropy Source Known Answer Test Smoketest
|
|
Run Test ${ENTROPY_SRC_KAT_BIN}
|
|
|
|
Should Pass SRAM Controller Smoketest
|
|
Run Test ${SRAM_CTRL_BIN}
|
|
|
|
Should Pass OTBN ECDSA Test
|
|
Run Test ${OTBN_ECDSA_BIN}
|
|
|
|
Should Pass OTBN IRQ Test
|
|
Run Test ${OTBN_IRQ_BIN}
|
|
|
|
Should Pass OTBN Memory Scramble Test
|
|
Run Test ${OTBN_SCRAMBLE_BIN}
|
|
|
|
Should Pass OTBN Randomness Test
|
|
Run Test ${OTBN_RAND_BIN}
|
|
|
|
Should Pass OTBN RSA Test
|
|
Run Test ${OTBN_RSA_BIN}
|
|
|
|
Should Pass OTBN Smoketest Test
|
|
Run Test ${OTBN_SMOKETEST_BIN}
|
|
|
|
Should Pass OTBN Simple Smoketest Test
|
|
Create Log Tester 3
|
|
Execute Command include @scripts/single-node/opentitan-earlgrey.resc
|
|
Execute Command sysbus.otbn FixedRandomPattern "0xAAAAAAAA99999999AAAAAAAA99999999AAAAAAAA99999999AAAAAAAA99999999"
|
|
|
|
Execute Command sysbus.otbn KeyShare0 "0xDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEF"
|
|
Execute Command sysbus.otbn KeyShare1 "0xBAADF00DBAADF00DBAADF00DBAADF00DBAADF00DBAADF00DBAADF00DBAADF00DBAADF00DBAADF00DBAADF00DBAADF00D"
|
|
|
|
Execute Command logLevel -1 sysbus.otbn
|
|
|
|
# load program directly to OTBN
|
|
Execute Command sysbus.otbn LoadELF ${OTBN_SIMPLE_SMOKETEST_BIN}
|
|
|
|
# trigger execution of the program
|
|
Execute Command allowPrivates true
|
|
Execute Command sysbus.otbn HandleCommand 0xd8
|
|
|
|
# wait for the program to end
|
|
Wait For Log Entry Execution finished
|
|
|
|
# verify final state of registers
|
|
Core Register Should Be Equal 2 0xd0beb513
|
|
Core Register Should Be Equal 3 0xa0be911a
|
|
Core Register Should Be Equal 4 0x717d462d
|
|
Core Register Should Be Equal 5 0xcfffdc07
|
|
Core Register Should Be Equal 6 0xf0beb51b
|
|
Core Register Should Be Equal 7 0x80be9112
|
|
Core Register Should Be Equal 8 0x70002409
|
|
Core Register Should Be Equal 9 0xd0beb533
|
|
Core Register Should Be Equal 10 0x00000510
|
|
Core Register Should Be Equal 11 0xd0beb169
|
|
Core Register Should Be Equal 12 0xfad44c00
|
|
Core Register Should Be Equal 13 0x000685f5
|
|
Core Register Should Be Equal 14 0xffa17d6a
|
|
Core Register Should Be Equal 15 0x4c000000
|
|
Core Register Should Be Equal 16 0x00000034
|
|
Core Register Should Be Equal 17 0xfffffff4
|
|
Core Register Should Be Equal 18 0xfacefeed
|
|
Core Register Should Be Equal 19 0xd0beb533
|
|
Core Register Should Be Equal 20 0x00000123
|
|
Core Register Should Be Equal 21 0x00000123
|
|
Core Register Should Be Equal 22 0xcafef010
|
|
Core Register Should Be Equal 23 0x89c9b54f
|
|
Core Register Should Be Equal 24 0x00000052
|
|
Core Register Should Be Equal 25 0x00000020
|
|
Core Register Should Be Equal 26 0x00000016
|
|
Core Register Should Be Equal 27 0x0000001a
|
|
Core Register Should Be Equal 28 0x00400000
|
|
Core Register Should Be Equal 29 0x00018000
|
|
Core Register Should Be Equal 30 0x00000000
|
|
Core Register Should Be Equal 31 0x00000804
|
|
|
|
Wide Register Should Be Equal 0 0x37adadaef9dbff5e738800755466a52c67a8c2216978ad1b257694340f09b7c8
|
|
Wide Register Should Be Equal 1 0x00000000000000000000000000000000baadf00dbaadf00dbaadf00dbaadf00d
|
|
Wide Register Should Be Equal 2 0x440659a832f54897440659a832f54898dd6208a5cc50f794dd6208a5cc50f791
|
|
Wide Register Should Be Equal 3 0x23a776b0bbc2837034745ffa22168ae87245a2d00357f208431165e5ed103473
|
|
Wide Register Should Be Equal 4 0xce52215b888f503cdf1f0aa4eee357b51cf04d7ad024bed4edbc1090b9dd0141
|
|
Wide Register Should Be Equal 5 0xfafeeeaebbb9f9dfabebbfef99fdf9dfefbafaaff9bfd9ffbaeebbbbdbff9bdb
|
|
Wide Register Should Be Equal 6 0x28a88802000889908888a00a88189108828aa820099818088822aa2a11109898
|
|
Wide Register Should Be Equal 7 0xd25666acbbb1704f23631fe511e568d76d30528ff027c1f732cc1191caef0343
|
|
Wide Register Should Be Equal 8 0x870333f9ddd7162976364ab077830eb1386507da9641a791679944c4ac896525
|
|
Wide Register Should Be Equal 9 0xd7c12b4df2c374c335d9da9bb4d6d555555554cccccccd55555554cccccccd55
|
|
Wide Register Should Be Equal 10 0x050111511112d2ed5414401032ced2ed1045054fd30cf2cd45114443f0cd30f0
|
|
Wide Register Should Be Equal 11 0xd75777fdccc4433c77775ff544b43bc47d7557dfc334b4c477dd55d5bbbc3433
|
|
Wide Register Should Be Equal 12 0x2caccd53332aa9a2ccccb54aab1aa22ad2caad35299b1b2acd32ab2b22229a9a
|
|
Wide Register Should Be Equal 13 0xa1a554085564a69a1252555a43c8b58a4a25a045a689a3aa2089656597ba66a7
|
|
Wide Register Should Be Equal 14 0x5ec45f47d09a8aecac10254c2c59e4068dba5ca7630e74e6bcee99917956327a
|
|
Wide Register Should Be Equal 15 0xdc58894eddd71629cb8ba00577830eb18dba5d2f9641a791bcee9a19ac896524
|
|
Wide Register Should Be Equal 16 0xce52215b888f503cdf1f0aa4eee357b51cf04d7ad024bed4edbc1090b9dd0141
|
|
Wide Register Should Be Equal 17 0x5555555533333333555555553333333355555555333333335555555533333331
|
|
Wide Register Should Be Equal 18 0x23a7769fbbc2838134745fe922168a4ec79af82569be586e9866bb3b53769ada
|
|
Wide Register Should Be Equal 19 0x28a88800000889828888a0098818910a828aa801099818000000000000000000
|
|
Wide Register Should Be Equal 20 0x78fccc062228e9d689c9b54f887cf14ec79af82569be57c3edbc10a1b9dd0130
|
|
Wide Register Should Be Equal 21 0x78fccc062228e9d689c9b54f887cf1eeefbafabdf9bfd9eebaeebbbbdbff9bfa
|
|
Wide Register Should Be Equal 22 0x78fccc062228e9d689c9b54f887cf1eeefbafabdf9bfd9eebaeebbbbdbff9db7
|
|
Wide Register Should Be Equal 23 0x78fccc062228e9d689c9b54f887cf1eeefbafabdf9bfd9eebaeebbbbdbff99f3
|
|
Wide Register Should Be Equal 24 0xccccccccbbbbbbbbaaaaaaaafacefeeddeadbeefcafed00dd0beb5331234abcd
|
|
Wide Register Should Be Equal 25 0xccccccccbbbbbbbbaaaaaaaafacefeeddeadbeefcafed00dd0beb5331234abcd
|
|
Wide Register Should Be Equal 26 0x78fccc062228e9d689c9b54f887cf1eeefbafabdf9bfd9eebaeebbbbdbff9bfa
|
|
Wide Register Should Be Equal 27 0x28a88802000889908888a00a88189108828aa820099818088822aa2a11109898
|
|
Wide Register Should Be Equal 28 0xd25666acbbb1704f23631fe511e568d76d30528ff027c1f732cc1191caef0343
|
|
Wide Register Should Be Equal 29 0x4f0d4b819f24f0c164341d3c26628bdb5763bcdf63388709e0654fefeb0953c2
|
|
Wide Register Should Be Equal 30 0x2167f87de9ee7ac7ffa3d88bab123192aee492924efa2ec9b55098e068ba2fa1
|
|
Wide Register Should Be Equal 31 0x37adadaef9dbff5e738800755466a52c67a8c2216978ad1b257694340f09b7c8
|
|
|