├── .github └── workflows │ └── test.yml ├── .gitignore ├── Cargo.toml ├── README.md ├── generate_testdata.sh ├── src ├── decode.rs ├── lib.rs ├── test_utils.rs └── types.rs └── testdata ├── .txt ├── 0x00000000006c3852cbEf3e08E8dF289169EdE581_decoded.txt ├── 0x00000000006c3852cbEf3e08E8dF289169EdE581_encoded.txt ├── 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48_decoded.txt ├── 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48_encoded.txt ├── 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2_decoded.txt ├── 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2_encoded.txt ├── 0xDef1C0ded9bec7F1a1670819833240f027b25EfF_decoded.txt ├── 0xDef1C0ded9bec7F1a1670819833240f027b25EfF_encoded.txt ├── 0xE592427A0AEce92De3Edee1F18E0157C05861564_decoded.txt └── 0xE592427A0AEce92De3Edee1F18E0157C05861564_encoded.txt /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | on: [push] 2 | 3 | 4 | name: CI 5 | 6 | jobs: 7 | check: 8 | name: Check 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Checkout sources 12 | uses: actions/checkout@v2 13 | 14 | - name: Install stable toolchain 15 | uses: actions-rs/toolchain@v1 16 | with: 17 | profile: minimal 18 | toolchain: stable 19 | override: true 20 | 21 | - name: Run cargo check 22 | uses: actions-rs/cargo@v1 23 | with: 24 | command: check 25 | 26 | test: 27 | name: Test Suite 28 | runs-on: ubuntu-latest 29 | steps: 30 | - name: Checkout sources 31 | uses: actions/checkout@v2 32 | 33 | - name: Install stable toolchain 34 | uses: actions-rs/toolchain@v1 35 | with: 36 | profile: minimal 37 | toolchain: stable 38 | override: true 39 | 40 | - name: Run cargo test 41 | uses: actions-rs/cargo@v1 42 | env: 43 | RPC_URL: ${{ secrets.RPC_URL }} 44 | with: 45 | command: test 46 | 47 | lints: 48 | name: Lints 49 | runs-on: ubuntu-latest 50 | steps: 51 | - name: Checkout sources 52 | uses: actions/checkout@v2 53 | 54 | - name: Install stable toolchain 55 | uses: actions-rs/toolchain@v1 56 | with: 57 | profile: minimal 58 | toolchain: stable 59 | override: true 60 | components: rustfmt, clippy 61 | 62 | - name: Run cargo fmt 63 | uses: actions-rs/cargo@v1 64 | with: 65 | command: fmt 66 | args: --all -- --check 67 | 68 | - name: Run cargo clippy 69 | uses: actions-rs/cargo@v1 70 | with: 71 | command: clippy 72 | args: -- -D warnings 73 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /Cargo.lock 3 | .env 4 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "evm-disassembler" 3 | version = "0.5.0" 4 | authors = ["Christian Koopmann "] 5 | license = "MIT OR Apache-2.0" 6 | edition = "2021" 7 | readme = "README.md" 8 | documentation = "https://docs.rs/evm-disassembler" 9 | repository = "https://github.com/ckoopmann/evm-disassembler" 10 | homepage = "https://docs.rs/evm_disassembler" 11 | description = """ 12 | Disassemble EVM bytecode into individual Opcodes and format into human readable strings. 13 | """ 14 | 15 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 16 | 17 | [dependencies] 18 | eyre = "0.6.8" 19 | hex = "0.4.3" 20 | 21 | [dev-dependencies] 22 | async-std = { version = "1.12.0", features = ["attributes"] } 23 | ethers = "2.0.0" 24 | rstest = "0.16.0" 25 | tokio = { version = "1.26.0", features = ["full"] } 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Disassemble EVM bytecode 2 | Lightweight library with the sole purpose of decoding evm bytecode into individual Opcodes and formatting them in a human readable way 3 | 4 | # Inspiration 5 | This library was inspired by the [pyevmasm](https://github.com/crytic/pyevmasm). When formatting the decoded operations using the inbuilt function the output should be equivalent to that of `pyevasm`, which is tested on the bytecode of several large evm contracts. 6 | 7 | # Installation 8 | `cargo add evm-disassembler` 9 | 10 | # Documentation 11 | See the API reference [here](https://docs.rs/evm-disassembler/). 12 | 13 | # Example 14 | ```rust 15 | use evm_disassembler::{disassemble_str, disassemble_bytes, format_operations}; 16 | 17 | fn main() { 18 | 19 | let bytecode = "608060405260043610603f57600035"; 20 | // Decode from string directly 21 | let instructions = disassemble_str(bytecode).unwrap(); 22 | println!("{}", format_operations(instructions)); 23 | 24 | let bytes = hex::decode(bytecode).unwrap(); 25 | // Decode from Vec with identical output as above 26 | let instructions_from_bytes = disassemble_bytes(bytes).unwrap(); 27 | println!("{}", format_operations(instructions_from_bytes)); 28 | 29 | } 30 | ``` 31 | 32 | # Tests 33 | You can run the tests as usual with `cargo test`. 34 | The main tests compare the output of this library when decoding contract bytecode against the output from `pyevasm`. The input and reference files for these tests are saved in `testdata`. 35 | To generate new testdata for these tests you can run the `generate_testdata.sh` script with an array of ethereum mainnet addresses. (Requires prior installation of [`foundry`](https://book.getfoundry.sh/) and `pyevasm`). 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /generate_testdata.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | for address in $@; do 3 | echo "Generating test data for $address"; 4 | cast code --rpc-url "https://cloudflare-eth.com" $address | tee "testdata/${address}_encoded.txt" | evmasm -d >> "testdata/${address}_decoded.txt"; 5 | done 6 | 7 | -------------------------------------------------------------------------------- /src/decode.rs: -------------------------------------------------------------------------------- 1 | use crate::types::{Opcode, Operation}; 2 | use eyre::Result; 3 | 4 | pub fn decode_operation( 5 | bytes: &mut dyn ExactSizeIterator, 6 | cur_offset: u32, 7 | ) -> Result<(Operation, u32)> { 8 | let encoded_opcode = bytes.next().expect("Unexpected end of input"); 9 | let num_bytes = match encoded_opcode { 10 | 0x60..=0x7f => encoded_opcode - 0x5f, 11 | _ => 0, 12 | }; 13 | 14 | let mut new_offset = cur_offset + 1; 15 | let opcode = Opcode::from_byte(encoded_opcode); 16 | let mut operation = Operation::new(opcode, cur_offset); 17 | if num_bytes > 0 { 18 | new_offset += num_bytes as u32; 19 | operation = operation.with_bytes(num_bytes, bytes)? 20 | }; 21 | Ok((operation, new_offset)) 22 | } 23 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | //! Disassemble evm bytecode into individual instructions. 2 | //! 3 | //! This crate provides a simple interface for disassembling evm bytecode into individual 4 | //! instructions / opcodes. 5 | //! It supports both hex encoded strings as well as a vector of bytes as input 6 | //! Additionally it provides a method to format the disassembled instructions into a human readable 7 | //! format identical to that of the [pyevmasm](https://github.com/crytic/pyevmasm) library 8 | //! 9 | //! ```rust 10 | //! use evm_disassembler::{disassemble_str, disassemble_bytes, format_operations}; 11 | //! 12 | //! let bytecode = "60606040526040"; 13 | //! let instructions = disassemble_str(bytecode).unwrap(); 14 | //! // Will print: 15 | //! // 00000000: PUSH1 0x60 16 | //! // 00000002: PUSH1 0x40 17 | //! // 00000004: MSTORE 18 | //! // 00000005: PUSH1 0x40 19 | //! println!("{}", format_operations(instructions).unwrap()); 20 | //! 21 | //! let bytes = hex::decode(bytecode).unwrap(); 22 | //! let instructions_from_bytes = disassemble_bytes(bytes).unwrap(); 23 | //! println!("{}", format_operations(instructions_from_bytes).unwrap()); 24 | //! 25 | //! ``` 26 | #![warn(missing_docs)] 27 | use crate::decode::decode_operation; 28 | use std::fmt::Write; 29 | 30 | use eyre::Result; 31 | 32 | mod decode; 33 | 34 | pub mod types; 35 | pub use types::{Opcode, Operation}; 36 | 37 | #[cfg(test)] 38 | mod test_utils; 39 | 40 | /// Disassemble a hex encoded string into a vector of instructions / operations 41 | /// 42 | /// # Arguments 43 | /// - `input` - A hex encoded string representing the bytecode to disassemble 44 | /// 45 | /// # Examples 46 | /// 47 | /// ```rust 48 | /// use evm_disassembler::disassemble_str; 49 | /// 50 | /// let bytecode = "0x608060405260043610603f57600035"; 51 | /// let instructions = disassemble_str(bytecode).unwrap(); 52 | /// ``` 53 | pub fn disassemble_str(input: &str) -> Result> { 54 | let input = input.trim_start_matches("0x"); 55 | let bytes = hex::decode(input)?; 56 | disassemble_bytes(bytes) 57 | } 58 | 59 | /// Disassemble a vector of bytes into a vector of decoded Operations 60 | /// 61 | /// Will stop disassembling when it encounters a push instruction with a size greater than 62 | /// remaining bytes in the input 63 | /// 64 | /// # Arguments 65 | /// - `bytes` - A vector of bytes representing the encoded bytecode 66 | /// 67 | /// # Examples 68 | /// 69 | /// ```rust 70 | /// use evm_disassembler::disassemble_bytes; 71 | /// 72 | /// let bytecode = "608060405260043610603f57600035"; 73 | /// let bytes = hex::decode(bytecode).unwrap(); 74 | /// let instructions_from_bytes = disassemble_bytes(bytes).unwrap(); 75 | /// ``` 76 | pub fn disassemble_bytes(bytes: Vec) -> Result> { 77 | let mut operations = Vec::new(); 78 | let mut new_operation: Operation; 79 | let mut offset = 0; 80 | let mut bytes_iter = bytes.into_iter(); 81 | while bytes_iter.len() > 0 { 82 | (new_operation, offset) = match decode_operation(&mut bytes_iter, offset) { 83 | Ok((operation, new_offset)) => (operation, new_offset), 84 | Err(e) => { 85 | println!("Stop decoding at offset {offset} due to error : {e}"); 86 | break; 87 | } 88 | }; 89 | operations.push(new_operation); 90 | } 91 | Ok(operations) 92 | } 93 | 94 | /// Converts a vector of decoded operations into a human readable formatted string 95 | /// 96 | /// Operations are formatted on individual lines with the following format: 97 | /// `{offset}: {opcode} {bytes}` 98 | /// 99 | /// - `offset` - The offset of the operation in the bytecode (as hex) 100 | /// - `opcode` - The respective opcode (i.e. "PUSH1", "ADD") 101 | /// - `bytes` - Additional bytes that are part of the operation (only for "PUSH" instructions) 102 | /// 103 | /// # Arguments 104 | /// - `operations` - A vector of decoded operations as returned by `disassemble_str` or 105 | /// `disassemble_bytes` 106 | /// 107 | /// # Examples 108 | /// ```rust 109 | /// use evm_disassembler::{disassemble_str, format_operations}; 110 | /// 111 | /// let bytecode = "0x608060405260043610603f57600035"; 112 | /// let instructions = disassemble_str(bytecode).unwrap(); 113 | /// println!("{}", format_operations(instructions).unwrap()); 114 | /// ``` 115 | pub fn format_operations(operations: Vec) -> Result { 116 | let mut formatted = String::new(); 117 | for operation in operations.iter() { 118 | writeln!(formatted, "{operation:?}")?; 119 | } 120 | Ok(formatted) 121 | } 122 | 123 | #[cfg(test)] 124 | mod tests { 125 | use super::*; 126 | use crate::test_utils::get_contract_code; 127 | use crate::types::Opcode; 128 | use rstest::*; 129 | use std::fs; 130 | 131 | #[rstest] 132 | #[case("0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", 1577, vec![(Opcode::DUP7, 1000), (Opcode::EXTCODECOPY, 1563)])] 133 | #[tokio::test] 134 | async fn decode_code_from_rpc_provider( 135 | #[case] address: &str, 136 | #[case] expected_length: usize, 137 | #[case] expected_opcodes: Vec<(Opcode, usize)>, 138 | ) { 139 | let code = get_contract_code(address).await; 140 | let operations = disassemble_bytes(code).expect("Unable to disassemble code"); 141 | assert_eq!(operations.len(), expected_length); 142 | for (opcode, expected_position) in expected_opcodes.iter() { 143 | assert_eq!(operations[*expected_position].opcode, *opcode); 144 | } 145 | } 146 | 147 | #[rstest] 148 | #[case("0xDef1C0ded9bec7F1a1670819833240f027b25EfF")] // UniswapV3 Router 149 | #[case("0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2")] // Weth 150 | #[case("0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48")] // ZeroEx Proxy 151 | #[case("0x00000000006c3852cbEf3e08E8dF289169EdE581")] // Seaport 152 | fn decode_code_from_file(#[case] address: &str) { 153 | let mut code = fs::read_to_string(format!("testdata/{address}_encoded.txt")) 154 | .expect("Unable to read encoded file"); 155 | let decoded_reference = fs::read_to_string(format!("testdata/{address}_decoded.txt")) 156 | .expect("No reference file"); 157 | code.pop(); 158 | 159 | let operations = disassemble_str(&code).expect("Unable to decode"); 160 | assert!(!operations.is_empty()); 161 | let formatted_operations = format_operations(operations); 162 | for (i, line) in formatted_operations 163 | .expect("failed to format") 164 | .lines() 165 | .enumerate() 166 | { 167 | assert_eq!(line, decoded_reference.lines().nth(i).unwrap()); 168 | } 169 | println!("Decoded output from contract {address} matches reference"); 170 | } 171 | 172 | #[rstest] 173 | fn decode_preamble() { 174 | let code = "608060405260043610603f57600035"; 175 | let operations = disassemble_str(code).expect("Unable to decode"); 176 | assert_eq!(operations.len(), 10); 177 | } 178 | 179 | #[rstest] 180 | fn decode_preamble_from_bytes() { 181 | let bytes = hex::decode("608060405260043610603f57600035").unwrap(); 182 | let operations = disassemble_bytes(bytes).expect("Unable to decode"); 183 | assert_eq!(operations.len(), 10); 184 | } 185 | 186 | #[rstest] 187 | #[case(Opcode::STOP, "0x00")] 188 | #[case(Opcode::ADD, "0x01")] 189 | #[case(Opcode::MUL, "0x02")] 190 | #[case(Opcode::SUB, "0x03")] 191 | #[case(Opcode::DIV, "0x04")] 192 | #[case(Opcode::SDIV, "0x05")] 193 | #[case(Opcode::MOD, "0x06")] 194 | #[case(Opcode::SMOD, "0x07")] 195 | #[case(Opcode::ADDMOD, "0x08")] 196 | #[case(Opcode::MULMOD, "0x09")] 197 | fn decode_single_op(#[case] opcode: Opcode, #[case] encoded_opcode: &str) { 198 | let result = disassemble_str(encoded_opcode).expect("Unable to decode"); 199 | assert_eq!(result, vec![Operation::new(opcode, 0)]); 200 | } 201 | 202 | #[rstest] 203 | fn decode_stop_and_add() { 204 | let add_op = "01"; 205 | let stop_op = "00"; 206 | let result = disassemble_str(&(add_op.to_owned() + stop_op)).expect("Unable to decode"); 207 | assert_eq!( 208 | result, 209 | vec![ 210 | Operation::new(Opcode::ADD, 0), 211 | Operation::new(Opcode::STOP, 1), 212 | ] 213 | ); 214 | } 215 | } 216 | -------------------------------------------------------------------------------- /src/test_utils.rs: -------------------------------------------------------------------------------- 1 | use ethers::providers::{Http, Middleware, Provider}; 2 | 3 | pub fn pad_word(input: &str) -> [u8; 32] { 4 | let mut word = [0u8; 32]; 5 | let padded_string = format!("{input:0>64}"); 6 | hex::decode_to_slice(padded_string, &mut word).expect("Invalid hex string"); 7 | word 8 | } 9 | 10 | pub fn encode_op(opcode: &str, stack_input: Vec<[u8; 32]>) -> String { 11 | let mut bytes: String = opcode.to_owned(); 12 | for word in stack_input { 13 | bytes += &hex::encode(word); 14 | } 15 | bytes 16 | } 17 | 18 | pub async fn get_contract_code(address: &str) -> Vec { 19 | let provider = get_provider(None); 20 | let code = provider.get_code(address, None).await.unwrap(); 21 | code.as_ref().to_owned() 22 | } 23 | 24 | pub fn get_provider(rpc_url: Option<&str>) -> Provider { 25 | let rpc_url_unwrapped; 26 | let env_rpc_url = std::env::var("RPC_URL"); 27 | if let Some(url) = rpc_url { 28 | rpc_url_unwrapped = url; 29 | } else if let Ok(ref url) = env_rpc_url { 30 | rpc_url_unwrapped = url; 31 | } else { 32 | panic!("No RPC URL provided"); 33 | }; 34 | Provider::::try_from(rpc_url_unwrapped).expect("could not instantiate HTTP Provider") 35 | } 36 | -------------------------------------------------------------------------------- /src/types.rs: -------------------------------------------------------------------------------- 1 | //! Output types for Operation and Opcode 2 | use eyre::{eyre, Result}; 3 | use std::fmt; 4 | 5 | /// A single EVM operation 6 | /// 7 | /// For additional information on each operation see: https://www.evm.codes/ 8 | #[derive(Clone, Copy, Debug, PartialEq, Eq)] 9 | #[allow(missing_docs)] 10 | pub enum Opcode { 11 | STOP, 12 | ADD, 13 | MUL, 14 | SUB, 15 | DIV, 16 | SDIV, 17 | MOD, 18 | SMOD, 19 | ADDMOD, 20 | MULMOD, 21 | EXP, 22 | SIGNEXTEND, 23 | LT, 24 | GT, 25 | SLT, 26 | SGT, 27 | EQ, 28 | ISZERO, 29 | AND, 30 | OR, 31 | XOR, 32 | NOT, 33 | BYTE, 34 | SHL, 35 | SHR, 36 | SAR, 37 | SHA3, 38 | ADDRESS, 39 | BALANCE, 40 | ORIGIN, 41 | CALLER, 42 | CALLVALUE, 43 | CALLDATALOAD, 44 | CALLDATASIZE, 45 | CALLDATACOPY, 46 | CODESIZE, 47 | CODECOPY, 48 | GASPRICE, 49 | EXTCODESIZE, 50 | EXTCODECOPY, 51 | RETURNDATASIZE, 52 | RETURNDATACOPY, 53 | EXTCODEHASH, 54 | BLOCKHASH, 55 | COINBASE, 56 | TIMESTAMP, 57 | NUMBER, 58 | DIFFICULTY, 59 | GASLIMIT, 60 | CHAINID, 61 | SELFBALANCE, 62 | BASEFEE, 63 | POP, 64 | MLOAD, 65 | MSTORE, 66 | MSTORE8, 67 | SLOAD, 68 | SSTORE, 69 | JUMP, 70 | JUMPI, 71 | PC, 72 | MSIZE, 73 | GAS, 74 | JUMPDEST, 75 | MCOPY, 76 | TLOAD, 77 | TSTORE, 78 | PUSH0, 79 | PUSH1, 80 | PUSH2, 81 | PUSH3, 82 | PUSH4, 83 | PUSH5, 84 | PUSH6, 85 | PUSH7, 86 | PUSH8, 87 | PUSH9, 88 | PUSH10, 89 | PUSH11, 90 | PUSH12, 91 | PUSH13, 92 | PUSH14, 93 | PUSH15, 94 | PUSH16, 95 | PUSH17, 96 | PUSH18, 97 | PUSH19, 98 | PUSH20, 99 | PUSH21, 100 | PUSH22, 101 | PUSH23, 102 | PUSH24, 103 | PUSH25, 104 | PUSH26, 105 | PUSH27, 106 | PUSH28, 107 | PUSH29, 108 | PUSH30, 109 | PUSH31, 110 | PUSH32, 111 | DUP1, 112 | DUP2, 113 | DUP3, 114 | DUP4, 115 | DUP5, 116 | DUP6, 117 | DUP7, 118 | DUP8, 119 | DUP9, 120 | DUP10, 121 | DUP11, 122 | DUP12, 123 | DUP13, 124 | DUP14, 125 | DUP15, 126 | DUP16, 127 | SWAP1, 128 | SWAP2, 129 | SWAP3, 130 | SWAP4, 131 | SWAP5, 132 | SWAP6, 133 | SWAP7, 134 | SWAP8, 135 | SWAP9, 136 | SWAP10, 137 | SWAP11, 138 | SWAP12, 139 | SWAP13, 140 | SWAP14, 141 | SWAP15, 142 | SWAP16, 143 | LOG0, 144 | LOG1, 145 | LOG2, 146 | LOG3, 147 | LOG4, 148 | CREATE, 149 | CALL, 150 | CALLCODE, 151 | RETURN, 152 | DELEGATECALL, 153 | CREATE2, 154 | STATICCALL, 155 | REVERT, 156 | INVALID, 157 | SELFDESTRUCT, 158 | BLOBBASEFEE, 159 | BLOBHASH, 160 | } 161 | 162 | impl Opcode { 163 | /// Convert a byte into an Opcode 164 | pub fn from_byte(byte: u8) -> Opcode { 165 | match byte { 166 | 0x00 => Opcode::STOP, 167 | 0x01 => Opcode::ADD, 168 | 0x02 => Opcode::MUL, 169 | 0x03 => Opcode::SUB, 170 | 0x04 => Opcode::DIV, 171 | 0x05 => Opcode::SDIV, 172 | 0x06 => Opcode::MOD, 173 | 0x07 => Opcode::SMOD, 174 | 0x08 => Opcode::ADDMOD, 175 | 0x09 => Opcode::MULMOD, 176 | 0x0A => Opcode::EXP, 177 | 0x0B => Opcode::SIGNEXTEND, 178 | 0x10 => Opcode::LT, 179 | 0x11 => Opcode::GT, 180 | 0x12 => Opcode::SLT, 181 | 0x13 => Opcode::SGT, 182 | 0x14 => Opcode::EQ, 183 | 0x15 => Opcode::ISZERO, 184 | 0x16 => Opcode::AND, 185 | 0x17 => Opcode::OR, 186 | 0x18 => Opcode::XOR, 187 | 0x19 => Opcode::NOT, 188 | 0x1a => Opcode::BYTE, 189 | 0x1b => Opcode::SHL, 190 | 0x1c => Opcode::SHR, 191 | 0x1d => Opcode::SAR, 192 | 0x20 => Opcode::SHA3, 193 | 0x30 => Opcode::ADDRESS, 194 | 0x31 => Opcode::BALANCE, 195 | 0x32 => Opcode::ORIGIN, 196 | 0x33 => Opcode::CALLER, 197 | 0x34 => Opcode::CALLVALUE, 198 | 0x35 => Opcode::CALLDATALOAD, 199 | 0x36 => Opcode::CALLDATASIZE, 200 | 0x37 => Opcode::CALLDATACOPY, 201 | 0x38 => Opcode::CODESIZE, 202 | 0x39 => Opcode::CODECOPY, 203 | 0x3a => Opcode::GASPRICE, 204 | 0x3b => Opcode::EXTCODESIZE, 205 | 0x3c => Opcode::EXTCODECOPY, 206 | 0x3d => Opcode::RETURNDATASIZE, 207 | 0x3e => Opcode::RETURNDATACOPY, 208 | 0x3f => Opcode::EXTCODEHASH, 209 | 0x40 => Opcode::BLOCKHASH, 210 | 0x41 => Opcode::COINBASE, 211 | 0x42 => Opcode::TIMESTAMP, 212 | 0x43 => Opcode::NUMBER, 213 | 0x44 => Opcode::DIFFICULTY, 214 | 0x45 => Opcode::GASLIMIT, 215 | 0x46 => Opcode::CHAINID, 216 | 0x47 => Opcode::SELFBALANCE, 217 | 0x48 => Opcode::BASEFEE, 218 | 0x49 => Opcode::BLOBHASH, 219 | 0x4a => Opcode::BLOBBASEFEE, 220 | 0x50 => Opcode::POP, 221 | 0x51 => Opcode::MLOAD, 222 | 0x52 => Opcode::MSTORE, 223 | 0x53 => Opcode::MSTORE8, 224 | 0x54 => Opcode::SLOAD, 225 | 0x55 => Opcode::SSTORE, 226 | 0x56 => Opcode::JUMP, 227 | 0x57 => Opcode::JUMPI, 228 | 0x58 => Opcode::PC, 229 | 0x59 => Opcode::MSIZE, 230 | 0x5a => Opcode::GAS, 231 | 0x5b => Opcode::JUMPDEST, 232 | 0x5c => Opcode::TLOAD, 233 | 0x5d => Opcode::TSTORE, 234 | 0x5e => Opcode::MCOPY, 235 | 0x5F => Opcode::PUSH0, 236 | 0x60 => Opcode::PUSH1, 237 | 0x61 => Opcode::PUSH2, 238 | 0x62 => Opcode::PUSH3, 239 | 0x63 => Opcode::PUSH4, 240 | 0x64 => Opcode::PUSH5, 241 | 0x65 => Opcode::PUSH6, 242 | 0x66 => Opcode::PUSH7, 243 | 0x67 => Opcode::PUSH8, 244 | 0x68 => Opcode::PUSH9, 245 | 0x69 => Opcode::PUSH10, 246 | 0x6a => Opcode::PUSH11, 247 | 0x6b => Opcode::PUSH12, 248 | 0x6c => Opcode::PUSH13, 249 | 0x6d => Opcode::PUSH14, 250 | 0x6e => Opcode::PUSH15, 251 | 0x6f => Opcode::PUSH16, 252 | 0x70 => Opcode::PUSH17, 253 | 0x71 => Opcode::PUSH18, 254 | 0x72 => Opcode::PUSH19, 255 | 0x73 => Opcode::PUSH20, 256 | 0x74 => Opcode::PUSH21, 257 | 0x75 => Opcode::PUSH22, 258 | 0x76 => Opcode::PUSH23, 259 | 0x77 => Opcode::PUSH24, 260 | 0x78 => Opcode::PUSH25, 261 | 0x79 => Opcode::PUSH26, 262 | 0x7a => Opcode::PUSH27, 263 | 0x7b => Opcode::PUSH28, 264 | 0x7c => Opcode::PUSH29, 265 | 0x7d => Opcode::PUSH30, 266 | 0x7e => Opcode::PUSH31, 267 | 0x7f => Opcode::PUSH32, 268 | 0x80 => Opcode::DUP1, 269 | 0x81 => Opcode::DUP2, 270 | 0x82 => Opcode::DUP3, 271 | 0x83 => Opcode::DUP4, 272 | 0x84 => Opcode::DUP5, 273 | 0x85 => Opcode::DUP6, 274 | 0x86 => Opcode::DUP7, 275 | 0x87 => Opcode::DUP8, 276 | 0x88 => Opcode::DUP9, 277 | 0x89 => Opcode::DUP10, 278 | 0x8a => Opcode::DUP11, 279 | 0x8b => Opcode::DUP12, 280 | 0x8c => Opcode::DUP13, 281 | 0x8d => Opcode::DUP14, 282 | 0x8e => Opcode::DUP15, 283 | 0x8f => Opcode::DUP16, 284 | 0x90 => Opcode::SWAP1, 285 | 0x91 => Opcode::SWAP2, 286 | 0x92 => Opcode::SWAP3, 287 | 0x93 => Opcode::SWAP4, 288 | 0x94 => Opcode::SWAP5, 289 | 0x95 => Opcode::SWAP6, 290 | 0x96 => Opcode::SWAP7, 291 | 0x97 => Opcode::SWAP8, 292 | 0x98 => Opcode::SWAP9, 293 | 0x99 => Opcode::SWAP10, 294 | 0x9a => Opcode::SWAP11, 295 | 0x9b => Opcode::SWAP12, 296 | 0x9c => Opcode::SWAP13, 297 | 0x9d => Opcode::SWAP14, 298 | 0x9e => Opcode::SWAP15, 299 | 0x9f => Opcode::SWAP16, 300 | 0xa0 => Opcode::LOG0, 301 | 0xa1 => Opcode::LOG1, 302 | 0xa2 => Opcode::LOG2, 303 | 0xa3 => Opcode::LOG3, 304 | 0xa4 => Opcode::LOG4, 305 | 0xf0 => Opcode::CREATE, 306 | 0xf1 => Opcode::CALL, 307 | 0xf2 => Opcode::CALLCODE, 308 | 0xf3 => Opcode::RETURN, 309 | 0xf4 => Opcode::DELEGATECALL, 310 | 0xf5 => Opcode::CREATE2, 311 | 0xfa => Opcode::STATICCALL, 312 | 0xfd => Opcode::REVERT, 313 | 0xff => Opcode::SELFDESTRUCT, 314 | _ => Opcode::INVALID, 315 | } 316 | } 317 | } 318 | 319 | /// A decoded operation 320 | /// 321 | /// An operation is represented by the combination of an opcode, the offset in the bytecode and any 322 | /// additional bytes that are part of the operation (only for PUSH operations). 323 | #[derive(PartialEq, Eq)] 324 | pub struct Operation { 325 | /// The opcode 326 | pub opcode: Opcode, 327 | /// Additional bytes that are part of the Operation (only for PUSH) 328 | pub input: Vec, 329 | /// The offset in the bytecode 330 | pub offset: u32, 331 | } 332 | 333 | impl fmt::Debug for Operation { 334 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 335 | let mut formatted = format!( 336 | "{:0>8}: {:?}", 337 | format!("{:#x}", self.offset).trim_start_matches("0x"), 338 | self.opcode 339 | ); 340 | if !self.input.is_empty() { 341 | let encoded_bytes = hex::encode(&self.input); 342 | let mut formatted_bytes = encoded_bytes.trim_start_matches('0'); 343 | if formatted_bytes.is_empty() { 344 | formatted_bytes = "0"; 345 | } 346 | formatted = format!("{} {}", formatted, "0x".to_owned() + formatted_bytes); 347 | } 348 | write!(f, "{formatted}") 349 | } 350 | } 351 | 352 | impl Operation { 353 | /// Creates a new operation with empty `input` bytes 354 | pub fn new(opcode: Opcode, offset: u32) -> Self { 355 | Operation { 356 | opcode, 357 | offset, 358 | input: Vec::new(), 359 | } 360 | } 361 | 362 | /// Adds additional bytes to the operation (for PUSH instructions) 363 | pub fn with_bytes( 364 | self, 365 | num_bytes: u8, 366 | bytes: &mut dyn ExactSizeIterator, 367 | ) -> Result { 368 | if num_bytes == 0 { 369 | return Ok(self); 370 | } 371 | if num_bytes as usize > bytes.len() { 372 | return Err(eyre!( 373 | "Not enough bytes to read - expected {} but only {} left", 374 | num_bytes, 375 | bytes.len() 376 | )); 377 | } 378 | Ok(Operation { 379 | opcode: self.opcode, 380 | offset: self.offset, 381 | input: bytes.take(num_bytes as usize).collect(), 382 | }) 383 | } 384 | } 385 | -------------------------------------------------------------------------------- /testdata/.txt: -------------------------------------------------------------------------------- 1 | 0x60806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633659cfe6146100775780634f1ef286146100ba5780635c60da1b146101085780638f2839701461015f578063f851a440146101a2575b6100756101f9565b005b34801561008357600080fd5b506100b8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610213565b005b610106600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001919091929391929390505050610268565b005b34801561011457600080fd5b5061011d610308565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561016b57600080fd5b506101a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610360565b005b3480156101ae57600080fd5b506101b761051e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610201610576565b61021161020c610651565b610682565b565b61021b6106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561025c57610257816106d9565b610265565b6102646101f9565b5b50565b6102706106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102fa576102ac836106d9565b3073ffffffffffffffffffffffffffffffffffffffff163483836040518083838082843782019150509250505060006040518083038185875af19250505015156102f557600080fd5b610303565b6103026101f9565b5b505050565b60006103126106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156103545761034d610651565b905061035d565b61035c6101f9565b5b90565b6103686106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561051257600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610466576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001807f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f81526020017f787920746f20746865207a65726f20616464726573730000000000000000000081525060400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61048f6106a8565b82604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a161050d81610748565b61051b565b61051a6101f9565b5b50565b60006105286106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561056a576105636106a8565b9050610573565b6105726101f9565b5b90565b61057e6106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515610647576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667281526020017f6f6d207468652070726f78792061646d696e000000000000000000000000000081525060400191505060405180910390fd5b61064f610777565b565b6000807f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c36001029050805491505090565b3660008037600080366000845af43d6000803e80600081146106a3573d6000f35b3d6000fd5b6000807f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b6001029050805491505090565b6106e281610779565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60010290508181555050565b565b60006107848261084b565b151561081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001807f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f81526020017f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000081525060400191505060405180910390fd5b7f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360010290508181555050565b600080823b9050600081119150509190505600a165627a7a72305820a4a547cfc7202c5acaaae74d428e988bc62ad5024eb0165532d3a8f91db4ed240029 2 | 00000000: PUSH1 0x80 3 | 00000002: PUSH1 0x40 4 | 00000004: MSTORE 5 | 00000005: PUSH1 0x4 6 | 00000007: CALLDATASIZE 7 | 00000008: LT 8 | 00000009: PUSH2 0x6d 9 | 0000000c: JUMPI 10 | 0000000d: PUSH1 0x0 11 | 0000000f: CALLDATALOAD 12 | 00000010: PUSH29 0x100000000000000000000000000000000000000000000000000000000 13 | 0000002e: SWAP1 14 | 0000002f: DIV 15 | 00000030: PUSH4 0xffffffff 16 | 00000035: AND 17 | 00000036: DUP1 18 | 00000037: PUSH4 0x3659cfe6 19 | 0000003c: EQ 20 | 0000003d: PUSH2 0x77 21 | 00000040: JUMPI 22 | 00000041: DUP1 23 | 00000042: PUSH4 0x4f1ef286 24 | 00000047: EQ 25 | 00000048: PUSH2 0xba 26 | 0000004b: JUMPI 27 | 0000004c: DUP1 28 | 0000004d: PUSH4 0x5c60da1b 29 | 00000052: EQ 30 | 00000053: PUSH2 0x108 31 | 00000056: JUMPI 32 | 00000057: DUP1 33 | 00000058: PUSH4 0x8f283970 34 | 0000005d: EQ 35 | 0000005e: PUSH2 0x15f 36 | 00000061: JUMPI 37 | 00000062: DUP1 38 | 00000063: PUSH4 0xf851a440 39 | 00000068: EQ 40 | 00000069: PUSH2 0x1a2 41 | 0000006c: JUMPI 42 | 0000006d: JUMPDEST 43 | 0000006e: PUSH2 0x75 44 | 00000071: PUSH2 0x1f9 45 | 00000074: JUMP 46 | 00000075: JUMPDEST 47 | 00000076: STOP 48 | 00000077: JUMPDEST 49 | 00000078: CALLVALUE 50 | 00000079: DUP1 51 | 0000007a: ISZERO 52 | 0000007b: PUSH2 0x83 53 | 0000007e: JUMPI 54 | 0000007f: PUSH1 0x0 55 | 00000081: DUP1 56 | 00000082: REVERT 57 | 00000083: JUMPDEST 58 | 00000084: POP 59 | 00000085: PUSH2 0xb8 60 | 00000088: PUSH1 0x4 61 | 0000008a: DUP1 62 | 0000008b: CALLDATASIZE 63 | 0000008c: SUB 64 | 0000008d: DUP2 65 | 0000008e: ADD 66 | 0000008f: SWAP1 67 | 00000090: DUP1 68 | 00000091: DUP1 69 | 00000092: CALLDATALOAD 70 | 00000093: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 71 | 000000a8: AND 72 | 000000a9: SWAP1 73 | 000000aa: PUSH1 0x20 74 | 000000ac: ADD 75 | 000000ad: SWAP1 76 | 000000ae: SWAP3 77 | 000000af: SWAP2 78 | 000000b0: SWAP1 79 | 000000b1: POP 80 | 000000b2: POP 81 | 000000b3: POP 82 | 000000b4: PUSH2 0x213 83 | 000000b7: JUMP 84 | 000000b8: JUMPDEST 85 | 000000b9: STOP 86 | 000000ba: JUMPDEST 87 | 000000bb: PUSH2 0x106 88 | 000000be: PUSH1 0x4 89 | 000000c0: DUP1 90 | 000000c1: CALLDATASIZE 91 | 000000c2: SUB 92 | 000000c3: DUP2 93 | 000000c4: ADD 94 | 000000c5: SWAP1 95 | 000000c6: DUP1 96 | 000000c7: DUP1 97 | 000000c8: CALLDATALOAD 98 | 000000c9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 99 | 000000de: AND 100 | 000000df: SWAP1 101 | 000000e0: PUSH1 0x20 102 | 000000e2: ADD 103 | 000000e3: SWAP1 104 | 000000e4: SWAP3 105 | 000000e5: SWAP2 106 | 000000e6: SWAP1 107 | 000000e7: DUP1 108 | 000000e8: CALLDATALOAD 109 | 000000e9: SWAP1 110 | 000000ea: PUSH1 0x20 111 | 000000ec: ADD 112 | 000000ed: SWAP1 113 | 000000ee: DUP3 114 | 000000ef: ADD 115 | 000000f0: DUP1 116 | 000000f1: CALLDATALOAD 117 | 000000f2: SWAP1 118 | 000000f3: PUSH1 0x20 119 | 000000f5: ADD 120 | 000000f6: SWAP2 121 | 000000f7: SWAP1 122 | 000000f8: SWAP2 123 | 000000f9: SWAP3 124 | 000000fa: SWAP4 125 | 000000fb: SWAP2 126 | 000000fc: SWAP3 127 | 000000fd: SWAP4 128 | 000000fe: SWAP1 129 | 000000ff: POP 130 | 00000100: POP 131 | 00000101: POP 132 | 00000102: PUSH2 0x268 133 | 00000105: JUMP 134 | 00000106: JUMPDEST 135 | 00000107: STOP 136 | 00000108: JUMPDEST 137 | 00000109: CALLVALUE 138 | 0000010a: DUP1 139 | 0000010b: ISZERO 140 | 0000010c: PUSH2 0x114 141 | 0000010f: JUMPI 142 | 00000110: PUSH1 0x0 143 | 00000112: DUP1 144 | 00000113: REVERT 145 | 00000114: JUMPDEST 146 | 00000115: POP 147 | 00000116: PUSH2 0x11d 148 | 00000119: PUSH2 0x308 149 | 0000011c: JUMP 150 | 0000011d: JUMPDEST 151 | 0000011e: PUSH1 0x40 152 | 00000120: MLOAD 153 | 00000121: DUP1 154 | 00000122: DUP3 155 | 00000123: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 156 | 00000138: AND 157 | 00000139: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 158 | 0000014e: AND 159 | 0000014f: DUP2 160 | 00000150: MSTORE 161 | 00000151: PUSH1 0x20 162 | 00000153: ADD 163 | 00000154: SWAP2 164 | 00000155: POP 165 | 00000156: POP 166 | 00000157: PUSH1 0x40 167 | 00000159: MLOAD 168 | 0000015a: DUP1 169 | 0000015b: SWAP2 170 | 0000015c: SUB 171 | 0000015d: SWAP1 172 | 0000015e: RETURN 173 | 0000015f: JUMPDEST 174 | 00000160: CALLVALUE 175 | 00000161: DUP1 176 | 00000162: ISZERO 177 | 00000163: PUSH2 0x16b 178 | 00000166: JUMPI 179 | 00000167: PUSH1 0x0 180 | 00000169: DUP1 181 | 0000016a: REVERT 182 | 0000016b: JUMPDEST 183 | 0000016c: POP 184 | 0000016d: PUSH2 0x1a0 185 | 00000170: PUSH1 0x4 186 | 00000172: DUP1 187 | 00000173: CALLDATASIZE 188 | 00000174: SUB 189 | 00000175: DUP2 190 | 00000176: ADD 191 | 00000177: SWAP1 192 | 00000178: DUP1 193 | 00000179: DUP1 194 | 0000017a: CALLDATALOAD 195 | 0000017b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 196 | 00000190: AND 197 | 00000191: SWAP1 198 | 00000192: PUSH1 0x20 199 | 00000194: ADD 200 | 00000195: SWAP1 201 | 00000196: SWAP3 202 | 00000197: SWAP2 203 | 00000198: SWAP1 204 | 00000199: POP 205 | 0000019a: POP 206 | 0000019b: POP 207 | 0000019c: PUSH2 0x360 208 | 0000019f: JUMP 209 | 000001a0: JUMPDEST 210 | 000001a1: STOP 211 | 000001a2: JUMPDEST 212 | 000001a3: CALLVALUE 213 | 000001a4: DUP1 214 | 000001a5: ISZERO 215 | 000001a6: PUSH2 0x1ae 216 | 000001a9: JUMPI 217 | 000001aa: PUSH1 0x0 218 | 000001ac: DUP1 219 | 000001ad: REVERT 220 | 000001ae: JUMPDEST 221 | 000001af: POP 222 | 000001b0: PUSH2 0x1b7 223 | 000001b3: PUSH2 0x51e 224 | 000001b6: JUMP 225 | 000001b7: JUMPDEST 226 | 000001b8: PUSH1 0x40 227 | 000001ba: MLOAD 228 | 000001bb: DUP1 229 | 000001bc: DUP3 230 | 000001bd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 231 | 000001d2: AND 232 | 000001d3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 233 | 000001e8: AND 234 | 000001e9: DUP2 235 | 000001ea: MSTORE 236 | 000001eb: PUSH1 0x20 237 | 000001ed: ADD 238 | 000001ee: SWAP2 239 | 000001ef: POP 240 | 000001f0: POP 241 | 000001f1: PUSH1 0x40 242 | 000001f3: MLOAD 243 | 000001f4: DUP1 244 | 000001f5: SWAP2 245 | 000001f6: SUB 246 | 000001f7: SWAP1 247 | 000001f8: RETURN 248 | 000001f9: JUMPDEST 249 | 000001fa: PUSH2 0x201 250 | 000001fd: PUSH2 0x576 251 | 00000200: JUMP 252 | 00000201: JUMPDEST 253 | 00000202: PUSH2 0x211 254 | 00000205: PUSH2 0x20c 255 | 00000208: PUSH2 0x651 256 | 0000020b: JUMP 257 | 0000020c: JUMPDEST 258 | 0000020d: PUSH2 0x682 259 | 00000210: JUMP 260 | 00000211: JUMPDEST 261 | 00000212: JUMP 262 | 00000213: JUMPDEST 263 | 00000214: PUSH2 0x21b 264 | 00000217: PUSH2 0x6a8 265 | 0000021a: JUMP 266 | 0000021b: JUMPDEST 267 | 0000021c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 268 | 00000231: AND 269 | 00000232: CALLER 270 | 00000233: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 271 | 00000248: AND 272 | 00000249: EQ 273 | 0000024a: ISZERO 274 | 0000024b: PUSH2 0x25c 275 | 0000024e: JUMPI 276 | 0000024f: PUSH2 0x257 277 | 00000252: DUP2 278 | 00000253: PUSH2 0x6d9 279 | 00000256: JUMP 280 | 00000257: JUMPDEST 281 | 00000258: PUSH2 0x265 282 | 0000025b: JUMP 283 | 0000025c: JUMPDEST 284 | 0000025d: PUSH2 0x264 285 | 00000260: PUSH2 0x1f9 286 | 00000263: JUMP 287 | 00000264: JUMPDEST 288 | 00000265: JUMPDEST 289 | 00000266: POP 290 | 00000267: JUMP 291 | 00000268: JUMPDEST 292 | 00000269: PUSH2 0x270 293 | 0000026c: PUSH2 0x6a8 294 | 0000026f: JUMP 295 | 00000270: JUMPDEST 296 | 00000271: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 297 | 00000286: AND 298 | 00000287: CALLER 299 | 00000288: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 300 | 0000029d: AND 301 | 0000029e: EQ 302 | 0000029f: ISZERO 303 | 000002a0: PUSH2 0x2fa 304 | 000002a3: JUMPI 305 | 000002a4: PUSH2 0x2ac 306 | 000002a7: DUP4 307 | 000002a8: PUSH2 0x6d9 308 | 000002ab: JUMP 309 | 000002ac: JUMPDEST 310 | 000002ad: ADDRESS 311 | 000002ae: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 312 | 000002c3: AND 313 | 000002c4: CALLVALUE 314 | 000002c5: DUP4 315 | 000002c6: DUP4 316 | 000002c7: PUSH1 0x40 317 | 000002c9: MLOAD 318 | 000002ca: DUP1 319 | 000002cb: DUP4 320 | 000002cc: DUP4 321 | 000002cd: DUP1 322 | 000002ce: DUP3 323 | 000002cf: DUP5 324 | 000002d0: CALLDATACOPY 325 | 000002d1: DUP3 326 | 000002d2: ADD 327 | 000002d3: SWAP2 328 | 000002d4: POP 329 | 000002d5: POP 330 | 000002d6: SWAP3 331 | 000002d7: POP 332 | 000002d8: POP 333 | 000002d9: POP 334 | 000002da: PUSH1 0x0 335 | 000002dc: PUSH1 0x40 336 | 000002de: MLOAD 337 | 000002df: DUP1 338 | 000002e0: DUP4 339 | 000002e1: SUB 340 | 000002e2: DUP2 341 | 000002e3: DUP6 342 | 000002e4: DUP8 343 | 000002e5: GAS 344 | 000002e6: CALL 345 | 000002e7: SWAP3 346 | 000002e8: POP 347 | 000002e9: POP 348 | 000002ea: POP 349 | 000002eb: ISZERO 350 | 000002ec: ISZERO 351 | 000002ed: PUSH2 0x2f5 352 | 000002f0: JUMPI 353 | 000002f1: PUSH1 0x0 354 | 000002f3: DUP1 355 | 000002f4: REVERT 356 | 000002f5: JUMPDEST 357 | 000002f6: PUSH2 0x303 358 | 000002f9: JUMP 359 | 000002fa: JUMPDEST 360 | 000002fb: PUSH2 0x302 361 | 000002fe: PUSH2 0x1f9 362 | 00000301: JUMP 363 | 00000302: JUMPDEST 364 | 00000303: JUMPDEST 365 | 00000304: POP 366 | 00000305: POP 367 | 00000306: POP 368 | 00000307: JUMP 369 | 00000308: JUMPDEST 370 | 00000309: PUSH1 0x0 371 | 0000030b: PUSH2 0x312 372 | 0000030e: PUSH2 0x6a8 373 | 00000311: JUMP 374 | 00000312: JUMPDEST 375 | 00000313: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 376 | 00000328: AND 377 | 00000329: CALLER 378 | 0000032a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 379 | 0000033f: AND 380 | 00000340: EQ 381 | 00000341: ISZERO 382 | 00000342: PUSH2 0x354 383 | 00000345: JUMPI 384 | 00000346: PUSH2 0x34d 385 | 00000349: PUSH2 0x651 386 | 0000034c: JUMP 387 | 0000034d: JUMPDEST 388 | 0000034e: SWAP1 389 | 0000034f: POP 390 | 00000350: PUSH2 0x35d 391 | 00000353: JUMP 392 | 00000354: JUMPDEST 393 | 00000355: PUSH2 0x35c 394 | 00000358: PUSH2 0x1f9 395 | 0000035b: JUMP 396 | 0000035c: JUMPDEST 397 | 0000035d: JUMPDEST 398 | 0000035e: SWAP1 399 | 0000035f: JUMP 400 | 00000360: JUMPDEST 401 | 00000361: PUSH2 0x368 402 | 00000364: PUSH2 0x6a8 403 | 00000367: JUMP 404 | 00000368: JUMPDEST 405 | 00000369: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 406 | 0000037e: AND 407 | 0000037f: CALLER 408 | 00000380: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 409 | 00000395: AND 410 | 00000396: EQ 411 | 00000397: ISZERO 412 | 00000398: PUSH2 0x512 413 | 0000039b: JUMPI 414 | 0000039c: PUSH1 0x0 415 | 0000039e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 416 | 000003b3: AND 417 | 000003b4: DUP2 418 | 000003b5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 419 | 000003ca: AND 420 | 000003cb: EQ 421 | 000003cc: ISZERO 422 | 000003cd: ISZERO 423 | 000003ce: ISZERO 424 | 000003cf: PUSH2 0x466 425 | 000003d2: JUMPI 426 | 000003d3: PUSH1 0x40 427 | 000003d5: MLOAD 428 | 000003d6: PUSH32 0x8c379a000000000000000000000000000000000000000000000000000000000 429 | 000003f7: DUP2 430 | 000003f8: MSTORE 431 | 000003f9: PUSH1 0x4 432 | 000003fb: ADD 433 | 000003fc: DUP1 434 | 000003fd: DUP1 435 | 000003fe: PUSH1 0x20 436 | 00000400: ADD 437 | 00000401: DUP3 438 | 00000402: DUP2 439 | 00000403: SUB 440 | 00000404: DUP3 441 | 00000405: MSTORE 442 | 00000406: PUSH1 0x36 443 | 00000408: DUP2 444 | 00000409: MSTORE 445 | 0000040a: PUSH1 0x20 446 | 0000040c: ADD 447 | 0000040d: DUP1 448 | 0000040e: PUSH32 0x43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f 449 | 0000042f: DUP2 450 | 00000430: MSTORE 451 | 00000431: PUSH1 0x20 452 | 00000433: ADD 453 | 00000434: PUSH32 0x787920746f20746865207a65726f206164647265737300000000000000000000 454 | 00000455: DUP2 455 | 00000456: MSTORE 456 | 00000457: POP 457 | 00000458: PUSH1 0x40 458 | 0000045a: ADD 459 | 0000045b: SWAP2 460 | 0000045c: POP 461 | 0000045d: POP 462 | 0000045e: PUSH1 0x40 463 | 00000460: MLOAD 464 | 00000461: DUP1 465 | 00000462: SWAP2 466 | 00000463: SUB 467 | 00000464: SWAP1 468 | 00000465: REVERT 469 | 00000466: JUMPDEST 470 | 00000467: PUSH32 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f 471 | 00000488: PUSH2 0x48f 472 | 0000048b: PUSH2 0x6a8 473 | 0000048e: JUMP 474 | 0000048f: JUMPDEST 475 | 00000490: DUP3 476 | 00000491: PUSH1 0x40 477 | 00000493: MLOAD 478 | 00000494: DUP1 479 | 00000495: DUP4 480 | 00000496: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 481 | 000004ab: AND 482 | 000004ac: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 483 | 000004c1: AND 484 | 000004c2: DUP2 485 | 000004c3: MSTORE 486 | 000004c4: PUSH1 0x20 487 | 000004c6: ADD 488 | 000004c7: DUP3 489 | 000004c8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 490 | 000004dd: AND 491 | 000004de: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 492 | 000004f3: AND 493 | 000004f4: DUP2 494 | 000004f5: MSTORE 495 | 000004f6: PUSH1 0x20 496 | 000004f8: ADD 497 | 000004f9: SWAP3 498 | 000004fa: POP 499 | 000004fb: POP 500 | 000004fc: POP 501 | 000004fd: PUSH1 0x40 502 | 000004ff: MLOAD 503 | 00000500: DUP1 504 | 00000501: SWAP2 505 | 00000502: SUB 506 | 00000503: SWAP1 507 | 00000504: LOG1 508 | 00000505: PUSH2 0x50d 509 | 00000508: DUP2 510 | 00000509: PUSH2 0x748 511 | 0000050c: JUMP 512 | 0000050d: JUMPDEST 513 | 0000050e: PUSH2 0x51b 514 | 00000511: JUMP 515 | 00000512: JUMPDEST 516 | 00000513: PUSH2 0x51a 517 | 00000516: PUSH2 0x1f9 518 | 00000519: JUMP 519 | 0000051a: JUMPDEST 520 | 0000051b: JUMPDEST 521 | 0000051c: POP 522 | 0000051d: JUMP 523 | 0000051e: JUMPDEST 524 | 0000051f: PUSH1 0x0 525 | 00000521: PUSH2 0x528 526 | 00000524: PUSH2 0x6a8 527 | 00000527: JUMP 528 | 00000528: JUMPDEST 529 | 00000529: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 530 | 0000053e: AND 531 | 0000053f: CALLER 532 | 00000540: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 533 | 00000555: AND 534 | 00000556: EQ 535 | 00000557: ISZERO 536 | 00000558: PUSH2 0x56a 537 | 0000055b: JUMPI 538 | 0000055c: PUSH2 0x563 539 | 0000055f: PUSH2 0x6a8 540 | 00000562: JUMP 541 | 00000563: JUMPDEST 542 | 00000564: SWAP1 543 | 00000565: POP 544 | 00000566: PUSH2 0x573 545 | 00000569: JUMP 546 | 0000056a: JUMPDEST 547 | 0000056b: PUSH2 0x572 548 | 0000056e: PUSH2 0x1f9 549 | 00000571: JUMP 550 | 00000572: JUMPDEST 551 | 00000573: JUMPDEST 552 | 00000574: SWAP1 553 | 00000575: JUMP 554 | 00000576: JUMPDEST 555 | 00000577: PUSH2 0x57e 556 | 0000057a: PUSH2 0x6a8 557 | 0000057d: JUMP 558 | 0000057e: JUMPDEST 559 | 0000057f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 560 | 00000594: AND 561 | 00000595: CALLER 562 | 00000596: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 563 | 000005ab: AND 564 | 000005ac: EQ 565 | 000005ad: ISZERO 566 | 000005ae: ISZERO 567 | 000005af: ISZERO 568 | 000005b0: PUSH2 0x647 569 | 000005b3: JUMPI 570 | 000005b4: PUSH1 0x40 571 | 000005b6: MLOAD 572 | 000005b7: PUSH32 0x8c379a000000000000000000000000000000000000000000000000000000000 573 | 000005d8: DUP2 574 | 000005d9: MSTORE 575 | 000005da: PUSH1 0x4 576 | 000005dc: ADD 577 | 000005dd: DUP1 578 | 000005de: DUP1 579 | 000005df: PUSH1 0x20 580 | 000005e1: ADD 581 | 000005e2: DUP3 582 | 000005e3: DUP2 583 | 000005e4: SUB 584 | 000005e5: DUP3 585 | 000005e6: MSTORE 586 | 000005e7: PUSH1 0x32 587 | 000005e9: DUP2 588 | 000005ea: MSTORE 589 | 000005eb: PUSH1 0x20 590 | 000005ed: ADD 591 | 000005ee: DUP1 592 | 000005ef: PUSH32 0x43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e206672 593 | 00000610: DUP2 594 | 00000611: MSTORE 595 | 00000612: PUSH1 0x20 596 | 00000614: ADD 597 | 00000615: PUSH32 0x6f6d207468652070726f78792061646d696e0000000000000000000000000000 598 | 00000636: DUP2 599 | 00000637: MSTORE 600 | 00000638: POP 601 | 00000639: PUSH1 0x40 602 | 0000063b: ADD 603 | 0000063c: SWAP2 604 | 0000063d: POP 605 | 0000063e: POP 606 | 0000063f: PUSH1 0x40 607 | 00000641: MLOAD 608 | 00000642: DUP1 609 | 00000643: SWAP2 610 | 00000644: SUB 611 | 00000645: SWAP1 612 | 00000646: REVERT 613 | 00000647: JUMPDEST 614 | 00000648: PUSH2 0x64f 615 | 0000064b: PUSH2 0x777 616 | 0000064e: JUMP 617 | 0000064f: JUMPDEST 618 | 00000650: JUMP 619 | 00000651: JUMPDEST 620 | 00000652: PUSH1 0x0 621 | 00000654: DUP1 622 | 00000655: PUSH32 0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3 623 | 00000676: PUSH1 0x1 624 | 00000678: MUL 625 | 00000679: SWAP1 626 | 0000067a: POP 627 | 0000067b: DUP1 628 | 0000067c: SLOAD 629 | 0000067d: SWAP2 630 | 0000067e: POP 631 | 0000067f: POP 632 | 00000680: SWAP1 633 | 00000681: JUMP 634 | 00000682: JUMPDEST 635 | 00000683: CALLDATASIZE 636 | 00000684: PUSH1 0x0 637 | 00000686: DUP1 638 | 00000687: CALLDATACOPY 639 | 00000688: PUSH1 0x0 640 | 0000068a: DUP1 641 | 0000068b: CALLDATASIZE 642 | 0000068c: PUSH1 0x0 643 | 0000068e: DUP5 644 | 0000068f: GAS 645 | 00000690: DELEGATECALL 646 | 00000691: RETURNDATASIZE 647 | 00000692: PUSH1 0x0 648 | 00000694: DUP1 649 | 00000695: RETURNDATACOPY 650 | 00000696: DUP1 651 | 00000697: PUSH1 0x0 652 | 00000699: DUP2 653 | 0000069a: EQ 654 | 0000069b: PUSH2 0x6a3 655 | 0000069e: JUMPI 656 | 0000069f: RETURNDATASIZE 657 | 000006a0: PUSH1 0x0 658 | 000006a2: RETURN 659 | 000006a3: JUMPDEST 660 | 000006a4: RETURNDATASIZE 661 | 000006a5: PUSH1 0x0 662 | 000006a7: REVERT 663 | 000006a8: JUMPDEST 664 | 000006a9: PUSH1 0x0 665 | 000006ab: DUP1 666 | 000006ac: PUSH32 0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b 667 | 000006cd: PUSH1 0x1 668 | 000006cf: MUL 669 | 000006d0: SWAP1 670 | 000006d1: POP 671 | 000006d2: DUP1 672 | 000006d3: SLOAD 673 | 000006d4: SWAP2 674 | 000006d5: POP 675 | 000006d6: POP 676 | 000006d7: SWAP1 677 | 000006d8: JUMP 678 | 000006d9: JUMPDEST 679 | 000006da: PUSH2 0x6e2 680 | 000006dd: DUP2 681 | 000006de: PUSH2 0x779 682 | 000006e1: JUMP 683 | 000006e2: JUMPDEST 684 | 000006e3: PUSH32 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b 685 | 00000704: DUP2 686 | 00000705: PUSH1 0x40 687 | 00000707: MLOAD 688 | 00000708: DUP1 689 | 00000709: DUP3 690 | 0000070a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 691 | 0000071f: AND 692 | 00000720: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 693 | 00000735: AND 694 | 00000736: DUP2 695 | 00000737: MSTORE 696 | 00000738: PUSH1 0x20 697 | 0000073a: ADD 698 | 0000073b: SWAP2 699 | 0000073c: POP 700 | 0000073d: POP 701 | 0000073e: PUSH1 0x40 702 | 00000740: MLOAD 703 | 00000741: DUP1 704 | 00000742: SWAP2 705 | 00000743: SUB 706 | 00000744: SWAP1 707 | 00000745: LOG1 708 | 00000746: POP 709 | 00000747: JUMP 710 | 00000748: JUMPDEST 711 | 00000749: PUSH1 0x0 712 | 0000074b: PUSH32 0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b 713 | 0000076c: PUSH1 0x1 714 | 0000076e: MUL 715 | 0000076f: SWAP1 716 | 00000770: POP 717 | 00000771: DUP2 718 | 00000772: DUP2 719 | 00000773: SSTORE 720 | 00000774: POP 721 | 00000775: POP 722 | 00000776: JUMP 723 | 00000777: JUMPDEST 724 | 00000778: JUMP 725 | 00000779: JUMPDEST 726 | 0000077a: PUSH1 0x0 727 | 0000077c: PUSH2 0x784 728 | 0000077f: DUP3 729 | 00000780: PUSH2 0x84b 730 | 00000783: JUMP 731 | 00000784: JUMPDEST 732 | 00000785: ISZERO 733 | 00000786: ISZERO 734 | 00000787: PUSH2 0x81e 735 | 0000078a: JUMPI 736 | 0000078b: PUSH1 0x40 737 | 0000078d: MLOAD 738 | 0000078e: PUSH32 0x8c379a000000000000000000000000000000000000000000000000000000000 739 | 000007af: DUP2 740 | 000007b0: MSTORE 741 | 000007b1: PUSH1 0x4 742 | 000007b3: ADD 743 | 000007b4: DUP1 744 | 000007b5: DUP1 745 | 000007b6: PUSH1 0x20 746 | 000007b8: ADD 747 | 000007b9: DUP3 748 | 000007ba: DUP2 749 | 000007bb: SUB 750 | 000007bc: DUP3 751 | 000007bd: MSTORE 752 | 000007be: PUSH1 0x3b 753 | 000007c0: DUP2 754 | 000007c1: MSTORE 755 | 000007c2: PUSH1 0x20 756 | 000007c4: ADD 757 | 000007c5: DUP1 758 | 000007c6: PUSH32 0x43616e6e6f742073657420612070726f787920696d706c656d656e746174696f 759 | 000007e7: DUP2 760 | 000007e8: MSTORE 761 | 000007e9: PUSH1 0x20 762 | 000007eb: ADD 763 | 000007ec: PUSH32 0x6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000 764 | 0000080d: DUP2 765 | 0000080e: MSTORE 766 | 0000080f: POP 767 | 00000810: PUSH1 0x40 768 | 00000812: ADD 769 | 00000813: SWAP2 770 | 00000814: POP 771 | 00000815: POP 772 | 00000816: PUSH1 0x40 773 | 00000818: MLOAD 774 | 00000819: DUP1 775 | 0000081a: SWAP2 776 | 0000081b: SUB 777 | 0000081c: SWAP1 778 | 0000081d: REVERT 779 | 0000081e: JUMPDEST 780 | 0000081f: PUSH32 0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3 781 | 00000840: PUSH1 0x1 782 | 00000842: MUL 783 | 00000843: SWAP1 784 | 00000844: POP 785 | 00000845: DUP2 786 | 00000846: DUP2 787 | 00000847: SSTORE 788 | 00000848: POP 789 | 00000849: POP 790 | 0000084a: JUMP 791 | 0000084b: JUMPDEST 792 | 0000084c: PUSH1 0x0 793 | 0000084e: DUP1 794 | 0000084f: DUP3 795 | 00000850: EXTCODESIZE 796 | 00000851: SWAP1 797 | 00000852: POP 798 | 00000853: PUSH1 0x0 799 | 00000855: DUP2 800 | 00000856: GT 801 | 00000857: SWAP2 802 | 00000858: POP 803 | 00000859: POP 804 | 0000085a: SWAP2 805 | 0000085b: SWAP1 806 | 0000085c: POP 807 | 0000085d: JUMP 808 | 0000085e: STOP 809 | 0000085f: LOG1 810 | 00000860: PUSH6 0x627a7a723058 811 | 00000867: SHA3 812 | 00000868: LOG4 813 | 00000869: INVALID 814 | 0000086a: SELFBALANCE 815 | 0000086b: INVALID 816 | 0000086c: INVALID 817 | 0000086d: SHA3 818 | 0000086e: INVALID 819 | 0000086f: GAS 820 | 00000870: INVALID 821 | 00000871: INVALID 822 | 00000872: INVALID 823 | 00000873: INVALID 824 | 00000874: TIMESTAMP 825 | 00000875: DUP15 826 | 00000876: SWAP9 827 | 00000877: DUP12 828 | 00000878: INVALID 829 | 00000879: INVALID 830 | 0000087a: INVALID 831 | 0000087b: MUL 832 | 0000087c: INVALID 833 | 0000087d: INVALID 834 | 0000087e: AND 835 | 0000087f: SSTORE 836 | 00000880: ORIGIN 837 | 00000881: INVALID 838 | 00000882: INVALID 839 | 00000883: INVALID 840 | 00000884: SAR 841 | 00000885: INVALID 842 | 00000886: INVALID 843 | 00000887: INVALID 844 | 00000888: STOP 845 | 00000889: INVALID 846 | -------------------------------------------------------------------------------- /testdata/0x00000000006c3852cbEf3e08E8dF289169EdE581_encoded.txt: -------------------------------------------------------------------------------- 1 | 0x60806040526004361015610013575b600080fd5b60003560e01c806306fdde031461013f57806346423aa71461013657806355944a421461012d5780635b34b9661461012457806379df72bd1461011b57806387201b41146101125780638814773214610109578063a817440414610100578063b3a34c4c146100f7578063e7acab24146100ee578063ed98a574146100e5578063f07ec373146100dc578063f47b7740146100d3578063fb0f3ee1146100ca5763fd9f1e10146100c257600080fd5b61000e61132d565b5061000e61102c565b5061000e610f8b565b5061000e610f46565b5061000e610eb5565b5061000e610e07565b5061000e610da3565b5061000e610d32565b5061000e610be3565b5061000e610b0f565b5061000e610994565b5061000e61092f565b5061000e61089e565b5061000e6101c1565b5061000e610199565b91908251928382526000905b8482106101815750601f8460209495601f199311610174575b0116010190565b600085828601015261016d565b90602090818082850101519082860101520190610154565b503461000e57600060031936011261000e57602080526707536561706f727460475260606020f35b503461000e57602060031936011261000e57600435600052600260205260806040600020546040519060ff81161515825260ff8160081c16151560208301526effffffffffffffffffffffffffffff8160101c16604083015260881c6060820152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761027057604052565b610278610224565b604052565b60c0810190811067ffffffffffffffff82111761027057604052565b6020810190811067ffffffffffffffff82111761027057604052565b6040810190811067ffffffffffffffff82111761027057604052565b90601f601f19910116810190811067ffffffffffffffff82111761027057604052565b60405190610160820182811067ffffffffffffffff82111761027057604052565b6040519061032282610254565b565b60209067ffffffffffffffff811161033e575b60051b0190565b610346610224565b610337565b6001600160a01b0381160361000e57565b60a435906103228261034b565b35906103228261034b565b3590600682101561000e57565b92919261038d82610324565b60409461039c865192836102d1565b819584835260208093019160a080960285019481861161000e57925b8584106103c85750505050505050565b868483031261000e5784879184516103df81610254565b6103e887610374565b8152828701356103f78161034b565b83820152858701358682015260608088013590820152608080880135908201528152019301926103b8565b9080601f8301121561000e5781602061043d93359101610381565b90565b92919261044c82610324565b60409461045b865192836102d1565b819584835260208093019160c080960285019481861161000e57925b8584106104875750505050505050565b868483031261000e57848791845161049e8161027d565b6104a787610374565b8152828701356104b68161034b565b838201528587013586820152606080880135908201526080808801359082015260a080880135906104e68261034b565b820152815201930192610477565b9080601f8301121561000e5781602061043d93359101610440565b6004111561000e57565b35906103228261050f565b9190916101608184031261000e5761053a6102f4565b9261054482610369565b845261055260208301610369565b602085015267ffffffffffffffff90604083013582811161000e5781610579918501610422565b6040860152606083013591821161000e576105959183016104f4565b60608401526105a660808201610519565b608084015260a081013560a084015260c081013560c084015260e081013560e0840152610100808201359084015261012080820135908401526101408091013590830152565b35906effffffffffffffffffffffffffffff8216820361000e57565b92919267ffffffffffffffff8211610650575b604051916106336020601f19601f84011601846102d1565b82948184528183011161000e578281602093846000960137010152565b610658610224565b61061b565b9080601f8301121561000e5781602061043d93359101610608565b91909160a08184031261000e5761068d610315565b9267ffffffffffffffff823581811161000e57826106ac918501610524565b85526106ba602084016105ec565b60208601526106cb604084016105ec565b6040860152606083013581811161000e57826106e891850161065d565b6060860152608083013590811161000e57610703920161065d565b6080830152565b9080601f8301121561000e5781359061072282610324565b9261073060405194856102d1565b828452602092838086019160051b8301019280841161000e57848301915b84831061075e5750505050505090565b823567ffffffffffffffff811161000e57869161078084848094890101610678565b81520192019161074e565b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020808501948460051b01011161000e57565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600611156107f657565b6103226107bc565b608090805161080c816107ec565b8352816001600160a01b03918260208201511660208601526040810151604086015260608101516060860152015116910152565b90815180825260208080930193019160005b828110610860575050505090565b909192938260e0600192604088516108798382516107fe565b808501516001600160a01b031660a0840152015160c082015201950193929101610852565b50606060031936011261000e5767ffffffffffffffff60043581811161000e576108cc90369060040161070a565b9060243581811161000e576108e590369060040161078b565b60443592831161000e5761092b9361091161090761091795369060040161078b565b9490933691611bff565b90613e21565b604051918291602083526020830190610840565b0390f35b503461000e57600060031936011261000e57610949615017565b3360005260016020526020604060002060018154018091556040518181527f721c20121297512b72821b97f5326877ea8ecf4bb9948fea5bfcb6453074d37f833392a2604051908152f35b503461000e5760031960208136011261000e5760043567ffffffffffffffff811161000e576101608160040192823603011261000e576109d38261152d565b916109e06024830161152d565b906109ee6044840182611cfc565b6064850192916109fe8484611d50565b92909360848801610a0e90611dae565b95610a1891611d50565b969050610a236102f4565b6001600160a01b0390991689526001600160a01b031660208901523690610a4992610381565b60408701523690610a5992610440565b6060850152610a6b9060808501611db8565b60a482013560a084015260c482013560c084015260e482013560e08401526101048201356101008401526101248201356101208401526101408301526101440135610ab59161268a565b604051908152602090f35b9092916040820191604081528451809352606081019260208096019060005b818110610af95750505061043d9394818403910152610840565b8251151586529487019491870191600101610adf565b5060e060031936011261000e5767ffffffffffffffff60043581811161000e57610b3d90369060040161070a565b60243582811161000e57610b5590369060040161078b565b909160443584811161000e57610b6f90369060040161078b565b9060643595861161000e57610b8b610ba496369060040161078b565b929091610b9661035c565b9560c4359760843596611cc2565b9061092b60405192839283610ac0565b602060031982011261000e576004359067ffffffffffffffff821161000e57610bdf9160040161078b565b9091565b503461000e57610bf236610bb4565b610bfa615017565b60005b818110610c105760405160018152602090f35b80610c1e6001928486613f13565b610c2881806146ae565b610c318161152d565b91610c44610c3f3684610524565b614fa9565b91610c59836000526002602052604060002090565b610c6381856155a2565b50610c76610c72825460ff1690565b1590565b610c86575b505050505001610bfd565b7ffde361574a066b44b3b5fe98a87108b7565e327327954c4faeea56a4e6491a0a92610d2592610d01610d0793610cd6610ccf610cc86020968781019061158b565b3691610608565b898b615303565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b0161152d565b6040519384526001600160a01b039081169416929081906020820190565b0390a33880808080610c7b565b50604060031936011261000e5767ffffffffffffffff60043581811161000e57610d6090369060040161078b565b60249291923591821161000e5761092b92610d8d610d8561091794369060040161078b565b939092614750565b60405190610d9a82610299565b60008252613e21565b5060031960408136011261000e576004359067ffffffffffffffff821161000e57604090823603011261000e57610dfd610de16020926004016146e1565b60405190610dee82610299565b600082523391602435916141fd565b6040519015158152f35b5060031960808136011261000e576004359067ffffffffffffffff9081831161000e5760a090833603011261000e5760243590811161000e5761092b91610e55610e9692369060040161078b565b90606435610e628161034b565b6001600160a01b038116610ea85750610e90610e8433945b3690600401610678565b91604435933691611bff565b906141fd565b60405190151581529081906020820190565b610e84610e909194610e7a565b5060a060031936011261000e5767ffffffffffffffff60043581811161000e57610ee390369060040161078b565b9060243583811161000e57610efc90369060040161078b565b91909260443594851161000e57610f25610f1d610ba496369060040161078b565b929093614750565b9160405193610f3385610299565b6000855260843595339560643595612a0b565b503461000e57602060031936011261000e576020610f83600435610f698161034b565b6001600160a01b0316600052600160205260406000205490565b604051908152f35b503461000e57600060031936011261000e57610ff3610fa86127b4565b60405190610fb5826102b5565b600382527f312e3100000000000000000000000000000000000000000000000000000000006020830152604051928392606084526060840190610148565b9060208301526001600160a01b037f00000000000000000000000000000000f9490004c11cef243f5400493c00ad631660408301520390f35b5060031960208136011261000e5760043567ffffffffffffffff811161000e576102408160040192823603011261000e5761012435908160021c926001841193341585036112f85784936003821160028314916110d183600286117ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe870102018815926001820185028460011b880103998a92600360a088026024013593168a6115dc565b6110e38260051b6101c40135986107ec565b156111b5575050506111036110f78261152d565b6001600160a01b031690565b6001600160a01b0390811660248401351761118b5761115f60449461115a6111759761116b9461113560a4890161152d565b9060648901946111448661152d565b9060e48b01359360c48c01359333931691611dcf565b61152d565b91610204840190611537565b93909201356119df565b61117f6001600055565b60405160018152602090f35b60046040517f6ab37ce7000000000000000000000000000000000000000000000000000000008152fd5b9194509161121e6110f7606461122396611228996111d1611514565b8a819b996111df839b6107ec565b1561122d5750610d01916111f560a4850161152d565b61120086860161152d565b9060e48601359160c4870135916001600160a01b03339216906120c8565b611ac5565b6122c4565b611175565b611236816107ec565b6003810361127d57506112789161124f60a4850161152d565b61125a86860161152d565b9060e48601359160c4870135916001600160a01b03339216906121be565b610d01565b806112896004926107ec565b036112c3576112789161129b8861152d565b6112a686860161152d565b6044860135916001600160a01b03602488013592169033906120c8565b611278916112d08861152d565b6112db86860161152d565b6044860135916001600160a01b03602488013592169033906121be565b6040517fa61be9f0000000000000000000000000000000000000000000000000000000008152346004820152602490fd5b0390fd5b503461000e5761133c36610bb4565b611344615017565b60005b81811061135a5760405160018152602090f35b611365818385614fe2565b61136e8161152d565b60209061137c82840161152d565b6001600160a01b0391828116938433141580611508575b6114de576040956113a681880182611cfc565b6060808401926113b68486611d50565b90916080948a8689016113c890611dae565b976113d3908a611d50565b9a90506113de6102f4565b6001600160a01b03909c168c526001600160a01b03909116908b0152369061140592610381565b8c890152369061141492610440565b9086015284019061142491611db8565b60a0808201359084015260c0808201359084015260e08082013590840152610100808201359084015261012080820135908401526101409182840152013561146b9161268a565b93611480856000526002602052604060002090565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101001790555193845216917f6bacc01dbe442496068f7d234edd811f1a5f833243e0aec824f86ab861f3c90d90602090a3600101611347565b60046040517f80ec7374000000000000000000000000000000000000000000000000000000008152fd5b50838316331415611393565b60405190611521826102b5565b60208083523683820137565b3561043d8161034b565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e57602001918160061b3603831361000e57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e5760200191813603831361000e57565b9591906115e7615008565b6115fb610140880135610120890135615296565b50611604611927565b611622611615610200890189611537565b6101e08a013591506118f6565b7f42d81c6929ffdc4eb27a0808e40e82516ad42296c166065de7f812492304ff6e6080528160a0526060602460c037604060646101203760e06080908120610160526001610264359081016102a060059290921b918201526102c081019384526024906102e00137610160928460a0528560c052600060e05260005b8394610204358210156116fb5790604060a0600193602090818560061b6102840161010037838560061b6102840161012037019660e0608020885201968888528960c08201526101008360061b610284019101370193929361169e565b5090929350969590966001610204350160051b610160206060525b83610264358210156117495790604060a060019301958787528860c08201526101008360061b6102840191013701611716565b505093509490506103229391507fa66999307ad1bb4fde44d13a5d710bd7718e0c87c1eef68a571629fbf5b93d026080528260a052606060c460c03760206101046101203760c0608020600052602060002060e05260016102643560051b610200015261022092836102643560051b0152606060c46102406102643560051b01376118ee610cc8608435936117f1856001600160a01b03166000526001602052604060002090565b547ffa445660b7e21515a59617fcd68910b487aa5808b8abda3d78bc85df364b2c2f6080526040608460a03760605161010052846101205260a0610144610140376101e0526101809485608020956102643560051b0190868252336101a06102643560051b015260806101c06102643560051b01526101206101e06102643560051b01527f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f3160a4359260a061026435026101e00190a360006060526118e56060820161115a6118bf8261152d565b966118cc6080860161152d565b906001600160a01b03809916906101608701358b61569d565b9581019061158b565b9216906147dc565b106118fd57565b60046040517f466aa616000000000000000000000000000000000000000000000000000000008152fd5b601861012435106102643560061b61026001610244351461024061022435146020600435141616161561195657565b60046040517f39f3e3fd000000000000000000000000000000000000000000000000000000008152fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90156119b95790565b61043d611980565b91908110156119d2575b60061b0190565b6119da611980565b6119cb565b919234936000915b808310611a4257505050828211611a185781611a0291611e97565b808211611a0d575050565b610322910333611e97565b60046040517f1a783b8d000000000000000000000000000000000000000000000000000000008152fd5b909194611a508683856119c1565b90813590808211611a1857611a748260206001950135611a6f8161034b565b611e97565b03950191906119e7565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818110611ab9570390565b611ac1611a7e565b0390565b90939291908115611b85579333611ade60a0830161152d565b60e08301359260c08101355b61118b578460051b6101e40335946102008201611b078184611537565b93905060005b848110611b24575050505050956103229596611f2c565b8989858e611b3c85611b368989611537565b906119c1565b803592611b6a575b91611b649391611b5d6110f7602060019998960161152d565b908c611f2c565b01611b0d565b92909493919b8c611b7a91611aae565b9b9193949092611b44565b933394611b918261152d565b6040830135926020810135611aea565b81601f8201121561000e57803591611bb883610324565b92611bc660405194856102d1565b808452602092838086019260051b82010192831161000e578301905b828210611bf0575050505090565b81358152908301908301611be2565b909291611c0b84610324565b91604094611c1b865194856102d1565b839581855260208095019160051b83019380851161000e5783925b858410611c465750505050505050565b67ffffffffffffffff90843582811161000e5786019060a08285031261000e578451611c7181610254565b8235815289830135600281101561000e578a82015285830135868201526060808401359082015260808084013594851161000e57611cb3868c96879601611ba1565b90820152815201930192611c36565b90611cf090610bdf9a99989796959493986001600160a01b03811615600014611cf6575033985b3691611bff565b90612a0b565b98611ce9565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e576020019160a082023603831361000e57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e576020019160c082023603831361000e57565b600411156107f657565b3561043d8161050f565b6004821015611dc45752565b611dcc6107bc565b52565b949290959391841515600014611e3b5761032296604051967f4ce34aa2000000000000000000000000000000000000000000000000000000008852602060048901526001602489015260448801526064870152608486015260a485015260c484015260e4830152612451565b9291946002919450611e4c816107ec565b03611e8b57600103611e61576103229361504d565b60046040517fefcc00b1000000000000000000000000000000000000000000000000000000008152fd5b9291906103229461515b565b90611ea181611efb565b600080808084865af115611eb3575050565b60449250611ebf612895565b6001600160a01b03604051927f470c7c1d0000000000000000000000000000000000000000000000000000000084521660048301526024820152fd5b15611f0257565b60046040517f91b3e514000000000000000000000000000000000000000000000000000000008152fd5b929193949094611f3b83611efb565b611f4581836122b1565b806120ba575050604051926000947f23b872dd00000000000000000000000000000000000000000000000000000000865280600452816024528260445260208660648180885af1803d15601f3d1160018a51141617163d1515811615611fb4575b505050505050604052606052565b80863b151516611fa657908795969115611ff457602486887f5f15d672000000000000000000000000000000000000000000000000000000008252600452fd5b1561202e57506084947f98891923000000000000000000000000000000000000000000000000000000008552600452602452604452606452fd5b3d61206d575b5060a4947ff486bc8700000000000000000000000000000000000000000000000000000000855260045260245260445281606452608452fd5b601f3d0160051c9060051c9080600302918082116120a1575b505060205a9101106120985785612034565b833d81803e3d90fd5b8080600392028380020360091c92030201018680612086565b9061032295929493916125c0565b959092949391936120d981836122b1565b806120f0575050600103611e61576103229361504d565b9060649593916000979593975060208251146000146121ab5760c0906001906040845260208401527f4ce34aa20000000000000000000000000000000000000000000000000000000060408401526020604484015280888401525b02019360027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc48601527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe48501526004840152602483015260448201520152565b5060c0868201600181510180915261214b565b9590919293946121cd86611efb565b6121d781836122b1565b806121e75750506103229461515b565b906064959694939291602082511460001461229e5760c0906001906040845260208401527f4ce34aa20000000000000000000000000000000000000000000000000000000060408401526020604484015280888401525b02019360037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc48601527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe48501526004840152602483015260448201520152565b5060c0868201600181510180915261223e565b906020820151036122bf5750565b610322905b60408082510361244d57602082015160c06064840151026044019180519260206001600160a01b036000928184927f00000000000000000000000000000000f9490004c11cef243f5400493c00ad631674ff00000000000000000000000000000000000000001783528684527f023d904f2503c37127200ca07b976c3a53cc562623f67023115bf311f580505986526055600b201696855281805284880182885af190519015612402577fffffffff000000000000000000000000000000000000000000000000000000007f4ce34aa2000000000000000000000000000000000000000000000000000000009116036123c05750505060209052565b517f1cf99b2600000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03919091166024820152604490fd5b611329848361240f612895565b517fd13d53d40000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201529081906024820190565b5050565b6040519160206001600160a01b036101046000938285937f00000000000000000000000000000000f9490004c11cef243f5400493c00ad631674ff00000000000000000000000000000000000000001784528685527f023d904f2503c37127200ca07b976c3a53cc562623f67023115bf311f58050596040526055600b20169660405282805282875af190519015612574577fffffffff000000000000000000000000000000000000000000000000000000007f4ce34aa200000000000000000000000000000000000000000000000000000000911603612530575050565b6040517f1cf99b2600000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03919091166024820152604490fd5b61132983612580612895565b6040517fd13d53d40000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201529081906024820190565b9060649492939160208251146000146126775760c0906001906040845260208401527f4ce34aa20000000000000000000000000000000000000000000000000000000060408401526020604484015280878401525b02019260017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc48501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe484015260048301526024820152600060448201520152565b5060c08582016001815101809152612615565b91909161014081018051917fa66999307ad1bb4fde44d13a5d710bd7718e0c87c1eef68a571629fbf5b93d02604051604083018051928351926020809501906000915b868684106127915750505050506040519160051b8220917f42d81c6929ffdc4eb27a0808e40e82516ad42296c166065de7f812492304ff6e9093606086019481865101906000915b8a831061276d575050505050601f198660051b604051209401978851907ffa445660b7e21515a59617fcd68910b487aa5808b8abda3d78bc85df364b2c2f8a5282519383528451958552865261018089209852525252565b838082601f19600194510180519089815260e0812087525201920192019190612715565b8082601f19600194510180519088815260c08120875252019201920191906126cd565b467f0000000000000000000000000000000000000000000000000000000000000001036127ff577fb50c8913581289bd2e066aeef89fceb9615d490d673131fd1a7047436706834e90565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f32b5c112df393a49218d7552f96b2eeb829dfb4272f4f24eef510a586b85feef60408201527f722c0e0c80487266e8c6a45e3a1a803aab23378a9c32e6ebe029d4fad7bfc96560608201524660808201523060a082015260a0815261288f8161027d565b51902090565b3d61289c57565b601f3d0160051c60405160051c9080600302918082116128cf575b505060205a9101106128c557565b3d6000803e3d6000fd5b8080600392028380020360091c920302010138806128b7565b919082604091031261000e576040516040810181811067ffffffffffffffff821117612922575b6040526020808294803584520135910152565b61292a610224565b61290f565b92919261293b82610324565b60409261294a845192836102d1565b819581835260208093019160061b84019381851161000e57915b84831061297357505050505050565b83869161298084866128e8565b815201920191612964565b9291909261299884610324565b916129a660405193846102d1565b829480845260208094019060051b83019282841161000e5780915b8483106129d057505050505050565b823567ffffffffffffffff811161000e57820184601f8201121561000e578691612a00868385809535910161292f565b8152019201916129c1565b96989792612a268a612a359695612a2d95949998998b612c40565b369161298b565b93369161298b565b908251825191612a4d612a48848461314b565b61366d565b9760009586915b848310612b47575050506000935b838510612abf57505050505080612ab4575b50825115612a8a5782612a8691613b15565b9190565b60046040517fd5da9a1b000000000000000000000000000000000000000000000000000000008152fd5b835103835238612a74565b909192939488612ada84612ad38986612c1e565b518a613745565b8051608001516001600160a01b03166001600160a01b03612b086110f760208501516001600160a01b031690565b911603612b225750506001809101955b0193929190612a62565b8791612b4191612b3a85896001979c01038093612c1e565b528b612c1e565b50612b18565b9091968a612b6583612b5e8b879b98999a9b612c1e565b518c6136c9565b8051608001516001600160a01b03166001600160a01b03612b936110f760208501516001600160a01b031690565b911603612bb05750506001809101975b0191909594939295612a54565b8991612bcd91612bc6856001969d038093612c1e565b528d612c1e565b50612ba3565b90612bdd82610324565b612bea60405191826102d1565b828152601f19612bfa8294610324565b0190602036910137565b602090805115612c12570190565b612c1a611980565b0190565b6020918151811015612c33575b60051b010190565b612c3b611980565b612c2b565b93929091612c4c615008565b845192612c5884612bd3565b9160008352601d604560003560e01c061160011b9060005b868110612d30575050600314612d0657612c8a9086613266565b60005b838110612c9c57505050509050565b80612ca960019284612c1e565b5115612d0157612cfb612cbc8289612c1e565b5151612cc88386612c1e565b519086612cdc82516001600160a01b031690565b60208301516001600160a01b03169060606040850151940151946145e5565b01612c8d565b612cfb565b60046040517f12d3f5a3000000000000000000000000000000000000000000000000000000008152fd5b612d3a818a612c1e565b51918015612ebf57612d4d868685614cb3565b9290916001850189528215612eab57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91612d89868b612c1e565b52019380519260a084015193604060c08201519101518051908560005b838110612e405750505050606080935101519485519560005b878110612dd85750505050505050506001905b01612c70565b808760a0612de860019486612c1e565b5188612e2489898d6080860197612e01895187836131fa565b918701958651908a518214600014612e30575050508085525b80885284516131a0565b90520151905201612dbf565b612e39926131fa565b8552612e1a565b612e4a8184612c1e565b519b8c5115179b86868b60808401938451612e669085896131fa565b60608192019586519881518a1460001499612e919760019b612e9b575050508187525b52845161315f565b9052018690612da6565b612ea4926131fa565b8752612e89565b509360019392506000915060200152612dd2565b91906000602060019301528181018652612dd2565b612edc615008565b805192612ee884612bd3565b92600091828552601d6045843560e01c061160011b90835b878110612f90575050600314612d0657612f1a9083613266565b838110612f275750505050565b80612f3460019285612c1e565b5115612f8b57612f85612f478285612c1e565b5151612f538387612c1e565b5190612f6681516001600160a01b031690565b60208201516001600160a01b0316906060604084015193015193614513565b01612f1a565b612f85565b612f9a8187612c1e565b51918581156130fb5750612faf888685614ee0565b929091600185018b528883156130e95750907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91612fed868d612c1e565b52019380519260a084015191604060c0860151950151805190858c5b83811061308f5750505050606090510151938451948a5b86811061303857505050505050506001905b01612f00565b8061304560019284612c1e565b5160a0608082019189613083888b61305f87518d866131fa565b60608601948d8651908a518214600014612e305750505080855280885284516131a0565b90520151905201613020565b6130998184612c1e565b519b8c5115179b868a89608084019384516130b59085896131fa565b60608192019586519881518a14600014996130df9760019b612e9b5750505081875252845161315f565b9052018690613009565b92505093600193925060200152613032565b6020600193929401528181018852613032565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482118115151661313f570290565b613147611a7e565b0290565b81198111613157570190565b612c1a611a7e565b909283820361316e5750505090565b82939161318a613196946131909303954203918287039061310e565b9261310e565b9061314b565b9081049015150290565b90928382036131af5750505090565b926131906131cd9261318a856001969703964203918288039061310e565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830104019015150290565b9190918281146132435782818309613219576132159161310e565b0490565b7fc63cf0890000000000000000000000000000000000000000000000000000000060005260046000fd5b50905090565b600211156107f657565b5161043d816107ec565b611dcc826107ec565b815181519260005b8281106133a45750505060005b82811061328757505050565b6132918183612c1e565b516132c56132b160208301516effffffffffffffffffffffffffffff1690565b6effffffffffffffffffffffffffffff1690565b1561339b5751606081018051519060005b828110613354575050506040809101908151519160005b83811061330257505050506001905b0161327b565b61331f613319613313838551612c1e565b51613253565b60031090565b61332b576001016132ed565b600483517fa6cfc673000000000000000000000000000000000000000000000000000000008152fd5b613365613319613313838551612c1e565b613371576001016132d6565b60046040517fff75a340000000000000000000000000000000000000000000000000000000008152fd5b506001906132fc565b6133ae8183612c1e565b5180519086821015613565576020916133e56132b1846133ce848b612c1e565b5101516effffffffffffffffffffffffffffff1690565b1561355a576133f49087612c1e565b515191604092838301519183015161340b81613249565b61341481613249565b6134e55783015180518210156134bc579061342e91612c1e565b5191600383519361343e856107ec565b84906134558482019160048351981485039061325d565b606085015190525b11156134935750906001929181613478575b50505b0161326e565b61348c91608060608301519201519161358f565b388061346f565b600490517f94eb6af6000000000000000000000000000000000000000000000000000000008152fd5b600484517fbfb3f8ce000000000000000000000000000000000000000000000000000000008152fd5b929060608094015180518210156135315760039161350291612c1e565b5193845194613510866107ec565b85916135278583019260048451991486039061325d565b850151905261345d565b600483517f6088d7de000000000000000000000000000000000000000000000000000000008152fd5b505050600190613472565b60046040517f869586c4000000000000000000000000000000000000000000000000000000008152fd5b91909160009081526020808220928181019282825192600593841b0101915b8285106135eb575050505050036135c157565b60046040517f09bde339000000000000000000000000000000000000000000000000000000008152fd5b8451808711821b968752958418959095526040812094938301936135ae565b604051906060820182811067ffffffffffffffff821117613660575b8060405260408361363683610254565b6000928381528360808301528360a08301528360c08301528360e083015281528260208201520152565b613668610224565b613626565b9061367782610324565b61368460405191826102d1565b828152601f196136948294610324565b019060005b8281106136a557505050565b6020906136b061360a565b82828501015201613699565b906002821015611dc45752565b9092916136d461360a565b93805115613714576136f6926001600160a01b038693166080845101526137e9565b81516060810151156137055750565b60806000918260208601520152565b60246040517f375c24c100000000000000000000000000000000000000000000000000000000815260006004820152fd5b92919061375061360a565b9381511561378d576137639185916139aa565b60208301903382526040840152825190606082015115613781575050565b60009182608092520152565b60246040517f375c24c100000000000000000000000000000000000000000000000000000000815260016004820152fd5b507f7fda72790000000000000000000000000000000000000000000000000000000060005260046000fd5b92919260208201906020825151825181101561399d575b60051b82010151928351926020604085015181835101518151811015613990575b60051b01015160009460208697015161397a575b9061012060609260408b5193805185526020810151602086015201516040840152805160208c0152015160408a01522091805160051b01905b8181106138c1575050505060608293945101526138885750565b60011461389757610322611a7e565b7f91b3e5140000000000000000000000000000000000000000000000000000000060005260046000fd5b60209095949501906020825151855181101561396d575b60051b85010151602081015115613964575160606020604083015181865101518151811015613957575b60051b01015196818801519081158a8381011060011b17179801966000828201522084149060408a0151610120820151149060208b015190511416161561394a575b9061386e565b6139526137be565b613944565b61395f6137be565b613902565b50949394613944565b6139756137be565b6138d8565b6060820180516000909152801597509550613835565b6139986137be565b613821565b6139a56137be565b613800565b9291602080830194855151918151831015613b08575b80600593841b8301015194606093828588510151818b5101518151811015613afb575b831b010151926000968188990151613ae6575b51948451865281850151828701526040850151604087015260a0809501519a608087019b8c52878720948051851b01905b818110613a4257505050505050508394955001526138885750565b83909a999a01908c848351518551811015613ad9575b871b850101518581015115613acf578a869151015181855101518151811015613ac2575b881b0101518a81019b8d8d518091019e8f9115911060011b17179c9b60009052888b822089149251910151141615613ab5575b90613a27565b613abd6137be565b613aaf565b613aca6137be565b613a7c565b5050999899613aaf565b613ae16137be565b613a58565b848701805160009091528015995097506139f6565b613b036137be565b6139e3565b613b106137be565b6139c0565b908151613b2181612bd3565b9260005b828110613be5575050503490613b39611514565b9080519060005b828110613b7457505050613b53906122c4565b80613b64575b5061043d6001600055565b613b6e9033611e97565b38613b59565b613b7e8183612c1e565b518051908151613b8d816107ec565b613b96816107ec565b15613bca575b8560019392826040613bbb6020613bc49601516001600160a01b031690565b91015191613cae565b01613b40565b9560608293920181815111611a185751900395909190613b9c565b613bef8183612c1e565b51613c0f6132b160208301516effffffffffffffffffffffffffffff1690565b15613ca557613c27613c218388612c1e565b60019052565b606080915101519081519160005b838110613c4a57505050506001905b01613b25565b82613c558284612c1e565b51015180613c665750600101613c35565b6040517fa5f542080000000000000000000000000000000000000000000000000000000081526004810187905260248101929092526044820152606490fd5b50600190613c44565b9290918351613cbc816107ec565b613cc5816107ec565b613d1a57505050613ce36110f760208301516001600160a01b031690565b6001600160a01b03604083015191161761118b57806060613d1160806103229401516001600160a01b031690565b91015190611e97565b90919260018151613d2a816107ec565b613d33816107ec565b03613d8357604081015161118b5761032293613d5960208301516001600160a01b031690565b906001600160a01b036060613d7860808601516001600160a01b031690565b940151931691611f2c565b9260028451613d91816107ec565b613d9a816107ec565b03613de05783613db760206103229601516001600160a01b031690565b60808201516001600160a01b0316926001600160a01b03606060408501519401519416916120c8565b83613df860206103229601516001600160a01b031690565b60808201516001600160a01b0316926001600160a01b03606060408501519401519416916121be565b90613e33909493929482519083612ed4565b613e3c8261366d565b9160009485915b808310613e705750505090613e619184829495613e65575b50613b15565b5090565b825103825238613e5b565b909195613e7e878385613f13565b613ea4613e8b8280611537565b90613e9b60209485810190611537565b92909189613f6c565b906001600160a01b03613ed96110f7613ec960808651016001600160a01b0390511690565b938501516001600160a01b031690565b911603613ef057506001809101965b019190613e43565b96613f0d8298600193830390613f06828a612c1e565b5287612c1e565b50613ee8565b9190811015613f54575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18136030182121561000e570190565b613f5c611980565b613f1d565b61043d9036906128e8565b92909391613f7861360a565b948115801561415e575b61413457613f8e61360a565b613fa381613f9d36888861292f565b886139aa565b5191613fba87613fb436848661292f565b886137e9565b613fc48751613253565b835190613fd0826107ec565b613fd9826107ec565b613fe2816107ec565b148015906140fc575b80156140e9575b6140bf5761043d9561406f95608095896060948588019687518784510151106000146140825750505061403161402c8593614057936119b0565b613f61565b60208361404a8d828a5191510151900396845190612c1e565b5151015191015190612c1e565b5101528651015190525b01516001600160a01b031690565b6080835101906001600160a01b03169052565b86979694506140b1935061404a856140a161402c6020956040956119b0565b9451015188518551910397612c1e565b510152519086510152614061565b60046040517f09cfb455000000000000000000000000000000000000000000000000000000008152fd5b5060408751015160408401511415613ff2565b508651602001516001600160a01b03166001600160a01b0361412b6110f760208701516001600160a01b031690565b91161415613feb565b60046040517f98e9db6e000000000000000000000000000000000000000000000000000000008152fd5b508315613f82565b6040519061417382610254565b604051608083610160830167ffffffffffffffff8111848210176141f0575b6040526000808452806020850152606093846040820152848082015281848201528160a08201528160c08201528160e08201528161010082015281610120820152816101408201528252806020830152604082015282808201520152565b6141f8610224565b614192565b909291614208615017565b600260005561421784836148c0565b9490919260405195614228876102b5565b6001875260005b6020808210156142515790602091614245614166565b90828b0101520161422f565b505061428583959761428061429e9a61428e97998351156142ba575b60208401528251156142ad575b82613266565b612c04565b515195866142c7565b81516001600160a01b0316612cdc565b6142a86001600055565b600190565b6142b5611980565b61427a565b6142c2611980565b61426d565b939192909360a093848201519360c0830151966142e2611514565b96604092838601908151519160005b8381106143d7575050505034986060809601978851519860005b8a8110614338575050505050505050505050614326906122c4565b8061432e5750565b6103229033611e97565b614343818351612c1e565b51898101805161435d87878d8c60808801958651906144a1565b8092528783015190528151614371816107ec565b61437a816107ec565b15614397575b50906143918d8c6001943390613cae565b0161430b565b90919e9d8082116143ae579d9e9d039c908a614380565b600489517f1a783b8d000000000000000000000000000000000000000000000000000000008152fd5b6143e2818351612c1e565b5180516143ee816107ec565b6143f7816107ec565b15614441579061443b8d8f93868f8d6144236001988e936060870193845195608089019687519061446a565b9052528c610120613bbb82516001600160a01b031690565b016142f1565b600488517f12d3f5a3000000000000000000000000000000000000000000000000000000008152fd5b90939084810361448057505061043d93506131fa565b938361449561043d979661449b9496866131fa565b936131fa565b9061315f565b9093908481036144b757505061043d93506131fa565b938361449561043d97966144cc9496866131fa565b906131a0565b90815180825260208080930193019160005b8281106144f2575050505090565b909192938260a08261450760019489516107fe565b019501939291016144e4565b91939290936040805193608091828601918652602090600082880152838188015285518093528160a088019601936000915b84831061459a5750505050505091614595827f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f31948380950360608501526001600160a01b038091169716956144d2565b0390a3565b90919293949684836001928a5180516145b2816107ec565b8252808401516001600160a01b031684830152858101518683015260609081015190820152019801959493019190614545565b92909493916040918251946080918287019187526001600160a01b0394856020921682890152838189015286518093528160a089019701936000915b84831061466a57505050505050828285949361459593867f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f319896036060870152169716956144d2565b90919293949784836001928b518051614682816107ec565b8252808401518c1684830152858101518683015260609081015190820152019901959493019190614621565b9035907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea18136030182121561000e570190565b6146e9614166565b506147336147056146fa83806146ae565b92602081019061158b565b61471c6040519461471586610254565b3690610524565b845260016020850152600160408501523691610608565b606082015260405161474481610299565b60008152608082015290565b61475982610324565b9161476760405193846102d1565b808352601f1961477682610324565b0160005b8181106147c557505060005b8181106147935750505090565b806147a96147a46001938587613f13565b6146e1565b6147b38287612c1e565b526147be8186612c1e565b5001614786565b6020906147d0614166565b8282880101520161477a565b929190836000526002602052604060002091825460ff8160081c1661487b576effffffffffffffffffffffffffffff8160101c1661484a579460ff7101000000000000000000000000000001000195961615614839575b50505055565b61484292615303565b388080614833565b602486604051907fee9e0e630000000000000000000000000000000000000000000000000000000082526004820152fd5b602486604051907f1a5155740000000000000000000000000000000000000000000000000000000082526004820152fd5b90805b6148b7575090565b809106806148af565b90918151926148db610c7260a086015160c087015190615296565b614ca7576148fe6132b160208501516effffffffffffffffffffffffffffff1690565b9361491e6132b160408601516effffffffffffffffffffffffffffff1690565b948581118015614c9f575b614c755785811080614c5d575b614c335761498261494683614fa9565b9360e0840151608085015161495a81611da4565b85516001600160a01b0316918761497b60208901516001600160a01b031690565b948b615cc1565b614996836000526002602052604060002090565b916149a4610c7284866155a2565b614c23578254958460ff881615614bfc575b5050506effffffffffffffffffffffffffffff90818660101c169560881c96871515600014614b7f5760018103614b4757505085945b856149f7888361314b565b11614b3d575b86614a079161314b565b8082871183831117614ad6575b5090614a8f818493614a4e614ad19660017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b84547fffffffffffffffffffffffffffffff00000000000000000000000000000000ff16911660101b70ffffffffffffffffffffffffffffff000016178355565b815470ffffffffffffffffffffffffffffffffff1690861660881b7fffffffffffffffffffffffffffffff000000000000000000000000000000000016179055565b929190565b9690614ae987614aef92989594986148ac565b826148ac565b80150180809204970492049480861181841117614b0e57909138614a14565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80860396506149fd565b959096868103614b58575b506149ec565b614b7281614b6c89614b78959b9a9b61310e565b9861310e565b9761310e565b9438614b52565b9550955090614ad191614bb78260017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b81547fffffffffffffffffffffffffffffff00000000000000000000000000000000ff1687821660101b70ffffffffffffffffffffffffffffff000016178255614a8f565b6060614c12614c1b94516001600160a01b031690565b92015191615303565b3880846149b6565b5050509150915090600090600090565b60046040517fa11b63ff000000000000000000000000000000000000000000000000000000008152fd5b5060016080830151614c6e81611da4565b1615614936565b60046040517f5a052b32000000000000000000000000000000000000000000000000000000008152fd5b508015614929565b50600092508291508190565b919290928251614ccf610c7260a083015160c0840151906152df565b614ed057614cf26132b160208601516effffffffffffffffffffffffffffff1690565b614d116132b160408701516effffffffffffffffffffffffffffff1690565b958682118015614ec8575b614c755786821080614eb0575b614c3357614d7d90614d3a84614fa9565b9460e0850151608086015190614d4f82611da4565b87614d6188516001600160a01b031690565b93614d7660208a01516001600160a01b031690565b958c615da2565b614d91836000526002602052604060002090565b91614d9f610c728486615645565b614c23578254958460ff881615614e92575b5050506effffffffffffffffffffffffffffff90818660101c169560881c96871515600014614b7f5760018103614e6657505085945b85614df2888361314b565b11614e5c575b86614e029161314b565b8082871183821117614e48575090614a8f818493614a4e614ad19660017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b969050614aef614ae98789989594986148ac565b8086039650614df8565b959096868103614e77575b50614de7565b614b7281614b6c89614e8b959b9a9b61310e565b9438614e71565b6060614c12614ea894516001600160a01b031690565b388084614db1565b5060016080840151614ec181611da4565b1615614d29565b508115614d1c565b5050915050600090600090600090565b919290928251614efc610c7260a083015160c084015190615296565b614ed057614f1f6132b160208601516effffffffffffffffffffffffffffff1690565b614f3e6132b160408701516effffffffffffffffffffffffffffff1690565b958682118015614fa1575b614c755786821080614f89575b614c3357614f6790614d3a84614fa9565b614f7b836000526002602052604060002090565b91614d9f610c7284866155a2565b5060016080840151614f9a81611da4565b1615614f56565b508115614f49565b61043d90614fc2606082015151610140830151906118f6565b80516001600160a01b03166000908152600160205260409020549061268a565b909161043d92811015614ffb575b60051b8101906146ae565b615003611980565b614ff0565b615010615017565b6002600055565b60016000540361502357565b60046040517f7fa8a987000000000000000000000000000000000000000000000000000000008152fd5b9092813b1561512d57604051926000947f23b872dd000000000000000000000000000000000000000000000000000000008652806004528160245282604452858060648180885af1156150a65750505050604052606052565b8593943d6150e9575b5060a4947ff486bc870000000000000000000000000000000000000000000000000000000085526004526024526044526064526001608452fd5b601f3d0160051c9060051c908060030291808211615114575b505060205a91011061209857856150af565b8080600392028380020360091c92030201018680615102565b507f5f15d6720000000000000000000000000000000000000000000000000000000060005260045260246000fd5b929093833b1561526857604051936080519160a0519360c051956000987ff242432a000000000000000000000000000000000000000000000000000000008a528060045281602452826044528360645260a06084528960a452898060c48180895af1156151d857505050505060805260a05260c052604052606052565b89949550883d61521b575b5060a4957ff486bc87000000000000000000000000000000000000000000000000000000008652600452602452604452606452608452fd5b601f3d0160051c9060051c90806003029180821161524f575b505060205a91011061524657866151e3565b843d81803e3d90fd5b8080600392028380020360091c92030201018780615234565b837f5f15d6720000000000000000000000000000000000000000000000000000000060005260045260246000fd5b42109081156152d4575b506152aa57600190565b60046040517f6f7eac26000000000000000000000000000000000000000000000000000000008152fd5b9050421015386152a0565b42109081156152f8575b506152f357600190565b600090565b9050421015386152e9565b9091336001600160a01b0383161461559d5761531d6127b4565b926000937f190100000000000000000000000000000000000000000000000000000000000085526002526022526042832090836022528380528392815191601f198101805184604103918860018411938415615532575b508514851515169788156153c3575b5050505050505050156153935750565b60049061539e612895565b7f4f7fb80d000000000000000000000000000000000000000000000000000000008152fd5b909192939495969750604082527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc8501937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0855196019660208b60648a519b7f1626ba7e000000000000000000000000000000000000000000000000000000009d8e8b528c520188845afa998a615469575b505050505252523880808080808080615383565b8b51036154765780615455565b908a913b61550a576154e257640101000000821a156154b757807f815e1d640000000000000000000000000000000000000000000000000000000060049252fd5b6024917f1f003d0a000000000000000000000000000000000000000000000000000000008252600452fd5b807f8baa579f0000000000000000000000000000000000000000000000000000000060049252fd5b6004827f4f7fb80d000000000000000000000000000000000000000000000000000000008152fd5b9850506040840180519060608601518b1a99615569575b89865288835260208b60808560015afa5083835287865252885138615374565b9850601b8160ff1c01987f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82168152615549565b505050565b905460ff8160081c16615614576effffffffffffffffffffffffffffff8160101c1690816155d3575b505050600190565b60881c11156155e35780806155cb565b602490604051907f10fda3e10000000000000000000000000000000000000000000000000000000082526004820152fd5b602482604051907f1a5155740000000000000000000000000000000000000000000000000000000082526004820152fd5b906000905460ff8160081c16615694576effffffffffffffffffffffffffffff8160101c16908161567a575b50505050600190565b60881c111561568a578080615671565b6155e35750600090565b50905050600090565b90929160019060048110156156fd575b11806156ea575b806156d7575b6156c5575b50505050565b6156ce9361570a565b388080806156bf565b506001600160a01b0382163314156156ba565b506001600160a01b0384163314156156b4565b6157056107bc565b6156ad565b6000919290829161032295604051906001600160a01b0360208301937f0e1d31dc00000000000000000000000000000000000000000000000000000000855288602485015233604485015216606483015260848201526084815261576d8161027d565b51915afa615e78565b90815180825260208080930193019160005b828110615796575050505090565b909192938260a0600192875180516157ad816107ec565b8252808401516001600160a01b03168483015260408082015190830152606080820151908301526080908101519082015201950193929101615788565b90815180825260208080930193019160005b82811061580a575050505090565b909192938260c060019287518051615821816107ec565b8252808401516001600160a01b039081168584015260408083015190840152606080830151908401526080808301519084015260a0918201511690820152019501939291016157fc565b906004821015611dc45752565b6060519081815260208091019160809160005b828110615899575050505090565b83518552938101939281019260010161588b565b90815180825260208080930193019160005b8281106158cd575050505090565b8351855293810193928101926001016158bf565b90815180825260208092019182818360051b85019501936000915b84831061590c5750505050505090565b909192939495848061595e83856001950387528a518051825261593584820151858401906136bc565b60408082015190830152606080820151908301526080809101519160a0809282015201906158ad565b98019301930191949392906158fc565b92615b02906001600160a01b0361043d9694615b0f94875216602086015260a06040860152805160a080870152610140906159b482880182516001600160a01b03169052565b6080615af1615a286159f38a6159dc6020870151610160809301906001600160a01b03169052565b6040860151906101808d01526102a08c0190615776565b60608501517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08c8303016101a08d01526157ea565b615a3a838501516101c08c019061586b565b60a08401516101e08b015260c08401516102008b015260e08401516102208b015261010094858501516102408c015261012094858101516102608d015201516102808b0152615aa1602087015160c08c01906effffffffffffffffffffffffffffff169052565b60408601516effffffffffffffffffffffffffffff1660e08b015260608601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6095868c840301908c0152610148565b930151918784030190870152610148565b8381036060850152615878565b9160808184039101526158e1565b939061043d95936001600160a01b03615b0f94615cb393885216602087015260a06040870152805160a08088015261014090615b6482890182516001600160a01b03169052565b6080615ca2615bd8615ba38b6020860151615b8d61016091828401906001600160a01b03169052565b61018060408801519201526102a08d0190615776565b60608501518c82037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec0016101a08e01526157ea565b615bea838501516101c08d019061586b565b60a08401516101e08c015260c08401516102008c015260e08401516102208c015261010094858501516102408d0152610120948c6102608783015191015201516102808c0152615c52602087015160c08d01906effffffffffffffffffffffffffffff169052565b60408601516effffffffffffffffffffffffffffff1660e08c015260608601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6095868d840301908d0152610148565b930151918884030190880152610148565b9084820360608601526158ad565b909591929493600190615cd381611da4565b1180615d8f575b80615d7c575b615ced575b505050505050565b6080810151511580615d73575b15615d155750615d0a945061570a565b388080808080615ce5565b6000935083929450615d6061576d615d6e9760405192839160208301957f33131570000000000000000000000000000000000000000000000000000000008752338b6024860161596e565b03601f1981018352826102d1565b615d0a565b50855115615cfa565b506001600160a01b038416331415615ce0565b506001600160a01b038216331415615cda565b919692939594600190615db481611da4565b1180615e65575b80615e52575b615dcf575b50505050505050565b6080820151511580615e49575b15615df9575050615ded945061570a565b38808080808080615dc6565b600094508493955061576d615e4497615d6060405193849260208401967f33131570000000000000000000000000000000000000000000000000000000008852338c60248701615b1d565b615ded565b50805115615ddc565b506001600160a01b038516331415615dc1565b506001600160a01b038316331415615dbb565b15615f0f577f0e1d31dc000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000600060203d14615f04575b1603615ed35750565b602490604051907ffb5014fc0000000000000000000000000000000000000000000000000000000082526004820152fd5b602081803e51615eca565b602490615f1a612895565b604051907ffb5014fc0000000000000000000000000000000000000000000000000000000082526004820152fdfea26469706673582212200d53e9d4f26a00cc6af37b012c26f8d770777dfea74c99c52ea7d855f909a12a64736f6c634300080e0033 2 | -------------------------------------------------------------------------------- /testdata/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48_decoded.txt: -------------------------------------------------------------------------------- 1 | 00000000: PUSH1 0x80 2 | 00000002: PUSH1 0x40 3 | 00000004: MSTORE 4 | 00000005: PUSH1 0x4 5 | 00000007: CALLDATASIZE 6 | 00000008: LT 7 | 00000009: PUSH2 0x6d 8 | 0000000c: JUMPI 9 | 0000000d: PUSH1 0x0 10 | 0000000f: CALLDATALOAD 11 | 00000010: PUSH29 0x100000000000000000000000000000000000000000000000000000000 12 | 0000002e: SWAP1 13 | 0000002f: DIV 14 | 00000030: PUSH4 0xffffffff 15 | 00000035: AND 16 | 00000036: DUP1 17 | 00000037: PUSH4 0x3659cfe6 18 | 0000003c: EQ 19 | 0000003d: PUSH2 0x77 20 | 00000040: JUMPI 21 | 00000041: DUP1 22 | 00000042: PUSH4 0x4f1ef286 23 | 00000047: EQ 24 | 00000048: PUSH2 0xba 25 | 0000004b: JUMPI 26 | 0000004c: DUP1 27 | 0000004d: PUSH4 0x5c60da1b 28 | 00000052: EQ 29 | 00000053: PUSH2 0x108 30 | 00000056: JUMPI 31 | 00000057: DUP1 32 | 00000058: PUSH4 0x8f283970 33 | 0000005d: EQ 34 | 0000005e: PUSH2 0x15f 35 | 00000061: JUMPI 36 | 00000062: DUP1 37 | 00000063: PUSH4 0xf851a440 38 | 00000068: EQ 39 | 00000069: PUSH2 0x1a2 40 | 0000006c: JUMPI 41 | 0000006d: JUMPDEST 42 | 0000006e: PUSH2 0x75 43 | 00000071: PUSH2 0x1f9 44 | 00000074: JUMP 45 | 00000075: JUMPDEST 46 | 00000076: STOP 47 | 00000077: JUMPDEST 48 | 00000078: CALLVALUE 49 | 00000079: DUP1 50 | 0000007a: ISZERO 51 | 0000007b: PUSH2 0x83 52 | 0000007e: JUMPI 53 | 0000007f: PUSH1 0x0 54 | 00000081: DUP1 55 | 00000082: REVERT 56 | 00000083: JUMPDEST 57 | 00000084: POP 58 | 00000085: PUSH2 0xb8 59 | 00000088: PUSH1 0x4 60 | 0000008a: DUP1 61 | 0000008b: CALLDATASIZE 62 | 0000008c: SUB 63 | 0000008d: DUP2 64 | 0000008e: ADD 65 | 0000008f: SWAP1 66 | 00000090: DUP1 67 | 00000091: DUP1 68 | 00000092: CALLDATALOAD 69 | 00000093: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 70 | 000000a8: AND 71 | 000000a9: SWAP1 72 | 000000aa: PUSH1 0x20 73 | 000000ac: ADD 74 | 000000ad: SWAP1 75 | 000000ae: SWAP3 76 | 000000af: SWAP2 77 | 000000b0: SWAP1 78 | 000000b1: POP 79 | 000000b2: POP 80 | 000000b3: POP 81 | 000000b4: PUSH2 0x213 82 | 000000b7: JUMP 83 | 000000b8: JUMPDEST 84 | 000000b9: STOP 85 | 000000ba: JUMPDEST 86 | 000000bb: PUSH2 0x106 87 | 000000be: PUSH1 0x4 88 | 000000c0: DUP1 89 | 000000c1: CALLDATASIZE 90 | 000000c2: SUB 91 | 000000c3: DUP2 92 | 000000c4: ADD 93 | 000000c5: SWAP1 94 | 000000c6: DUP1 95 | 000000c7: DUP1 96 | 000000c8: CALLDATALOAD 97 | 000000c9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 98 | 000000de: AND 99 | 000000df: SWAP1 100 | 000000e0: PUSH1 0x20 101 | 000000e2: ADD 102 | 000000e3: SWAP1 103 | 000000e4: SWAP3 104 | 000000e5: SWAP2 105 | 000000e6: SWAP1 106 | 000000e7: DUP1 107 | 000000e8: CALLDATALOAD 108 | 000000e9: SWAP1 109 | 000000ea: PUSH1 0x20 110 | 000000ec: ADD 111 | 000000ed: SWAP1 112 | 000000ee: DUP3 113 | 000000ef: ADD 114 | 000000f0: DUP1 115 | 000000f1: CALLDATALOAD 116 | 000000f2: SWAP1 117 | 000000f3: PUSH1 0x20 118 | 000000f5: ADD 119 | 000000f6: SWAP2 120 | 000000f7: SWAP1 121 | 000000f8: SWAP2 122 | 000000f9: SWAP3 123 | 000000fa: SWAP4 124 | 000000fb: SWAP2 125 | 000000fc: SWAP3 126 | 000000fd: SWAP4 127 | 000000fe: SWAP1 128 | 000000ff: POP 129 | 00000100: POP 130 | 00000101: POP 131 | 00000102: PUSH2 0x268 132 | 00000105: JUMP 133 | 00000106: JUMPDEST 134 | 00000107: STOP 135 | 00000108: JUMPDEST 136 | 00000109: CALLVALUE 137 | 0000010a: DUP1 138 | 0000010b: ISZERO 139 | 0000010c: PUSH2 0x114 140 | 0000010f: JUMPI 141 | 00000110: PUSH1 0x0 142 | 00000112: DUP1 143 | 00000113: REVERT 144 | 00000114: JUMPDEST 145 | 00000115: POP 146 | 00000116: PUSH2 0x11d 147 | 00000119: PUSH2 0x308 148 | 0000011c: JUMP 149 | 0000011d: JUMPDEST 150 | 0000011e: PUSH1 0x40 151 | 00000120: MLOAD 152 | 00000121: DUP1 153 | 00000122: DUP3 154 | 00000123: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 155 | 00000138: AND 156 | 00000139: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 157 | 0000014e: AND 158 | 0000014f: DUP2 159 | 00000150: MSTORE 160 | 00000151: PUSH1 0x20 161 | 00000153: ADD 162 | 00000154: SWAP2 163 | 00000155: POP 164 | 00000156: POP 165 | 00000157: PUSH1 0x40 166 | 00000159: MLOAD 167 | 0000015a: DUP1 168 | 0000015b: SWAP2 169 | 0000015c: SUB 170 | 0000015d: SWAP1 171 | 0000015e: RETURN 172 | 0000015f: JUMPDEST 173 | 00000160: CALLVALUE 174 | 00000161: DUP1 175 | 00000162: ISZERO 176 | 00000163: PUSH2 0x16b 177 | 00000166: JUMPI 178 | 00000167: PUSH1 0x0 179 | 00000169: DUP1 180 | 0000016a: REVERT 181 | 0000016b: JUMPDEST 182 | 0000016c: POP 183 | 0000016d: PUSH2 0x1a0 184 | 00000170: PUSH1 0x4 185 | 00000172: DUP1 186 | 00000173: CALLDATASIZE 187 | 00000174: SUB 188 | 00000175: DUP2 189 | 00000176: ADD 190 | 00000177: SWAP1 191 | 00000178: DUP1 192 | 00000179: DUP1 193 | 0000017a: CALLDATALOAD 194 | 0000017b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 195 | 00000190: AND 196 | 00000191: SWAP1 197 | 00000192: PUSH1 0x20 198 | 00000194: ADD 199 | 00000195: SWAP1 200 | 00000196: SWAP3 201 | 00000197: SWAP2 202 | 00000198: SWAP1 203 | 00000199: POP 204 | 0000019a: POP 205 | 0000019b: POP 206 | 0000019c: PUSH2 0x360 207 | 0000019f: JUMP 208 | 000001a0: JUMPDEST 209 | 000001a1: STOP 210 | 000001a2: JUMPDEST 211 | 000001a3: CALLVALUE 212 | 000001a4: DUP1 213 | 000001a5: ISZERO 214 | 000001a6: PUSH2 0x1ae 215 | 000001a9: JUMPI 216 | 000001aa: PUSH1 0x0 217 | 000001ac: DUP1 218 | 000001ad: REVERT 219 | 000001ae: JUMPDEST 220 | 000001af: POP 221 | 000001b0: PUSH2 0x1b7 222 | 000001b3: PUSH2 0x51e 223 | 000001b6: JUMP 224 | 000001b7: JUMPDEST 225 | 000001b8: PUSH1 0x40 226 | 000001ba: MLOAD 227 | 000001bb: DUP1 228 | 000001bc: DUP3 229 | 000001bd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 230 | 000001d2: AND 231 | 000001d3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 232 | 000001e8: AND 233 | 000001e9: DUP2 234 | 000001ea: MSTORE 235 | 000001eb: PUSH1 0x20 236 | 000001ed: ADD 237 | 000001ee: SWAP2 238 | 000001ef: POP 239 | 000001f0: POP 240 | 000001f1: PUSH1 0x40 241 | 000001f3: MLOAD 242 | 000001f4: DUP1 243 | 000001f5: SWAP2 244 | 000001f6: SUB 245 | 000001f7: SWAP1 246 | 000001f8: RETURN 247 | 000001f9: JUMPDEST 248 | 000001fa: PUSH2 0x201 249 | 000001fd: PUSH2 0x576 250 | 00000200: JUMP 251 | 00000201: JUMPDEST 252 | 00000202: PUSH2 0x211 253 | 00000205: PUSH2 0x20c 254 | 00000208: PUSH2 0x651 255 | 0000020b: JUMP 256 | 0000020c: JUMPDEST 257 | 0000020d: PUSH2 0x682 258 | 00000210: JUMP 259 | 00000211: JUMPDEST 260 | 00000212: JUMP 261 | 00000213: JUMPDEST 262 | 00000214: PUSH2 0x21b 263 | 00000217: PUSH2 0x6a8 264 | 0000021a: JUMP 265 | 0000021b: JUMPDEST 266 | 0000021c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 267 | 00000231: AND 268 | 00000232: CALLER 269 | 00000233: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 270 | 00000248: AND 271 | 00000249: EQ 272 | 0000024a: ISZERO 273 | 0000024b: PUSH2 0x25c 274 | 0000024e: JUMPI 275 | 0000024f: PUSH2 0x257 276 | 00000252: DUP2 277 | 00000253: PUSH2 0x6d9 278 | 00000256: JUMP 279 | 00000257: JUMPDEST 280 | 00000258: PUSH2 0x265 281 | 0000025b: JUMP 282 | 0000025c: JUMPDEST 283 | 0000025d: PUSH2 0x264 284 | 00000260: PUSH2 0x1f9 285 | 00000263: JUMP 286 | 00000264: JUMPDEST 287 | 00000265: JUMPDEST 288 | 00000266: POP 289 | 00000267: JUMP 290 | 00000268: JUMPDEST 291 | 00000269: PUSH2 0x270 292 | 0000026c: PUSH2 0x6a8 293 | 0000026f: JUMP 294 | 00000270: JUMPDEST 295 | 00000271: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 296 | 00000286: AND 297 | 00000287: CALLER 298 | 00000288: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 299 | 0000029d: AND 300 | 0000029e: EQ 301 | 0000029f: ISZERO 302 | 000002a0: PUSH2 0x2fa 303 | 000002a3: JUMPI 304 | 000002a4: PUSH2 0x2ac 305 | 000002a7: DUP4 306 | 000002a8: PUSH2 0x6d9 307 | 000002ab: JUMP 308 | 000002ac: JUMPDEST 309 | 000002ad: ADDRESS 310 | 000002ae: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 311 | 000002c3: AND 312 | 000002c4: CALLVALUE 313 | 000002c5: DUP4 314 | 000002c6: DUP4 315 | 000002c7: PUSH1 0x40 316 | 000002c9: MLOAD 317 | 000002ca: DUP1 318 | 000002cb: DUP4 319 | 000002cc: DUP4 320 | 000002cd: DUP1 321 | 000002ce: DUP3 322 | 000002cf: DUP5 323 | 000002d0: CALLDATACOPY 324 | 000002d1: DUP3 325 | 000002d2: ADD 326 | 000002d3: SWAP2 327 | 000002d4: POP 328 | 000002d5: POP 329 | 000002d6: SWAP3 330 | 000002d7: POP 331 | 000002d8: POP 332 | 000002d9: POP 333 | 000002da: PUSH1 0x0 334 | 000002dc: PUSH1 0x40 335 | 000002de: MLOAD 336 | 000002df: DUP1 337 | 000002e0: DUP4 338 | 000002e1: SUB 339 | 000002e2: DUP2 340 | 000002e3: DUP6 341 | 000002e4: DUP8 342 | 000002e5: GAS 343 | 000002e6: CALL 344 | 000002e7: SWAP3 345 | 000002e8: POP 346 | 000002e9: POP 347 | 000002ea: POP 348 | 000002eb: ISZERO 349 | 000002ec: ISZERO 350 | 000002ed: PUSH2 0x2f5 351 | 000002f0: JUMPI 352 | 000002f1: PUSH1 0x0 353 | 000002f3: DUP1 354 | 000002f4: REVERT 355 | 000002f5: JUMPDEST 356 | 000002f6: PUSH2 0x303 357 | 000002f9: JUMP 358 | 000002fa: JUMPDEST 359 | 000002fb: PUSH2 0x302 360 | 000002fe: PUSH2 0x1f9 361 | 00000301: JUMP 362 | 00000302: JUMPDEST 363 | 00000303: JUMPDEST 364 | 00000304: POP 365 | 00000305: POP 366 | 00000306: POP 367 | 00000307: JUMP 368 | 00000308: JUMPDEST 369 | 00000309: PUSH1 0x0 370 | 0000030b: PUSH2 0x312 371 | 0000030e: PUSH2 0x6a8 372 | 00000311: JUMP 373 | 00000312: JUMPDEST 374 | 00000313: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 375 | 00000328: AND 376 | 00000329: CALLER 377 | 0000032a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 378 | 0000033f: AND 379 | 00000340: EQ 380 | 00000341: ISZERO 381 | 00000342: PUSH2 0x354 382 | 00000345: JUMPI 383 | 00000346: PUSH2 0x34d 384 | 00000349: PUSH2 0x651 385 | 0000034c: JUMP 386 | 0000034d: JUMPDEST 387 | 0000034e: SWAP1 388 | 0000034f: POP 389 | 00000350: PUSH2 0x35d 390 | 00000353: JUMP 391 | 00000354: JUMPDEST 392 | 00000355: PUSH2 0x35c 393 | 00000358: PUSH2 0x1f9 394 | 0000035b: JUMP 395 | 0000035c: JUMPDEST 396 | 0000035d: JUMPDEST 397 | 0000035e: SWAP1 398 | 0000035f: JUMP 399 | 00000360: JUMPDEST 400 | 00000361: PUSH2 0x368 401 | 00000364: PUSH2 0x6a8 402 | 00000367: JUMP 403 | 00000368: JUMPDEST 404 | 00000369: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 405 | 0000037e: AND 406 | 0000037f: CALLER 407 | 00000380: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 408 | 00000395: AND 409 | 00000396: EQ 410 | 00000397: ISZERO 411 | 00000398: PUSH2 0x512 412 | 0000039b: JUMPI 413 | 0000039c: PUSH1 0x0 414 | 0000039e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 415 | 000003b3: AND 416 | 000003b4: DUP2 417 | 000003b5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 418 | 000003ca: AND 419 | 000003cb: EQ 420 | 000003cc: ISZERO 421 | 000003cd: ISZERO 422 | 000003ce: ISZERO 423 | 000003cf: PUSH2 0x466 424 | 000003d2: JUMPI 425 | 000003d3: PUSH1 0x40 426 | 000003d5: MLOAD 427 | 000003d6: PUSH32 0x8c379a000000000000000000000000000000000000000000000000000000000 428 | 000003f7: DUP2 429 | 000003f8: MSTORE 430 | 000003f9: PUSH1 0x4 431 | 000003fb: ADD 432 | 000003fc: DUP1 433 | 000003fd: DUP1 434 | 000003fe: PUSH1 0x20 435 | 00000400: ADD 436 | 00000401: DUP3 437 | 00000402: DUP2 438 | 00000403: SUB 439 | 00000404: DUP3 440 | 00000405: MSTORE 441 | 00000406: PUSH1 0x36 442 | 00000408: DUP2 443 | 00000409: MSTORE 444 | 0000040a: PUSH1 0x20 445 | 0000040c: ADD 446 | 0000040d: DUP1 447 | 0000040e: PUSH32 0x43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f 448 | 0000042f: DUP2 449 | 00000430: MSTORE 450 | 00000431: PUSH1 0x20 451 | 00000433: ADD 452 | 00000434: PUSH32 0x787920746f20746865207a65726f206164647265737300000000000000000000 453 | 00000455: DUP2 454 | 00000456: MSTORE 455 | 00000457: POP 456 | 00000458: PUSH1 0x40 457 | 0000045a: ADD 458 | 0000045b: SWAP2 459 | 0000045c: POP 460 | 0000045d: POP 461 | 0000045e: PUSH1 0x40 462 | 00000460: MLOAD 463 | 00000461: DUP1 464 | 00000462: SWAP2 465 | 00000463: SUB 466 | 00000464: SWAP1 467 | 00000465: REVERT 468 | 00000466: JUMPDEST 469 | 00000467: PUSH32 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f 470 | 00000488: PUSH2 0x48f 471 | 0000048b: PUSH2 0x6a8 472 | 0000048e: JUMP 473 | 0000048f: JUMPDEST 474 | 00000490: DUP3 475 | 00000491: PUSH1 0x40 476 | 00000493: MLOAD 477 | 00000494: DUP1 478 | 00000495: DUP4 479 | 00000496: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 480 | 000004ab: AND 481 | 000004ac: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 482 | 000004c1: AND 483 | 000004c2: DUP2 484 | 000004c3: MSTORE 485 | 000004c4: PUSH1 0x20 486 | 000004c6: ADD 487 | 000004c7: DUP3 488 | 000004c8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 489 | 000004dd: AND 490 | 000004de: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 491 | 000004f3: AND 492 | 000004f4: DUP2 493 | 000004f5: MSTORE 494 | 000004f6: PUSH1 0x20 495 | 000004f8: ADD 496 | 000004f9: SWAP3 497 | 000004fa: POP 498 | 000004fb: POP 499 | 000004fc: POP 500 | 000004fd: PUSH1 0x40 501 | 000004ff: MLOAD 502 | 00000500: DUP1 503 | 00000501: SWAP2 504 | 00000502: SUB 505 | 00000503: SWAP1 506 | 00000504: LOG1 507 | 00000505: PUSH2 0x50d 508 | 00000508: DUP2 509 | 00000509: PUSH2 0x748 510 | 0000050c: JUMP 511 | 0000050d: JUMPDEST 512 | 0000050e: PUSH2 0x51b 513 | 00000511: JUMP 514 | 00000512: JUMPDEST 515 | 00000513: PUSH2 0x51a 516 | 00000516: PUSH2 0x1f9 517 | 00000519: JUMP 518 | 0000051a: JUMPDEST 519 | 0000051b: JUMPDEST 520 | 0000051c: POP 521 | 0000051d: JUMP 522 | 0000051e: JUMPDEST 523 | 0000051f: PUSH1 0x0 524 | 00000521: PUSH2 0x528 525 | 00000524: PUSH2 0x6a8 526 | 00000527: JUMP 527 | 00000528: JUMPDEST 528 | 00000529: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 529 | 0000053e: AND 530 | 0000053f: CALLER 531 | 00000540: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 532 | 00000555: AND 533 | 00000556: EQ 534 | 00000557: ISZERO 535 | 00000558: PUSH2 0x56a 536 | 0000055b: JUMPI 537 | 0000055c: PUSH2 0x563 538 | 0000055f: PUSH2 0x6a8 539 | 00000562: JUMP 540 | 00000563: JUMPDEST 541 | 00000564: SWAP1 542 | 00000565: POP 543 | 00000566: PUSH2 0x573 544 | 00000569: JUMP 545 | 0000056a: JUMPDEST 546 | 0000056b: PUSH2 0x572 547 | 0000056e: PUSH2 0x1f9 548 | 00000571: JUMP 549 | 00000572: JUMPDEST 550 | 00000573: JUMPDEST 551 | 00000574: SWAP1 552 | 00000575: JUMP 553 | 00000576: JUMPDEST 554 | 00000577: PUSH2 0x57e 555 | 0000057a: PUSH2 0x6a8 556 | 0000057d: JUMP 557 | 0000057e: JUMPDEST 558 | 0000057f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 559 | 00000594: AND 560 | 00000595: CALLER 561 | 00000596: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 562 | 000005ab: AND 563 | 000005ac: EQ 564 | 000005ad: ISZERO 565 | 000005ae: ISZERO 566 | 000005af: ISZERO 567 | 000005b0: PUSH2 0x647 568 | 000005b3: JUMPI 569 | 000005b4: PUSH1 0x40 570 | 000005b6: MLOAD 571 | 000005b7: PUSH32 0x8c379a000000000000000000000000000000000000000000000000000000000 572 | 000005d8: DUP2 573 | 000005d9: MSTORE 574 | 000005da: PUSH1 0x4 575 | 000005dc: ADD 576 | 000005dd: DUP1 577 | 000005de: DUP1 578 | 000005df: PUSH1 0x20 579 | 000005e1: ADD 580 | 000005e2: DUP3 581 | 000005e3: DUP2 582 | 000005e4: SUB 583 | 000005e5: DUP3 584 | 000005e6: MSTORE 585 | 000005e7: PUSH1 0x32 586 | 000005e9: DUP2 587 | 000005ea: MSTORE 588 | 000005eb: PUSH1 0x20 589 | 000005ed: ADD 590 | 000005ee: DUP1 591 | 000005ef: PUSH32 0x43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e206672 592 | 00000610: DUP2 593 | 00000611: MSTORE 594 | 00000612: PUSH1 0x20 595 | 00000614: ADD 596 | 00000615: PUSH32 0x6f6d207468652070726f78792061646d696e0000000000000000000000000000 597 | 00000636: DUP2 598 | 00000637: MSTORE 599 | 00000638: POP 600 | 00000639: PUSH1 0x40 601 | 0000063b: ADD 602 | 0000063c: SWAP2 603 | 0000063d: POP 604 | 0000063e: POP 605 | 0000063f: PUSH1 0x40 606 | 00000641: MLOAD 607 | 00000642: DUP1 608 | 00000643: SWAP2 609 | 00000644: SUB 610 | 00000645: SWAP1 611 | 00000646: REVERT 612 | 00000647: JUMPDEST 613 | 00000648: PUSH2 0x64f 614 | 0000064b: PUSH2 0x777 615 | 0000064e: JUMP 616 | 0000064f: JUMPDEST 617 | 00000650: JUMP 618 | 00000651: JUMPDEST 619 | 00000652: PUSH1 0x0 620 | 00000654: DUP1 621 | 00000655: PUSH32 0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3 622 | 00000676: PUSH1 0x1 623 | 00000678: MUL 624 | 00000679: SWAP1 625 | 0000067a: POP 626 | 0000067b: DUP1 627 | 0000067c: SLOAD 628 | 0000067d: SWAP2 629 | 0000067e: POP 630 | 0000067f: POP 631 | 00000680: SWAP1 632 | 00000681: JUMP 633 | 00000682: JUMPDEST 634 | 00000683: CALLDATASIZE 635 | 00000684: PUSH1 0x0 636 | 00000686: DUP1 637 | 00000687: CALLDATACOPY 638 | 00000688: PUSH1 0x0 639 | 0000068a: DUP1 640 | 0000068b: CALLDATASIZE 641 | 0000068c: PUSH1 0x0 642 | 0000068e: DUP5 643 | 0000068f: GAS 644 | 00000690: DELEGATECALL 645 | 00000691: RETURNDATASIZE 646 | 00000692: PUSH1 0x0 647 | 00000694: DUP1 648 | 00000695: RETURNDATACOPY 649 | 00000696: DUP1 650 | 00000697: PUSH1 0x0 651 | 00000699: DUP2 652 | 0000069a: EQ 653 | 0000069b: PUSH2 0x6a3 654 | 0000069e: JUMPI 655 | 0000069f: RETURNDATASIZE 656 | 000006a0: PUSH1 0x0 657 | 000006a2: RETURN 658 | 000006a3: JUMPDEST 659 | 000006a4: RETURNDATASIZE 660 | 000006a5: PUSH1 0x0 661 | 000006a7: REVERT 662 | 000006a8: JUMPDEST 663 | 000006a9: PUSH1 0x0 664 | 000006ab: DUP1 665 | 000006ac: PUSH32 0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b 666 | 000006cd: PUSH1 0x1 667 | 000006cf: MUL 668 | 000006d0: SWAP1 669 | 000006d1: POP 670 | 000006d2: DUP1 671 | 000006d3: SLOAD 672 | 000006d4: SWAP2 673 | 000006d5: POP 674 | 000006d6: POP 675 | 000006d7: SWAP1 676 | 000006d8: JUMP 677 | 000006d9: JUMPDEST 678 | 000006da: PUSH2 0x6e2 679 | 000006dd: DUP2 680 | 000006de: PUSH2 0x779 681 | 000006e1: JUMP 682 | 000006e2: JUMPDEST 683 | 000006e3: PUSH32 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b 684 | 00000704: DUP2 685 | 00000705: PUSH1 0x40 686 | 00000707: MLOAD 687 | 00000708: DUP1 688 | 00000709: DUP3 689 | 0000070a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 690 | 0000071f: AND 691 | 00000720: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 692 | 00000735: AND 693 | 00000736: DUP2 694 | 00000737: MSTORE 695 | 00000738: PUSH1 0x20 696 | 0000073a: ADD 697 | 0000073b: SWAP2 698 | 0000073c: POP 699 | 0000073d: POP 700 | 0000073e: PUSH1 0x40 701 | 00000740: MLOAD 702 | 00000741: DUP1 703 | 00000742: SWAP2 704 | 00000743: SUB 705 | 00000744: SWAP1 706 | 00000745: LOG1 707 | 00000746: POP 708 | 00000747: JUMP 709 | 00000748: JUMPDEST 710 | 00000749: PUSH1 0x0 711 | 0000074b: PUSH32 0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b 712 | 0000076c: PUSH1 0x1 713 | 0000076e: MUL 714 | 0000076f: SWAP1 715 | 00000770: POP 716 | 00000771: DUP2 717 | 00000772: DUP2 718 | 00000773: SSTORE 719 | 00000774: POP 720 | 00000775: POP 721 | 00000776: JUMP 722 | 00000777: JUMPDEST 723 | 00000778: JUMP 724 | 00000779: JUMPDEST 725 | 0000077a: PUSH1 0x0 726 | 0000077c: PUSH2 0x784 727 | 0000077f: DUP3 728 | 00000780: PUSH2 0x84b 729 | 00000783: JUMP 730 | 00000784: JUMPDEST 731 | 00000785: ISZERO 732 | 00000786: ISZERO 733 | 00000787: PUSH2 0x81e 734 | 0000078a: JUMPI 735 | 0000078b: PUSH1 0x40 736 | 0000078d: MLOAD 737 | 0000078e: PUSH32 0x8c379a000000000000000000000000000000000000000000000000000000000 738 | 000007af: DUP2 739 | 000007b0: MSTORE 740 | 000007b1: PUSH1 0x4 741 | 000007b3: ADD 742 | 000007b4: DUP1 743 | 000007b5: DUP1 744 | 000007b6: PUSH1 0x20 745 | 000007b8: ADD 746 | 000007b9: DUP3 747 | 000007ba: DUP2 748 | 000007bb: SUB 749 | 000007bc: DUP3 750 | 000007bd: MSTORE 751 | 000007be: PUSH1 0x3b 752 | 000007c0: DUP2 753 | 000007c1: MSTORE 754 | 000007c2: PUSH1 0x20 755 | 000007c4: ADD 756 | 000007c5: DUP1 757 | 000007c6: PUSH32 0x43616e6e6f742073657420612070726f787920696d706c656d656e746174696f 758 | 000007e7: DUP2 759 | 000007e8: MSTORE 760 | 000007e9: PUSH1 0x20 761 | 000007eb: ADD 762 | 000007ec: PUSH32 0x6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000 763 | 0000080d: DUP2 764 | 0000080e: MSTORE 765 | 0000080f: POP 766 | 00000810: PUSH1 0x40 767 | 00000812: ADD 768 | 00000813: SWAP2 769 | 00000814: POP 770 | 00000815: POP 771 | 00000816: PUSH1 0x40 772 | 00000818: MLOAD 773 | 00000819: DUP1 774 | 0000081a: SWAP2 775 | 0000081b: SUB 776 | 0000081c: SWAP1 777 | 0000081d: REVERT 778 | 0000081e: JUMPDEST 779 | 0000081f: PUSH32 0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3 780 | 00000840: PUSH1 0x1 781 | 00000842: MUL 782 | 00000843: SWAP1 783 | 00000844: POP 784 | 00000845: DUP2 785 | 00000846: DUP2 786 | 00000847: SSTORE 787 | 00000848: POP 788 | 00000849: POP 789 | 0000084a: JUMP 790 | 0000084b: JUMPDEST 791 | 0000084c: PUSH1 0x0 792 | 0000084e: DUP1 793 | 0000084f: DUP3 794 | 00000850: EXTCODESIZE 795 | 00000851: SWAP1 796 | 00000852: POP 797 | 00000853: PUSH1 0x0 798 | 00000855: DUP2 799 | 00000856: GT 800 | 00000857: SWAP2 801 | 00000858: POP 802 | 00000859: POP 803 | 0000085a: SWAP2 804 | 0000085b: SWAP1 805 | 0000085c: POP 806 | 0000085d: JUMP 807 | 0000085e: STOP 808 | 0000085f: LOG1 809 | 00000860: PUSH6 0x627a7a723058 810 | 00000867: SHA3 811 | 00000868: LOG4 812 | 00000869: INVALID 813 | 0000086a: SELFBALANCE 814 | 0000086b: INVALID 815 | 0000086c: INVALID 816 | 0000086d: SHA3 817 | 0000086e: INVALID 818 | 0000086f: GAS 819 | 00000870: INVALID 820 | 00000871: INVALID 821 | 00000872: INVALID 822 | 00000873: INVALID 823 | 00000874: TIMESTAMP 824 | 00000875: DUP15 825 | 00000876: SWAP9 826 | 00000877: DUP12 827 | 00000878: INVALID 828 | 00000879: INVALID 829 | 0000087a: INVALID 830 | 0000087b: MUL 831 | 0000087c: INVALID 832 | 0000087d: INVALID 833 | 0000087e: AND 834 | 0000087f: SSTORE 835 | 00000880: ORIGIN 836 | 00000881: INVALID 837 | 00000882: INVALID 838 | 00000883: INVALID 839 | 00000884: SAR 840 | 00000885: INVALID 841 | 00000886: INVALID 842 | 00000887: INVALID 843 | 00000888: STOP 844 | 00000889: INVALID 845 | 00000000: PUSH1 0x80 846 | 00000002: PUSH1 0x40 847 | 00000004: MSTORE 848 | 00000005: PUSH1 0x4 849 | 00000007: CALLDATASIZE 850 | 00000008: LT 851 | 00000009: PUSH2 0x6d 852 | 0000000c: JUMPI 853 | 0000000d: PUSH1 0x0 854 | 0000000f: CALLDATALOAD 855 | 00000010: PUSH29 0x100000000000000000000000000000000000000000000000000000000 856 | 0000002e: SWAP1 857 | 0000002f: DIV 858 | 00000030: PUSH4 0xffffffff 859 | 00000035: AND 860 | 00000036: DUP1 861 | 00000037: PUSH4 0x3659cfe6 862 | 0000003c: EQ 863 | 0000003d: PUSH2 0x77 864 | 00000040: JUMPI 865 | 00000041: DUP1 866 | 00000042: PUSH4 0x4f1ef286 867 | 00000047: EQ 868 | 00000048: PUSH2 0xba 869 | 0000004b: JUMPI 870 | 0000004c: DUP1 871 | 0000004d: PUSH4 0x5c60da1b 872 | 00000052: EQ 873 | 00000053: PUSH2 0x108 874 | 00000056: JUMPI 875 | 00000057: DUP1 876 | 00000058: PUSH4 0x8f283970 877 | 0000005d: EQ 878 | 0000005e: PUSH2 0x15f 879 | 00000061: JUMPI 880 | 00000062: DUP1 881 | 00000063: PUSH4 0xf851a440 882 | 00000068: EQ 883 | 00000069: PUSH2 0x1a2 884 | 0000006c: JUMPI 885 | 0000006d: JUMPDEST 886 | 0000006e: PUSH2 0x75 887 | 00000071: PUSH2 0x1f9 888 | 00000074: JUMP 889 | 00000075: JUMPDEST 890 | 00000076: STOP 891 | 00000077: JUMPDEST 892 | 00000078: CALLVALUE 893 | 00000079: DUP1 894 | 0000007a: ISZERO 895 | 0000007b: PUSH2 0x83 896 | 0000007e: JUMPI 897 | 0000007f: PUSH1 0x0 898 | 00000081: DUP1 899 | 00000082: REVERT 900 | 00000083: JUMPDEST 901 | 00000084: POP 902 | 00000085: PUSH2 0xb8 903 | 00000088: PUSH1 0x4 904 | 0000008a: DUP1 905 | 0000008b: CALLDATASIZE 906 | 0000008c: SUB 907 | 0000008d: DUP2 908 | 0000008e: ADD 909 | 0000008f: SWAP1 910 | 00000090: DUP1 911 | 00000091: DUP1 912 | 00000092: CALLDATALOAD 913 | 00000093: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 914 | 000000a8: AND 915 | 000000a9: SWAP1 916 | 000000aa: PUSH1 0x20 917 | 000000ac: ADD 918 | 000000ad: SWAP1 919 | 000000ae: SWAP3 920 | 000000af: SWAP2 921 | 000000b0: SWAP1 922 | 000000b1: POP 923 | 000000b2: POP 924 | 000000b3: POP 925 | 000000b4: PUSH2 0x213 926 | 000000b7: JUMP 927 | 000000b8: JUMPDEST 928 | 000000b9: STOP 929 | 000000ba: JUMPDEST 930 | 000000bb: PUSH2 0x106 931 | 000000be: PUSH1 0x4 932 | 000000c0: DUP1 933 | 000000c1: CALLDATASIZE 934 | 000000c2: SUB 935 | 000000c3: DUP2 936 | 000000c4: ADD 937 | 000000c5: SWAP1 938 | 000000c6: DUP1 939 | 000000c7: DUP1 940 | 000000c8: CALLDATALOAD 941 | 000000c9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 942 | 000000de: AND 943 | 000000df: SWAP1 944 | 000000e0: PUSH1 0x20 945 | 000000e2: ADD 946 | 000000e3: SWAP1 947 | 000000e4: SWAP3 948 | 000000e5: SWAP2 949 | 000000e6: SWAP1 950 | 000000e7: DUP1 951 | 000000e8: CALLDATALOAD 952 | 000000e9: SWAP1 953 | 000000ea: PUSH1 0x20 954 | 000000ec: ADD 955 | 000000ed: SWAP1 956 | 000000ee: DUP3 957 | 000000ef: ADD 958 | 000000f0: DUP1 959 | 000000f1: CALLDATALOAD 960 | 000000f2: SWAP1 961 | 000000f3: PUSH1 0x20 962 | 000000f5: ADD 963 | 000000f6: SWAP2 964 | 000000f7: SWAP1 965 | 000000f8: SWAP2 966 | 000000f9: SWAP3 967 | 000000fa: SWAP4 968 | 000000fb: SWAP2 969 | 000000fc: SWAP3 970 | 000000fd: SWAP4 971 | 000000fe: SWAP1 972 | 000000ff: POP 973 | 00000100: POP 974 | 00000101: POP 975 | 00000102: PUSH2 0x268 976 | 00000105: JUMP 977 | 00000106: JUMPDEST 978 | 00000107: STOP 979 | 00000108: JUMPDEST 980 | 00000109: CALLVALUE 981 | 0000010a: DUP1 982 | 0000010b: ISZERO 983 | 0000010c: PUSH2 0x114 984 | 0000010f: JUMPI 985 | 00000110: PUSH1 0x0 986 | 00000112: DUP1 987 | 00000113: REVERT 988 | 00000114: JUMPDEST 989 | 00000115: POP 990 | 00000116: PUSH2 0x11d 991 | 00000119: PUSH2 0x308 992 | 0000011c: JUMP 993 | 0000011d: JUMPDEST 994 | 0000011e: PUSH1 0x40 995 | 00000120: MLOAD 996 | 00000121: DUP1 997 | 00000122: DUP3 998 | 00000123: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 999 | 00000138: AND 1000 | 00000139: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1001 | 0000014e: AND 1002 | 0000014f: DUP2 1003 | 00000150: MSTORE 1004 | 00000151: PUSH1 0x20 1005 | 00000153: ADD 1006 | 00000154: SWAP2 1007 | 00000155: POP 1008 | 00000156: POP 1009 | 00000157: PUSH1 0x40 1010 | 00000159: MLOAD 1011 | 0000015a: DUP1 1012 | 0000015b: SWAP2 1013 | 0000015c: SUB 1014 | 0000015d: SWAP1 1015 | 0000015e: RETURN 1016 | 0000015f: JUMPDEST 1017 | 00000160: CALLVALUE 1018 | 00000161: DUP1 1019 | 00000162: ISZERO 1020 | 00000163: PUSH2 0x16b 1021 | 00000166: JUMPI 1022 | 00000167: PUSH1 0x0 1023 | 00000169: DUP1 1024 | 0000016a: REVERT 1025 | 0000016b: JUMPDEST 1026 | 0000016c: POP 1027 | 0000016d: PUSH2 0x1a0 1028 | 00000170: PUSH1 0x4 1029 | 00000172: DUP1 1030 | 00000173: CALLDATASIZE 1031 | 00000174: SUB 1032 | 00000175: DUP2 1033 | 00000176: ADD 1034 | 00000177: SWAP1 1035 | 00000178: DUP1 1036 | 00000179: DUP1 1037 | 0000017a: CALLDATALOAD 1038 | 0000017b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1039 | 00000190: AND 1040 | 00000191: SWAP1 1041 | 00000192: PUSH1 0x20 1042 | 00000194: ADD 1043 | 00000195: SWAP1 1044 | 00000196: SWAP3 1045 | 00000197: SWAP2 1046 | 00000198: SWAP1 1047 | 00000199: POP 1048 | 0000019a: POP 1049 | 0000019b: POP 1050 | 0000019c: PUSH2 0x360 1051 | 0000019f: JUMP 1052 | 000001a0: JUMPDEST 1053 | 000001a1: STOP 1054 | 000001a2: JUMPDEST 1055 | 000001a3: CALLVALUE 1056 | 000001a4: DUP1 1057 | 000001a5: ISZERO 1058 | 000001a6: PUSH2 0x1ae 1059 | 000001a9: JUMPI 1060 | 000001aa: PUSH1 0x0 1061 | 000001ac: DUP1 1062 | 000001ad: REVERT 1063 | 000001ae: JUMPDEST 1064 | 000001af: POP 1065 | 000001b0: PUSH2 0x1b7 1066 | 000001b3: PUSH2 0x51e 1067 | 000001b6: JUMP 1068 | 000001b7: JUMPDEST 1069 | 000001b8: PUSH1 0x40 1070 | 000001ba: MLOAD 1071 | 000001bb: DUP1 1072 | 000001bc: DUP3 1073 | 000001bd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1074 | 000001d2: AND 1075 | 000001d3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1076 | 000001e8: AND 1077 | 000001e9: DUP2 1078 | 000001ea: MSTORE 1079 | 000001eb: PUSH1 0x20 1080 | 000001ed: ADD 1081 | 000001ee: SWAP2 1082 | 000001ef: POP 1083 | 000001f0: POP 1084 | 000001f1: PUSH1 0x40 1085 | 000001f3: MLOAD 1086 | 000001f4: DUP1 1087 | 000001f5: SWAP2 1088 | 000001f6: SUB 1089 | 000001f7: SWAP1 1090 | 000001f8: RETURN 1091 | 000001f9: JUMPDEST 1092 | 000001fa: PUSH2 0x201 1093 | 000001fd: PUSH2 0x576 1094 | 00000200: JUMP 1095 | 00000201: JUMPDEST 1096 | 00000202: PUSH2 0x211 1097 | 00000205: PUSH2 0x20c 1098 | 00000208: PUSH2 0x651 1099 | 0000020b: JUMP 1100 | 0000020c: JUMPDEST 1101 | 0000020d: PUSH2 0x682 1102 | 00000210: JUMP 1103 | 00000211: JUMPDEST 1104 | 00000212: JUMP 1105 | 00000213: JUMPDEST 1106 | 00000214: PUSH2 0x21b 1107 | 00000217: PUSH2 0x6a8 1108 | 0000021a: JUMP 1109 | 0000021b: JUMPDEST 1110 | 0000021c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1111 | 00000231: AND 1112 | 00000232: CALLER 1113 | 00000233: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1114 | 00000248: AND 1115 | 00000249: EQ 1116 | 0000024a: ISZERO 1117 | 0000024b: PUSH2 0x25c 1118 | 0000024e: JUMPI 1119 | 0000024f: PUSH2 0x257 1120 | 00000252: DUP2 1121 | 00000253: PUSH2 0x6d9 1122 | 00000256: JUMP 1123 | 00000257: JUMPDEST 1124 | 00000258: PUSH2 0x265 1125 | 0000025b: JUMP 1126 | 0000025c: JUMPDEST 1127 | 0000025d: PUSH2 0x264 1128 | 00000260: PUSH2 0x1f9 1129 | 00000263: JUMP 1130 | 00000264: JUMPDEST 1131 | 00000265: JUMPDEST 1132 | 00000266: POP 1133 | 00000267: JUMP 1134 | 00000268: JUMPDEST 1135 | 00000269: PUSH2 0x270 1136 | 0000026c: PUSH2 0x6a8 1137 | 0000026f: JUMP 1138 | 00000270: JUMPDEST 1139 | 00000271: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1140 | 00000286: AND 1141 | 00000287: CALLER 1142 | 00000288: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1143 | 0000029d: AND 1144 | 0000029e: EQ 1145 | 0000029f: ISZERO 1146 | 000002a0: PUSH2 0x2fa 1147 | 000002a3: JUMPI 1148 | 000002a4: PUSH2 0x2ac 1149 | 000002a7: DUP4 1150 | 000002a8: PUSH2 0x6d9 1151 | 000002ab: JUMP 1152 | 000002ac: JUMPDEST 1153 | 000002ad: ADDRESS 1154 | 000002ae: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1155 | 000002c3: AND 1156 | 000002c4: CALLVALUE 1157 | 000002c5: DUP4 1158 | 000002c6: DUP4 1159 | 000002c7: PUSH1 0x40 1160 | 000002c9: MLOAD 1161 | 000002ca: DUP1 1162 | 000002cb: DUP4 1163 | 000002cc: DUP4 1164 | 000002cd: DUP1 1165 | 000002ce: DUP3 1166 | 000002cf: DUP5 1167 | 000002d0: CALLDATACOPY 1168 | 000002d1: DUP3 1169 | 000002d2: ADD 1170 | 000002d3: SWAP2 1171 | 000002d4: POP 1172 | 000002d5: POP 1173 | 000002d6: SWAP3 1174 | 000002d7: POP 1175 | 000002d8: POP 1176 | 000002d9: POP 1177 | 000002da: PUSH1 0x0 1178 | 000002dc: PUSH1 0x40 1179 | 000002de: MLOAD 1180 | 000002df: DUP1 1181 | 000002e0: DUP4 1182 | 000002e1: SUB 1183 | 000002e2: DUP2 1184 | 000002e3: DUP6 1185 | 000002e4: DUP8 1186 | 000002e5: GAS 1187 | 000002e6: CALL 1188 | 000002e7: SWAP3 1189 | 000002e8: POP 1190 | 000002e9: POP 1191 | 000002ea: POP 1192 | 000002eb: ISZERO 1193 | 000002ec: ISZERO 1194 | 000002ed: PUSH2 0x2f5 1195 | 000002f0: JUMPI 1196 | 000002f1: PUSH1 0x0 1197 | 000002f3: DUP1 1198 | 000002f4: REVERT 1199 | 000002f5: JUMPDEST 1200 | 000002f6: PUSH2 0x303 1201 | 000002f9: JUMP 1202 | 000002fa: JUMPDEST 1203 | 000002fb: PUSH2 0x302 1204 | 000002fe: PUSH2 0x1f9 1205 | 00000301: JUMP 1206 | 00000302: JUMPDEST 1207 | 00000303: JUMPDEST 1208 | 00000304: POP 1209 | 00000305: POP 1210 | 00000306: POP 1211 | 00000307: JUMP 1212 | 00000308: JUMPDEST 1213 | 00000309: PUSH1 0x0 1214 | 0000030b: PUSH2 0x312 1215 | 0000030e: PUSH2 0x6a8 1216 | 00000311: JUMP 1217 | 00000312: JUMPDEST 1218 | 00000313: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1219 | 00000328: AND 1220 | 00000329: CALLER 1221 | 0000032a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1222 | 0000033f: AND 1223 | 00000340: EQ 1224 | 00000341: ISZERO 1225 | 00000342: PUSH2 0x354 1226 | 00000345: JUMPI 1227 | 00000346: PUSH2 0x34d 1228 | 00000349: PUSH2 0x651 1229 | 0000034c: JUMP 1230 | 0000034d: JUMPDEST 1231 | 0000034e: SWAP1 1232 | 0000034f: POP 1233 | 00000350: PUSH2 0x35d 1234 | 00000353: JUMP 1235 | 00000354: JUMPDEST 1236 | 00000355: PUSH2 0x35c 1237 | 00000358: PUSH2 0x1f9 1238 | 0000035b: JUMP 1239 | 0000035c: JUMPDEST 1240 | 0000035d: JUMPDEST 1241 | 0000035e: SWAP1 1242 | 0000035f: JUMP 1243 | 00000360: JUMPDEST 1244 | 00000361: PUSH2 0x368 1245 | 00000364: PUSH2 0x6a8 1246 | 00000367: JUMP 1247 | 00000368: JUMPDEST 1248 | 00000369: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1249 | 0000037e: AND 1250 | 0000037f: CALLER 1251 | 00000380: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1252 | 00000395: AND 1253 | 00000396: EQ 1254 | 00000397: ISZERO 1255 | 00000398: PUSH2 0x512 1256 | 0000039b: JUMPI 1257 | 0000039c: PUSH1 0x0 1258 | 0000039e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1259 | 000003b3: AND 1260 | 000003b4: DUP2 1261 | 000003b5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1262 | 000003ca: AND 1263 | 000003cb: EQ 1264 | 000003cc: ISZERO 1265 | 000003cd: ISZERO 1266 | 000003ce: ISZERO 1267 | 000003cf: PUSH2 0x466 1268 | 000003d2: JUMPI 1269 | 000003d3: PUSH1 0x40 1270 | 000003d5: MLOAD 1271 | 000003d6: PUSH32 0x8c379a000000000000000000000000000000000000000000000000000000000 1272 | 000003f7: DUP2 1273 | 000003f8: MSTORE 1274 | 000003f9: PUSH1 0x4 1275 | 000003fb: ADD 1276 | 000003fc: DUP1 1277 | 000003fd: DUP1 1278 | 000003fe: PUSH1 0x20 1279 | 00000400: ADD 1280 | 00000401: DUP3 1281 | 00000402: DUP2 1282 | 00000403: SUB 1283 | 00000404: DUP3 1284 | 00000405: MSTORE 1285 | 00000406: PUSH1 0x36 1286 | 00000408: DUP2 1287 | 00000409: MSTORE 1288 | 0000040a: PUSH1 0x20 1289 | 0000040c: ADD 1290 | 0000040d: DUP1 1291 | 0000040e: PUSH32 0x43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f 1292 | 0000042f: DUP2 1293 | 00000430: MSTORE 1294 | 00000431: PUSH1 0x20 1295 | 00000433: ADD 1296 | 00000434: PUSH32 0x787920746f20746865207a65726f206164647265737300000000000000000000 1297 | 00000455: DUP2 1298 | 00000456: MSTORE 1299 | 00000457: POP 1300 | 00000458: PUSH1 0x40 1301 | 0000045a: ADD 1302 | 0000045b: SWAP2 1303 | 0000045c: POP 1304 | 0000045d: POP 1305 | 0000045e: PUSH1 0x40 1306 | 00000460: MLOAD 1307 | 00000461: DUP1 1308 | 00000462: SWAP2 1309 | 00000463: SUB 1310 | 00000464: SWAP1 1311 | 00000465: REVERT 1312 | 00000466: JUMPDEST 1313 | 00000467: PUSH32 0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f 1314 | 00000488: PUSH2 0x48f 1315 | 0000048b: PUSH2 0x6a8 1316 | 0000048e: JUMP 1317 | 0000048f: JUMPDEST 1318 | 00000490: DUP3 1319 | 00000491: PUSH1 0x40 1320 | 00000493: MLOAD 1321 | 00000494: DUP1 1322 | 00000495: DUP4 1323 | 00000496: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1324 | 000004ab: AND 1325 | 000004ac: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1326 | 000004c1: AND 1327 | 000004c2: DUP2 1328 | 000004c3: MSTORE 1329 | 000004c4: PUSH1 0x20 1330 | 000004c6: ADD 1331 | 000004c7: DUP3 1332 | 000004c8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1333 | 000004dd: AND 1334 | 000004de: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1335 | 000004f3: AND 1336 | 000004f4: DUP2 1337 | 000004f5: MSTORE 1338 | 000004f6: PUSH1 0x20 1339 | 000004f8: ADD 1340 | 000004f9: SWAP3 1341 | 000004fa: POP 1342 | 000004fb: POP 1343 | 000004fc: POP 1344 | 000004fd: PUSH1 0x40 1345 | 000004ff: MLOAD 1346 | 00000500: DUP1 1347 | 00000501: SWAP2 1348 | 00000502: SUB 1349 | 00000503: SWAP1 1350 | 00000504: LOG1 1351 | 00000505: PUSH2 0x50d 1352 | 00000508: DUP2 1353 | 00000509: PUSH2 0x748 1354 | 0000050c: JUMP 1355 | 0000050d: JUMPDEST 1356 | 0000050e: PUSH2 0x51b 1357 | 00000511: JUMP 1358 | 00000512: JUMPDEST 1359 | 00000513: PUSH2 0x51a 1360 | 00000516: PUSH2 0x1f9 1361 | 00000519: JUMP 1362 | 0000051a: JUMPDEST 1363 | 0000051b: JUMPDEST 1364 | 0000051c: POP 1365 | 0000051d: JUMP 1366 | 0000051e: JUMPDEST 1367 | 0000051f: PUSH1 0x0 1368 | 00000521: PUSH2 0x528 1369 | 00000524: PUSH2 0x6a8 1370 | 00000527: JUMP 1371 | 00000528: JUMPDEST 1372 | 00000529: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1373 | 0000053e: AND 1374 | 0000053f: CALLER 1375 | 00000540: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1376 | 00000555: AND 1377 | 00000556: EQ 1378 | 00000557: ISZERO 1379 | 00000558: PUSH2 0x56a 1380 | 0000055b: JUMPI 1381 | 0000055c: PUSH2 0x563 1382 | 0000055f: PUSH2 0x6a8 1383 | 00000562: JUMP 1384 | 00000563: JUMPDEST 1385 | 00000564: SWAP1 1386 | 00000565: POP 1387 | 00000566: PUSH2 0x573 1388 | 00000569: JUMP 1389 | 0000056a: JUMPDEST 1390 | 0000056b: PUSH2 0x572 1391 | 0000056e: PUSH2 0x1f9 1392 | 00000571: JUMP 1393 | 00000572: JUMPDEST 1394 | 00000573: JUMPDEST 1395 | 00000574: SWAP1 1396 | 00000575: JUMP 1397 | 00000576: JUMPDEST 1398 | 00000577: PUSH2 0x57e 1399 | 0000057a: PUSH2 0x6a8 1400 | 0000057d: JUMP 1401 | 0000057e: JUMPDEST 1402 | 0000057f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1403 | 00000594: AND 1404 | 00000595: CALLER 1405 | 00000596: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1406 | 000005ab: AND 1407 | 000005ac: EQ 1408 | 000005ad: ISZERO 1409 | 000005ae: ISZERO 1410 | 000005af: ISZERO 1411 | 000005b0: PUSH2 0x647 1412 | 000005b3: JUMPI 1413 | 000005b4: PUSH1 0x40 1414 | 000005b6: MLOAD 1415 | 000005b7: PUSH32 0x8c379a000000000000000000000000000000000000000000000000000000000 1416 | 000005d8: DUP2 1417 | 000005d9: MSTORE 1418 | 000005da: PUSH1 0x4 1419 | 000005dc: ADD 1420 | 000005dd: DUP1 1421 | 000005de: DUP1 1422 | 000005df: PUSH1 0x20 1423 | 000005e1: ADD 1424 | 000005e2: DUP3 1425 | 000005e3: DUP2 1426 | 000005e4: SUB 1427 | 000005e5: DUP3 1428 | 000005e6: MSTORE 1429 | 000005e7: PUSH1 0x32 1430 | 000005e9: DUP2 1431 | 000005ea: MSTORE 1432 | 000005eb: PUSH1 0x20 1433 | 000005ed: ADD 1434 | 000005ee: DUP1 1435 | 000005ef: PUSH32 0x43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e206672 1436 | 00000610: DUP2 1437 | 00000611: MSTORE 1438 | 00000612: PUSH1 0x20 1439 | 00000614: ADD 1440 | 00000615: PUSH32 0x6f6d207468652070726f78792061646d696e0000000000000000000000000000 1441 | 00000636: DUP2 1442 | 00000637: MSTORE 1443 | 00000638: POP 1444 | 00000639: PUSH1 0x40 1445 | 0000063b: ADD 1446 | 0000063c: SWAP2 1447 | 0000063d: POP 1448 | 0000063e: POP 1449 | 0000063f: PUSH1 0x40 1450 | 00000641: MLOAD 1451 | 00000642: DUP1 1452 | 00000643: SWAP2 1453 | 00000644: SUB 1454 | 00000645: SWAP1 1455 | 00000646: REVERT 1456 | 00000647: JUMPDEST 1457 | 00000648: PUSH2 0x64f 1458 | 0000064b: PUSH2 0x777 1459 | 0000064e: JUMP 1460 | 0000064f: JUMPDEST 1461 | 00000650: JUMP 1462 | 00000651: JUMPDEST 1463 | 00000652: PUSH1 0x0 1464 | 00000654: DUP1 1465 | 00000655: PUSH32 0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3 1466 | 00000676: PUSH1 0x1 1467 | 00000678: MUL 1468 | 00000679: SWAP1 1469 | 0000067a: POP 1470 | 0000067b: DUP1 1471 | 0000067c: SLOAD 1472 | 0000067d: SWAP2 1473 | 0000067e: POP 1474 | 0000067f: POP 1475 | 00000680: SWAP1 1476 | 00000681: JUMP 1477 | 00000682: JUMPDEST 1478 | 00000683: CALLDATASIZE 1479 | 00000684: PUSH1 0x0 1480 | 00000686: DUP1 1481 | 00000687: CALLDATACOPY 1482 | 00000688: PUSH1 0x0 1483 | 0000068a: DUP1 1484 | 0000068b: CALLDATASIZE 1485 | 0000068c: PUSH1 0x0 1486 | 0000068e: DUP5 1487 | 0000068f: GAS 1488 | 00000690: DELEGATECALL 1489 | 00000691: RETURNDATASIZE 1490 | 00000692: PUSH1 0x0 1491 | 00000694: DUP1 1492 | 00000695: RETURNDATACOPY 1493 | 00000696: DUP1 1494 | 00000697: PUSH1 0x0 1495 | 00000699: DUP2 1496 | 0000069a: EQ 1497 | 0000069b: PUSH2 0x6a3 1498 | 0000069e: JUMPI 1499 | 0000069f: RETURNDATASIZE 1500 | 000006a0: PUSH1 0x0 1501 | 000006a2: RETURN 1502 | 000006a3: JUMPDEST 1503 | 000006a4: RETURNDATASIZE 1504 | 000006a5: PUSH1 0x0 1505 | 000006a7: REVERT 1506 | 000006a8: JUMPDEST 1507 | 000006a9: PUSH1 0x0 1508 | 000006ab: DUP1 1509 | 000006ac: PUSH32 0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b 1510 | 000006cd: PUSH1 0x1 1511 | 000006cf: MUL 1512 | 000006d0: SWAP1 1513 | 000006d1: POP 1514 | 000006d2: DUP1 1515 | 000006d3: SLOAD 1516 | 000006d4: SWAP2 1517 | 000006d5: POP 1518 | 000006d6: POP 1519 | 000006d7: SWAP1 1520 | 000006d8: JUMP 1521 | 000006d9: JUMPDEST 1522 | 000006da: PUSH2 0x6e2 1523 | 000006dd: DUP2 1524 | 000006de: PUSH2 0x779 1525 | 000006e1: JUMP 1526 | 000006e2: JUMPDEST 1527 | 000006e3: PUSH32 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b 1528 | 00000704: DUP2 1529 | 00000705: PUSH1 0x40 1530 | 00000707: MLOAD 1531 | 00000708: DUP1 1532 | 00000709: DUP3 1533 | 0000070a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1534 | 0000071f: AND 1535 | 00000720: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 1536 | 00000735: AND 1537 | 00000736: DUP2 1538 | 00000737: MSTORE 1539 | 00000738: PUSH1 0x20 1540 | 0000073a: ADD 1541 | 0000073b: SWAP2 1542 | 0000073c: POP 1543 | 0000073d: POP 1544 | 0000073e: PUSH1 0x40 1545 | 00000740: MLOAD 1546 | 00000741: DUP1 1547 | 00000742: SWAP2 1548 | 00000743: SUB 1549 | 00000744: SWAP1 1550 | 00000745: LOG1 1551 | 00000746: POP 1552 | 00000747: JUMP 1553 | 00000748: JUMPDEST 1554 | 00000749: PUSH1 0x0 1555 | 0000074b: PUSH32 0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b 1556 | 0000076c: PUSH1 0x1 1557 | 0000076e: MUL 1558 | 0000076f: SWAP1 1559 | 00000770: POP 1560 | 00000771: DUP2 1561 | 00000772: DUP2 1562 | 00000773: SSTORE 1563 | 00000774: POP 1564 | 00000775: POP 1565 | 00000776: JUMP 1566 | 00000777: JUMPDEST 1567 | 00000778: JUMP 1568 | 00000779: JUMPDEST 1569 | 0000077a: PUSH1 0x0 1570 | 0000077c: PUSH2 0x784 1571 | 0000077f: DUP3 1572 | 00000780: PUSH2 0x84b 1573 | 00000783: JUMP 1574 | 00000784: JUMPDEST 1575 | 00000785: ISZERO 1576 | 00000786: ISZERO 1577 | 00000787: PUSH2 0x81e 1578 | 0000078a: JUMPI 1579 | 0000078b: PUSH1 0x40 1580 | 0000078d: MLOAD 1581 | 0000078e: PUSH32 0x8c379a000000000000000000000000000000000000000000000000000000000 1582 | 000007af: DUP2 1583 | 000007b0: MSTORE 1584 | 000007b1: PUSH1 0x4 1585 | 000007b3: ADD 1586 | 000007b4: DUP1 1587 | 000007b5: DUP1 1588 | 000007b6: PUSH1 0x20 1589 | 000007b8: ADD 1590 | 000007b9: DUP3 1591 | 000007ba: DUP2 1592 | 000007bb: SUB 1593 | 000007bc: DUP3 1594 | 000007bd: MSTORE 1595 | 000007be: PUSH1 0x3b 1596 | 000007c0: DUP2 1597 | 000007c1: MSTORE 1598 | 000007c2: PUSH1 0x20 1599 | 000007c4: ADD 1600 | 000007c5: DUP1 1601 | 000007c6: PUSH32 0x43616e6e6f742073657420612070726f787920696d706c656d656e746174696f 1602 | 000007e7: DUP2 1603 | 000007e8: MSTORE 1604 | 000007e9: PUSH1 0x20 1605 | 000007eb: ADD 1606 | 000007ec: PUSH32 0x6e20746f2061206e6f6e2d636f6e747261637420616464726573730000000000 1607 | 0000080d: DUP2 1608 | 0000080e: MSTORE 1609 | 0000080f: POP 1610 | 00000810: PUSH1 0x40 1611 | 00000812: ADD 1612 | 00000813: SWAP2 1613 | 00000814: POP 1614 | 00000815: POP 1615 | 00000816: PUSH1 0x40 1616 | 00000818: MLOAD 1617 | 00000819: DUP1 1618 | 0000081a: SWAP2 1619 | 0000081b: SUB 1620 | 0000081c: SWAP1 1621 | 0000081d: REVERT 1622 | 0000081e: JUMPDEST 1623 | 0000081f: PUSH32 0x7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3 1624 | 00000840: PUSH1 0x1 1625 | 00000842: MUL 1626 | 00000843: SWAP1 1627 | 00000844: POP 1628 | 00000845: DUP2 1629 | 00000846: DUP2 1630 | 00000847: SSTORE 1631 | 00000848: POP 1632 | 00000849: POP 1633 | 0000084a: JUMP 1634 | 0000084b: JUMPDEST 1635 | 0000084c: PUSH1 0x0 1636 | 0000084e: DUP1 1637 | 0000084f: DUP3 1638 | 00000850: EXTCODESIZE 1639 | 00000851: SWAP1 1640 | 00000852: POP 1641 | 00000853: PUSH1 0x0 1642 | 00000855: DUP2 1643 | 00000856: GT 1644 | 00000857: SWAP2 1645 | 00000858: POP 1646 | 00000859: POP 1647 | 0000085a: SWAP2 1648 | 0000085b: SWAP1 1649 | 0000085c: POP 1650 | 0000085d: JUMP 1651 | 0000085e: STOP 1652 | 0000085f: LOG1 1653 | 00000860: PUSH6 0x627a7a723058 1654 | 00000867: SHA3 1655 | 00000868: LOG4 1656 | 00000869: INVALID 1657 | 0000086a: SELFBALANCE 1658 | 0000086b: INVALID 1659 | 0000086c: INVALID 1660 | 0000086d: SHA3 1661 | 0000086e: INVALID 1662 | 0000086f: GAS 1663 | 00000870: INVALID 1664 | 00000871: INVALID 1665 | 00000872: INVALID 1666 | 00000873: INVALID 1667 | 00000874: TIMESTAMP 1668 | 00000875: DUP15 1669 | 00000876: SWAP9 1670 | 00000877: DUP12 1671 | 00000878: INVALID 1672 | 00000879: INVALID 1673 | 0000087a: INVALID 1674 | 0000087b: MUL 1675 | 0000087c: INVALID 1676 | 0000087d: INVALID 1677 | 0000087e: AND 1678 | 0000087f: SSTORE 1679 | 00000880: ORIGIN 1680 | 00000881: INVALID 1681 | 00000882: INVALID 1682 | 00000883: INVALID 1683 | 00000884: SAR 1684 | 00000885: INVALID 1685 | 00000886: INVALID 1686 | 00000887: INVALID 1687 | 00000888: STOP 1688 | 00000889: INVALID 1689 | -------------------------------------------------------------------------------- /testdata/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48_encoded.txt: -------------------------------------------------------------------------------- 1 | 0x60806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633659cfe6146100775780634f1ef286146100ba5780635c60da1b146101085780638f2839701461015f578063f851a440146101a2575b6100756101f9565b005b34801561008357600080fd5b506100b8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610213565b005b610106600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001919091929391929390505050610268565b005b34801561011457600080fd5b5061011d610308565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561016b57600080fd5b506101a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610360565b005b3480156101ae57600080fd5b506101b761051e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610201610576565b61021161020c610651565b610682565b565b61021b6106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561025c57610257816106d9565b610265565b6102646101f9565b5b50565b6102706106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102fa576102ac836106d9565b3073ffffffffffffffffffffffffffffffffffffffff163483836040518083838082843782019150509250505060006040518083038185875af19250505015156102f557600080fd5b610303565b6103026101f9565b5b505050565b60006103126106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156103545761034d610651565b905061035d565b61035c6101f9565b5b90565b6103686106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561051257600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610466576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001807f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f81526020017f787920746f20746865207a65726f20616464726573730000000000000000000081525060400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61048f6106a8565b82604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a161050d81610748565b61051b565b61051a6101f9565b5b50565b60006105286106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561056a576105636106a8565b9050610573565b6105726101f9565b5b90565b61057e6106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515610647576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667281526020017f6f6d207468652070726f78792061646d696e000000000000000000000000000081525060400191505060405180910390fd5b61064f610777565b565b6000807f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c36001029050805491505090565b3660008037600080366000845af43d6000803e80600081146106a3573d6000f35b3d6000fd5b6000807f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b6001029050805491505090565b6106e281610779565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60010290508181555050565b565b60006107848261084b565b151561081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001807f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f81526020017f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000081525060400191505060405180910390fd5b7f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360010290508181555050565b600080823b9050600081119150509190505600a165627a7a72305820a4a547cfc7202c5acaaae74d428e988bc62ad5024eb0165532d3a8f91db4ed240029 2 | -------------------------------------------------------------------------------- /testdata/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2_encoded.txt: -------------------------------------------------------------------------------- 1 | 0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029 2 | -------------------------------------------------------------------------------- /testdata/0xDef1C0ded9bec7F1a1670819833240f027b25EfF_decoded.txt: -------------------------------------------------------------------------------- 1 | 00000000: PUSH1 0x80 2 | 00000002: PUSH1 0x40 3 | 00000004: MSTORE 4 | 00000005: PUSH1 0x4 5 | 00000007: CALLDATASIZE 6 | 00000008: LT 7 | 00000009: PUSH2 0x22 8 | 0000000c: JUMPI 9 | 0000000d: PUSH1 0x0 10 | 0000000f: CALLDATALOAD 11 | 00000010: PUSH1 0xe0 12 | 00000012: SHR 13 | 00000013: DUP1 14 | 00000014: PUSH4 0x972fdd26 15 | 00000019: EQ 16 | 0000001a: PUSH2 0x13e 17 | 0000001d: JUMPI 18 | 0000001e: PUSH2 0x29 19 | 00000021: JUMP 20 | 00000022: JUMPDEST 21 | 00000023: CALLDATASIZE 22 | 00000024: PUSH2 0x29 23 | 00000027: JUMPI 24 | 00000028: STOP 25 | 00000029: JUMPDEST 26 | 0000002a: PUSH1 0x0 27 | 0000002c: PUSH2 0x75 28 | 0000002f: PUSH1 0x0 29 | 00000031: DUP1 30 | 00000032: CALLDATASIZE 31 | 00000033: DUP1 32 | 00000034: DUP1 33 | 00000035: PUSH1 0x1f 34 | 00000037: ADD 35 | 00000038: PUSH1 0x20 36 | 0000003a: DUP1 37 | 0000003b: SWAP2 38 | 0000003c: DIV 39 | 0000003d: MUL 40 | 0000003e: PUSH1 0x20 41 | 00000040: ADD 42 | 00000041: PUSH1 0x40 43 | 00000043: MLOAD 44 | 00000044: SWAP1 45 | 00000045: DUP2 46 | 00000046: ADD 47 | 00000047: PUSH1 0x40 48 | 00000049: MSTORE 49 | 0000004a: DUP1 50 | 0000004b: SWAP4 51 | 0000004c: SWAP3 52 | 0000004d: SWAP2 53 | 0000004e: SWAP1 54 | 0000004f: DUP2 55 | 00000050: DUP2 56 | 00000051: MSTORE 57 | 00000052: PUSH1 0x20 58 | 00000054: ADD 59 | 00000055: DUP4 60 | 00000056: DUP4 61 | 00000057: DUP1 62 | 00000058: DUP3 63 | 00000059: DUP5 64 | 0000005a: CALLDATACOPY 65 | 0000005b: PUSH1 0x0 66 | 0000005d: SWAP3 67 | 0000005e: ADD 68 | 0000005f: SWAP2 69 | 00000060: SWAP1 70 | 00000061: SWAP2 71 | 00000062: MSTORE 72 | 00000063: POP 73 | 00000064: SWAP3 74 | 00000065: SWAP4 75 | 00000066: SWAP3 76 | 00000067: POP 77 | 00000068: POP 78 | 00000069: PUSH4 0xffffffff 79 | 0000006e: PUSH2 0x174 80 | 00000071: AND 81 | 00000072: SWAP1 82 | 00000073: POP 83 | 00000074: JUMP 84 | 00000075: JUMPDEST 85 | 00000076: SWAP1 86 | 00000077: POP 87 | 00000078: PUSH1 0x0 88 | 0000007a: PUSH2 0x82 89 | 0000007d: DUP3 90 | 0000007e: PUSH2 0x1c0 91 | 00000081: JUMP 92 | 00000082: JUMPDEST 93 | 00000083: SWAP1 94 | 00000084: POP 95 | 00000085: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 96 | 0000009a: DUP2 97 | 0000009b: AND 98 | 0000009c: PUSH2 0xb0 99 | 0000009f: JUMPI 100 | 000000a0: PUSH2 0xb0 101 | 000000a3: PUSH2 0xab 102 | 000000a6: DUP4 103 | 000000a7: PUSH2 0x219 104 | 000000aa: JUMP 105 | 000000ab: JUMPDEST 106 | 000000ac: PUSH2 0x2c4 107 | 000000af: JUMP 108 | 000000b0: JUMPDEST 109 | 000000b1: PUSH1 0x0 110 | 000000b3: PUSH1 0x60 111 | 000000b5: DUP3 112 | 000000b6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 113 | 000000cb: AND 114 | 000000cc: PUSH1 0x0 115 | 000000ce: CALLDATASIZE 116 | 000000cf: PUSH1 0x40 117 | 000000d1: MLOAD 118 | 000000d2: PUSH2 0xdc 119 | 000000d5: SWAP3 120 | 000000d6: SWAP2 121 | 000000d7: SWAP1 122 | 000000d8: PUSH2 0x3ee 123 | 000000db: JUMP 124 | 000000dc: JUMPDEST 125 | 000000dd: PUSH1 0x0 126 | 000000df: PUSH1 0x40 127 | 000000e1: MLOAD 128 | 000000e2: DUP1 129 | 000000e3: DUP4 130 | 000000e4: SUB 131 | 000000e5: DUP2 132 | 000000e6: DUP6 133 | 000000e7: GAS 134 | 000000e8: DELEGATECALL 135 | 000000e9: SWAP2 136 | 000000ea: POP 137 | 000000eb: POP 138 | 000000ec: RETURNDATASIZE 139 | 000000ed: DUP1 140 | 000000ee: PUSH1 0x0 141 | 000000f0: DUP2 142 | 000000f1: EQ 143 | 000000f2: PUSH2 0x117 144 | 000000f5: JUMPI 145 | 000000f6: PUSH1 0x40 146 | 000000f8: MLOAD 147 | 000000f9: SWAP2 148 | 000000fa: POP 149 | 000000fb: PUSH1 0x1f 150 | 000000fd: NOT 151 | 000000fe: PUSH1 0x3f 152 | 00000100: RETURNDATASIZE 153 | 00000101: ADD 154 | 00000102: AND 155 | 00000103: DUP3 156 | 00000104: ADD 157 | 00000105: PUSH1 0x40 158 | 00000107: MSTORE 159 | 00000108: RETURNDATASIZE 160 | 00000109: DUP3 161 | 0000010a: MSTORE 162 | 0000010b: RETURNDATASIZE 163 | 0000010c: PUSH1 0x0 164 | 0000010e: PUSH1 0x20 165 | 00000110: DUP5 166 | 00000111: ADD 167 | 00000112: RETURNDATACOPY 168 | 00000113: PUSH2 0x11c 169 | 00000116: JUMP 170 | 00000117: JUMPDEST 171 | 00000118: PUSH1 0x60 172 | 0000011a: SWAP2 173 | 0000011b: POP 174 | 0000011c: JUMPDEST 175 | 0000011d: POP 176 | 0000011e: SWAP2 177 | 0000011f: POP 178 | 00000120: SWAP2 179 | 00000121: POP 180 | 00000122: DUP2 181 | 00000123: PUSH2 0x12f 182 | 00000126: JUMPI 183 | 00000127: PUSH2 0x12f 184 | 0000012a: DUP2 185 | 0000012b: PUSH2 0x2c4 186 | 0000012e: JUMP 187 | 0000012f: JUMPDEST 188 | 00000130: PUSH2 0x138 189 | 00000133: DUP2 190 | 00000134: PUSH2 0x2cc 191 | 00000137: JUMP 192 | 00000138: JUMPDEST 193 | 00000139: POP 194 | 0000013a: POP 195 | 0000013b: POP 196 | 0000013c: POP 197 | 0000013d: STOP 198 | 0000013e: JUMPDEST 199 | 0000013f: CALLVALUE 200 | 00000140: DUP1 201 | 00000141: ISZERO 202 | 00000142: PUSH2 0x14a 203 | 00000145: JUMPI 204 | 00000146: PUSH1 0x0 205 | 00000148: DUP1 206 | 00000149: REVERT 207 | 0000014a: JUMPDEST 208 | 0000014b: POP 209 | 0000014c: PUSH2 0x15e 210 | 0000014f: PUSH2 0x159 211 | 00000152: CALLDATASIZE 212 | 00000153: PUSH1 0x4 213 | 00000155: PUSH2 0x3a7 214 | 00000158: JUMP 215 | 00000159: JUMPDEST 216 | 0000015a: PUSH2 0x1c0 217 | 0000015d: JUMP 218 | 0000015e: JUMPDEST 219 | 0000015f: PUSH1 0x40 220 | 00000161: MLOAD 221 | 00000162: PUSH2 0x16b 222 | 00000165: SWAP2 223 | 00000166: SWAP1 224 | 00000167: PUSH2 0x427 225 | 0000016a: JUMP 226 | 0000016b: JUMPDEST 227 | 0000016c: PUSH1 0x40 228 | 0000016e: MLOAD 229 | 0000016f: DUP1 230 | 00000170: SWAP2 231 | 00000171: SUB 232 | 00000172: SWAP1 233 | 00000173: RETURN 234 | 00000174: JUMPDEST 235 | 00000175: PUSH1 0x0 236 | 00000177: DUP2 237 | 00000178: PUSH1 0x4 238 | 0000017a: ADD 239 | 0000017b: DUP4 240 | 0000017c: MLOAD 241 | 0000017d: LT 242 | 0000017e: ISZERO 243 | 0000017f: PUSH2 0x195 244 | 00000182: JUMPI 245 | 00000183: PUSH2 0x195 246 | 00000186: PUSH2 0xab 247 | 00000189: PUSH1 0x3 248 | 0000018b: DUP6 249 | 0000018c: MLOAD 250 | 0000018d: DUP6 251 | 0000018e: PUSH1 0x4 252 | 00000190: ADD 253 | 00000191: PUSH2 0x302 254 | 00000194: JUMP 255 | 00000195: JUMPDEST 256 | 00000196: POP 257 | 00000197: ADD 258 | 00000198: PUSH1 0x20 259 | 0000019a: ADD 260 | 0000019b: MLOAD 261 | 0000019c: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 262 | 000001bd: AND 263 | 000001be: SWAP1 264 | 000001bf: JUMP 265 | 000001c0: JUMPDEST 266 | 000001c1: PUSH1 0x0 267 | 000001c3: PUSH2 0x1ca 268 | 000001c6: PUSH2 0x2d4 269 | 000001c9: JUMP 270 | 000001ca: JUMPDEST 271 | 000001cb: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 272 | 000001ec: SWAP3 273 | 000001ed: SWAP1 274 | 000001ee: SWAP3 275 | 000001ef: AND 276 | 000001f0: PUSH1 0x0 277 | 000001f2: SWAP1 278 | 000001f3: DUP2 279 | 000001f4: MSTORE 280 | 000001f5: PUSH1 0x20 281 | 000001f7: SWAP3 282 | 000001f8: SWAP1 283 | 000001f9: SWAP3 284 | 000001fa: MSTORE 285 | 000001fb: POP 286 | 000001fc: PUSH1 0x40 287 | 000001fe: SWAP1 288 | 000001ff: SHA3 289 | 00000200: SLOAD 290 | 00000201: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 291 | 00000216: AND 292 | 00000217: SWAP1 293 | 00000218: JUMP 294 | 00000219: JUMPDEST 295 | 0000021a: PUSH1 0x60 296 | 0000021c: PUSH1 0x40 297 | 0000021e: MLOAD 298 | 0000021f: PUSH2 0x227 299 | 00000222: SWAP1 300 | 00000223: PUSH2 0x3fe 301 | 00000226: JUMP 302 | 00000227: JUMPDEST 303 | 00000228: PUSH1 0x40 304 | 0000022a: MLOAD 305 | 0000022b: DUP1 306 | 0000022c: SWAP2 307 | 0000022d: SUB 308 | 0000022e: SWAP1 309 | 0000022f: SHA3 310 | 00000230: DUP3 311 | 00000231: PUSH1 0x40 312 | 00000233: MLOAD 313 | 00000234: PUSH1 0x24 314 | 00000236: ADD 315 | 00000237: PUSH2 0x240 316 | 0000023a: SWAP2 317 | 0000023b: SWAP1 318 | 0000023c: PUSH2 0x448 319 | 0000023f: JUMP 320 | 00000240: JUMPDEST 321 | 00000241: PUSH1 0x40 322 | 00000243: DUP1 323 | 00000244: MLOAD 324 | 00000245: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 325 | 00000266: DUP2 326 | 00000267: DUP5 327 | 00000268: SUB 328 | 00000269: ADD 329 | 0000026a: DUP2 330 | 0000026b: MSTORE 331 | 0000026c: SWAP2 332 | 0000026d: SWAP1 333 | 0000026e: MSTORE 334 | 0000026f: PUSH1 0x20 335 | 00000271: DUP2 336 | 00000272: ADD 337 | 00000273: DUP1 338 | 00000274: MLOAD 339 | 00000275: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff 340 | 00000292: AND 341 | 00000293: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 342 | 000002b4: SWAP1 343 | 000002b5: SWAP4 344 | 000002b6: AND 345 | 000002b7: SWAP3 346 | 000002b8: SWAP1 347 | 000002b9: SWAP3 348 | 000002ba: OR 349 | 000002bb: SWAP1 350 | 000002bc: SWAP2 351 | 000002bd: MSTORE 352 | 000002be: SWAP1 353 | 000002bf: POP 354 | 000002c0: SWAP2 355 | 000002c1: SWAP1 356 | 000002c2: POP 357 | 000002c3: JUMP 358 | 000002c4: JUMPDEST 359 | 000002c5: DUP1 360 | 000002c6: MLOAD 361 | 000002c7: PUSH1 0x20 362 | 000002c9: DUP3 363 | 000002ca: ADD 364 | 000002cb: REVERT 365 | 000002cc: JUMPDEST 366 | 000002cd: DUP1 367 | 000002ce: MLOAD 368 | 000002cf: PUSH1 0x20 369 | 000002d1: DUP3 370 | 000002d2: ADD 371 | 000002d3: RETURN 372 | 000002d4: JUMPDEST 373 | 000002d5: PUSH1 0x0 374 | 000002d7: DUP1 375 | 000002d8: PUSH2 0x2e1 376 | 000002db: PUSH1 0x0 377 | 000002dd: PUSH2 0x2e7 378 | 000002e0: JUMP 379 | 000002e1: JUMPDEST 380 | 000002e2: SWAP3 381 | 000002e3: SWAP2 382 | 000002e4: POP 383 | 000002e5: POP 384 | 000002e6: JUMP 385 | 000002e7: JUMPDEST 386 | 000002e8: PUSH1 0x0 387 | 000002ea: PUSH1 0x80 388 | 000002ec: DUP3 389 | 000002ed: PUSH1 0x4 390 | 000002ef: DUP2 391 | 000002f0: GT 392 | 000002f1: ISZERO 393 | 000002f2: PUSH2 0x2f7 394 | 000002f5: JUMPI 395 | 000002f6: INVALID 396 | 000002f7: JUMPDEST 397 | 000002f8: PUSH1 0x1 398 | 000002fa: ADD 399 | 000002fb: SWAP1 400 | 000002fc: SHL 401 | 000002fd: SWAP3 402 | 000002fe: SWAP2 403 | 000002ff: POP 404 | 00000300: POP 405 | 00000301: JUMP 406 | 00000302: JUMPDEST 407 | 00000303: PUSH1 0x60 408 | 00000305: PUSH4 0x28006595 409 | 0000030a: PUSH1 0xe0 410 | 0000030c: SHL 411 | 0000030d: DUP5 412 | 0000030e: DUP5 413 | 0000030f: DUP5 414 | 00000310: PUSH1 0x40 415 | 00000312: MLOAD 416 | 00000313: PUSH1 0x24 417 | 00000315: ADD 418 | 00000316: PUSH2 0x321 419 | 00000319: SWAP4 420 | 0000031a: SWAP3 421 | 0000031b: SWAP2 422 | 0000031c: SWAP1 423 | 0000031d: PUSH2 0x475 424 | 00000320: JUMP 425 | 00000321: JUMPDEST 426 | 00000322: PUSH1 0x40 427 | 00000324: DUP1 428 | 00000325: MLOAD 429 | 00000326: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 430 | 00000347: DUP2 431 | 00000348: DUP5 432 | 00000349: SUB 433 | 0000034a: ADD 434 | 0000034b: DUP2 435 | 0000034c: MSTORE 436 | 0000034d: SWAP2 437 | 0000034e: SWAP1 438 | 0000034f: MSTORE 439 | 00000350: PUSH1 0x20 440 | 00000352: DUP2 441 | 00000353: ADD 442 | 00000354: DUP1 443 | 00000355: MLOAD 444 | 00000356: PUSH28 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff 445 | 00000373: AND 446 | 00000374: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 447 | 00000395: SWAP1 448 | 00000396: SWAP4 449 | 00000397: AND 450 | 00000398: SWAP3 451 | 00000399: SWAP1 452 | 0000039a: SWAP3 453 | 0000039b: OR 454 | 0000039c: SWAP1 455 | 0000039d: SWAP2 456 | 0000039e: MSTORE 457 | 0000039f: SWAP1 458 | 000003a0: POP 459 | 000003a1: SWAP4 460 | 000003a2: SWAP3 461 | 000003a3: POP 462 | 000003a4: POP 463 | 000003a5: POP 464 | 000003a6: JUMP 465 | 000003a7: JUMPDEST 466 | 000003a8: PUSH1 0x0 467 | 000003aa: PUSH1 0x20 468 | 000003ac: DUP3 469 | 000003ad: DUP5 470 | 000003ae: SUB 471 | 000003af: SLT 472 | 000003b0: ISZERO 473 | 000003b1: PUSH2 0x3b8 474 | 000003b4: JUMPI 475 | 000003b5: DUP1 476 | 000003b6: DUP2 477 | 000003b7: REVERT 478 | 000003b8: JUMPDEST 479 | 000003b9: DUP2 480 | 000003ba: CALLDATALOAD 481 | 000003bb: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 482 | 000003dc: DUP2 483 | 000003dd: AND 484 | 000003de: DUP2 485 | 000003df: EQ 486 | 000003e0: PUSH2 0x3e7 487 | 000003e3: JUMPI 488 | 000003e4: DUP2 489 | 000003e5: DUP3 490 | 000003e6: REVERT 491 | 000003e7: JUMPDEST 492 | 000003e8: SWAP4 493 | 000003e9: SWAP3 494 | 000003ea: POP 495 | 000003eb: POP 496 | 000003ec: POP 497 | 000003ed: JUMP 498 | 000003ee: JUMPDEST 499 | 000003ef: PUSH1 0x0 500 | 000003f1: DUP3 501 | 000003f2: DUP5 502 | 000003f3: DUP4 503 | 000003f4: CALLDATACOPY 504 | 000003f5: SWAP2 505 | 000003f6: ADD 506 | 000003f7: SWAP1 507 | 000003f8: DUP2 508 | 000003f9: MSTORE 509 | 000003fa: SWAP2 510 | 000003fb: SWAP1 511 | 000003fc: POP 512 | 000003fd: JUMP 513 | 000003fe: JUMPDEST 514 | 000003ff: PUSH32 0x4e6f74496d706c656d656e7465644572726f7228627974657334290000000000 515 | 00000420: DUP2 516 | 00000421: MSTORE 517 | 00000422: PUSH1 0x1b 518 | 00000424: ADD 519 | 00000425: SWAP1 520 | 00000426: JUMP 521 | 00000427: JUMPDEST 522 | 00000428: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 523 | 0000043d: SWAP2 524 | 0000043e: SWAP1 525 | 0000043f: SWAP2 526 | 00000440: AND 527 | 00000441: DUP2 528 | 00000442: MSTORE 529 | 00000443: PUSH1 0x20 530 | 00000445: ADD 531 | 00000446: SWAP1 532 | 00000447: JUMP 533 | 00000448: JUMPDEST 534 | 00000449: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 535 | 0000046a: SWAP2 536 | 0000046b: SWAP1 537 | 0000046c: SWAP2 538 | 0000046d: AND 539 | 0000046e: DUP2 540 | 0000046f: MSTORE 541 | 00000470: PUSH1 0x20 542 | 00000472: ADD 543 | 00000473: SWAP1 544 | 00000474: JUMP 545 | 00000475: JUMPDEST 546 | 00000476: PUSH1 0x60 547 | 00000478: DUP2 548 | 00000479: ADD 549 | 0000047a: PUSH1 0x8 550 | 0000047c: DUP6 551 | 0000047d: LT 552 | 0000047e: PUSH2 0x483 553 | 00000481: JUMPI 554 | 00000482: INVALID 555 | 00000483: JUMPDEST 556 | 00000484: SWAP4 557 | 00000485: DUP2 558 | 00000486: MSTORE 559 | 00000487: PUSH1 0x20 560 | 00000489: DUP2 561 | 0000048a: ADD 562 | 0000048b: SWAP3 563 | 0000048c: SWAP1 564 | 0000048d: SWAP3 565 | 0000048e: MSTORE 566 | 0000048f: PUSH1 0x40 567 | 00000491: SWAP1 568 | 00000492: SWAP2 569 | 00000493: ADD 570 | 00000494: MSTORE 571 | 00000495: SWAP1 572 | 00000496: JUMP 573 | 00000497: INVALID 574 | 00000498: LOG2 575 | 00000499: PUSH5 0x6970667358 576 | 0000049f: INVALID 577 | 000004a0: SLT 578 | 000004a1: SHA3 579 | 000004a2: INVALID 580 | 000004a3: PUSH16 0x45dcc0f640b86b617d19d2affc31f4b5 581 | 000004b4: SLOAD 582 | -------------------------------------------------------------------------------- /testdata/0xDef1C0ded9bec7F1a1670819833240f027b25EfF_encoded.txt: -------------------------------------------------------------------------------- 1 | 0x6080604052600436106100225760003560e01c8063972fdd261461013e57610029565b3661002957005b6000610075600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505063ffffffff610174169050565b90506000610082826101c0565b905073ffffffffffffffffffffffffffffffffffffffff81166100b0576100b06100ab83610219565b6102c4565b600060608273ffffffffffffffffffffffffffffffffffffffff166000366040516100dc9291906103ee565b600060405180830381855af49150503d8060008114610117576040519150601f19603f3d011682016040523d82523d6000602084013e61011c565b606091505b50915091508161012f5761012f816102c4565b610138816102cc565b50505050005b34801561014a57600080fd5b5061015e6101593660046103a7565b6101c0565b60405161016b9190610427565b60405180910390f35b60008160040183511015610195576101956100ab6003855185600401610302565b5001602001517fffffffff000000000000000000000000000000000000000000000000000000001690565b60006101ca6102d4565b7fffffffff0000000000000000000000000000000000000000000000000000000092909216600090815260209290925250604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6060604051610227906103fe565b6040518091039020826040516024016102409190610448565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b805160208201fd5b805160208201f35b6000806102e160006102e7565b92915050565b600060808260048111156102f757fe5b600101901b92915050565b6060632800659560e01b84848460405160240161032193929190610475565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b6000602082840312156103b8578081fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146103e7578182fd5b9392505050565b6000828483379101908152919050565b7f4e6f74496d706c656d656e7465644572726f72286279746573342900000000008152601b0190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b606081016008851061048357fe5b93815260208101929092526040909101529056fea2646970667358221220266f45dcc0f640b86b617d19d2affc31f4b5547fd56bc2761d8eddc74675491564736f6c63430006080033 2 | -------------------------------------------------------------------------------- /testdata/0xE592427A0AEce92De3Edee1F18E0157C05861564_encoded.txt: -------------------------------------------------------------------------------- 1 | 0x6080604052600436106101125760003560e01c8063c04b8d59116100a5578063df2ab5bb11610074578063f28c049811610059578063f28c0498146102f5578063f3995c6714610308578063fa461e331461031b576101bd565b8063df2ab5bb146102cf578063e0e189a0146102e2576101bd565b8063c04b8d5914610281578063c2e3140a14610294578063c45a0155146102a7578063db3e2198146102bc576101bd565b80634aa4a4fc116100e15780634aa4a4fc146102195780639b2c0a371461023b578063a4a78f0c1461024e578063ac9650d814610261576101bd565b806312210e8a146101c2578063414bf389146101ca5780634659a494146101f357806349404b7c14610206576101bd565b366101bd573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216146101bb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b6101bb61033b565b6101dd6101d83660046129f8565b61034d565b6040516101ea9190612df1565b60405180910390f35b6101bb610201366004612776565b6104bf565b6101bb610214366004612aff565b61057f565b34801561022557600080fd5b5061022e610745565b6040516101ea9190612c37565b6101bb610249366004612b2e565b610769565b6101bb61025c366004612776565b610981565b61027461026f3660046127d6565b610a56565b6040516101ea9190612caa565b6101dd61028f36600461294d565b610bb0565b6101bb6102a2366004612776565b610d0f565b3480156102b357600080fd5b5061022e610dc4565b6101dd6102ca3660046129f8565b610de8565b6101bb6102dd3660046126d7565b610f78565b6101bb6102f0366004612718565b611095565b6101dd610303366004612a14565b6111fb565b6101bb610316366004612776565b61132f565b34801561032757600080fd5b506101bb610336366004612868565b6113c7565b471561034b5761034b334761150e565b565b600081608001358061035d61165c565b11156103ca57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b61047060a08401356103e260808601606087016126b4565b6103f3610100870160e088016126b4565b604080518082019091528061040b60208a018a6126b4565b61041b60608b0160408c01612adc565b61042b60408c0160208d016126b4565b60405160200161043d93929190612bc1565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611660565b91508260c001358210156104b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d72565b60405180910390fd5b50919050565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b15801561055f57600080fd5b505af1158015610573573d6000803e3d6000fd5b50505050505050505050565b60007f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561060857600080fd5b505afa15801561061c573d6000803e3d6000fd5b505050506040513d602081101561063257600080fd5b50519050828110156106a557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610740577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561071e57600080fd5b505af1158015610732573d6000803e3d6000fd5b50505050610740828261150e565b505050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b60008211801561077a575060648211155b61078357600080fd5b60007f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561080c57600080fd5b505afa158015610820573d6000803e3d6000fd5b505050506040513d602081101561083657600080fd5b50519050848110156108a957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b801561097a577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561092257600080fd5b505af1158015610936573d6000803e3d6000fd5b50505050600061271061095285846117e690919063ffffffff16565b8161095957fe5b049050801561096c5761096c838261150e565b6109788582840361150e565b505b5050505050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610a1657600080fd5b505afa158015610a2a573d6000803e3d6000fd5b505050506040513d6020811015610a4057600080fd5b50511015610978576109788686868686866104bf565b60608167ffffffffffffffff81118015610a6f57600080fd5b50604051908082528060200260200182016040528015610aa357816020015b6060815260200190600190039081610a8e5790505b50905060005b82811015610ba95760008030868685818110610ac157fe5b9050602002810190610ad39190612dfa565b604051610ae1929190612c27565b600060405180830381855af49150503d8060008114610b1c576040519150601f19603f3d011682016040523d82523d6000602084013e610b21565b606091505b509150915081610b8757604481511015610b3a57600080fd5b60048101905080806020019051810190610b5491906128e3565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b09190612d28565b80848481518110610b9457fe5b60209081029190910101525050600101610aa9565b5092915050565b6000816040015180610bc061165c565b1115610c2d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b335b6000610c3e8560000151611810565b9050610c97856060015182610c57578660200151610c59565b305b60006040518060400160405280610c738b6000015161181c565b81526020018773ffffffffffffffffffffffffffffffffffffffff16815250611660565b60608601528015610cb7578451309250610cb09061182b565b8552610cc4565b8460600151935050610cca565b50610c2f565b8360800151831015610d08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d72565b5050919050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d6020811015610dae57600080fd5b505110156109785761097886868686868661132f565b7f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f98481565b6000816080013580610df861165c565b1115610e6557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b610f0e60a0840135610e7d60808601606087016126b4565b610e8e610100870160e088016126b4565b6040518060400160405280886020016020810190610eac91906126b4565b610ebc60608b0160408c01612adc565b610ec960208c018c6126b4565b604051602001610edb93929190612bc1565b60405160208183030381529060405281526020013373ffffffffffffffffffffffffffffffffffffffff16815250611860565b91508260c00135821115610f4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d3b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600055919050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610fe157600080fd5b505afa158015610ff5573d6000803e3d6000fd5b505050506040513d602081101561100b57600080fd5b505190508281101561107e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b801561108f5761108f848383611a1c565b50505050565b6000821180156110a6575060648211155b6110af57600080fd5b60008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561111857600080fd5b505afa15801561112c573d6000803e3d6000fd5b505050506040513d602081101561114257600080fd5b50519050848110156111b557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b80156109785760006127106111ca83866117e6565b816111d157fe5b04905080156111e5576111e5878483611a1c565b6111f28786838503611a1c565b50505050505050565b600081604001358061120b61165c565b111561127857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b6112eb606084013561129060408601602087016126b4565b60408051808201909152600090806112a88980612dfa565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525033602090910152611860565b5060005491508260800135821115610f4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b090612d3b565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b15801561055f57600080fd5b60008413806113d65750600083135b6113df57600080fd5b60006113ed82840184612a4c565b905060008060006114018460000151611bf1565b9250925092506114337f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984848484611c22565b5060008060008a13611474578473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610896114a5565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16108a5b9150915081156114c4576114bf8587602001513384611c41565b610573565b85516114cf90611810565b156114f45785516114df9061182b565b86526114ee8133600089611860565b50610573565b806000819055508394506105738587602001513384611c41565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061158557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611548565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146115e7576040519150601f19603f3d011682016040523d82523d6000602084013e6115ec565b606091505b505090508061074057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b4290565b600073ffffffffffffffffffffffffffffffffffffffff8416611681573093505b60008060006116938560000151611bf1565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808316908416106000806116c4868686611e1f565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856116ea8f611e5d565b73ffffffffffffffffffffffffffffffffffffffff8e161561170c578d611732565b8761172b5773fffd8963efd1fc6a506488495d951d5263988d25611732565b6401000276a45b8d6040516020016117439190612da9565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401611772959493929190612c58565b6040805180830381600087803b15801561178b57600080fd5b505af115801561179f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c39190612845565b91509150826117d257816117d4565b805b6000039b9a5050505050505050505050565b6000821580611801575050818102818382816117fe57fe5b04145b61180a57600080fd5b92915050565b8051604211155b919050565b606061180a826000602b611e8f565b805160609061180a9083906017907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe901611e8f565b600073ffffffffffffffffffffffffffffffffffffffff8416611881573093505b60008060006118938560000151611bf1565b9194509250905073ffffffffffffffffffffffffffffffffffffffff808416908316106000806118c4858786611e1f565b73ffffffffffffffffffffffffffffffffffffffff1663128acb088b856118ea8f611e5d565b60000373ffffffffffffffffffffffffffffffffffffffff8e161561190f578d611935565b8761192e5773fffd8963efd1fc6a506488495d951d5263988d25611935565b6401000276a45b8d6040516020016119469190612da9565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401611975959493929190612c58565b6040805180830381600087803b15801561198e57600080fd5b505af11580156119a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c69190612845565b915091506000836119db5781836000036119e1565b82826000035b909850905073ffffffffffffffffffffffffffffffffffffffff8a16611a0d578b8114611a0d57600080fd5b50505050505050949350505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310611af157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611ab4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b53576040519150601f19603f3d011682016040523d82523d6000602084013e611b58565b606091505b5091509150818015611b86575080511580611b865750808060200190516020811015611b8357600080fd5b50515b61097a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60008080611bff8482612076565b9250611c0c846014612176565b9050611c19846017612076565b91509193909250565b6000611c3885611c33868686612266565b6122e3565b95945050505050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611c9c5750804710155b15611de5577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d0957600080fd5b505af1158015611d1d573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611db357600080fd5b505af1158015611dc7573d6000803e3d6000fd5b505050506040513d6020811015611ddd57600080fd5b5061108f9050565b73ffffffffffffffffffffffffffffffffffffffff8316301415611e1357611e0e848383611a1c565b61108f565b61108f84848484612313565b6000611e557f0000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984611e50868686612266565b6124f0565b949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008210611e8b57600080fd5b5090565b60608182601f011015611f0357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b828284011015611f7457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b81830184511015611fe657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015290519081900360640190fd5b606082158015612005576040519150600082526020820160405261206d565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561203e578051835260209283019201612026565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000818260140110156120ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f416464726573735f6f766572666c6f770000000000000000000000000000604482015290519081900360640190fd5b816014018351101561215d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f416464726573735f6f75744f66426f756e64730000000000000000000000604482015290519081900360640190fd5b5001602001516c01000000000000000000000000900490565b6000818260030110156121ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f746f55696e7432345f6f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b816003018351101561225d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7432345f6f75744f66426f756e6473000000000000000000000000604482015290519081900360640190fd5b50016003015190565b61226e612626565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1611156122a6579192915b506040805160608101825273ffffffffffffffffffffffffffffffffffffffff948516815292909316602083015262ffffff169181019190915290565b60006122ef83836124f0565b90503373ffffffffffffffffffffffffffffffffffffffff82161461180a57600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b602083106123f057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016123b3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612452576040519150601f19603f3d011682016040523d82523d6000602084013e612457565b606091505b5091509150818015612485575080511580612485575080806020019051602081101561248257600080fd5b50515b61097857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161061253257600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460d5808301919091528251808303909101815260f5909101909152805191012090565b604080516060810182526000808252602082018190529181019190915290565b803561181781612ef4565b600082601f830112612661578081fd5b813561267461266f82612e88565b612e64565b818152846020838601011115612688578283fd5b816020850160208301379081016020019190915292915050565b600061010082840312156104b9578081fd5b6000602082840312156126c5578081fd5b81356126d081612ef4565b9392505050565b6000806000606084860312156126eb578182fd5b83356126f681612ef4565b925060208401359150604084013561270d81612ef4565b809150509250925092565b600080600080600060a0868803121561272f578081fd5b853561273a81612ef4565b945060208601359350604086013561275181612ef4565b925060608601359150608086013561276881612ef4565b809150509295509295909350565b60008060008060008060c0878903121561278e578081fd5b863561279981612ef4565b95506020870135945060408701359350606087013560ff811681146127bc578182fd5b9598949750929560808101359460a0909101359350915050565b600080602083850312156127e8578182fd5b823567ffffffffffffffff808211156127ff578384fd5b818501915085601f830112612812578384fd5b813581811115612820578485fd5b8660208083028501011115612833578485fd5b60209290920196919550909350505050565b60008060408385031215612857578182fd5b505080516020909101519092909150565b6000806000806060858703121561287d578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156128a2578384fd5b818701915087601f8301126128b5578384fd5b8135818111156128c3578485fd5b8860208285010111156128d4578485fd5b95989497505060200194505050565b6000602082840312156128f4578081fd5b815167ffffffffffffffff81111561290a578182fd5b8201601f8101841361291a578182fd5b805161292861266f82612e88565b81815285602083850101111561293c578384fd5b611c38826020830160208601612ec8565b60006020828403121561295e578081fd5b813567ffffffffffffffff80821115612975578283fd5b9083019060a08286031215612988578283fd5b60405160a08101818110838211171561299d57fe5b6040528235828111156129ae578485fd5b6129ba87828601612651565b8252506129c960208401612646565b602082015260408301356040820152606083013560608201526080830135608082015280935050505092915050565b60006101008284031215612a0a578081fd5b6126d083836126a2565b600060208284031215612a25578081fd5b813567ffffffffffffffff811115612a3b578182fd5b820160a081850312156126d0578182fd5b600060208284031215612a5d578081fd5b813567ffffffffffffffff80821115612a74578283fd5b9083019060408286031215612a87578283fd5b604051604081018181108382111715612a9c57fe5b604052823582811115612aad578485fd5b612ab987828601612651565b82525060208301359250612acc83612ef4565b6020810192909252509392505050565b600060208284031215612aed578081fd5b813562ffffff811681146126d0578182fd5b60008060408385031215612b11578182fd5b823591506020830135612b2381612ef4565b809150509250929050565b60008060008060808587031215612b43578182fd5b843593506020850135612b5581612ef4565b9250604085013591506060850135612b6c81612ef4565b939692955090935050565b60008151808452612b8f816020860160208601612ec8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b606093841b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116825260e89390931b7fffffff0000000000000000000000000000000000000000000000000000000000166014820152921b166017820152602b0190565b6000828483379101908152919050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152612c9f60a0830184612b77565b979650505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015612d1b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452612d09858351612b77565b94509285019290850190600101612ccf565b5092979650505050505050565b6000602082526126d06020830184612b77565b60208082526012908201527f546f6f206d756368207265717565737465640000000000000000000000000000604082015260600190565b60208082526013908201527f546f6f206c6974746c6520726563656976656400000000000000000000000000604082015260600190565b600060208252825160406020840152612dc56060840182612b77565b905073ffffffffffffffffffffffffffffffffffffffff60208501511660408401528091505092915050565b90815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612e2e578283fd5b83018035915067ffffffffffffffff821115612e48578283fd5b602001915036819003821315612e5d57600080fd5b9250929050565b60405181810167ffffffffffffffff81118282101715612e8057fe5b604052919050565b600067ffffffffffffffff821115612e9c57fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015612ee3578181015183820152602001612ecb565b8381111561108f5750506000910152565b73ffffffffffffffffffffffffffffffffffffffff81168114612f1657600080fd5b5056fea164736f6c6343000706000a 2 | --------------------------------------------------------------------------------