diff --git a/.gitignore b/.gitignore index 5675048759..b716c9e500 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ book # Generated by the block traces example traces + +burntpix/svgs diff --git a/Cargo.lock b/Cargo.lock index a2ab01f551..507e931da8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -92,6 +92,36 @@ dependencies = [ "syn 2.0.46", ] +[[package]] +name = "alloy-sol-macro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5531f0a16e36c547e68c73a1638bea1f26237ee8ae785527190c4e4f9fecd2c5" +dependencies = [ + "const-hex", + "dunce", + "heck 0.4.1", + "indexmap", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.46", + "syn-solidity", + "tiny-keccak", +] + +[[package]] +name = "alloy-sol-types" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "783eb720b73d38f9d4c1fb9890e4db6bc8c708f7aa77d3071a19e06091ecd1c9" +dependencies = [ + "alloy-primitives", + "alloy-sol-macro", + "const-hex", + "serde", +] + [[package]] name = "anes" version = "0.1.6" @@ -843,6 +873,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "dunce" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + [[package]] name = "ecdsa" version = "0.16.9" @@ -1082,6 +1118,16 @@ dependencies = [ "ws_stream_wasm", ] +[[package]] +name = "eyre" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6267a1fa6f59179ea4afc8e50fd8612a3cc60bc858f786ff877a4a8cb042799" +dependencies = [ + "indenter", + "once_cell", +] + [[package]] name = "fastrand" version = "2.0.1" @@ -1542,6 +1588,12 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + [[package]] name = "indexmap" version = "2.1.0" @@ -2303,9 +2355,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.2" +version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ "aho-corasick", "memchr", @@ -2315,9 +2367,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "3b7fa1134405e2ec9353fd416b17f8dacd46c473d7d3fd1cf202706a14eb792a" dependencies = [ "aho-corasick", "memchr", @@ -2433,9 +2485,13 @@ dependencies = [ name = "revm-test" version = "0.1.0" dependencies = [ + "alloy-sol-macro", + "alloy-sol-types", "bytes", + "eyre", "hex", "microbench", + "regex", "revm", ] @@ -3050,6 +3106,18 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn-solidity" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cfbd642e1748fd9e47951973abfa78f825b11fbf68af9e6b9db4c983a770166" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.46", +] + [[package]] name = "system-configuration" version = "0.5.1" diff --git a/bins/revm-test/Cargo.toml b/bins/revm-test/Cargo.toml index a745c67572..1703e7cca8 100644 --- a/bins/revm-test/Cargo.toml +++ b/bins/revm-test/Cargo.toml @@ -9,6 +9,11 @@ bytes = "1.4" hex = "0.4" revm = { path = "../../crates/revm", version = "3.3.0",default-features=false } microbench = "0.5" +alloy-sol-macro = "0.6.0" +alloy-sol-types = "0.6.0" +regex = "1.10.3" +eyre = "0.6.8" + [[bin]] name = "analysis" @@ -17,4 +22,7 @@ name = "analysis" name = "snailtracer" [[bin]] -name = "transfer" \ No newline at end of file +name = "transfer" + +[[bin]] +name = "burntpix" \ No newline at end of file diff --git a/bins/revm-test/src/bin/burntpix/main.rs b/bins/revm-test/src/bin/burntpix/main.rs new file mode 100644 index 0000000000..1854671afa --- /dev/null +++ b/bins/revm-test/src/bin/burntpix/main.rs @@ -0,0 +1,150 @@ +use alloy_sol_macro::sol; +use alloy_sol_types::SolCall; +use regex::bytes::Regex; +use revm::{ + db::{CacheDB, EmptyDB}, + primitives::{ + address, hex, keccak256, AccountInfo, Address, Bytecode, Bytes, ExecutionResult, Output, + TransactTo, B256, U256, + }, + Evm, +}; +use static_data::{ + BURNTPIX_ADDRESS_ONE, BURNTPIX_ADDRESS_THREE, BURNTPIX_ADDRESS_TWO, BURNTPIX_BYTECODE_FOUR, + BURNTPIX_BYTECODE_ONE, BURNTPIX_BYTECODE_THREE, BURNTPIX_BYTECODE_TWO, BURNTPIX_MAIN_ADDRESS, + STORAGE_ONE, STORAGE_TWO, STORAGE_ZERO, +}; + +use std::fs::File; +use std::{error::Error, time::Instant}; + +use std::{io::Write, str::FromStr}; +pub mod static_data; + +sol! { + #[derive(Debug, PartialEq, Eq)] + interface IBURNTPIX { + function run( uint32 seed, uint256 iterations) returns (string); + } +} + +fn main() { + let (seed, iterations) = try_init_env_vars().expect("Failed to parse env vars"); + + let run_call_data = IBURNTPIX::runCall { seed, iterations }.abi_encode(); + + let db = init_db(); + + let mut evm = Evm::builder() + .modify_tx_env(|tx| { + tx.caller = address!("1000000000000000000000000000000000000000"); + tx.transact_to = TransactTo::Call(BURNTPIX_MAIN_ADDRESS); + tx.data = run_call_data.clone().into(); + }) + .with_db(db) + .build(); + + let started = Instant::now(); + let tx_result = evm.transact().unwrap().result; + let return_data = match tx_result { + ExecutionResult::Success { + output, gas_used, .. + } => { + println!("Gas used: {:?}", gas_used); + println!("Time elapsed: {:?}", started.elapsed()); + match output { + Output::Call(value) => value, + _ => unreachable!("Unexpected output type"), + } + } + _ => unreachable!("Execution failed: {:?}", tx_result), + }; + + // remove returndata offset and length from output + let returndata_offset = 64; + let data = &return_data[returndata_offset..]; + + // remove trailing zeros + let re = Regex::new(r"[0\x00]+$").unwrap(); + let trimmed_data = re.replace_all(data, &[]); + let file_name = format!("{}_{}", seed, iterations); + + svg(file_name, &trimmed_data).expect("Failed to store svg"); +} + +fn svg(filename: String, svg_data: &[u8]) -> Result<(), Box> { + let current_dir = std::env::current_dir()?; + let svg_dir = current_dir.join("burntpix").join("svgs"); + std::fs::create_dir_all(&svg_dir)?; + + let file_path = svg_dir.join(format!("{}.svg", filename)); + let mut file = File::create(file_path)?; + file.write_all(svg_data)?; + + Ok(()) +} + +const DEFAULT_SEED: &str = "0xF1FD58E"; +const DEFAULT_ITERATIONS: &str = "0x7A120"; +fn try_init_env_vars() -> Result<(u32, U256), Box> { + let seed_from_env = std::env::var("SEED").unwrap_or(DEFAULT_SEED.to_string()); + let seed: u32 = try_from_hex_to_u32(&seed_from_env)?; + let iterations_from_env = std::env::var("ITERATIONS").unwrap_or(DEFAULT_ITERATIONS.to_string()); + let iterations = U256::from_str(&iterations_from_env)?; + Ok((seed, iterations)) +} + +fn try_from_hex_to_u32(hex: &str) -> eyre::Result { + let trimmed = hex.strip_prefix("0x").unwrap_or(hex); + u32::from_str_radix(trimmed, 16).map_err(|e| eyre::eyre!("Failed to parse hex: {}", e)) +} + +fn insert_account_info(cache_db: &mut CacheDB, addr: Address, code: Bytes) { + let code_hash = hex::encode(keccak256(code.clone())); + let account_info = AccountInfo::new( + U256::from(0), + 0, + B256::from_str(&code_hash).unwrap(), + Bytecode::new_raw(code), + ); + cache_db.insert_account_info(addr, account_info); +} + +fn init_db() -> CacheDB { + let mut cache_db = CacheDB::new(EmptyDB::default()); + + insert_account_info(&mut cache_db, BURNTPIX_ADDRESS_ONE, BURNTPIX_BYTECODE_ONE); + insert_account_info(&mut cache_db, BURNTPIX_MAIN_ADDRESS, BURNTPIX_BYTECODE_TWO); + insert_account_info(&mut cache_db, BURNTPIX_ADDRESS_TWO, BURNTPIX_BYTECODE_THREE); + insert_account_info( + &mut cache_db, + BURNTPIX_ADDRESS_THREE, + BURNTPIX_BYTECODE_FOUR, + ); + + cache_db + .insert_account_storage( + BURNTPIX_MAIN_ADDRESS, + U256::from(0), + U256::from_be_bytes(*STORAGE_ZERO), + ) + .unwrap(); + + cache_db + .insert_account_storage( + BURNTPIX_MAIN_ADDRESS, + U256::from(1), + U256::from_be_bytes(*STORAGE_ONE), + ) + .unwrap(); + + cache_db + .insert_account_storage( + BURNTPIX_MAIN_ADDRESS, + U256::from(2), + U256::from_be_bytes(*STORAGE_TWO), + ) + .unwrap(); + + cache_db +} diff --git a/bins/revm-test/src/bin/burntpix/static_data.rs b/bins/revm-test/src/bin/burntpix/static_data.rs new file mode 100644 index 0000000000..7a0f4319c9 --- /dev/null +++ b/bins/revm-test/src/bin/burntpix/static_data.rs @@ -0,0 +1,22 @@ +use revm::primitives::{address, bytes, fixed_bytes, Address, Bytes, FixedBytes}; + +pub const BURNTPIX_MAIN_ADDRESS: Address = address!("49206861766520746f6f206d7563682074696d65"); +pub const BURNTPIX_ADDRESS_ONE: Address = address!("0a743ba7304efcc9e384ece9be7631e2470e401e"); +pub const BURNTPIX_ADDRESS_TWO: Address = address!("c917e98213a05d271adc5d93d2fee6c1f1006f75"); +pub const BURNTPIX_ADDRESS_THREE: Address = address!("f529c70db0800449ebd81fbc6e4221523a989f05"); + +pub const STORAGE_ZERO: FixedBytes<32> = + fixed_bytes!("000000000000000000000000f529c70db0800449ebd81fbc6e4221523a989f05"); +pub const STORAGE_ONE: FixedBytes<32> = + fixed_bytes!("0000000000000000000000000a743ba7304efcc9e384ece9be7631e2470e401e"); +pub const STORAGE_TWO: FixedBytes<32> = + fixed_bytes!("000000000000000000000000c917e98213a05d271adc5d93d2fee6c1f1006f75"); + +#[allow(clippy::declare_interior_mutable_const)] +pub const BURNTPIX_BYTECODE_ONE: Bytes = bytes!("60806040526004361015610011575f80fd5b5f3560e01c63d85fe4b414610024575f80fd5b346100925760603660031901126100925767ffffffffffffffff60043581811161009257366023820112156100925780600401359182116100925736602483830101116100925761008e9161008291604435916024803592016103ee565b604051918291826100b7565b0390f35b5f80fd5b5f5b8381106100a75750505f910152565b8181015183820152602001610098565b604091602082526100d78151809281602086015260208686019101610096565b601f01601f1916010190565b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761011357604052565b6100e3565b90601f8019910116810190811067ffffffffffffffff82111761011357604052565b67ffffffffffffffff811161011357601f01601f191660200190565b60405190610163826100f7565b60208083523683820137565b906101798261013a565b6101866040519182610118565b8281528092610197601f199161013a565b0190602036910137565b604051906060820182811067ffffffffffffffff82111761011357604052603c82527f74683d22313522206865696768743d223135222072783d2232222f3e000000006040837f3c726563742069643d22702220783d222d31352220793d222d3135222077696460208201520152565b9061022460209282815194859201610096565b0190565b60206102699193929360405194816102498793518092868087019101610096565b820161025d82518093868085019101610096565b01038085520183610118565b565b60405190610278826100f7565b601082526f181899199a1a9b1b9c1cb0b131b232b360811b6020830152565b634e487b7160e01b5f52603260045260245ffd5b908210156102b7570190565b610297565b9081518110156102b7570160200190565b9693909897949195929560405199888b9951908160208c0191602001916102f392610096565b8901711e3ab9b290343932b31e9111b811103c1e9160711b60208201528151918260328301916020019161032692610096565b016411103c9e9160d91b603282015260370161034191610211565b68222066696c6c3d222360b81b8152956001600160f81b03191660098701526001600160f81b031916600a8601526001600160f81b031916600b8501526001600160f81b031916600c8401526001600160f81b031916600d8301526001600160f81b031916600e8201526211179f60e91b600f82015203600d19810183526012016102699083610118565b604051906103d9826100f7565b60068252651e17b9bb339f60d11b6020830152565b91909161040361011c6036868502020161016f565b9361042b61042261041483866105a2565b61041c6101a1565b90610228565b602087016106fd565b93909461043661026b565b5f94859160105b86881061047957505050505050505061047692916104606104669261041c6103cc565b906106fd565b90829003601f1901825290610228565b90565b5f60105b87821061049457505060106001910197019661043d565b949a90998b6104a48189886102ab565b3560f81c6104b6600183018a896102ab565b3560f81c916104c9906002018a896102ab565b3560f81c906104d78961079c565b926104e18761079c565b600492600f91826104f683871c82168d6102bc565b516001600160f81b031916921661050d908c6102bc565b516001600160f81b0319169280878d8261052b898b1c8216836102bc565b516001600160f81b0319169816610541916102bc565b516001600160f81b031916971c16610559908d6102bc565b516001600160f81b0319169616610570908c6102bc565b516001600160f81b03191696610585986102cd565b61058e916106fd565b99909a60030194601001906001019061047d565b601960016104769260041b01926106cb60016105bd8661079c565b9260041b01600a6106b66105e26105dc6105d68561079c565b9961079c565b9361079c565b92607f604051998a977f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323060208a01527f30302f737667222076657273696f6e3d22312e31222076696577426f783d223060408a01526201018160ed1b60608a015261065781518092602060638d019101610096565b8801600160fd1b6063820152610677825180936020606485019101610096565b0161111f60f11b60648201526106af606682017f3c7265637420783d22302220793d2230222077696474683d22000000000000009052565b0190610211565b6911103432b4b3b43a1e9160b11b81526106af565b7f222072783d2233222066696c6c3d2223323032303230222f3e00000000000000815203600619810184520182610118565b91909160208084018451918260051c905f5b82811061076b5750505050601f1916808451039061072c8261016f565b945f5b83811061073e57505050509190565b6001906001600160f81b0319610756858301856102bc565b51165f1a610764828a6102bc565b530161072f565b83518652948101949281019260010161070f565b6040519061078c826100f7565b60018252600360fc1b6020830152565b8015610832576107aa610156565b90805f915b61080357506107bd8161016f565b915f5b8281106107cd5750505090565b6001906107f06107e28286035f1901856102bc565b516001600160f81b03191690565b5f1a6107fc82876102bc565b53016107c0565b90600a80830692048161082c6001839492019460ff60f81b9060300160f81b165f1a91866102bc565b536107af565b5061047661077f56fea26469706673582212202620cded94f0cf54cc3df219c4b7a2d33ca1cff9b87da504fdd707bc8b7d38e464736f6c63430008170033"); +#[allow(clippy::declare_interior_mutable_const)] +pub const BURNTPIX_BYTECODE_TWO: Bytes = bytes!("608060408181526004918236101562000016575f80fd5b5f925f3560e01c91826318a87fb6146200051a575081638c72c54e14620004f0578163a4de9ab4146200007f575063ab5fb7961462000053575f80fd5b346200007b57816003193601126200007b57905490516001600160a01b039091168152602090f35b5080fd5b828434620004d05781600319360112620004d05782359063ffffffff8216809203620004d0576024908351946103f19586810167ffffffffffffffff9782821089831117620004de57908291620005af833903905ff0918215620004d4575f546001600160a01b0393841695908416863b15620004d0578751906302b41d8760e51b8252848201525f818781838b5af18015620004c657620004b0575b508360015416863b15620003665787519063218d3ebf60e01b82528482015282818781838b5af18015620003925790839162000498575b50508360025416863b156200036657875190632b18342560e01b82528482015282818781838b5af18015620003925790839162000480575b505086516151df808201908282108b831117620004485789918391620009a083398581526020998a82015203019083f080156200047657841690813b15620003665787519063d35e29d760e01b8252338583015286820152828160448183865af1801562000392579083916200045e575b505086516351d930f960e11b8152338482015282818781855afa90811562000392578391620003ae575b508051156200039c5786015190803b15620003665782809160448a518094819363ea25558360e01b8352878a8401528b358c8401525af1801562000392579083916200037a575b5090838851809681936303cf32ab60e61b8352165afa9384156200036e578194620002c3575b8651868152855181880181905288908290620002b5818385018b8d016200053f565b601f01601f19168101030190f35b90919293503d8083863e620002d981866200058b565b840193858186031262000366578051908882116200036a57019284601f85011215620003665783519788116200035557505084519262000323601f8801601f19168601856200058b565b868452848784010111620003525750620002b59462000348918480850191016200053f565b8480808062000293565b80fd5b634e487b7160e01b83526041905281fd5b8280fd5b8380fd5b508551903d90823e3d90fd5b620003859062000562565b6200007b5781896200026d565b88513d85823e3d90fd5b634e487b7160e01b8352603284528583fd5b90503d8084833e620003c181836200058b565b81019087818303126200036a578051908a82116200045a57019080601f830112156200036a578151918a831162000448578260051b908a5193620004088b8401866200058b565b84528980850192820101928311620004445789809101915b8383106200043357505050508962000226565b82518152918101918a910162000420565b8580fd5b634e487b7160e01b8552604186528785fd5b8480fd5b620004699062000562565b6200007b578189620001fc565b87513d84823e3d90fd5b6200048b9062000562565b6200007b5781896200018b565b620004a39062000562565b6200007b57818962000153565b620004bd91925062000562565b5f90886200011c565b88513d5f823e3d90fd5b5f80fd5b85513d5f823e3d90fd5b85604185634e487b7160e01b5f52525ffd5b8234620004d0575f366003190112620004d05760025490516001600160a01b039091168152602090f35b34620004d0575f366003190112620004d0576001546001600160a01b03168152602090f35b5f5b838110620005515750505f910152565b818101518382015260200162000541565b67ffffffffffffffff81116200057757604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff821117620005775760405256fe6080806040523461005a575f8054336001600160a01b0319821681178355916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3610392908161005f8239f35b5f80fdfe60808060405260049081361015610014575f80fd5b5f3560e01c90816318a87fb6146102e257508063218d3ebf1461029e5780632b1834251461025a5780635683b0e014610216578063715018a6146101bf5780638c72c54e146101975780638da5cb5b14610170578063ab5fb796146101485763f2fde38b14610081575f80fd5b34610144576020366003190112610144576001600160a01b0381358181169290839003610144576100b0610305565b82156100f157505f54826001600160601b0360a01b8216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b60849060206040519162461bcd60e51b8352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b5f80fd5b34610144575f366003190112610144576001546040516001600160a01b039091168152602090f35b34610144575f366003190112610144575f546040516001600160a01b039091168152602090f35b34610144575f366003190112610144576003546040516001600160a01b039091168152602090f35b34610144575f366003190112610144576101d7610305565b5f80546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b503461014457602036600319011261014457356001600160a01b0381169081900361014457610243610305565b6001600160601b0360a01b60015416176001555f80f35b503461014457602036600319011261014457356001600160a01b0381169081900361014457610287610305565b6001600160601b0360a01b60035416176003555f80f35b503461014457602036600319011261014457356001600160a01b03811690819003610144576102cb610305565b6001600160601b0360a01b60025416176002555f80f35b34610144575f366003190112610144576002546001600160a01b03168152602090f35b5f546001600160a01b0316330361031857565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fdfea2646970667358221220fe8ff964d09f9b014997308dd60006e6d4f5b368483a50e476a998f6c718631b64736f6c634300081700336080346200100457601f620051df38819003918201601f19168301916001600160401b038311848410176200100857808492604094855283398101031262001004576200005a6020620000528362001038565b920162001038565b90604051916200006a836200101c565b6009835268084eae4dce840a0d2f60bb1b60208401526040516200008e816200101c565b60049384825263084a092b60e31b6020830152331562000ff3575f546001600160a01b0381163381900362000fb6575b5050604051620000ce816200101c565b858152632936598960e21b60208201527feafec4d89fa9619884b60000a4d96624a38f7ac2d8d9a604ecf07c12c77e480c90815f52600160205260405f20815160018060401b03811162000fa3578154600181811c9116801562000f98575b602082101462000f8557601f811162000f3b575b506020601f821160011462000eda5791815f80516020620051bf833981519152949262000190945f91620008a7575b508160011b915f199060031b1c19161790555b604051918291826200104d565b0390a25f805160206200511f8339815191525f52600160205280517f2a367ae1ac46d529739aa27ac74856f860e70af05d3642d18ba60fd5d32a069a906001600160401b03811162000ec7578154600181811c9116801562000ebc575b602082101462000ea957601f811162000e5f575b506020601f821160011462000ded57925f80516020620051bf83398151915292826200025d935f805160206200511f833981519152965f91620008a757508160011b915f199060031b1c1916179055604051918291826200104d565b0390a25f805160206200517f8339815191525f52600160205280517f83b322886c7b7e25779e5d38e06e005c9e7aba1e1267ce9210cf24e31833535a906001600160401b03811162000c50578154600181811c9116801562000de2575b602082101462000c3257601f811162000d98575b506020601f821160011462000d2657925f80516020620051bf83398151915292826200032a935f805160206200517f833981519152965f91620008a757508160011b915f199060031b1c1916179055604051918291826200104d565b0390a2604051600260208201526020815262000346816200101c565b5f805160206200513f8339815191525f52600160205280517ff73b01b344a9bb3b96525b0cb731f6b14cde20ce6cecea8459266944490b411f906001600160401b03811162000c50578154600181811c9116801562000d1b575b602082101462000c3257601f811162000cd5575b506020601f821160011462000c6357925f80516020620051bf833981519152928262000410935f805160206200513f833981519152965f91620008a757508160011b915f199060031b1c1916179055604051918291826200104d565b0390a260405160026020820152602081526200042c816200101c565b5f805160206200515f8339815191525f52600160205280517f01f5eb934e794ddcc86b89a579078013860f8fe92140885511742594f219ad0b906001600160401b03811162000c50578154600181811c9116801562000c45575b602082101462000c3257601f811162000bec575b506020601f821160011462000b7a57925f80516020620051bf8339815191529282620004f6935f805160206200515f833981519152965f91620008a757508160011b915f199060031b1c1916179055604051918291826200104d565b0390a260098054610100600160a81b03191660089290921b610100600160a81b03169190911790556040516200052c816200101c565b60108152600160801b6020808301919091525f805160206200519f8339815191525f526001905280517fde5f0adbf2cf136848982dd95860bdc3e6d8709a8a51ce1295c645c6da617db7906001600160401b03811162000aa4578154600181811c9116801562000b6f575b602082101462000a8657601f811162000b29575b506020601f821160011462000ab757925f80516020620051bf833981519152928262000607935f805160206200519f833981519152965f91620008a757508160011b915f199060031b1c1916179055604051918291826200104d565b0390a2604051606082901b6001600160601b03191660208201526014815262000630816200101c565b6f0452f40ece91b521d65a03607aecad0560821b5f52600160205280517fadf994b8d5b80a46660e628eabff2156c328d301fe5ea8e44cf09dee1b43e512906001600160401b03811162000aa4578154600181811c9116801562000a99575b602082101462000a8657601f811162000a40575b50806020601f8211600114620009d8575f91620009cc575b508160011b915f199060031b1c19161790555b5f80516020620051bf83398151915260405180620007016f0452f40ece91b521d65a03607aecad0560821b94826200104d565b0390a260405169036f42f57aecc15a72ed60b51b60208083019182525f602a84015260609390931b6001600160601b031916602c83015291815262000746816200101c565b5190519060208110620009ba575b5060405162000763816200101c565b601481526324871b3d60e01b60208201525f805160206200515f8339815191528214620009a9575f805160206200511f8339815191528203620007b1576040516385c169bd60e01b81528390fd5b5f805160206200517f8339815191528203620007d857604051630eceab6760e31b81528390fd5b5f805160206200513f8339815191528203620007ff57604051634ef6d7fb60e01b81528390fd5b5f8281526001602052604090208151936001600160401b0385116200099657815490600182811c921680156200098b575b6020831014620009785750601f81116200092e575b50602093601f8111600114620008b35790816200089493925f80516020620051bf83398151915295965f91620008a757508160011b915f199060031b1c1916179055604051918291826200104d565b0390a26040516140889081620010978239f35b90508301515f62000170565b601f198116825f5260205f20905f5b818110620009155750916001915f80516020620051bf8339815191529697826200089497969510620008fc575b5050811b01905562000183565b8501515f1960f88460031b161c191690555f80620008ef565b85880151835560209788019760019093019201620008c2565b815f5260205f20601f860160051c810191602087106200096d575b601f0160051c01905b81811062000961575062000845565b5f815560010162000952565b909150819062000949565b602290634e487b7160e01b5f525260245ffd5b91607f169162000830565b604190634e487b7160e01b5f525260245ffd5b604051631b32400560e11b81528390fd5b5f199060200360031b1b165f62000754565b90508301515f620006bb565b9150825f5260205f205f925b601f198316841062000a27576001935082601f1981161062000a0e575b5050811b019055620006ce565b8501515f1960f88460031b161c191690555f8062000a01565b85810151825560209384019360019092019101620009e4565b825f5260205f20601f830160051c81016020841062000a7e575b601f830160051c8201811062000a72575050620006a3565b5f815560010162000a5a565b508062000a5a565b602286634e487b7160e01b5f525260245ffd5b90607f16906200068f565b604185634e487b7160e01b5f525260245ffd5b825f5260205f20905f5b601f198416811062000b105750926001835f805160206200519f83398151915296935f80516020620051bf833981519152966200060796601f19811610620008fc575050811b01905562000183565b9091602060018192858901518155019301910162000ac1565b825f5260205f20601f830160051c81016020841062000b67575b601f830160051c8201811062000b5b575050620005ab565b5f815560010162000b43565b508062000b43565b90607f169062000597565b825f5260205f20905f5b601f198416811062000bd35750926001835f805160206200515f83398151915296935f80516020620051bf83398151915296620004f696601f19811610620008fc575050811b01905562000183565b9091602060018192858901518155019301910162000b84565b825f5260205f20601f830160051c81016020841062000c2a575b601f830160051c8201811062000c1e5750506200049a565b5f815560010162000c06565b508062000c06565b602287634e487b7160e01b5f525260245ffd5b90607f169062000486565b604186634e487b7160e01b5f525260245ffd5b825f5260205f20905f5b601f198416811062000cbc5750926001835f805160206200513f83398151915296935f80516020620051bf833981519152966200041096601f19811610620008fc575050811b01905562000183565b9091602060018192858901518155019301910162000c6d565b825f5260205f20601f830160051c81016020841062000d13575b601f830160051c8201811062000d07575050620003b4565b5f815560010162000cef565b508062000cef565b90607f1690620003a0565b825f5260205f20905f5b601f198416811062000d7f5750926001835f805160206200517f83398151915296935f80516020620051bf833981519152966200032a96601f19811610620008fc575050811b01905562000183565b9091602060018192858901518155019301910162000d30565b825f5260205f20601f830160051c8101916020841062000dd7575b601f0160051c01905b81811062000dcb5750620002ce565b5f815560010162000dbc565b909150819062000db3565b90607f1690620002ba565b825f5260205f20905f5b601f198416811062000e465750926001835f805160206200511f83398151915296935f80516020620051bf833981519152966200025d96601f19811610620008fc575050811b01905562000183565b9091602060018192858901518155019301910162000df7565b825f5260205f20601f830160051c8101916020841062000e9e575b601f0160051c01905b81811062000e92575062000201565b5f815560010162000e83565b909150819062000e7a565b602288634e487b7160e01b5f525260245ffd5b90607f1690620001ed565b604187634e487b7160e01b5f525260245ffd5b601f19821690835f5260205f20915f5b81811062000f22575092620001909492600192825f80516020620051bf833981519152989610620008fc575050811b01905562000183565b9192602060018192868a01518155019401920162000eea565b825f5260205f20601f830160051c8101916020841062000f7a575b601f0160051c01905b81811062000f6e575062000141565b5f815560010162000f5f565b909150819062000f56565b60228a634e487b7160e01b5f525260245ffd5b90607f16906200012d565b604189634e487b7160e01b5f525260245ffd5b33907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a36001600160a01b03191633175f90815580620000be565b6040516306b620db60e21b81528590fd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b604081019081106001600160401b038211176200100857604052565b51906001600160a01b03821682036200100457565b602080825282518183018190529093925f5b8281106200108157505060409293505f838284010152601f8019910116010190565b8181018601518482016040015285016200105f56fe608060405260043610156200002f575b361562000029576200002136620020df565b602081519101f35b620020a1565b5f3560e01c806301ffc9a7146200027f57806302329a29146200027957806316e023b3146200027357806318160ddd146200026d5780631d26fce61462000267578063217b227014620002615780632a3654a4146200025b578063382bf015146200025557806340339a1e146200024f57806348d0528a146200024957806349a6078d1462000243578063511b6952146200023d57806354f6127f14620002375780635c975abb14620002315780636963d438146200022b57806370a082311462000225578063715018a6146200021f578063723a213014620002195780637e87632c14620002135780637f23690c146200020d57806386a10ddd14620002075780638da5cb5b146200020157806392a91a3a14620001fb5780639790242114620001f5578063a3b261f214620001ef578063be9f0e6f14620001e9578063c9d658f014620001e3578063d35e29d714620001dd578063d6c1407c14620001d7578063db8c966314620001d1578063dedff9c614620001cb578063ea25558314620001c55763f2fde38b036200000f5762001715565b620016f2565b62001659565b62001579565b6200152a565b62001405565b620012f5565b620011ec565b62001180565b620010a9565b6200107d565b62001054565b62000eca565b62000e6b565b62000dbf565b62000c20565b62000bbc565b62000b80565b62000b11565b62000aed565b62000ac9565b62000a63565b62000974565b620008ec565b620008a9565b62000776565b62000720565b620006a7565b620005e2565b62000438565b620003f1565b62000354565b346200034057602036600319011262000340576004356001600160e01b031981168082036200034057620002dc91631d138b8360e11b8214918215620002f3575b508115620002e0575b5060405190151581529081906020820190565b0390f35b620002ec91506200212c565b5f620002c9565b90915063a918fa6b60e01b811490811562000312575b50905f620002c0565b6318a6a9a560e21b8114915081156200032e575b505f62000309565b6301ffc9a760e01b1490505f62000326565b5f80fd5b6044359081151582036200034057565b3462000340576020366003190112620003405760043580151580910362000340576200037f620021e6565b60ff8019600954169116176009555f80f35b5f5b838110620003a35750505f910152565b818101518382015260200162000393565b90602091620003cf8151809281855285808601910162000391565b601f01601f1916010190565b906020620003ee928181520190620003b4565b90565b34620003405760403660031901126200034057620002dc620004186024356004356200227a565b604051918291602083526020830190620003b4565b5f9103126200034057565b3462000340575f36600319011262000340576020600254604051908152f35b634e487b7160e01b5f52604160045260245ffd5b6001600160401b0381116200047f57604052565b62000457565b602081019081106001600160401b038211176200047f57604052565b604081019081106001600160401b038211176200047f57604052565b606081019081106001600160401b038211176200047f57604052565b90601f801991011681019081106001600160401b038211176200047f57604052565b6001600160401b0381116200047f5760051b60200190565b9080601f83011215620003405760209082356200053081620004fb565b93620005406040519586620004d9565b81855260208086019260051b8201019283116200034057602001905b8282106200056b575050505090565b813581529083019083016200055c565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b848310620005b15750505050505090565b9091929394958480620005d1600193603f198682030187528a51620003b4565b9801930193019194939290620005a0565b346200034057604036600319011262000340576001600160401b0360043581811162000340576200061890369060040162000513565b9060243590811162000340576200063490369060040162000513565b90620006418151620017a5565b915f5b82518110156200069757806200067662000661600193866200180a565b516200066e83866200180a565b51906200227a565b6200068282876200180a565b526200068f81866200180a565b500162000644565b60405180620002dc86826200057b565b346200034057602036600319011262000340576020620006c960043562001825565b6040516001600160a01b039091168152f35b600435906001600160a01b03821682036200034057565b604435906001600160a01b03821682036200034057565b602435906001600160a01b03821682036200034057565b3462000340576040366003190112620003405760206200075862000743620006db565b602435906200075282620022f7565b62002317565b6040519015158152f35b6024359063ffffffff821682036200034057565b3462000340576060366003190112620003405762000793620006db565b6200079d62000762565b90620007a8620006f2565b90620007b3620021e6565b600160ff60095416151503620003405763ffffffff8084165f908152600b6020526040902054620008a7946001600160a01b039262000894926200082a91906200080490869081165b161562001868565b6001600160a01b0387165f908152600c602052604090205463ffffffff161615620018b5565b6200086785620008488363ffffffff165f52600b60205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b0385165f908152600c602052604090205b9063ffffffff1663ffffffff19825416179055565b6200089e62001902565b921690620024a0565b005b3462000340576020366003190112620003405760043563ffffffff811680910362000340575f52600b602052602060018060a01b0360405f205416604051908152f35b346200034057602036600319011262000340576001600160a01b0362000911620006db565b165f52600c602052602063ffffffff60405f205416604051908152f35b60209060206040818301928281528551809452019301915f5b82811062000956575050505090565b83516001600160a01b03168552938101939281019260010162000947565b34620003405760208060031936011262000340576004356200099681620022f7565b5f52600560205260405f20906040519081602084549182815201935f5260205f20915f905b828210620009e357620002dc85620009d681890382620004d9565b604051918291826200092e565b835486529485019460019384019390910190620009bb565b6001600160401b0381116200047f57601f01601f191660200190565b81601f82011215620003405780359062000a3182620009fb565b9262000a416040519485620004d9565b828452602083830101116200034057815f926020809301838601378301015290565b34620003405760a0366003190112620003405762000a80620006db565b62000a8a62000709565b60643580151581036200034057608435926001600160401b038411620003405762000abe620008a794369060040162000a17565b926044359162001916565b34620003405760203660031901126200034057620002dc62000418600435620025a7565b3462000340575f3660031901126200034057602060ff600954166040519015158152f35b346200034057602036600319011262000340576001600160401b036004358181116200034057366023820112156200034057806004013591821162000340573660248360051b830101116200034057620002dc91602462000b73920162001b50565b604051918291826200057b565b346200034057602036600319011262000340576001600160a01b0362000ba5620006db565b165f526004602052602060405f2054604051908152f35b3462000340575f366003190112620003405762000bd8620021e6565b5f546001600160a01b0381168062000bec57005b5f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a36001600160a01b0319165f55005b3462000340575f3660031901126200034057600a546040516001600160a01b039091168152602090f35b9080601f830112156200034057602090823562000c6781620004fb565b9362000c776040519586620004d9565b81855260208086019260051b8201019283116200034057602001905b82821062000ca2575050505090565b81356001600160a01b03811681036200034057815290830190830162000c93565b9080601f830112156200034057602090823562000ce081620004fb565b9362000cf06040519586620004d9565b81855260208086019260051b8201019283116200034057602001905b82821062000d1b575050505090565b813580151581036200034057815290830190830162000d0c565b81601f82011215620003405780359160209162000d5284620004fb565b9362000d626040519586620004d9565b808552838086019160051b830101928084116200034057848301915b84831062000d8f5750505050505090565b82356001600160401b0381116200034057869162000db38484809489010162000a17565b81520192019162000d7e565b34620003405760a0366003190112620003405760046001600160401b038135818111620003405762000df5903690840162000c4a565b90602435818111620003405762000e10903690850162000c4a565b604435828111620003405762000e2a903690860162000513565b90606435838111620003405762000e45903690870162000cc3565b926084359081116200034057620008a79562000e649136910162000d35565b9362001bfa565b604036600319011262000340576024356001600160401b038111620003405762000e9a90369060040162000a17565b62000ea4620021e6565b3462000eb857620008a790600435620026e3565b60405163f36ba73760e01b8152600490fd5b3462000340576060366003190112620003405762000ee7620006db565b602435906044356001600160401b038111620003405762000f0d90369060040162000a17565b9062000f198362001825565b6001600160a01b0381811691338303620010245750821680156200101257808214620010005762000f6562000f618462000f5b885f52600560205260405f2090565b62002822565b1590565b62000fd457938062000fce92620008a7967f1b1b58aa2ec0cec2228b2d37124556d41f5a1f7b12f089171f896cc2366712156040518062000fa78a82620003db565b0390a462000fbf604051948592336020850162001ce1565b03601f198101845283620004d9565b62003340565b6040516314ec4d6d60e31b81526001600160a01b038416600482015260248101869052604490fd5b0390fd5b6040516344fed6b160e11b8152600490fd5b604051639577b8b360e01b8152600490fd5b604051632d938f5160e11b81526001600160a01b0391909116600482015260248101869052336044820152606490fd5b3462000340575f36600319011262000340575f546040516001600160a01b039091168152602090f35b346200034057602036600319011262000340576004355f526007602052602060405f2054604051908152f35b6040366003190112620003405760046001600160401b0381358181116200034057620010d9903690840162000513565b906024359081116200034057620010f4903690840162000d35565b91620010ff620021e6565b346200117157815183510362001162578151156200115357505f5b8151811015620008a757806200114c62001137600193856200180a565b516200114483876200180a565b5190620026e3565b016200111a565b6040516397da5f9560e01b8152fd5b604051633bcc897960e01b8152fd5b60405163f36ba73760e01b8152fd5b3462000340576020806003193601126200034057620011a8620011a2620006db565b62001d3a565b90604051918183928301818452825180915281604085019301915f5b828110620011d457505050500390f35b835185528695509381019392810192600101620011c4565b3462000340576060366003190112620003405760046001600160401b038135818111620003405762001222903690840162000513565b60243582811162000340576200123c903690850162000513565b91604435908111620003405762001257903690850162000d35565b9262001262620021e6565b8151835180911490811591620012e8575b50620012d957815115620012ca57505f5b8151811015620008a75780620012c3620012a1600193856200180a565b51620012ae83876200180a565b51620012bb84896200180a565b5191620029bd565b0162001284565b6040516380c9830560e01b8152fd5b6040516317d38eff60e11b8152fd5b9050845114155f62001273565b3462000340576060366003190112620003405762001312620006db565b6200131c62000709565b906200138d6200132b620006f2565b9262001336620021e6565b6200135260016200134960095460ff1690565b15151462001860565b60018060a01b0380931692806200138262001375865f52600360205260405f2090565b546001600160a01b031690565b921691161462001860565b803b15620003405760405163ce5494bb60e01b81526001600160a01b039290921660048301525f8260248183855af1918215620013ff57620008a792620013e1575b50620013da62001902565b9062002b3b565b80620013f1620013f8926200046b565b806200042d565b5f620013cf565b62001d9f565b3462000340576040366003190112620003405762001422620006db565b6200142c62000762565b90600954916200144060ff84161562001860565b60018060a01b03926200146a84620007fc620013758563ffffffff165f52600b60205260405f2090565b60405190610b25808301918383106001600160401b038411176200047f578392620014c7926200352e853960089190911c87166001600160a01b0316815263ffffffff851660208201526040808201819052606082015260800190565b03905ff08015620013ff57620008a79362001519911691620014fc83620008488363ffffffff165f52600b60205260405f2090565b6001600160a01b0383165f908152600c602052604090206200087f565b6200152362001902565b91620024a0565b346200034057606036600319011262000340576044356001600160401b038111620003405762001563620008a791369060040162000a17565b6200156d620021e6565b602435600435620029bd565b3462000340576080366003190112620003405762001596620006db565b60243590620015a462000344565b906064356001600160401b0381116200034057620015c790369060040162000a17565b91620015d38462001825565b6001600160a01b03818116903382036200162b578416908115620010125714620010005783828662001606938662002ce4565b6200160d57005b62000fce620008a79362000fbf604051948592336020850162001d0e565b604051632d938f5160e11b81526001600160a01b038416600482015260248101889052336044820152606490fd5b346200034057602036600319011262000340576004356001600160401b03811162000340576200168e90369060040162000513565b6200169a8151620017a5565b905f5b8151811015620016e25780620016c1620016ba600193856200180a565b51620025a7565b620016cd82866200180a565b52620016da81856200180a565b50016200169d565b60405180620002dc85826200057b565b34620003405760403660031901126200034057620008a760243560043562001e28565b3462000340576020366003190112620003405762001732620006db565b6200173c620021e6565b6001600160a01b0390811690811562001793575f549081168083036200175e57005b82907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a36001600160a01b031916175f55005b6040516306b620db60e21b8152600490fd5b90620017b182620004fb565b620017c06040519182620004d9565b8281528092620017d3601f1991620004fb565b01905f5b828110620017e457505050565b806060602080938501015201620017d7565b634e487b7160e01b5f52603260045260245ffd5b80518210156200181f5760209160051b010190565b620017f6565b5f818152600360205260409020546001600160a01b031690811562001848575090565b60249060405190635747cd1b60e11b82526004820152fd5b156200034057565b156200187057565b60405162461bcd60e51b815260206004820152601860248201527f616c7265616479206f776e656420627920736f6d656f6e6500000000000000006044820152606490fd5b15620018bd57565b60405162461bcd60e51b815260206004820152601b60248201527f616c726561647920696e6a656374656420746f20736f6d656f6e6500000000006044820152606490fd5b60405190620019118262000485565b5f8252565b9392919262001926843362002317565b1562001aab576001600160a01b0382811695808216929183881462001a995783620019518862001825565b9182160362001a695750861562001a575762001a49868062001a559962001a4f966200198362000fbf9b8a8862002fbe565b6200198e8362001825565b506200199b838762003142565b6001600160a01b0386165f908152600460205260409020620019bf90849062003473565b506001600160a01b0389165f908152600460205260409020620019e4908490620032d3565b50620019fd8962000848855f52600360205260405f2090565b6040517fb333c813a7426a7a11e2b190cad52c44119421594b47f6f32ace6d8c7207b2bf908062001a318a8e3384620023c6565b0390a460405197889485928886336020870162002464565b620033a8565b620030b0565b565b6040516324ecef4d60e01b8152600490fd5b604051632d938f5160e11b81526001600160a01b0391821660048201526024810188905291166044820152606490fd5b604051635d67d6c160e01b8152600490fd5b604051631294d2a960e01b815260048101859052336024820152604490fd5b91908110156200181f5760051b81013590601e1981360301821215620003405701908135916001600160401b0383116200034057602001823603811362000340579190565b908092918237015f815290565b3d1562001b4b573d9062001b3082620009fb565b9162001b406040519384620004d9565b82523d5f602084013e565b606090565b91909162001b5e83620017a5565b925f5b81811062001b6e57505050565b5f8062001b7d83858762001aca565b6040939162001b9185518093819362001b0f565b0390305af49062001ba162001b1c565b911562001bce57509060019162001bb982886200180a565b5262001bc681876200180a565b500162001b61565b81519192911562001be157825160208401fd5b5163234eb81960e01b8152600481019190915260249150fd5b94939091928551938351851480159062001cd5575b801562001cc9575b801562001cbd575b62001cab575f5b85811062001c38575050505050509050565b8062001ca462001c5c62001c4f6001948c6200180a565b516001600160a01b031690565b62001c6c62001c4f848a6200180a565b62001c7884876200180a565b5162001c8f62001c89868a6200180a565b51151590565b9162001c9c868b6200180a565b519362001916565b0162001c26565b6040516393a8311960e01b8152600490fd5b50825185141562001c1f565b50815185141562001c17565b50805185141562001c0f565b620003ee939260809260018060a01b031682526020820152600160408201528160608201520190620003b4565b620003ee939260809260018060a01b0316825260208201525f60408201528160608201520190620003b4565b60018060a01b03165f526020600460205260405f209060405180928391602082549182815201915f5260205f20935f905b82821062001d8457505050620003ee92500382620004d9565b85548452600195860195879550938101939091019062001d6b565b6040513d5f823e3d90fd5b634e487b7160e01b5f52601160045260245ffd5b5f1981019190821162001dcd57565b62001daa565b811562001dde570690565b634e487b7160e01b5f52601260045260245ffd5b908160011b918083046002149015171562001dcd57565b906063820180921162001dcd57565b9081602091031262000340575190565b5f8181526003602052604090205490919062001e4f906001600160a01b0316151562001860565b6001600160a01b0382811692909190833b15620003405760405163116508a760e21b80825260048201849052915f82602481838a5af1908115620013ff5762001eac9262001375926200208a575b505f52600360205260405f2090565b5f546001600160a01b0316908480831691160362001fd5575b5050600a5462001ee691506001600160a01b03165b6001600160a01b031690565b161562001f5a576040516321ac695f60e11b808252602091908282600481875afa918215620013ff575f9262001fb1575b50600a54839062001f31906001600160a01b031662001eda565b9160046040518094819382525afa928315620013ff575f9362001f7b575b50501162001f5a5750565b600a80546001600160a01b0319166001600160a01b03909216919091179055565b62001fa0929350803d1062001fa9575b62001f978183620004d9565b81019062001e18565b905f8062001f4f565b503d62001f8b565b62001fcd919250833d851162001fa95762001f978183620004d9565b905f62001f17565b62001fe09062001d3a565b80511562001ec55762002036620020306200202962001eda62001eda62001eda62001c4f6200203d9762002022620020184362001dbe565b4082519062001dd3565b906200180a565b9462001df2565b62001e09565b6064900490565b823b1562000340576040519182526004820152905f908290602490829084905af18015620013ff5762002073575b808062001ec5565b80620013f162002083926200046b565b5f6200206b565b80620013f16200209a926200046b565b5f62001e9d565b3415620020ba576040516330fa4a2160e11b8152600490fd5b606460405163e5099ee360e01b815260206004820152600460248201525f6044820152fd5b60043610620020f357620003ee9062002db0565b6044604051809263e5099ee360e01b825260206004830152806024830152805f848401375f828201840152601f01601f19168101030190fd5b6200217862002172604051696773c5a04a6d4300884b60b11b60208201525f602a8201526301ffc9a760e01b602c820152602081526200216c81620004a1565b62003410565b6200322d565b805160148114159081620021db575b50620021b457620021989062002ea1565b60601c908115620021ae57620003ee9162002f39565b50505f90565b6040516342bfe79f60e01b81526020600482015290819062000ffc906024830190620003b4565b905015155f62002187565b5f546001600160a01b03163303620021fa57565b60405163bf1169c560e01b8152336004820152602490fd5b60208183031262000340578051906001600160401b03821162000340570181601f82011215620003405780516200224981620009fb565b92620022596040519485620004d9565b818452602082840101116200034057620003ee916020808501910162000391565b5f818152600360205260409020549091906001600160a01b03161562000340576040516354f6127f60e01b81526004810191909152905f90829060249082906001600160a01b03165afa908115620013ff575f91620022d7575090565b620003ee91503d805f833e620022ee8183620004d9565b81019062002212565b5f818152600360205260409020546001600160a01b031615620018485750565b6001600160a01b03806200232b8462001825565b1691169081149182156200233e57505090565b620003ee92505f52600560205260405f206001915f520160205260405f2054151590565b5f19811462001dcd5760010190565b6001600160a01b0390911681525f6020820152606060408201819052620003ee92910190620003b4565b6001600160a01b03909116815260016020820152606060408201819052620003ee92910190620003b4565b6001600160a01b0390911681529015156020820152606060408201819052620003ee92910190620003b4565b6001600160a01b0391821681525f602082015291166040820152606081019190915260a060808201819052620003ee92910190620003b4565b6001600160a01b039182168152911660208201525f6040820152606081019190915260a060808201819052620003ee92910190620003b4565b6001600160a01b03918216815291811660208301529091166040820152606081019190915260a060808201819052620003ee92910190620003b4565b909291906001600160a01b038116801562001a5757620024c1858362002f6c565b5f858152600360205260409020546001600160a01b03166200258e578462001a5594956200258892620024ff620024fa60025462002362565b600255565b6001600160a01b0385165f90815260046020526040902062002523908390620032d3565b506200253c8562000848845f52600360205260405f2090565b5f7fb333c813a7426a7a11e2b190cad52c44119421594b47f6f32ace6d8c7207b2bf604051806200256f8a33836200239b565b0390a462000fbf604051948592853360208601620023f2565b6200303f565b6040516334c7b51160e01b815260048101869052602490fd5b7f9afb95cacc9f95858ec44aa8c3b685511002e30ae54415823f406128b85b238e811462002684575f52600160206001815260405f206040519283915f91815491620025f38362002837565b80865292600181169081156200266057506001146200261e575b505050620003ee92500382620004d9565b5f90815285812095935091905b81831062002647575050620003ee93508201015f80806200260d565b855487840185015294850194869450918301916200262b565b92505050620003ee94925060ff191682840152151560051b8201015f80806200260d565b50600a546040516354f6127f60e01b81527fef285b02a4f711ad84793f73cc8ed6fea8af7013ece8132dacb7b33f6bce93da6004820152905f90829060249082906001600160a01b03165afa908115620013ff575f91620022d7575090565b907ff675e9361af1c1664c1868cfa3eb97672d6b1a513aa5b81dec34c9ee330e818d821462002810577fdeba1e292f8ba88238e10ab3c7f88bd4be4fac56cad5194b6ecceaf653468af1820362002746576040516385c169bd60e01b8152600490fd5b7f2f0a68ab07768e01943a599e73362a0e17a63a72e94dd2e384d2c1d4db93275682036200278057604051630eceab6760e31b8152600490fd5b7fe0261fa95db2eb3b5439bd033cda66d56b96f92f243a8228fd87550ed7bdfdb38203620027ba57604051634ef6d7fb60e01b8152600490fd5b6200280b81620027fe7fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b293620027f8865f52600160205260405f2090565b620028e4565b60405191829182620003db565b0390a2565b604051631b32400560e11b8152600490fd5b620003ee916001600160a01b031690620032d3565b90600182811c9216801562002867575b60208310146200285357565b634e487b7160e01b5f52602260045260245ffd5b91607f169162002847565b916200288c9183549060031b91821b915f19901b19161790565b9055565b601f82116200289e57505050565b5f5260205f20906020601f840160051c83019310620028d9575b601f0160051c01905b818110620028cd575050565b5f8155600101620028c1565b9091508190620028b8565b91909182516001600160401b0381116200047f57620029108162002909845462002837565b8462002890565b602080601f831160011462002951575081906200288c9394955f9262002945575b50508160011b915f199060031b1c19161790565b015190505f8062002931565b90601f1983169562002966855f5260205f2090565b925f905b888210620029a4575050836001959697106200298b575b505050811b019055565b01515f1960f88460031b161c191690555f808062002981565b806001859682949686015181550195019301906200296a565b9091604051602090602081019084825285604082015260408152620029e281620004bd565b5190205f5260018060205260405f20918351916001600160401b0383116200047f5762002a1c8362002a15865462002837565b8662002890565b602091601f841160011462002a965750509162002a76827fa6e4251f855f750545fe414f120db91c76b88def14d120969e5bb2d3f05debbb959362002a85955f9162002a8a575b508160011b915f199060031b1c19161790565b905560405191829182620003db565b0390a3565b90508401515f62002a63565b9190601f1984169062002aac865f5260205f2090565b935f915b83831062002b16575050509262002a859492600192827fa6e4251f855f750545fe414f120db91c76b88def14d120969e5bb2d3f05debbb98961062002afd575b5050811b019055620027fe565b8501515f1960f88460031b161c191690555f8062002af0565b88850151865594850194938101939181019162002ab0565b801562001dcd575f190190565b62001a5591906001600160a01b039062001a49908262002b5b8262001825565b161562002cb9575b5f62002ba162002b7560025462001dbe565b62002b88845f52600860205260405f2090565b5481811062002c76575b505f52600760205260405f2090565b555f81815260086020526040812055805f62002bbd8262001825565b9462002bcf620024fa60025462002b2e565b62002bdb838762003142565b6001600160a01b0386165f90815260046020526040902062002bff90849062003473565b5062002c2762002c17845f52600360205260405f2090565b80546001600160a01b0319169055565b7fb333c813a7426a7a11e2b190cad52c44119421594b47f6f32ace6d8c7207b2bf604051918716918062002c5d8a338362002371565b0390a462000fbf6040519485928533602086016200242b565b62002cb162002c8d835f52600760205260405f2090565b548062002ca2845f52600760205260405f2090565b555f52600860205260405f2090565b555f62002b92565b600254805f5260076020528160405f205562002cdd825f52600860205260405f2090565b5562002b63565b919392845f52600560205260405f209260018060a01b039062002d0b828216809662003473565b1562002d5d57509062002d587fc78cd419d6136f9f1c1c6aec1d3fae098cffaf8bc86314a8f2685e32fe574e3c9392604051938493151584526040602085015216956040830190620003b4565b0390a4565b6040516312a8c6a360e21b81526001600160a01b0391909116600482015260248101879052604490fd5b9060349391815f823701916bffffffffffffffffffffffff199060601b16825260148201520190565b63ffffffff60e01b5f35169062002df562002172604051696773c5a04a6d4300884b60b11b60208201525f602a82015284602c820152602081526200216c81620004a1565b80516014811415908162002e96575b50620021b45762002e159062002ea1565b60601c91821562002e7257505f91829160405162002e508162002e416020820194349033908762002d87565b03601f198101835282620004d9565b519134905af162002e6062001b1c565b901562002e6a5790565b602081519101fd5b60405163bb370b2b60e01b81526001600160e01b0319919091166004820152602490fd5b905015155f62002e04565b90602082519201516bffffffffffffffffffffffff1990818116936014811062002eca57505050565b60140360031b82901b16169150565b5f602091604051838101906301ffc9a760e01b8252631aed5a8560e21b60248201526024815262002f0a81620004bd565b5191617530fa5f513d8262002f2c575b508162002f25575090565b9050151590565b6020111591505f62002f1a565b5f90602092604051848101916301ffc9a760e01b835263ffffffff60e01b1660248201526024815262002f0a81620004bd565b600254805f5260076020528260405f205562002f90835f52600860205260405f2090565b556001600160a01b03161562002fa35750565b62002fbb5f918262002ca262002b7560025462001dbe565b55565b6001600160a01b03919082161562002fdb575b161562002fa35750565b600254805f5260076020528360405f205562002fff845f52600860205260405f2090565b5562002fd1565b906040620003ee927f0b084a55ebf70fd3c06fd755269dac2212c4d3f0f4d09079780bfa50c1b2984d81528160208201520190620003b4565b6200304a8162002ed9565b15620030ac57604051631aed5a8560e21b8152915f91839182908490829062003077906004830162003006565b03926001600160a01b03165af18015620013ff57620030935750565b620030a9903d805f833e620022ee8183620004d9565b50565b5050565b9190620030bd8362002ed9565b15620030e95750620030775f928392604051948580948193631aed5a8560e21b83526004830162003006565b905015620030f45750565b803b156200311f57604051634349776d60e01b81526001600160a01b03919091166004820152602490fd5b604051630317313760e01b81526001600160a01b03919091166004820152602490fd5b90805f526005906020926005602052604090815f20938454945f5b8681106200316f575050505050505050565b8154156200181f575f828152889020548551906001600160a01b0390811690620031998362000485565b5f8352885f52858b52620031b082895f2062003473565b1562003206579188917fc78cd419d6136f9f1c1c6aec1d3fae098cffaf8bc86314a8f2685e32fe574e3c898d620031fc6001989783519384935f85528401528c16958d830190620003b4565b0390a4016200315d565b87516312a8c6a360e21b81526001600160a01b0383166004820152602481018a9052604490fd5b5f52600160206001815260405f206040519283915f91815491620032518362002837565b80865292600181169081156200266057506001146200327b57505050620003ee92500382620004d9565b5f90815285812095935091905b818310620032a4575050620003ee93508201015f80806200260d565b8554878401850152948501948694509183019162003288565b80548210156200181f575f5260205f2001905f90565b5f828152600182016020526040902054620021ae57805490680100000000000000008210156200047f57826200332b62003315846001809601855584620032bd565b819391549060031b91821b915f19901b19161790565b90558054925f520160205260405f2055600190565b6200334b8162002ed9565b62003354575050565b620030775f92918392604051948580948193631aed5a8560e21b83527f8a1c15a8799f71b547e08e2bcb2e85257e81b0a07eee2ce6712549eef1f009706004840152604060248401526044830190620003b4565b620033b38162002ed9565b620033bc575050565b620030775f92918392604051948580948193631aed5a8560e21b83527fb23eae7e6d1564b295b4c3e3be402d9a2f0776c57bdf365903496f6fa481ab006004840152604060248401526044830190620003b4565b60208151910151906020811062003425575090565b5f199060200360031b1b1690565b80549081156200345f575f19918201916200344f8383620032bd565b909182549160031b1b1916905555565b634e487b7160e01b5f52603160045260245ffd5b6001810191805f528260205260405f2054928315155f1462003525575f19928484019085821162001dcd57805494850194851162001dcd575f958583620034c994620034d69803620034dc575b50505062003433565b905f5260205260405f2090565b55600190565b6200350d6200350691620034f56200351b9487620032bd565b90549060031b1c92839187620032bd565b9062002872565b85905f5260205260405f2090565b555f8080620034c0565b505050505f9056fe60806040908082523461011357608081610b2580380380916100218285610173565b8339810103126101135761003481610196565b60209160048382015192846060878501519401519160018060a01b03199033825f5416175f5560018060a01b0316809160015416176001558751938480926355afdbcb60e11b82525afa918215610169575f92610132575b508551928584019463466c6dc560e11b86526024850152604484015260648301526064825260a082019060018060401b039383831085841117610117575f938493885251915af4913d1561012b573d918211610117575f908451926100fa82601f19601f8401160185610173565b83523d92013e5b15610113575161097a90816101ab8239f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b5050610101565b9091508481813d8311610162575b61014a8183610173565b810103126101135761015b90610196565b905f61008c565b503d610140565b86513d5f823e3d90fd5b601f909101601f19168101906001600160401b0382119082101761011757604052565b51906001600160a01b03821682036101135756fe608060409080825260049081361015610016575f80fd5b5f3560e01c90816301ffc9a71461060457508063221a8729146105e65780634358d2be146105c85780634594229c146104e357806354f6127f146104b05780637b103999146104895780637f23690c146104555780639790242114610395578063c20db68914610377578063ce5494bb14610337578063dedff9c614610226578063e710563c146102085763f3ccaac0146100af575f80fd5b346101cd575f3660031901126101cd57600154825163463962a760e11b815260209290918391839182906001600160a01b03165afa9081156101fe575f91829182916101d1575b508451848101906354f6127f60e01b82527f2abb082c1b23ea79fce2a9e934ecb19ce15738b1483c365d0125f47e8ccc7dfc60248201526024815261013a8161069c565b51915af4916101476107e7565b92156101cd57825183019282818186019503126101cd57828101519067ffffffffffffffff82116101cd57019083603f830112156101cd57828201519161018d836106ee565b9461019a835196876106cc565b8386528284830101116101cd576101c9926101ba91838688019101610656565b51928284938452830190610677565b0390f35b5f80fd5b6101f19150843d86116101f7575b6101e981836106cc565b8101906107c8565b5f6100f6565b503d6101df565b83513d5f823e3d90fd5b82346101cd575f3660031901126101cd576020906012549051908152f35b50346101cd57602090816003193601126101cd5780359067ffffffffffffffff82116101cd5761025891369101610768565b9182519061027d61026883610750565b92610275835194856106cc565b808452610750565b601f1901835f5b828110610327575050505f5b84518110156102cb57806102af6102a96001938861091c565b51610816565b6102b9828661091c565b526102c4818561091c565b5001610290565b509250825191808301818452825180915281858501958260051b8601019301915f955b8287106102fb5785850386f35b909192938280610317600193603f198a82030186528851610677565b96019201960195929190926102ee565b6060828287010152018490610284565b50346101cd5760203660031901126101cd57356001600160a01b03818116918290036101cd575f5490811633036101cd576001600160a01b031916175f55005b82346101cd575f3660031901126101cd576020906013549051908152f35b5090806003193601126101cd5767ffffffffffffffff82358181116101cd576103c19036908501610768565b5060248035908282116101cd57366023830112156101cd57818501356103e681610750565b936103f3865195866106cc565b818552602460208096019260051b850101933685116101cd5760248101925b85841061042f5788883461042257005b5163f36ba73760e01b8152fd5b83358381116101cd57879161044a839288369187010161070a565b815201930192610412565b5090806003193601126101cd5760243567ffffffffffffffff81116101cd57610481903690840161070a565b503461042257005b82346101cd575f3660031901126101cd575f5490516001600160a01b039091168152602090f35b5090346101cd5760203660031901126101cd576104d06101c99235610816565b9051918291602083526020830190610677565b5090346101cd5760203660031901126101cd575f548235926001600160a01b03929091831633036101cd5760205a93600154168251938480926355afdbcb60e11b82525afa9182156105be57915f92918392839261059d575b5051602081019063116508a760e21b8252866024820152602481526105608161069c565b51915af461056c6107e7565b50156101cd575a916010540160105503806011540160115548810260125401601255483a0302601354016013555f80f35b6105b791925060203d6020116101f7576101e981836106cc565b905f61053c565b50513d5f823e3d90fd5b82346101cd575f3660031901126101cd576020906010549051908152f35b82346101cd575f3660031901126101cd576020906011549051908152f35b82346101cd5760203660031901126101cd57359063ffffffff60e01b82168092036101cd576020916301ffc9a760e01b8114908115610645575b5015158152f35b6318a6a9a560e21b1490508361063e565b5f5b8381106106675750505f910152565b8181015183820152602001610658565b9060209161069081518092818552858086019101610656565b601f01601f1916010190565b6060810190811067ffffffffffffffff8211176106b857604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176106b857604052565b67ffffffffffffffff81116106b857601f01601f191660200190565b81601f820112156101cd57803590610721826106ee565b9261072f60405194856106cc565b828452602083830101116101cd57815f926020809301838601378301015290565b67ffffffffffffffff81116106b85760051b60200190565b9080601f830112156101cd57602090823561078281610750565b9361079060405195866106cc565b81855260208086019260051b8201019283116101cd57602001905b8282106107b9575050505090565b813581529083019083016107ab565b908160209103126101cd57516001600160a01b03811681036101cd5790565b3d15610811573d906107f8826106ee565b9161080660405193846106cc565b82523d5f602084013e565b606090565b6001546040805163463962a760e11b815290926020928390839060049082906001600160a01b03165afa91821561091257915f9291839283926108f3575b508551858101916354f6127f60e01b83526024820152602481526108778161069c565b51915af4916108846107e7565b92156101cd57825183019282818186019503126101cd57828101519067ffffffffffffffff82116101cd570183603f820112156101cd5782810151916108c9836106ee565b946108d6825196876106cc565b8386528184840101116101cd576108f09385019101610656565b90565b61090b919250853d87116101f7576101e981836106cc565b905f610854565b84513d5f823e3d90fd5b80518210156109305760209160051b010190565b634e487b7160e01b5f52603260045260245ffdfea26469706673582212206c5c550fe4870b5c8de9ec4447e02e6de1853a7e6abc9bf7c2adcfb0811426f264736f6c63430008170033a2646970667358221220284f10fd0dc3415ffbddda3e3c1614081dd249040175886fa332e2b6d847ca5d64736f6c63430008170033deba1e292f8ba88238e10ab3c7f88bd4be4fac56cad5194b6ecceaf653468af1e0261fa95db2eb3b5439bd033cda66d56b96f92f243a8228fd87550ed7bdfdb3f675e9361af1c1664c1868cfa3eb97672d6b1a513aa5b81dec34c9ee330e818d2f0a68ab07768e01943a599e73362a0e17a63a72e94dd2e384d2c1d4db932756114bd03b3a46d48759680d81ebb2b414fda7d030a7105a851867accf1c2352e7ece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2a2646970667358221220193803e886292584245208d51558ce29840826ff8149c83648336d598b01be5c64736f6c63430008170033"); +#[allow(clippy::declare_interior_mutable_const)] +pub const BURNTPIX_BYTECODE_THREE: Bytes = bytes!("60806040526004361015610011575f80fd5b5f3560e01c6354f6127f14610024575f80fd5b3461005b57602036600319011261005b5761005761004360043561014b565b604051918291602083526020830190610080565b0390f35b5f80fd5b5f5b8381106100705750505f910152565b8181015183820152602001610061565b906020916100998151809281855285808601910161005f565b601f01601f1916010190565b6040810190811067ffffffffffffffff8211176100c157604052565b634e487b7160e01b5f52604160045260245ffd5b6060810190811067ffffffffffffffff8211176100c157604052565b6020810190811067ffffffffffffffff8211176100c157604052565b90601f8019910116810190811067ffffffffffffffff8211176100c157604052565b67ffffffffffffffff81116100c157601f01601f191660200190565b7f2abb082c1b23ea79fce2a9e934ecb19ce15738b1483c365d0125f47e8ccc7dfc8114610855577fef285b02a4f711ad84793f73cc8ed6fea8af7013ece8132dacb7b33f6bce93da81146106d5577f708e7b881795f2e6b6c2752108c177ec89248458de3bf69d0d43480b3e5034e6811461069f577feafec4d89fa9619884b60000a4d96624a38f7ac2d8d9a604ecf07c12c77e480c811461067e577fdeba1e292f8ba88238e10ab3c7f88bd4be4fac56cad5194b6ecceaf653468af18114610658577f2f0a68ab07768e01943a599e73362a0e17a63a72e94dd2e384d2c1d4db9327568114610637577fe0261fa95db2eb3b5439bd033cda66d56b96f92f243a8228fd87550ed7bdfdb3811461061f577f9afb95cacc9f95858ec44aa8c3b685511002e30ae54415823f406128b85b238e146102985760405161028e816100f1565b5f81525f36813790565b6102a06110e5565b805160208201206102af61085e565b906102b990610a2f565b6102c1610937565b926102cb90610af9565b6040516102d7816100a5565b6013815272227d5d5d2c2261747472696275746573223a5b60681b6020820190815260105461030590610c7c565b60115461031190610e26565b9060125461031e90610f13565b9260135461032b90610f13565b9460405196610339886100a5565b6003885260208801625d7d7d60e81b90526040519a8b9960208b019b8c81516020819301916103679261005f565b8b016020810161060f60f31b90528151918260228301916020019161038b9261005f565b01815191826022830191602001916103a29261005f565b01602281017f646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000905281519182603c830191602001916103e09261005f565b0190519182603c83016103f29261005f565b01603c81017f7b226b6579223a22497465726174696f6e73222c2274797065223a226e756d6290526b32b91116113b30b63ab2911d60a11b605c820152815191826068830191602001916104459261005f565b0160688101611f4b60f21b9052606a81017f7b226b6579223a2247617355736564222c2274797065223a22737472696e672290526916113b30b63ab2911d1160b11b608a820152815191826094830191602001916104a29261005f565b019062089f4b60ea1b91826094820152609781017f7b226b6579223a22466565734275726e74222c2274797065223a22737472696e90526b339116113b30b63ab2911d1160a11b60b78201528151918260c3830191602001916105049261005f565b019060c382015260c681017f7b226b6579223a225469707350616964222c2274797065223a22737472696e6790526a1116113b30b63ab2911d1160a91b60e68201528151918260f18301916020019161055c9261005f565b0161227d60f01b60f18201528151918260f38301916020019161057e9261005f565b010360d38101835260f301610593908361010d565b815181206040515f602082015263379abe3560e11b6022820152600160f51b602682015260288101919091527f646174613a6170706c69636174696f6e2f6a736f6e3b636861727365743d5554604882015263118b4e0b60e21b606882015291518291610606908290606c85019061005f565b810103604c81018252606c0161061c908261010d565b90565b50604051600260208201526020815261061c816100a5565b50604051610644816100a5565b6004815263084a092b60e31b602082015290565b50604051610665816100a5565b6009815268084eae4dce840a0d2f60bb1b602082015290565b5060405161068b816100a5565b60048152632936598960e21b602082015290565b505f546bffffffffffffffffffffffff19806040519260601b1660208301523060601b1660348201526034815261061c816100d5565b506106de6110e5565b8051602090818301206106ef61085e565b906106f990610a2f565b610701610937565b9361070b90610af9565b604051610717816100a5565b600681528481019165227d5d5d7d7d60d01b8352604051968794878087018881995192839101916107479261005f565b860188810161060f60f31b9052815191828a602284019201916107699261005f565b0181519182896022840192019161077f9261005f565b01602281017f646174613a696d6167652f7376672b786d6c3b6261736536342c00000000000090528151918288603c84019201916107bc9261005f565b0190519182603c83016107ce9261005f565b0103601c81018452603c016107e3908461010d565b825181209260405193849384015f90526022840163379abe3560e11b9052600160f51b60268501526028840152604883017f646174613a6170706c69636174696f6e2f6a736f6e3b636861727365743d555490526068830163118b4e0b60e21b9052519081606c84016106069261005f565b5061061c6110e5565b6040519060c0820182811067ffffffffffffffff8211176100c1576040908152609383527f7b224c5350344d65746164617461223a7b226c696e6b73223a5b7b2275726c2260208401527f3a2268747470733a2f2f6275726e747069782e636f6d227d5d2c22696d616765908301527f73223a5b5b7b227769647468223a3736382c22686569676874223a3736382c2260608301527f766572696669636174696f6e223a7b226d6574686f64223a226b656363616b326080830152721a9b14313cba32b9949116113230ba30911d1160691b60a0830152565b60405190610944826100a5565b600a825269113e96113ab936111d1160b11b6020830152565b9081602091031261005b57516001600160a01b038116810361005b5790565b3d156109a6573d9061098d8261012f565b9161099b604051938461010d565b82523d5f602084013e565b606090565b60208183031261005b5780519067ffffffffffffffff821161005b570181601f8201121561005b5780516109de8161012f565b926109ec604051948561010d565b8184526020828401011161005b5761061c916020808501910161005f565b908151811015610a1b570160200190565b634e487b7160e01b5f52603260045260245ffd5b6040805191610a3d836100a5565b601083526020926f181899199a1a9b1b9c1cb0b131b232b360811b6020820152604051610a69816100f1565b5f8152935f935b818510610a7f57505050505090565b9091929394600190610aee60228789601f0360031b1c9260ff60f81b610aba600f82610ab0828960041c168d610a0a565b511696168a610a0a565b51169386519482610ad487945180928c808801910161005f565b83019189830152602182015203600281018452018261010d565b950193929190610a70565b805115610c6957604051610b0c816100d5565b604081527f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208201527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f604082015281519160029260028101809111610c5557600390819004600281901b94906001600160fe1b03811603610c55579290610bad610b978661012f565b95610ba5604051978861010d565b80875261012f565b6020860190601f190136823793839284518501935b848110610c02575050505050600390510680600114610bf057600214610be6575090565b603d905f19015390565b50603d90815f19820153600119015390565b8360049197929394959701918251600190603f9082828260121c16880101518453828282600c1c16880101518385015382828260061c168801015188850153168501015186820153019593929190610bc2565b634e487b7160e01b5f52601160045260245ffd5b50604051610c76816100f1565b5f815290565b8015610d3d57604051610c8e816100a5565b6020815260203681830137815f925b610d0e5750610cab8261012f565b91610cb9604051938461010d565b808352601f19610cc88261012f565b013660208501375f5b818110610cde5750505090565b6001906001600160f81b0319610cf98285035f190186610a0a565b51165f1a610d078287610a0a565b5301610cd1565b91600a808406930481610d376001839492019560ff60f81b9060300160f81b165f1a9185610a0a565b53610c9d565b50604051610d4a816100a5565b60018152600360fc1b602082015290565b602190610dbf9294936040519582610d7d88945180926020808801910161005f565b8301601760f91b6020820152610d9c825180936020888501910161005f565b01610db0825180936020878501910161005f565b0103600181018552018361010d565b565b602290610dbf9294936040519582610de388945180926020808801910161005f565b83016102e360f41b6020820152610e03825180936020888501910161005f565b01610e17825180936020878501910161005f565b0103600281018552018361010d565b620f4240808210610f0957633b9aca0080831015610e9e5750604051610e4b816100a5565b60018152604d60f81b602082015290612710818406049204915b600a811015610e8957610e83610e7d61061c94610c7c565b91610c7c565b90610dc1565b610e98610e7d61061c94610c7c565b90610d5b565b905064e8d4a5100080831015610eda5750604051610ebb816100a5565b60018152602160f91b6020820152906298968081840604920491610e65565b9050604051610ee8816100a5565b60018152601560fa1b6020820152906402540be40081840604920491610e65565b5061061c90610c7c565b6103e88082106110a257620f424080831015610f695750604051610f36816100a5565b60048152634b57656960e01b602082015290600a81840604920491600a811015610e8957610e83610e7d61061c94610c7c565b9050633b9aca0080831015610fa65750604051610f85816100a5565b60048152634d57656960e01b60208201529061271081840604920491610e65565b905064e8d4a5100080831015610fe55750604051610fc3816100a5565b60048152634757656960e01b6020820152906298968081840604920491610e65565b905066038d7ea4c680008083101561102a5750604051611004816100a5565b60058152641856a98b2b60db1b60208201528183049290916402540be400910604610e65565b9050670de0b6b3a76400008083101561106f575060405161104a816100a5565b60048152630da98b2b60e31b6020820152906509184e72a00081840604920491610e65565b905060405161107d816100a5565b6003815262098b2b60eb1b602082015290662386f26fc1000081840604920491610e65565b506110ac90610c7c565b61061c6023604051836110c982955180926020808601910161005f565b81016257656960e81b602082015203600381018452018261010d565b600154604080516355afdbcb60e11b81526020926001600160a01b03919084908290600490829086165afa908115611258575f918291829161123b575b5084516303cf32ab60e61b8782019081526004825290611141816100a5565b51915af49161114e61097c565b921561005b57836111698482806004975183010191016109ab565b9260015416825194858092630c543fdb60e11b82525afa92831561123157915f939184938493611202575b506111df6003549160045490519283916111c68a840196633617f92d60e21b8852606060248601526084850190610080565b916044840152606483015203601f19810183528261010d565b51915afa6111eb61097c565b901561005b578161061c92825183010191016109ab565b611223919350863d881161122a575b61121b818361010d565b81019061095d565b915f611194565b503d611211565b50513d5f823e3d90fd5b6112529150863d881161122a5761121b818361010d565b5f611122565b83513d5f823e3d90fdfea2646970667358221220d754235277b87b31b8acce280204f2b5f322de96296361221743109844254a7c64736f6c63430008170033"); +#[allow(clippy::declare_interior_mutable_const)] +pub const BURNTPIX_BYTECODE_FOUR: Bytes = bytes!("60806040526004361015610011575f80fd5b5f3560e01c80634594229c146106865780638cd8db8a146100b15763f3ccaac01461003a575f80fd5b346100ad575f3660031901126100ad57610052610ac3565b604092919251928391606083528351918260608501525f5b8381106100955750608094505f85848601015260208401526040830152601f80199101168101030190f35b6020868201810151608089840101528795500161006a565b5f80fd5b346100ad5760603660031901126100ad576001546004359060443590602435906001600160a01b0316156100ad578060035581600455026101056100fc6100f78361094c565b6108e0565b9180835261094c565b602082019190601f19013683375167ffffffffffffffff918282116105e757600160401b82116105e75760055482600555808310610646575b5060055f525f5b828110610612575050604051916080830191508111828210176105e757604052600381525f5b606081106105fb5750805190600160401b82116105e757600a5482600a55808310610554575b50602001600a5f525f80516020611a418339815191525f915b83831061053657845f620f424060011d620f4240806101d1620f423f198460011b01611a34565b810302055b600383106103b457600a54846101ee6100f78361094c565b9180835260208301600a5f525f80516020611a418339815191525f915b83831061033957858561021c610906565b5f5b83601482106103245750506102316108bf565b60c89060c881526119008036602084013761024a6108bf565b9060c882523660208301375f60208501935b8082106102f357505060809495506102738261178d565b61027c8161178d565b61028f61028883610a60565b5192610a71565b5161029c61028883610a60565b519280820383850381136102db575b506006556007556008556009558151600b5551600c556040810151600d556060810151600e550151600f55600255005b939290920160011d9260011d808401930391886102ab565b90956103028689600193610cab565b96865161030f8287610a82565b52855161031c8286610a82565b52019061025c565b826103329160019395610cab565b920161021e565b600a602060019261034861089e565b855481528486015483820152600286015460408201526003860154606082015260048601546080820152600586015460a0820152600686015460c0820152600786015460e08201526008860154610100820152600986015461012082015281520192019201919061020b565b9091926103bf6109b7565b5061040f6104056103fb6103f16103e76103e06103da6109b7565b96611a0d565b8752611a0d565b6020870152611a0d565b6040860152611a0d565b6060850152611a0d565b6080840152611a0d565b60a0830152600160401b6001675851f42d4c957f2d92830208916101688360201c07603c90620f4240610450620f423f19621e848085848602050701611a34565b8103870205918112156104e9575084905f5b60028705880390810161010085015290810160e08401520160c0820152601a600160401b60018486020860201c06610120820152600a548610156104d557600192600160401b926104ca8593600a5f52600a8a025f80516020611a41833981519152016109fd565b0208930191906101d6565b634e487b7160e01b5f52603260045260245ffd5b60788112156104fa5750845f610462565b60b481121561050c5750845f91610462565b60f081121561051e57505f9085610462565b61012c131561052e575f85610462565b5f8591610462565b600a60208261054860019451866109fd565b019201920191906101aa565b80600a0290600a8204036105d35782600a02600a810484036105d3575f80516020611a4183398151915291820191015b8181106105915750610191565b805f600a92555f60018201555f60028201555f60038201555f60048201555f60058201555f60068201555f60078201555f60088201555f600982015501610584565b634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b6020906106066109b7565b8282850101520161016b565b60019060208351930192817f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0015501610145565b827f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db091820191015b81811061067b575061013e565b5f815560010161066e565b346100ad5760203660031901126100ad576001546001600160a01b0316156100ad5760035460045490600654916007549060085490600954926106c7610906565b93600a54966106d86100f78961094c565b9780895260208901600a5f525f80516020611a418339815191525f915b8383106108155750505050600254965f955b600435871061073c578751600b556020880151600c556040880151600d556060880151600e556080880151600f556002899055005b90919293949597610750888b600193610cab565b9888518581139081159161080a575b5080156107fc575b80156107ee575b6107e957836107888a8a866020818c039301510302610964565b0261079a86890386888d510302610964565b016107be60408b015160c01b60608c015160801b0160808c015160401b0191610982565b620f4240829392549160031b9282841c0101821b915f19901b19161790555b01959493929190610707565b6107dd565b50602089015186131561076e565b508260208a01511315610767565b90508713158c61075f565b600a602060019261082b9d9798999a9b9d61089e565b855481528486015483820152600286015460408201526003860154606082015260048601546080820152600586015460a0820152600686015460c0820152600786015460e082015260088601546101008201526009860154610120820152815201920192019190999796959493996106f5565b60405190610140820182811067ffffffffffffffff8211176105e757604052565b60405190611920820182811067ffffffffffffffff8211176105e757604052565b6040519190601f01601f1916820167ffffffffffffffff8111838210176105e757604052565b6040519060a0820182811067ffffffffffffffff8211176105e75760405281600b548152600c546020820152600d546040820152600e5460608201526080600f54910152565b67ffffffffffffffff81116105e75760051b60200190565b811561096e570490565b634e487b7160e01b5f52601260045260245ffd5b6005548110156104d55760055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001905f90565b6109bf61089e565b905f82525f60208301525f60408301525f60608301525f60808301525f60a08301525f60c08301525f60e08301525f6101008301525f610120830152565b90610120600991805184556020810151600185015560408101516002850155606081015160038501556080810151600485015560a0810151600585015560c0810151600685015560e0810151600785015561010081015160088501550151910155565b8051600a10156104d5576101600190565b805160be10156104d5576117e00190565b80518210156104d55760209160051b010190565b67ffffffffffffffff81116105e757601f01601f191660200190565b9081518110156104d5570160200190565b600380549160045491828402908482048414851517156105d357808202918083048214901517156105d357610afa6100f783610a96565b91808352610b0a601f1991610a96565b013660208401375f805b858110610c4e57508015610c4757610b2b90611809565b8015610c3f575b5f5b858110610b4357505050929190565b5f5b878110610b555750600101610b34565b8088830201610b6381610982565b905490861b1c67ffffffffffffffff91868684841680610b8c575b505050505050600101610b45565b610b9581611809565b60ff9083610bab8460c08a901c84028502610964565b90610bb591610964565b9784610bcb8560808b901c841685028602610964565b90610bd591610964565b9760401c16020290610be691610964565b90610bf091610964565b91029260ff60f81b80938160f893841b165f1a610c0d878d610ab2565b53821b165f1a610c20600186018b610ab2565b531b165f1a90600201610c339087610ab2565b535f8080868682610b7e565b506001610b32565b5050929190565b5f5b878110610c605750600101610b14565b67ffffffffffffffff610c76828a850201610982565b905490861b1c16808410610c8e575b50600101610c50565b92506001610c85565b811561096e570590565b811561096e570790565b9091600160401b60018181675851f42d4c957f2d958602089160209083968051801561096e5785841c06610cde91610a82565b519585875195815190620f424097868b0191825193888601809d8b8d808451998a98828881604089019c8d51950205920205010195606085015102059060808401998a510205019860a08301998a51018094528481526040810190815160c085015101831c926060820190815160e087015101811c9260800190815161010088015101901c90525252610120015180610dda575b5050505050505050505050505080516305f5e0ff19808212918215610dcc575b508115610dc1575b508015610db3575b610dab57505090565b5f8092525290565b506305f5e100825113610da2565b90508251125f610d9a565b6305f5e1001291505f610d92565b808c03610e195750505050505050505050505050610df881516118ae565b610e0283516118ae565b835281525b5f808080808080808080808080610d72565b60028103610e6d57505050505050505050505050610e5a82518280865180028380020105918215610e63575b610e5191839102610c97565b92855102610c97565b83528152610e07565b9091508190610e45565b60038103610ec457505050505050505050505050610e958183518551800290800201056118ae565b610ea781800264e8d4a510000361187d565b908351918551848382028386020105875202910203058152610e07565b60048103610f1f57505050505050505050505090610e5a90610eee8451865180029080020161187d565b908115610f17575b50610f0a8185518751808201910302610c97565b928451901b855102610c97565b90505f610ef6565b60058103610f535750505050505050505050505050610f418151835190611914565b610e5a8251845180029080020161187d565b60068103610fbd57505050505050505050505050610f748251845190611914565b90610f878351855180029080020161187d565b610fb2610fa48284610f9a8288016118ae565b82020595036118ae565b800264e8d4a510000361187d565b020583528152610e07565b6007810361102157505050505050505050505050610fde8251845190611914565b610ffd82610ff48551875180029080020161187d565b809302056118ae565b908261101183800264e8d4a510000361187d565b825f030205855202058152610e07565b60088103611087575050505050505050505050506110428251845190611914565b6110656110578451865180029080020161187d565b92622fefd8938402056118ae565b908261107983800264e8d4a510000361187d565b820205855202058152610e07565b6009810361110f57505050505050505050505050610e5a6110ab8351855190611914565b6110bd8451865180029080020161187d565b908115611107575b6110ce906118ae565b9264e8d4a510006110ff83836110e7888002850361187d565b936110ff6110f4846118ae565b91828002900361187d565b940102610c97565b8391506110c5565b600a8103611189575050505050505050505050506111308251845190611914565b906111438351855180029080020161187d565b91821561117f575b611154906118ae565b91611173818361116c86800264e8d4a510000361187d565b9502610c97565b92020583528152610e07565b909150819061114b565b600b8103611200575050505050505050505050506111aa8251845190611914565b906111c66111c08451865180029080020161187d565b926118ae565b8164e8d4a51000916111f26111e76111e1838002860361187d565b966118ae565b93848002900361187d565b020592020583528152610e07565b600c810361127857505050505050505050505050506112228151835190611914565b6112496112378351855180029080020161187d565b6112428184016118ae565b92036118ae565b9061125d64e8d4a51000928002830361187d565b90808002029080800202908282820305855201058152610e07565b9b9e98999a9b600d81145f146113035750505050505050506112d993929185910208958380885f941c16146112f8575b6112d16112b88651885190611914565b916112cb8751895180029080020161187d565b0261187d565b931d016118ae565b6112eb81800264e8d4a510000361187d565b8202910283528152610e07565b622fefd891506112a8565b989e98600e819c979b95989c999699145f146113735750505050505050505050505081515f8112155f1461134e57508251905f8212611344575b5050610e07565b1d82525f8061133d565b83519091905f811261136757508251901b825250610e07565b811d84521b8152610e07565b600f819d98999a9b9c9d145f146113fb5750505050505050508290518002059384156113f1575b8290518002059384156113e7575b6113ce6113bf6113c46113bf8694858c5102610c97565b6118ae565b9683895102610c97565b9486519251020501928551925102050183528152610e07565b91935083916113a8565b919350839161139a565b6010919395979b5080929496989c9950145f1461145e575050505050505050610e5a919250806114338551875180029080020161187d565b01908115611456575b61144b82828851871b02610c97565b938551901b02610c97565b90508061143c565b969896601181036114935750505050505050506114816113bf86516003026119cf565b92816113ce6113bf87516003026119cf565b979896976012810361151b5750505050505050509080809351800205918215611512575b826114d8816114ce88518a5180029080020161187d565b931b828401610ca1565b03928203020501906114f06113bf8451865190611914565b8161150382800264e8d4a510000361187d565b84020592020583528152610e07565b915080916114b7565b969796601381036115b3575050505050505061157d90622fefd8945164e8d4a51000958187920202059081156115ab575b81811d92839161155f89518b5190611914565b901d9261157489518b5180029080020161187d565b95518401610ca1565b131561159d57611591916111e791036118ae565b02059083528152610e07565b611591916111e791016118ae565b84915061154c565b601491939597999a50809294969850145f1461161357505050505050509080610e5a916115e88551875180029080020161187d565b0190811561160b575b61160082828751871b02610c97565b938651901b02610c97565b9050806115f1565b60158103611665575050505050505050610e5a825182623d0900818751800284800201050191821561165b575b61164f91839160021b02610c97565b92855160021b02610c97565b9091508190611640565b601681036116875750505050505050505061168081516118ae565b8152610e07565b601781036116f05750505050505050506116dc6116a484516118ae565b826116b782800264e8d4a510000361187d565b9182156116e6575b6116cb91839102610c97565b926116d685516118ae565b02610c97565b9083528152610e07565b90915081906116bf565b6018819c9495969799989c145f14611729575050505090878181869486020880940208961d92838388831c070386521c07038152610e07565b9350945094955097506019915014611744575b505050610e07565b82918183920290800203058002058015611786575b801561096e5761176f9064e8d4a510000561187d565b8251845182028390058552020581525f808061173c565b5080611759565b80515f5b81811061179d57505050565b60018082015b8381106117b4575050600101611791565b81906117c08487610a82565b516117cb8288610a82565b51126117d8575b016117a3565b6117e28187610a82565b516117ed8588610a82565b516117f88389610a82565b526118038588610a82565b526117d2565b5f905b6216e36081101561186a57600190620f423f190181815b600a8410611832575050505090565b90918060028596611844839786610964565b0193620f424093849102049361185c86890186610964565b900396019493920204611823565b9062062fd9600391019160011b0461180c565b90600180830160011d90835b84831261189557505050565b91935090836118a48183610c97565b01821d9190611889565b905f91625fdfb0809107905f821261190d575b50600260018181845b8386136118d957505050505050565b9091929364e8d4a510008280889a6118f489869b8902610c97565b019a0202059594600185018502029301915f03906118ca565b015f6118c1565b91908215806119c7575b6119c1575f9061192d84611a34565b61193682611a34565b80821384146119a95761199191620f42406119519202610c97565b620f42409081808280020581808080612cc81985020561caee018402056201c41019018302056202f2d3018202056205131719010205620f422601020590565b622fefd860011d03935b02126119a357565b905f0390565b61195190620f42406119bb9302610c97565b9361199b565b505f9150565b50801561191e565b6119db6119ff916118ae565b6119ed81800264e8d4a510000361187d565b908115611a02575b620f424002610c97565b90565b620f424091506119f5565b6001600160401b91675851f42d4c957f2d020890621e8480602083901c07620f423f190190565b5f81136119ff575f039056fec65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8a2646970667358221220b3f2fe21ac0faf4ab1951c6297ccc37675d0c82e067ed2dd736ca86eeb03ebe164736f6c63430008170033");