diff --git a/ethers-contract/Cargo.toml b/ethers-contract/Cargo.toml index fbf2bed9b..97669bc7d 100644 --- a/ethers-contract/Cargo.toml +++ b/ethers-contract/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "ethers-contract" version = "1.0.2" -edition = "2018" +edition = "2021" rust-version = "1.64" authors = ["Georgios Konstantopoulos "] license = "MIT OR Apache-2.0" diff --git a/ethers-contract/ethers-contract-abigen/src/contract/errors.rs b/ethers-contract/ethers-contract-abigen/src/contract/errors.rs index e458ec51f..c6ba41f6c 100644 --- a/ethers-contract/ethers-contract-abigen/src/contract/errors.rs +++ b/ethers-contract/ethers-contract-abigen/src/contract/errors.rs @@ -52,16 +52,15 @@ impl Context { hex::encode(error.selector()) ); - let mut extra_derives = self.expand_extra_derives(); - if util::can_derive_defaults(&error.inputs) { - extra_derives.extend(quote!(Default)); - } + let mut derives = self.expand_extra_derives(); + let params = error.inputs.iter().map(|param| ¶m.kind); + util::derive_builtin_traits(params, &mut derives, true, true); let ethers_contract = ethers_contract_crate(); Ok(quote! { #[doc = #doc_str] - #[derive(Clone, Debug, Eq, PartialEq, #ethers_contract::EthError, #ethers_contract::EthDisplay, #extra_derives)] + #[derive(Clone, #ethers_contract::EthError, #ethers_contract::EthDisplay, #derives)] #[etherror(name = #error_name, abi = #abi_signature)] pub #data_type_definition }) @@ -92,14 +91,17 @@ impl Context { }) .collect::>(); - let extra_derives = self.expand_extra_derives(); + let mut derives = self.expand_extra_derives(); + let params = + self.abi.errors.values().flatten().flat_map(|err| &err.inputs).map(|param| ¶m.kind); + util::derive_builtin_traits(params, &mut derives, false, true); let ethers_core = ethers_core_crate(); let ethers_contract = ethers_contract_crate(); quote! { #[doc = "Container type for all of the contract's custom errors"] - #[derive(Debug, Clone, PartialEq, Eq, #ethers_contract::EthAbiType, #extra_derives)] + #[derive(Clone, #ethers_contract::EthAbiType, #derives)] pub enum #enum_name { #( #variants(#variants), )* } diff --git a/ethers-contract/ethers-contract-abigen/src/contract/events.rs b/ethers-contract/ethers-contract-abigen/src/contract/events.rs index 92ef88d35..7076dd735 100644 --- a/ethers-contract/ethers-contract-abigen/src/contract/events.rs +++ b/ethers-contract/ethers-contract-abigen/src/contract/events.rs @@ -62,15 +62,19 @@ impl Context { }) .collect::>(); + let enum_name = self.expand_event_enum_name(); + + let mut derives = self.expand_extra_derives(); + let params = + self.abi.events.values().flatten().flat_map(|err| &err.inputs).map(|param| ¶m.kind); + util::derive_builtin_traits(params, &mut derives, false, true); + let ethers_core = ethers_core_crate(); let ethers_contract = ethers_contract_crate(); - let extra_derives = self.expand_extra_derives(); - let enum_name = self.expand_event_enum_name(); - quote! { #[doc = "Container type for all of the contract's events"] - #[derive(Debug, Clone, PartialEq, Eq, #ethers_contract::EthAbiType, #extra_derives)] + #[derive(Clone, #ethers_contract::EthAbiType, #derives)] pub enum #enum_name { #( #variants(#variants), )* } @@ -191,15 +195,14 @@ impl Context { let all_anonymous_fields = event.inputs.iter().all(|input| input.name.is_empty()); let data_type_definition = expand_event_struct(&struct_name, &fields, all_anonymous_fields); - let mut extra_derives = self.expand_extra_derives(); - if event.inputs.iter().map(|param| ¶m.kind).all(util::can_derive_default) { - extra_derives.extend(quote!(Default)); - } + let mut derives = self.expand_extra_derives(); + let params = event.inputs.iter().map(|param| ¶m.kind); + util::derive_builtin_traits(params, &mut derives, true, true); let ethers_contract = ethers_contract_crate(); Ok(quote! { - #[derive(Clone, Debug, Eq, PartialEq, #ethers_contract::EthEvent, #ethers_contract::EthDisplay, #extra_derives)] + #[derive(Clone, #ethers_contract::EthEvent, #ethers_contract::EthDisplay, #derives)] #[ethevent(name = #name, abi = #abi_signature)] pub #data_type_definition }) diff --git a/ethers-contract/ethers-contract-abigen/src/contract/methods.rs b/ethers-contract/ethers-contract-abigen/src/contract/methods.rs index 797a20e10..246e716ec 100644 --- a/ethers-contract/ethers-contract-abigen/src/contract/methods.rs +++ b/ethers-contract/ethers-contract-abigen/src/contract/methods.rs @@ -122,16 +122,15 @@ impl Context { hex::encode(function.selector()) ); - let mut extra_derives = self.expand_extra_derives(); - if util::can_derive_defaults(&function.inputs) { - extra_derives.extend(quote!(Default)); - } + let mut derives = self.expand_extra_derives(); + let params = function.inputs.iter().map(|param| ¶m.kind); + util::derive_builtin_traits(params, &mut derives, true, true); let ethers_contract = ethers_contract_crate(); Ok(quote! { #[doc = #doc_str] - #[derive(Clone, Debug, Eq, PartialEq, #ethers_contract::EthCall, #ethers_contract::EthDisplay, #extra_derives)] + #[derive(Clone, #ethers_contract::EthCall, #ethers_contract::EthDisplay, #derives)] #[ethcall( name = #function_name, abi = #abi_signature )] pub #call_type_definition }) @@ -162,16 +161,15 @@ impl Context { hex::encode(function.selector()) ); - let mut extra_derives = self.expand_extra_derives(); - if util::can_derive_defaults(&function.inputs) { - extra_derives.extend(quote!(Default)); - } + let mut derives = self.expand_extra_derives(); + let params = function.inputs.iter().map(|param| ¶m.kind); + util::derive_builtin_traits(params, &mut derives, true, true); let ethers_contract = ethers_contract_crate(); Ok(Some(quote! { #[doc = #doc_str] - #[derive(Clone, Debug, Eq, PartialEq, #ethers_contract::EthAbiType, #ethers_contract::EthAbiCodec, #extra_derives)] + #[derive(Clone, #ethers_contract::EthAbiType, #ethers_contract::EthAbiCodec, #derives)] pub #return_type_definition })) } @@ -197,7 +195,10 @@ impl Context { return Ok(struct_def_tokens) } - let extra_derives = self.expand_extra_derives(); + let mut derives = self.expand_extra_derives(); + let params = + self.abi.functions.values().flatten().flat_map(|f| &f.inputs).map(|param| ¶m.kind); + util::derive_builtin_traits(params, &mut derives, false, true); let enum_name = self.expand_calls_enum_name(); @@ -208,7 +209,7 @@ impl Context { #struct_def_tokens #[doc = "Container type for all of the contract's call "] - #[derive(Debug, Clone, PartialEq, Eq, #ethers_contract::EthAbiType, #extra_derives)] + #[derive(Clone, #ethers_contract::EthAbiType, #derives)] pub enum #enum_name { #( #variant_names(#struct_names), )* } diff --git a/ethers-contract/ethers-contract-abigen/src/contract/structs.rs b/ethers-contract/ethers-contract-abigen/src/contract/structs.rs index 12cdee936..a0fd3af2b 100644 --- a/ethers-contract/ethers-contract-abigen/src/contract/structs.rs +++ b/ethers-contract/ethers-contract-abigen/src/contract/structs.rs @@ -61,9 +61,9 @@ impl Context { .internal_structs .struct_tuples .get(id) - .ok_or_else(|| eyre!("No types found for {id}"))? - .clone(); - self.expand_internal_struct(struct_name, sol_struct, tuple) + .ok_or_else(|| eyre!("No types found for {id}"))?; + let types = if let ParamType::Tuple(types) = tuple { types } else { unreachable!() }; + self.expand_internal_struct(struct_name, sol_struct, types) } /// Returns the `TokenStream` with all the internal structs extracted form the JSON ABI @@ -83,7 +83,7 @@ impl Context { &self, name: &str, sol_struct: &SolStruct, - tuple: ParamType, + types: &[ParamType], ) -> Result { let mut fields = Vec::with_capacity(sol_struct.fields().len()); @@ -112,19 +112,17 @@ impl Context { let struct_def = expand_struct(&name, &fields, is_tuple); - let sig = match tuple { - ParamType::Tuple(ref types) if !types.is_empty() => util::abi_signature_types(types), - _ => String::new(), - }; + let sig = util::abi_signature_types(types); let doc_str = format!("`{name}({sig})`"); - let extra_derives = self.expand_extra_derives(); + let mut derives = self.expand_extra_derives(); + util::derive_builtin_traits_struct(&self.internal_structs, sol_struct, types, &mut derives); let ethers_contract = ethers_contract_crate(); Ok(quote! { #[doc = #doc_str] - #[derive(Clone, Debug, Default, Eq, PartialEq, #ethers_contract::EthAbiType, #ethers_contract::EthAbiCodec, #extra_derives)] + #[derive(Clone, #ethers_contract::EthAbiType, #ethers_contract::EthAbiCodec, #derives)] pub #struct_def }) } @@ -167,16 +165,14 @@ impl Context { let name = util::ident(name); - let mut extra_derives = self.expand_extra_derives(); - if param_types.iter().all(util::can_derive_default) { - extra_derives.extend(quote!(Default)) - } + let mut derives = self.expand_extra_derives(); + util::derive_builtin_traits(¶m_types, &mut derives, true, true); let ethers_contract = ethers_contract_crate(); Ok(quote! { #[doc = #abi_signature] - #[derive(Clone, Debug, Eq, PartialEq, #ethers_contract::EthAbiType, #ethers_contract::EthAbiCodec, #extra_derives)] + #[derive(Clone, #ethers_contract::EthAbiType, #ethers_contract::EthAbiCodec, #derives)] pub struct #name { #( #fields ),* } @@ -231,7 +227,7 @@ impl InternalStructs { let mut function_params = HashMap::new(); let mut outputs = HashMap::new(); let mut event_params = HashMap::new(); - let mut structs = HashMap::new(); + for item in abi .into_iter() .filter(|item| matches!(item.type_field.as_str(), "constructor" | "function" | "event")) @@ -279,6 +275,7 @@ impl InternalStructs { // turn each top level internal type (function input/output) and their nested types // into a struct will create all structs + let mut structs = HashMap::new(); for component in top_level_internal_types.values() { insert_structs(&mut structs, component); } @@ -569,7 +566,7 @@ fn struct_type_name(name: &str) -> &str { struct_type_identifier(name).rsplit('.').next().unwrap() } -/// `Pairing.G2Point` -> `Pairing.G2Point` +/// `struct Pairing.G2Point[]` -> `Pairing.G2Point` fn struct_type_identifier(name: &str) -> &str { name.trim_start_matches("struct ").split('[').next().unwrap() } diff --git a/ethers-contract/ethers-contract-abigen/src/multi.rs b/ethers-contract/ethers-contract-abigen/src/multi.rs index 3a033813d..060d5dcfb 100644 --- a/ethers-contract/ethers-contract-abigen/src/multi.rs +++ b/ethers-contract/ethers-contract-abigen/src/multi.rs @@ -1342,7 +1342,7 @@ contract Enum { [package] name = "ethers-contract" version = "1.0.0" - edition = "2018" + edition = "2021" rust-version = "1.64" authors = ["Georgios Konstantopoulos "] license = "MIT OR Apache-2.0" @@ -1388,7 +1388,7 @@ contract Enum { [package] name = "ethers-contract" version = "1.0.0" - edition = "2018" + edition = "2021" rust-version = "1.64" authors = ["Georgios Konstantopoulos "] license = "MIT OR Apache-2.0" @@ -1435,7 +1435,7 @@ contract Enum { [package] name = "ethers-contract" version = "1.0.0" - edition = "2018" + edition = "2021" rust-version = "1.64" authors = ["Georgios Konstantopoulos "] license = "MIT OR Apache-2.0" @@ -1482,7 +1482,7 @@ contract Enum { [package] name = "ethers-contract" version = "1.0.0" - edition = "2018" + edition = "2021" rust-version = "1.64" authors = ["Georgios Konstantopoulos "] license = "MIT OR Apache-2.0" diff --git a/ethers-contract/ethers-contract-abigen/src/util.rs b/ethers-contract/ethers-contract-abigen/src/util.rs index 665cc7127..e9453b5eb 100644 --- a/ethers-contract/ethers-contract-abigen/src/util.rs +++ b/ethers-contract/ethers-contract-abigen/src/util.rs @@ -1,4 +1,8 @@ -use ethers_core::abi::{Param, ParamType}; +use crate::InternalStructs; +use ethers_core::abi::{ + struct_def::{FieldType, StructFieldType}, + ParamType, SolStruct, +}; use eyre::Result; use inflector::Inflector; use proc_macro2::{Ident, Span, TokenStream}; @@ -165,28 +169,158 @@ pub(crate) fn json_files(root: impl AsRef) -> Vec { .collect() } -/// Returns whether all the given parameters can derive [`Default`]. +/// Returns whether all the given parameters can derive the builtin traits. /// -/// rust-std derives `Default` automatically only for arrays len <= 32 -pub(crate) fn can_derive_defaults<'a>(params: impl IntoIterator) -> bool { - params.into_iter().map(|param| ¶m.kind).all(can_derive_default) +/// The following traits are only implemented on tuples of arity 12 or less: +/// +/// - [PartialEq](https://doc.rust-lang.org/stable/std/cmp/trait.PartialEq.html) +/// - [Eq](https://doc.rust-lang.org/stable/std/cmp/trait.Eq.html) +/// - [PartialOrd](https://doc.rust-lang.org/stable/std/cmp/trait.PartialOrd.html) +/// - [Ord](https://doc.rust-lang.org/stable/std/cmp/trait.Ord.html) +/// - [Debug](https://doc.rust-lang.org/stable/std/fmt/trait.Debug.html) +/// - [Default](https://doc.rust-lang.org/stable/std/default/trait.Default.html) +/// - [Hash](https://doc.rust-lang.org/stable/std/hash/trait.Hash.html) +/// +/// while the `Default` trait is only implemented on arrays of length 32 or less. +/// +/// Tuple reference: +/// +/// Array reference: +/// +/// `derive_default` should be set to false when calling this for enums. +pub(crate) fn derive_builtin_traits<'a>( + params: impl IntoIterator, + stream: &mut TokenStream, + mut derive_default: bool, + mut derive_others: bool, +) { + for param in params { + derive_default &= can_derive_default(param); + derive_others &= can_derive_builtin_traits(param); + } + extend_derives(stream, derive_default, derive_others); } -/// Returns whether the given type can derive [`Default`]. -/// -/// rust-std derives `Default` automatically only for arrays len <= 32 -pub(crate) fn can_derive_default(param: &ParamType) -> bool { - const MAX_SUPPORTED_LEN: usize = 32; +/// This has to be a seperate function since a sol struct is converted into a tuple, but for +/// deriving purposes it shouldn't count as one, so we recurse back the struct fields. +pub(crate) fn derive_builtin_traits_struct( + structs: &InternalStructs, + sol_struct: &SolStruct, + params: &[ParamType], + stream: &mut TokenStream, +) { + if sol_struct.fields().iter().any(|field| field.ty.is_struct()) { + let mut def = true; + let mut others = true; + _derive_builtin_traits_struct(structs, sol_struct, params, &mut def, &mut others); + extend_derives(stream, def, others); + } else { + derive_builtin_traits(params, stream, true, true); + } +} + +fn _derive_builtin_traits_struct( + structs: &InternalStructs, + sol_struct: &SolStruct, + params: &[ParamType], + def: &mut bool, + others: &mut bool, +) { + let fields = sol_struct.fields(); + debug_assert_eq!(fields.len(), params.len()); + + for (field, ty) in fields.iter().zip(params) { + match &field.ty { + FieldType::Struct(s_ty) => { + // a tuple here is actually a sol struct so we skip it + if !matches!(ty, ParamType::Tuple(_)) { + *def &= can_derive_default(ty); + *others &= can_derive_builtin_traits(ty); + } + let id = s_ty.identifier(); + // TODO: InternalStructs does not contain this field's ID if the struct and field + // are in 2 different modules, like in `can_generate_internal_structs_multiple` + if let Some(recursed_struct) = structs.structs.get(&id) { + let recursed_params = get_struct_params(s_ty, ty); + _derive_builtin_traits_struct( + structs, + recursed_struct, + recursed_params, + def, + others, + ); + } + } + + FieldType::Elementary(ty1) => { + debug_assert_eq!(ty, ty1); + *def &= can_derive_default(ty); + *others &= can_derive_builtin_traits(ty); + } + + FieldType::Mapping(_) => unreachable!(), + } + } +} + +fn get_struct_params<'a>(s_ty: &StructFieldType, ty: &'a ParamType) -> &'a [ParamType] { + match (s_ty, ty) { + (StructFieldType::Type(_), ParamType::Tuple(params)) => params, + (StructFieldType::Array(s_ty), ParamType::Array(ty)) => get_struct_params(s_ty, ty), + (StructFieldType::FixedArray(s_ty, _), ParamType::FixedArray(ty, _)) => { + get_struct_params(s_ty, ty) + } + _ => unreachable!(), + } +} + +fn extend_derives(stream: &mut TokenStream, def: bool, others: bool) { + if def { + stream.extend(quote!(Default,)) + } + if others { + stream.extend(quote!(Debug, PartialEq, Eq, Hash)) + } +} + +const MAX_SUPPORTED_ARRAY_LEN: usize = 32; +const MAX_SUPPORTED_TUPLE_LEN: usize = 12; + +/// Whether the given type can derive the `Default` trait. +fn can_derive_default(param: &ParamType) -> bool { match param { - ParamType::FixedBytes(len) => *len <= MAX_SUPPORTED_LEN, + ParamType::Array(ty) => can_derive_default(ty), + ParamType::FixedBytes(len) => *len <= MAX_SUPPORTED_ARRAY_LEN, ParamType::FixedArray(ty, len) => { - if *len > MAX_SUPPORTED_LEN { + if *len > MAX_SUPPORTED_ARRAY_LEN { false } else { can_derive_default(ty) } } - ParamType::Tuple(params) => params.iter().all(can_derive_default), + ParamType::Tuple(params) => { + if params.len() > MAX_SUPPORTED_TUPLE_LEN { + false + } else { + params.iter().all(can_derive_default) + } + } + _ => true, + } +} + +/// Whether the given type can derive the builtin traits listed in [`derive_builtin_traits`], minus +/// `Default`. +fn can_derive_builtin_traits(param: &ParamType) -> bool { + match param { + ParamType::Array(ty) | ParamType::FixedArray(ty, _) => can_derive_builtin_traits(ty), + ParamType::Tuple(params) => { + if params.len() > MAX_SUPPORTED_TUPLE_LEN { + false + } else { + params.iter().all(can_derive_builtin_traits) + } + } _ => true, } } @@ -211,12 +345,24 @@ mod tests { use super::*; #[test] - fn can_detect_non_default() { - let param = ParamType::FixedArray(Box::new(ParamType::Uint(64)), 128); + fn can_detect_derives() { + // array + let param = ParamType::FixedArray(Box::new(ParamType::Uint(256)), 32); + assert!(can_derive_default(¶m)); + assert!(can_derive_builtin_traits(¶m)); + + let param = ParamType::FixedArray(Box::new(ParamType::Uint(256)), 33); assert!(!can_derive_default(¶m)); + assert!(can_derive_builtin_traits(¶m)); - let param = ParamType::FixedArray(Box::new(ParamType::Uint(64)), 32); + // tuple + let param = ParamType::Tuple(vec![ParamType::Uint(256); 12]); assert!(can_derive_default(¶m)); + assert!(can_derive_builtin_traits(¶m)); + + let param = ParamType::Tuple(vec![ParamType::Uint(256); 13]); + assert!(!can_derive_default(¶m)); + assert!(!can_derive_builtin_traits(¶m)); } #[test] diff --git a/ethers-contract/ethers-contract-derive/src/display.rs b/ethers-contract/ethers-contract-derive/src/display.rs index b8597fd94..6410c83c0 100644 --- a/ethers-contract/ethers-contract-derive/src/display.rs +++ b/ethers-contract/ethers-contract-derive/src/display.rs @@ -22,82 +22,117 @@ pub(crate) fn derive_eth_display_impl(input: DeriveInput) -> Result { - quote! { - write!(f, "{:?}", self.#ident)?; - } - } - ParamType::Bytes => { - quote! { - write!(f, "0x{}", #hex_encode(&self.#ident))?; - } - } - ParamType::Bool | ParamType::String => { - quote! { - self.#ident.fmt(f)?; - } - } - ParamType::Tuple(_) => { - quote! { - write!(f, "{:?}", &self.#ident)?; - } - } - ParamType::Array(ty) | ParamType::FixedArray(ty, _) => { - if *ty == ParamType::Uint(8) { - // `u8` - quote! { - write!(f, "0x{}", #hex_encode(&self.#ident[..]))?; - } - } else { - // format as array with `[arr[0].display, arr[1].display,...]` - quote! { - write!(f, "[")?; - for (idx, val) in self.#ident.iter().enumerate() { - write!(f, "{:?}", val)?; - if idx < self.#ident.len() - 1 { - write!(f, ", ")?; - } - } - write!(f, "]")?; - } - } - } - ParamType::FixedBytes(_) => { - quote! { - write!(f, "0x{}", #hex_encode(&self.#ident))?; - } - } - } + if let Ok(param) = utils::find_parameter_type(&field.ty) { + let ethers_core = ethers_core_crate(); + let hex_encode = quote!(#ethers_core::utils::hex::encode); + fmt_params_tokens(¶m, ident, &mut expressions, &hex_encode); } else { // could not detect the parameter type and rely on using debug fmt - quote! { - write!(f, "{:?}", &self.#ident)?; - } - }; - fmts.extend(tokens); - if idx < fields.len() - 1 { - fmts.extend(quote! { write!(f, ", ")?;}); + fmt_debug_tokens(&ident, &mut expressions); + } + + // comma separator + if i < fields.len() - 1 { + let tokens = quote! { + ::core::fmt::Write::write_str(f, ", ")?; + }; + expressions.extend(tokens); } } let name = &input.ident; Ok(quote! { - impl ::std::fmt::Display for #name { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { - #fmts + impl ::core::fmt::Display for #name { + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + #expressions Ok(()) } } }) } + +/// Recursive for tuples len > 12. +fn fmt_params_tokens( + param: &ParamType, + ident: TokenStream, + out: &mut TokenStream, + hex_encode: &TokenStream, +) { + match param { + // Display + ParamType::Bool | ParamType::String | ParamType::Uint(_) | ParamType::Int(_) => { + fmt_display_tokens(&ident, out); + } + + // Debug + ParamType::Address => fmt_debug_tokens(&ident, out), + + // 0x ++ hex::encode + ParamType::Bytes | ParamType::FixedBytes(_) => hex_encode_tokens(&ident, out, hex_encode), + + // Debug or recurse + ParamType::Tuple(params) => { + // Debug is implemented automatically only for tuples with arity <= 12 + if params.len() <= 12 { + fmt_debug_tokens(&ident, out); + } else { + for (i, new_param) in params.iter().enumerate() { + let idx = Index::from(i); + let new_ident = quote!(#ident.#idx); + fmt_params_tokens(new_param, new_ident, out, hex_encode); + } + } + } + + // 0x ++ hex::encode or DebugList + ParamType::Array(ty) | ParamType::FixedArray(ty, _) => match &**ty { + ParamType::Uint(8) => hex_encode_tokens(&ident, out, hex_encode), + ParamType::Tuple(params) if params.len() > 12 => { + // TODO: Recurse this + let idx = (0..params.len()).map(Index::from); + let tokens = quote! { + let mut list = f.debug_list(); + for entry in self.#ident.iter() { + #( list.entry(&entry.#idx); )* + } + list.finish()?; + }; + out.extend(tokens); + } + _ => { + let tokens = quote! { + f.debug_list().entries(self.#ident.iter()).finish()?; + }; + out.extend(tokens); + } + }, + } +} + +fn fmt_display_tokens(ident: &TokenStream, out: &mut TokenStream) { + let tokens = quote! { + ::core::fmt::Display::fmt(&self.#ident, f)?; + }; + out.extend(tokens); +} + +fn fmt_debug_tokens(ident: &TokenStream, out: &mut TokenStream) { + let tokens = quote! { + ::core::fmt::Debug::fmt(&self.#ident, f)?; + }; + out.extend(tokens); +} + +fn hex_encode_tokens(ident: &TokenStream, out: &mut TokenStream, hex_encode: &TokenStream) { + let tokens = quote! { + ::core::fmt::Write::write_str(f, "0x")?; + ::core::fmt::Write::write_str(f, #hex_encode(&self.#ident).as_str())?; + }; + out.extend(tokens); +} diff --git a/ethers-contract/ethers-contract-derive/src/utils.rs b/ethers-contract/ethers-contract-derive/src/utils.rs index 969ea99b8..33bb2a408 100644 --- a/ethers-contract/ethers-contract-derive/src/utils.rs +++ b/ethers-contract/ethers-contract-derive/src/utils.rs @@ -21,12 +21,17 @@ pub fn selector(selector: Selector) -> TokenStream { quote! {[#( #bytes ),*]} } -/// Parses an int type from its string representation -pub fn parse_int_param_type(s: &str) -> Option { +/// Parses an int / hash type from its string representation +pub fn parse_param_type(s: &str) -> Option { match s.chars().next() { - Some(c @ 'u') | Some(c @ 'i') => { + Some('H' | 'h') => { + let size = s[1..].parse::().ok()? / 8; + Some(ParamType::FixedBytes(size)) + } + + Some(c @ 'U' | c @ 'I' | c @ 'u' | c @ 'i') => { let size = s[1..].parse::().ok()?; - if c == 'u' { + if matches!(c, 'U' | 'u') { Some(ParamType::Uint(size)) } else { Some(ParamType::Int(size)) @@ -100,57 +105,62 @@ pub fn param_type_quote(kind: &ParamType) -> TokenStream { /// given type pub fn find_parameter_type(ty: &Type) -> Result { match ty { - Type::Array(ty) => { - let param = find_parameter_type(ty.elem.as_ref())?; - if let Expr::Lit(ref expr) = ty.len { + Type::Array(arr) => { + let ty = find_parameter_type(&arr.elem)?; + if let Expr::Lit(ref expr) = arr.len { if let Lit::Int(ref len) = expr.lit { if let Ok(size) = len.base10_parse::() { - return Ok(ParamType::FixedArray(Box::new(param), size)) + return Ok(ParamType::FixedArray(Box::new(ty), size)) } } } - Err(Error::new(ty.span(), "Failed to derive proper ABI from array field")) + Err(Error::new(arr.span(), "Failed to derive proper ABI from array field")) } + Type::Path(ty) => { // check for `Vec` - if ty.path.segments.len() == 1 && ty.path.segments[0].ident == "Vec" { - if let PathArguments::AngleBracketed(ref args) = ty.path.segments[0].arguments { - if args.args.len() == 1 { - if let GenericArgument::Type(ref ty) = args.args.iter().next().unwrap() { - return find_parameter_type(ty) - .map(|kind| ParamType::Array(Box::new(kind))) - } + if let Some(segment) = ty.path.segments.iter().find(|s| s.ident == "Vec") { + if let PathArguments::AngleBracketed(ref args) = segment.arguments { + // Vec + debug_assert!(matches!(args.args.len(), 1 | 2)); + let ty = args.args.iter().next().unwrap(); + if let GenericArgument::Type(ref ty) = ty { + return find_parameter_type(ty).map(|kind| ParamType::Array(Box::new(kind))) } } } - let mut ident = ty.path.get_ident(); - if ident.is_none() { - ident = ty.path.segments.last().map(|s| &s.ident); - } - if let Some(ident) = ident { - let ident = ident.to_string().to_lowercase(); - return match ident.as_str() { - "address" => Ok(ParamType::Address), - "bytes" => Ok(ParamType::Bytes), - "string" => Ok(ParamType::String), - "bool" => Ok(ParamType::Bool), - "int" | "uint" => Ok(ParamType::Uint(256)), - "h160" => Ok(ParamType::FixedBytes(20)), - "h256" | "secret" | "hash" => Ok(ParamType::FixedBytes(32)), - "h512" | "public" => Ok(ParamType::FixedBytes(64)), - s => parse_int_param_type(s).ok_or_else(|| { - Error::new(ty.span(), "Failed to derive proper ABI from fields") - }), - } - } - Err(Error::new(ty.span(), "Failed to derive proper ABI from fields")) + + // match on the last segment of the path + ty.path + .get_ident() + .or_else(|| ty.path.segments.last().map(|s| &s.ident)) + .and_then(|ident| { + match ident.to_string().as_str() { + // eth types + "Address" => Some(ParamType::Address), + "Bytes" => Some(ParamType::Bytes), + "Uint8" => Some(ParamType::Uint(8)), + + // core types + "String" => Some(ParamType::String), + "bool" => Some(ParamType::Bool), + // usize / isize, shouldn't happen but use max width + "usize" => Some(ParamType::Uint(64)), + "isize" => Some(ParamType::Int(64)), + + s => parse_param_type(s), + } + }) + .ok_or_else(|| Error::new(ty.span(), "Failed to derive proper ABI from fields")) } + Type::Tuple(ty) => ty .elems .iter() .map(find_parameter_type) .collect::, _>>() .map(ParamType::Tuple), + _ => Err(Error::new(ty.span(), "Failed to derive proper ABI from fields")), } } @@ -267,3 +277,97 @@ pub fn abi_parameters_array(input: &DeriveInput, trait_name: &str) -> Result $e:expr),+ $(,)?) => {{ + &[ + $( + (parse_quote!($t), $e), + )+ + ] + }}; + } + + fn arr(ty: ParamType) -> ParamType { + ParamType::Array(Box::new(ty)) + } + + fn farr(ty: ParamType, len: usize) -> ParamType { + ParamType::FixedArray(Box::new(ty), len) + } + + #[test] + fn can_find_params() { + use ParamType as PT; + let test_cases: &[(Type, ParamType)] = type_test_cases! { + u8 => PT::Uint(8), + u16 => PT::Uint(16), + u32 => PT::Uint(32), + u64 => PT::Uint(64), + usize => PT::Uint(64), + u128 => PT::Uint(128), + ::ethers::types::U256 => PT::Uint(256), + ethers::types::U256 => PT::Uint(256), + ::ethers_core::types::U256 => PT::Uint(256), + ethers_core::types::U256 => PT::Uint(256), + U256 => PT::Uint(256), + + i8 => PT::Int(8), + i16 => PT::Int(16), + i32 => PT::Int(32), + i64 => PT::Int(64), + isize => PT::Int(64), + i128 => PT::Int(128), + ::ethers::types::I256 => PT::Int(256), + ethers::types::I256 => PT::Int(256), + ::ethers_core::types::I256 => PT::Int(256), + ethers_core::types::I256 => PT::Int(256), + I256 => PT::Int(256), + + + ::ethers::types::H160 => PT::FixedBytes(20), + H160 => PT::FixedBytes(20), + ::ethers::types::H256 => PT::FixedBytes(32), + H256 => PT::FixedBytes(32), + ::ethers::types::H512 => PT::FixedBytes(64), + H512 => PT::FixedBytes(64), + + ::std::vec::Vec<::ethers_core::types::U256, ::std::alloc::Global> => arr(PT::Uint(256)), + ::std::vec::Vec<::ethers_core::types::U256, Global> => arr(PT::Uint(256)), + ::std::vec::Vec<::ethers_core::types::U256> => arr(PT::Uint(256)), + ::std::vec::Vec => arr(PT::Uint(256)), + ::std::vec::Vec => arr(PT::Uint(256)), + std::vec::Vec => arr(PT::Uint(256)), + vec::Vec => arr(PT::Uint(256)), + Vec => arr(PT::Uint(256)), + + [u64; 8] => farr(PT::Uint(64), 8), + [u64; 16] => farr(PT::Uint(64), 16), + [::ethers_core::types::U256; 2] => farr(PT::Uint(256), 2), + [String; 4] => farr(PT::String, 4), + [Address; 2] => farr(PT::Address, 2), + + (String, String, Address) => PT::Tuple(vec![PT::String, PT::String, PT::Address]), + (::ethers_core::types::U256, u8, ::ethers_core::types::Address) + => PT::Tuple(vec![PT::Uint(256), PT::Uint(8), PT::Address]), + (::ethers::types::Bytes, ::ethers::types::H256, (::ethers::types::Address, ::std::string::String)) + => PT::Tuple(vec![ + PT::Bytes, + PT::FixedBytes(32), + PT::Tuple(vec![PT::Address, PT::String]) + ]), + }; + + for (ty, expected) in test_cases { + match find_parameter_type(ty) { + Ok(ty) => assert_eq!(ty, *expected), + Err(e) => panic!("{e}: {ty:#?}\n{expected}"), + } + } + } +} diff --git a/ethers-contract/tests/it/abigen.rs b/ethers-contract/tests/it/abigen.rs index 509358e38..75a4ee2c2 100644 --- a/ethers-contract/tests/it/abigen.rs +++ b/ethers-contract/tests/it/abigen.rs @@ -1,26 +1,25 @@ -#![cfg(feature = "abigen")] -#![allow(unused)] //! Test cases to validate the `abigen!` macro -use ethers_contract::{abigen, Abigen, EthCall, EthEvent}; + +use ethers_contract::{abigen, EthCall, EthEvent}; use ethers_core::{ abi::{AbiDecode, AbiEncode, Address, Tokenizable}, - types::{transaction::eip2718::TypedTransaction, Chain, Eip1559TransactionRequest, U256}, + types::{transaction::eip2718::TypedTransaction, Eip1559TransactionRequest, U256}, utils::Anvil, }; use ethers_providers::{MockProvider, Provider}; use ethers_solc::Solc; -use std::{ - convert::{TryFrom, TryInto}, - sync::Arc, -}; +use std::sync::Arc; -fn assert_codec() {} -fn assert_tokenizeable() {} -fn assert_call() {} -fn assert_event() {} +const fn assert_codec() {} +const fn assert_tokenizeable() {} +const fn assert_call() {} +const fn assert_event() {} +const fn assert_clone() {} +const fn assert_default() {} +const fn assert_builtin() {} #[test] -fn can_gen_human_readable() { +fn can_generate_human_readable() { abigen!( SimpleContract, r#"[ @@ -33,12 +32,12 @@ fn can_gen_human_readable() { } #[test] -fn can_gen_not_human_readable() { +fn can_generate_not_human_readable() { abigen!(VerifierAbiHardhatContract, "./tests/solidity-contracts/verifier_abi_hardhat.json"); } #[test] -fn can_gen_human_readable_multiple() { +fn can_generate_human_readable_multiple() { abigen!( SimpleContract1, r#"[ @@ -59,7 +58,7 @@ fn can_gen_human_readable_multiple() { } #[test] -fn can_gen_structs_readable() { +fn can_generate_structs_readable() { abigen!( SimpleContract, r#"[ @@ -90,7 +89,7 @@ fn can_gen_structs_readable() { } #[test] -fn can_gen_structs_with_arrays_readable() { +fn can_generate_structs_with_arrays_readable() { abigen!( SimpleContract, r#"[ @@ -171,7 +170,7 @@ fn can_generate_internal_structs_multiple() { } #[test] -fn can_gen_return_struct() { +fn can_generate_return_struct() { abigen!(MultiInputOutput, "ethers-contract/tests/solidity-contracts/MultiInputOutput.json"); fn verify( @@ -199,7 +198,7 @@ fn can_gen_return_struct() { } #[test] -fn can_gen_human_readable_with_structs() { +fn can_generate_human_readable_with_structs() { abigen!( SimpleContract, r#"[ @@ -455,7 +454,7 @@ fn can_handle_duplicates_with_same_name() { } #[test] -fn can_abigen_console_sol() { +fn can_abican_generate_console_sol() { abigen!(Console, "ethers-contract/tests/solidity-contracts/console.json",); } @@ -569,7 +568,7 @@ async fn can_abiencoderv2_output() { // NOTE: this is commented out because this would result in compiler errors if key not set or // etherscan API not working #[test] -// fn can_gen_multi_etherscan() { +// fn can_generate_multi_etherscan() { // abigen!( // MyContract, "etherscan:0xdAC17F958D2ee523a2206206994597C13D831ec7"; // MyContract2, "etherscan:0x8418bb725b3ac45ec8fff3791dd8b4e0480cc2a2"; @@ -581,7 +580,7 @@ async fn can_abiencoderv2_output() { // } #[test] -fn can_gen_reserved_word_field_names() { +fn can_generate_reserved_word_field_names() { abigen!( Test, r#"[ @@ -636,8 +635,8 @@ async fn can_send_struct_param() { } #[test] -fn can_gen_seaport() { - abigen!(Seaport, "./tests/solidity-contracts/seaport.json"); +fn can_generate_seaport_1_0() { + abigen!(Seaport, "./tests/solidity-contracts/seaport_1_0.json"); assert_eq!( FulfillAdvancedOrderCall::abi_signature(), @@ -651,13 +650,58 @@ fn can_gen_seaport() { let encoded = err.clone().encode(); assert_eq!(err, SeaportErrors::decode(encoded).unwrap()); - let err = SeaportErrors::ConsiderationNotMet(ConsiderationNotMet { + let _err = SeaportErrors::ConsiderationNotMet(ConsiderationNotMet { order_index: U256::zero(), consideration_index: U256::zero(), shortfall_amount: U256::zero(), }); } +#[test] +fn can_generate_seaport_gt1_0() { + mod v1_1 { + use super::*; + abigen!(Seaport1, "./tests/solidity-contracts/seaport_1_1.json"); + } + + // (address,uint256,uint256,address,address,address,uint256 + mod v1_2 { + use super::*; + abigen!(Seaport2, "./tests/solidity-contracts/seaport_1_2.json"); + } + + mod v1_3 { + use super::*; + abigen!(Seaport3, "./tests/solidity-contracts/seaport_1_3.json"); + } + + // tuples len <= 12 + assert_clone::(); + assert_default::(); + assert_builtin::(); + + assert_clone::(); + assert_default::(); + assert_builtin::(); + + assert_clone::(); + assert_default::(); + assert_builtin::(); + + // tuples len > 12 + assert_clone::(); + // assert_default::(); + // assert_builtin::(); + + assert_clone::(); + // assert_default::(); + // assert_builtin::(); + + assert_clone::(); + // assert_default::(); + // assert_builtin::(); +} + #[test] fn can_generate_to_string_overload() { abigen!( @@ -691,11 +735,11 @@ fn can_generate_large_event() { fn can_generate_large_output_struct() { abigen!(LargeOutputStruct, "ethers-contract/tests/solidity-contracts/LargeStruct.json"); - let r = GetByIdReturn(Info::default()); + let _r = GetByIdReturn(Info::default()); } #[test] -fn gen_complex_function() { +fn can_generate_complex_function() { abigen!( WyvernExchangeV1, r#"[ @@ -705,13 +749,13 @@ fn gen_complex_function() { } #[test] -fn can_gen_large_tuple_types() { +fn can_generate_large_tuple_types() { abigen!(LargeTuple, "./tests/solidity-contracts/large_tuple.json"); } #[test] -fn can_gen_large_tuple_array() { - abigen!(LargeTuple, "./tests/solidity-contracts/large-array.json"); +fn can_generate_large_tuple_array() { + abigen!(LargeArray, "./tests/solidity-contracts/large-array.json"); impl Default for CallWithLongArrayCall { fn default() -> Self { @@ -743,11 +787,11 @@ fn can_handle_overloaded_function_with_array() { abigen!( Test, r#"[ - serializeString(string calldata, string calldata, string calldata) external returns (string memory) - serializeString(string calldata, string calldata, string[] calldata) external returns (string memory) - serializeBool(string calldata, string calldata, bool) external returns (string memory) - serializeBool(string calldata, string calldata, bool[] calldata) external returns (string memory) - ]"#, + serializeString(string calldata, string calldata, string calldata) external returns (string memory) + serializeString(string calldata, string calldata, string[] calldata) external returns (string memory) + serializeBool(string calldata, string calldata, bool) external returns (string memory) + serializeBool(string calldata, string calldata, bool[] calldata) external returns (string memory) + ]"#, ); } @@ -767,7 +811,7 @@ fn convert_uses_correct_abi() { // Ensure that `bar` is using the `Bar` ABI internally (this method lookup will panic if `bar` // is incorrectly using the `Foo` ABI internally). - bar.bar().call(); + drop(bar.bar().call()); } #[test] @@ -779,3 +823,11 @@ fn generates_non_zero_bytecode() { //sanity check that the bytecode is not the same assert_ne!(GREETER_BYTECODE, GREETER_DEPLOYED_BYTECODE); } + +#[test] +fn can_generate_hardhat_console() { + abigen!(HardhatConsole, "./tests/solidity-contracts/console.json"); + + fn exists() {} + exists::(); +} diff --git a/ethers-contract/tests/it/common/mod.rs b/ethers-contract/tests/it/common/mod.rs index 91be16863..1d6ab9011 100644 --- a/ethers-contract/tests/it/common/mod.rs +++ b/ethers-contract/tests/it/common/mod.rs @@ -1,4 +1,5 @@ #![cfg(not(target_arch = "wasm32"))] +#![allow(dead_code)] #[cfg(feature = "abigen")] use ethers_core::types::Address; diff --git a/ethers-contract/tests/it/console.rs b/ethers-contract/tests/it/console.rs deleted file mode 100644 index 87d689d15..000000000 --- a/ethers-contract/tests/it/console.rs +++ /dev/null @@ -1,5 +0,0 @@ -//! ensure console.sol can be generated via abigen! - -ethers_contract::abigen!(HardhatConsole, "./tests/solidity-contracts/console.json",); - -fn assert_console_calls(_: &hardhat_console::HardhatConsoleCalls) {} diff --git a/ethers-contract/tests/it/contract.rs b/ethers-contract/tests/it/contract.rs index b5e85b03b..66135ca55 100644 --- a/ethers-contract/tests/it/contract.rs +++ b/ethers-contract/tests/it/contract.rs @@ -1,4 +1,5 @@ #![allow(unused)] + pub use crate::common::*; use ethers_contract::{abigen, ContractFactory, EthAbiType}; use ethers_core::types::{Filter, ValueOrArray, H256}; diff --git a/ethers-contract/tests/it/contract_call.rs b/ethers-contract/tests/it/contract_call.rs index c1708e04f..29fbd9d2d 100644 --- a/ethers-contract/tests/it/contract_call.rs +++ b/ethers-contract/tests/it/contract_call.rs @@ -13,9 +13,9 @@ async fn contract_call_into_future_is_send() { let client = Arc::new(provider); let contract = DsProxyFactory::new(Address::zero(), client); - fn is_send(future: T) -> bool { - true + fn is_send(future: T) -> T { + future } - assert!(is_send(contract.cache().into_future())); + is_send(contract.cache().into_future()); } diff --git a/ethers-contract/tests/it/main.rs b/ethers-contract/tests/it/main.rs index 634148492..dda43f81b 100644 --- a/ethers-contract/tests/it/main.rs +++ b/ethers-contract/tests/it/main.rs @@ -1,11 +1,10 @@ -#![allow(unused)] +#![allow(clippy::extra_unused_type_parameters)] +#[cfg(feature = "abigen")] mod abigen; pub(crate) mod common; -#[cfg(feature = "abigen")] -mod console; + #[cfg(feature = "abigen")] mod contract; -mod contract_call; -fn main() {} +mod contract_call; diff --git a/ethers-contract/tests/solidity-contracts/seaport.json b/ethers-contract/tests/solidity-contracts/seaport_1_0.json similarity index 99% rename from ethers-contract/tests/solidity-contracts/seaport.json rename to ethers-contract/tests/solidity-contracts/seaport_1_0.json index 96e2276fd..b52354457 100644 --- a/ethers-contract/tests/solidity-contracts/seaport.json +++ b/ethers-contract/tests/solidity-contracts/seaport_1_0.json @@ -1 +1 @@ -{"abi":[{"inputs":[{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BadContractSignature","type":"error"},{"inputs":[],"name":"BadFraction","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BadReturnValueFromERC20OnTransfer","type":"error"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"}],"name":"BadSignatureV","type":"error"},{"inputs":[],"name":"ConsiderationCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"},{"internalType":"uint256","name":"shortfallAmount","type":"uint256"}],"name":"ConsiderationNotMet","type":"error"},{"inputs":[],"name":"CriteriaNotEnabledForItem","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"identifiers","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"ERC1155BatchTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EtherTransferGenericFailure","type":"error"},{"inputs":[],"name":"InexactFraction","type":"error"},{"inputs":[],"name":"InsufficientEtherSupplied","type":"error"},{"inputs":[],"name":"Invalid1155BatchTransferEncoding","type":"error"},{"inputs":[],"name":"InvalidBasicOrderParameterEncoding","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidCallToConduit","type":"error"},{"inputs":[],"name":"InvalidCanceller","type":"error"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidConduit","type":"error"},{"inputs":[],"name":"InvalidERC721TransferAmount","type":"error"},{"inputs":[],"name":"InvalidFulfillmentComponentData","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InvalidMsgValue","type":"error"},{"inputs":[],"name":"InvalidNativeOfferItem","type":"error"},{"inputs":[],"name":"InvalidProof","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidRestrictedOrder","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"InvalidSigner","type":"error"},{"inputs":[],"name":"InvalidTime","type":"error"},{"inputs":[],"name":"MismatchedFulfillmentOfferAndConsiderationComponents","type":"error"},{"inputs":[{"internalType":"enum Side","name":"side","type":"uint8"}],"name":"MissingFulfillmentComponentOnAggregation","type":"error"},{"inputs":[],"name":"MissingItemAmount","type":"error"},{"inputs":[],"name":"MissingOriginalConsiderationItems","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NoContract","type":"error"},{"inputs":[],"name":"NoReentrantCalls","type":"error"},{"inputs":[],"name":"NoSpecifiedOrdersAvailable","type":"error"},{"inputs":[],"name":"OfferAndConsiderationRequiredOnFulfillment","type":"error"},{"inputs":[],"name":"OfferCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderAlreadyFilled","type":"error"},{"inputs":[],"name":"OrderCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderIsCancelled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderPartiallyFilled","type":"error"},{"inputs":[],"name":"PartialFillsNotEnabledForOrder","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenTransferGenericFailure","type":"error"},{"inputs":[],"name":"UnresolvedConsiderationCriteria","type":"error"},{"inputs":[],"name":"UnresolvedOfferCriteria","type":"error"},{"inputs":[],"name":"UnusedItemParameters","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCounter","type":"uint256"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"}],"name":"CounterIncremented","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct SpentItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"indexed":false,"internalType":"struct ReceivedItem[]","name":"consideration","type":"tuple[]"}],"name":"OrderFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderValidated","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"counter","type":"uint256"}],"internalType":"struct OrderComponents[]","name":"orders","type":"tuple[]"}],"name":"cancel","outputs":[{"internalType":"bool","name":"cancelled","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder","name":"advancedOrder","type":"tuple"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"}],"name":"fulfillAdvancedOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder[]","name":"advancedOrders","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"offerFulfillments","type":"tuple[][]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"considerationFulfillments","type":"tuple[][]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"maximumFulfilled","type":"uint256"}],"name":"fulfillAvailableAdvancedOrders","outputs":[{"internalType":"bool[]","name":"availableOrders","type":"bool[]"},{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order[]","name":"orders","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"offerFulfillments","type":"tuple[][]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"considerationFulfillments","type":"tuple[][]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"maximumFulfilled","type":"uint256"}],"name":"fulfillAvailableOrders","outputs":[{"internalType":"bool[]","name":"availableOrders","type":"bool[]"},{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"considerationToken","type":"address"},{"internalType":"uint256","name":"considerationIdentifier","type":"uint256"},{"internalType":"uint256","name":"considerationAmount","type":"uint256"},{"internalType":"address payable","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"internalType":"address","name":"offerToken","type":"address"},{"internalType":"uint256","name":"offerIdentifier","type":"uint256"},{"internalType":"uint256","name":"offerAmount","type":"uint256"},{"internalType":"enum BasicOrderType","name":"basicOrderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"offererConduitKey","type":"bytes32"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalAdditionalRecipients","type":"uint256"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct AdditionalRecipient[]","name":"additionalRecipients","type":"tuple[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct BasicOrderParameters","name":"parameters","type":"tuple"}],"name":"fulfillBasicOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order","name":"order","type":"tuple"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"}],"name":"fulfillOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"offerer","type":"address"}],"name":"getCounter","outputs":[{"internalType":"uint256","name":"counter","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"counter","type":"uint256"}],"internalType":"struct OrderComponents","name":"order","type":"tuple"}],"name":"getOrderHash","outputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"getOrderStatus","outputs":[{"internalType":"bool","name":"isValidated","type":"bool"},{"internalType":"bool","name":"isCancelled","type":"bool"},{"internalType":"uint256","name":"totalFilled","type":"uint256"},{"internalType":"uint256","name":"totalSize","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementCounter","outputs":[{"internalType":"uint256","name":"newCounter","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"information","outputs":[{"internalType":"string","name":"version","type":"string"},{"internalType":"bytes32","name":"domainSeparator","type":"bytes32"},{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder[]","name":"advancedOrders","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"offerComponents","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"considerationComponents","type":"tuple[]"}],"internalType":"struct Fulfillment[]","name":"fulfillments","type":"tuple[]"}],"name":"matchAdvancedOrders","outputs":[{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order[]","name":"orders","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"offerComponents","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"considerationComponents","type":"tuple[]"}],"internalType":"struct Fulfillment[]","name":"fulfillments","type":"tuple[]"}],"name":"matchOrders","outputs":[{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"contractName","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order[]","name":"orders","type":"tuple[]"}],"name":"validate","outputs":[{"internalType":"bool","name":"validated","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"bytecode":{"object":"0x6101c060405234620000b9576200001f6200001962000114565b62000151565b604051615f7e90816200076d82396080518161282c015260a05181612852015260c05181612809015260e051818181611758015261269701526101005181818161162401526126e60152610120518181816117f40152612734015261014051816127b7015261016051816127dd015261018051818181611003015281816122f4015261246a01526101a05181818161233201526124a80152f35b600080fd5b604081019081106001600160401b03821117620000da57604052565b634e487b7160e01b600052604160045260246000fd5b601f909101601f19168101906001600160401b03821190821017620000da57604052565b620066eb60208138039182604051938492620001318285620000f0565b833981010312620000b957516001600160a01b0381168103620000b95790565b604060049162000160620002e3565b610120526101005260e05260c05260a05260805246610140526200018362000237565b610160526001600160a01b03166101808190528151630a96ad3960e01b815292839182905afa90811562000203575b600091620001cd575b506101a052620001cb6001600055565b565b620001f3915060403d8111620001fb575b620001ea8183620000f0565b81019062000213565b5038620001bb565b503d620001de565b6200020d6200022a565b620001b2565b9190826040910312620000b9576020825192015190565b506040513d6000823e3d90fd5b60c05160805160a0516040519160208301938452604083015260608201524660808201523060a082015260a0815260c0810181811060018060401b03821117620000da5760405251902090565b604051906200029382620000be565b6003825262312e3160e81b6020830152565b90815180926000905b828210620002cb575011620002c1570190565b6000828201520190565b915080602080928401015181850152018391620002ae565b620002ed62000747565b8051602080920120916200030062000284565b8281519101209160405181810192816200032b85600a906909ecccccae492e8cada560b31b81520190565b6e1d5a5b9d0e081a5d195b551e5c194b608a1b8152600f016d1859191c995cdcc81d1bdad95b8b60921b8152600e017f75696e74323536206964656e7469666965724f7243726974657269612c0000008152601d017f75696e74323536207374617274416d6f756e742c0000000000000000000000008152601401701d5a5b9d0c8d4d88195b99105b5bdd5b9d607a1b8152601101602960f81b81526001010392601f19938481018452620003e19084620000f0565b60405171086dedce6d2c8cae4c2e8d2dedc92e8cada560731b8282019081529481601287016e1d5a5b9d0e081a5d195b551e5c194b608a1b8152600f016d1859191c995cdcc81d1bdad95b8b60921b8152600e017f75696e74323536206964656e7469666965724f7243726974657269612c0000008152601d017f75696e74323536207374617274416d6f756e742c0000000000000000000000008152601401711d5a5b9d0c8d4d88195b99105b5bdd5b9d0b60721b8152601201701859191c995cdcc81c9958da5c1a595b9d607a1b8152601101602960f81b8152600101038181018352620004d29083620000f0565b6040519283818101620004fc906010906f09ee4c8cae486dedae0dedccadce8e6560831b81520190565b6f1859191c995cdcc81bd999995c995c8b60821b81526010016c1859191c995cdcc81e9bdb994b609a1b8152600d017113d999995c925d195b56d7481bd999995c8b60721b81526012017f436f6e73696465726174696f6e4974656d5b5d20636f6e73696465726174696f8152611b8b60f21b60208201526022016f1d5a5b9d0e081bdc99195c951e5c194b60821b8152601001711d5a5b9d0c8d4d881cdd185c9d151a5b594b60721b81526012016f1d5a5b9d0c8d4d88195b99151a5b594b60821b815260100170189e5d195ccccc881e9bdb9952185cda0b607a1b81526011016c1d5a5b9d0c8d4d881cd85b1d0b609a1b8152600d017f6279746573333220636f6e647569744b65792c0000000000000000000000000081526013016e3ab4b73a191a9b1031b7bab73a32b960891b8152600f01602960f81b81526001010382810185526200064e9085620000f0565b6040516c08a92a06e626488dedac2d2dc5609b1b8282019081529080600d83016b1cdd1c9a5b99c81b985b594b60a21b8152600c016e1cdd1c9a5b99c81d995c9cda5bdb8b608a1b8152600f016f1d5a5b9d0c8d4d8818da185a5b92590b60821b81526010017f6164647265737320766572696679696e67436f6e7472616374000000000000008152601901602960f81b8152600101038481018252620006f69082620000f0565b5190209786519020968351902095604051938492830195866200071991620002a5565b6200072491620002a5565b6200072f91620002a5565b039081018252620007419082620000f0565b51902090565b604051906200075682620000be565b600782526614d9585c1bdc9d60ca1b602083015256fe60806040526004361015610013575b600080fd5b60003560e01c806306fdde031461013f57806346423aa71461013657806355944a421461012d5780635b34b9661461012457806379df72bd1461011b57806387201b41146101125780638814773214610109578063a817440414610100578063b3a34c4c146100f7578063e7acab24146100ee578063ed98a574146100e5578063f07ec373146100dc578063f47b7740146100d3578063fb0f3ee1146100ca5763fd9f1e10146100c257600080fd5b61000e61132d565b5061000e61102c565b5061000e610f8b565b5061000e610f46565b5061000e610eb5565b5061000e610e07565b5061000e610da3565b5061000e610d32565b5061000e610be3565b5061000e610b0f565b5061000e610994565b5061000e61092f565b5061000e61089e565b5061000e6101c1565b5061000e610199565b91908251928382526000905b8482106101815750601f8460209495601f199311610174575b0116010190565b600085828601015261016d565b90602090818082850101519082860101520190610154565b503461000e57600060031936011261000e57602080526707536561706f727460475260606020f35b503461000e57602060031936011261000e57600435600052600260205260806040600020546040519060ff81161515825260ff8160081c16151560208301526effffffffffffffffffffffffffffff8160101c16604083015260881c6060820152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761027057604052565b610278610224565b604052565b60c0810190811067ffffffffffffffff82111761027057604052565b6020810190811067ffffffffffffffff82111761027057604052565b6040810190811067ffffffffffffffff82111761027057604052565b90601f601f19910116810190811067ffffffffffffffff82111761027057604052565b60405190610160820182811067ffffffffffffffff82111761027057604052565b6040519061032282610254565b565b60209067ffffffffffffffff811161033e575b60051b0190565b610346610224565b610337565b6001600160a01b0381160361000e57565b60a435906103228261034b565b35906103228261034b565b3590600682101561000e57565b92919261038d82610324565b60409461039c865192836102d1565b819584835260208093019160a080960285019481861161000e57925b8584106103c85750505050505050565b868483031261000e5784879184516103df81610254565b6103e887610374565b8152828701356103f78161034b565b83820152858701358682015260608088013590820152608080880135908201528152019301926103b8565b9080601f8301121561000e5781602061043d93359101610381565b90565b92919261044c82610324565b60409461045b865192836102d1565b819584835260208093019160c080960285019481861161000e57925b8584106104875750505050505050565b868483031261000e57848791845161049e8161027d565b6104a787610374565b8152828701356104b68161034b565b838201528587013586820152606080880135908201526080808801359082015260a080880135906104e68261034b565b820152815201930192610477565b9080601f8301121561000e5781602061043d93359101610440565b6004111561000e57565b35906103228261050f565b9190916101608184031261000e5761053a6102f4565b9261054482610369565b845261055260208301610369565b602085015267ffffffffffffffff90604083013582811161000e5781610579918501610422565b6040860152606083013591821161000e576105959183016104f4565b60608401526105a660808201610519565b608084015260a081013560a084015260c081013560c084015260e081013560e0840152610100808201359084015261012080820135908401526101408091013590830152565b35906effffffffffffffffffffffffffffff8216820361000e57565b92919267ffffffffffffffff8211610650575b604051916106336020601f19601f84011601846102d1565b82948184528183011161000e578281602093846000960137010152565b610658610224565b61061b565b9080601f8301121561000e5781602061043d93359101610608565b91909160a08184031261000e5761068d610315565b9267ffffffffffffffff823581811161000e57826106ac918501610524565b85526106ba602084016105ec565b60208601526106cb604084016105ec565b6040860152606083013581811161000e57826106e891850161065d565b6060860152608083013590811161000e57610703920161065d565b6080830152565b9080601f8301121561000e5781359061072282610324565b9261073060405194856102d1565b828452602092838086019160051b8301019280841161000e57848301915b84831061075e5750505050505090565b823567ffffffffffffffff811161000e57869161078084848094890101610678565b81520192019161074e565b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020808501948460051b01011161000e57565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600611156107f657565b6103226107bc565b608090805161080c816107ec565b8352816001600160a01b03918260208201511660208601526040810151604086015260608101516060860152015116910152565b90815180825260208080930193019160005b828110610860575050505090565b909192938260e0600192604088516108798382516107fe565b808501516001600160a01b031660a0840152015160c082015201950193929101610852565b50606060031936011261000e5767ffffffffffffffff60043581811161000e576108cc90369060040161070a565b9060243581811161000e576108e590369060040161078b565b60443592831161000e5761092b9361091161090761091795369060040161078b565b9490933691611bff565b90613e21565b604051918291602083526020830190610840565b0390f35b503461000e57600060031936011261000e57610949615017565b3360005260016020526020604060002060018154018091556040518181527f721c20121297512b72821b97f5326877ea8ecf4bb9948fea5bfcb6453074d37f833392a2604051908152f35b503461000e5760031960208136011261000e5760043567ffffffffffffffff811161000e576101608160040192823603011261000e576109d38261152d565b916109e06024830161152d565b906109ee6044840182611cfc565b6064850192916109fe8484611d50565b92909360848801610a0e90611dae565b95610a1891611d50565b969050610a236102f4565b6001600160a01b0390991689526001600160a01b031660208901523690610a4992610381565b60408701523690610a5992610440565b6060850152610a6b9060808501611db8565b60a482013560a084015260c482013560c084015260e482013560e08401526101048201356101008401526101248201356101208401526101408301526101440135610ab59161268a565b604051908152602090f35b9092916040820191604081528451809352606081019260208096019060005b818110610af95750505061043d9394818403910152610840565b8251151586529487019491870191600101610adf565b5060e060031936011261000e5767ffffffffffffffff60043581811161000e57610b3d90369060040161070a565b60243582811161000e57610b5590369060040161078b565b909160443584811161000e57610b6f90369060040161078b565b9060643595861161000e57610b8b610ba496369060040161078b565b929091610b9661035c565b9560c4359760843596611cc2565b9061092b60405192839283610ac0565b602060031982011261000e576004359067ffffffffffffffff821161000e57610bdf9160040161078b565b9091565b503461000e57610bf236610bb4565b610bfa615017565b60005b818110610c105760405160018152602090f35b80610c1e6001928486613f13565b610c2881806146ae565b610c318161152d565b91610c44610c3f3684610524565b614fa9565b91610c59836000526002602052604060002090565b610c6381856155a2565b50610c76610c72825460ff1690565b1590565b610c86575b505050505001610bfd565b7ffde361574a066b44b3b5fe98a87108b7565e327327954c4faeea56a4e6491a0a92610d2592610d01610d0793610cd6610ccf610cc86020968781019061158b565b3691610608565b898b615303565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b0161152d565b6040519384526001600160a01b039081169416929081906020820190565b0390a33880808080610c7b565b50604060031936011261000e5767ffffffffffffffff60043581811161000e57610d6090369060040161078b565b60249291923591821161000e5761092b92610d8d610d8561091794369060040161078b565b939092614750565b60405190610d9a82610299565b60008252613e21565b5060031960408136011261000e576004359067ffffffffffffffff821161000e57604090823603011261000e57610dfd610de16020926004016146e1565b60405190610dee82610299565b600082523391602435916141fd565b6040519015158152f35b5060031960808136011261000e576004359067ffffffffffffffff9081831161000e5760a090833603011261000e5760243590811161000e5761092b91610e55610e9692369060040161078b565b90606435610e628161034b565b6001600160a01b038116610ea85750610e90610e8433945b3690600401610678565b91604435933691611bff565b906141fd565b60405190151581529081906020820190565b610e84610e909194610e7a565b5060a060031936011261000e5767ffffffffffffffff60043581811161000e57610ee390369060040161078b565b9060243583811161000e57610efc90369060040161078b565b91909260443594851161000e57610f25610f1d610ba496369060040161078b565b929093614750565b9160405193610f3385610299565b6000855260843595339560643595612a0b565b503461000e57602060031936011261000e576020610f83600435610f698161034b565b6001600160a01b0316600052600160205260406000205490565b604051908152f35b503461000e57600060031936011261000e57610ff3610fa86127b4565b60405190610fb5826102b5565b600382527f312e3100000000000000000000000000000000000000000000000000000000006020830152604051928392606084526060840190610148565b9060208301526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660408301520390f35b5060031960208136011261000e5760043567ffffffffffffffff811161000e576102408160040192823603011261000e5761012435908160021c926001841193341585036112f85784936003821160028314916110d183600286117ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe870102018815926001820185028460011b880103998a92600360a088026024013593168a6115dc565b6110e38260051b6101c40135986107ec565b156111b5575050506111036110f78261152d565b6001600160a01b031690565b6001600160a01b0390811660248401351761118b5761115f60449461115a6111759761116b9461113560a4890161152d565b9060648901946111448661152d565b9060e48b01359360c48c01359333931691611dcf565b61152d565b91610204840190611537565b93909201356119df565b61117f6001600055565b60405160018152602090f35b60046040517f6ab37ce7000000000000000000000000000000000000000000000000000000008152fd5b9194509161121e6110f7606461122396611228996111d1611514565b8a819b996111df839b6107ec565b1561122d5750610d01916111f560a4850161152d565b61120086860161152d565b9060e48601359160c4870135916001600160a01b03339216906120c8565b611ac5565b6122c4565b611175565b611236816107ec565b6003810361127d57506112789161124f60a4850161152d565b61125a86860161152d565b9060e48601359160c4870135916001600160a01b03339216906121be565b610d01565b806112896004926107ec565b036112c3576112789161129b8861152d565b6112a686860161152d565b6044860135916001600160a01b03602488013592169033906120c8565b611278916112d08861152d565b6112db86860161152d565b6044860135916001600160a01b03602488013592169033906121be565b6040517fa61be9f0000000000000000000000000000000000000000000000000000000008152346004820152602490fd5b0390fd5b503461000e5761133c36610bb4565b611344615017565b60005b81811061135a5760405160018152602090f35b611365818385614fe2565b61136e8161152d565b60209061137c82840161152d565b6001600160a01b0391828116938433141580611508575b6114de576040956113a681880182611cfc565b6060808401926113b68486611d50565b90916080948a8689016113c890611dae565b976113d3908a611d50565b9a90506113de6102f4565b6001600160a01b03909c168c526001600160a01b03909116908b0152369061140592610381565b8c890152369061141492610440565b9086015284019061142491611db8565b60a0808201359084015260c0808201359084015260e08082013590840152610100808201359084015261012080820135908401526101409182840152013561146b9161268a565b93611480856000526002602052604060002090565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101001790555193845216917f6bacc01dbe442496068f7d234edd811f1a5f833243e0aec824f86ab861f3c90d90602090a3600101611347565b60046040517f80ec7374000000000000000000000000000000000000000000000000000000008152fd5b50838316331415611393565b60405190611521826102b5565b60208083523683820137565b3561043d8161034b565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e57602001918160061b3603831361000e57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e5760200191813603831361000e57565b9591906115e7615008565b6115fb610140880135610120890135615296565b50611604611927565b611622611615610200890189611537565b6101e08a013591506118f6565b7f00000000000000000000000000000000000000000000000000000000000000006080528160a0526060602460c037604060646101203760e06080908120610160526001610264359081016102a060059290921b918201526102c081019384526024906102e00137610160928460a0528560c052600060e05260005b8394610204358210156116fb5790604060a0600193602090818560061b6102840161010037838560061b6102840161012037019660e0608020885201968888528960c08201526101008360061b610284019101370193929361169e565b5090929350969590966001610204350160051b610160206060525b83610264358210156117495790604060a060019301958787528860c08201526101008360061b6102840191013701611716565b505093509490506103229391507f00000000000000000000000000000000000000000000000000000000000000006080528260a052606060c460c03760206101046101203760c0608020600052602060002060e05260016102643560051b610200015261022092836102643560051b0152606060c46102406102643560051b01376118ee610cc8608435936117f1856001600160a01b03166000526001602052604060002090565b547f00000000000000000000000000000000000000000000000000000000000000006080526040608460a03760605161010052846101205260a0610144610140376101e0526101809485608020956102643560051b0190868252336101a06102643560051b015260806101c06102643560051b01526101206101e06102643560051b01527f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f3160a4359260a061026435026101e00190a360006060526118e56060820161115a6118bf8261152d565b966118cc6080860161152d565b906001600160a01b03809916906101608701358b61569d565b9581019061158b565b9216906147dc565b106118fd57565b60046040517f466aa616000000000000000000000000000000000000000000000000000000008152fd5b601861012435106102643560061b61026001610244351461024061022435146020600435141616161561195657565b60046040517f39f3e3fd000000000000000000000000000000000000000000000000000000008152fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90156119b95790565b61043d611980565b91908110156119d2575b60061b0190565b6119da611980565b6119cb565b919234936000915b808310611a4257505050828211611a185781611a0291611e97565b808211611a0d575050565b610322910333611e97565b60046040517f1a783b8d000000000000000000000000000000000000000000000000000000008152fd5b909194611a508683856119c1565b90813590808211611a1857611a748260206001950135611a6f8161034b565b611e97565b03950191906119e7565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818110611ab9570390565b611ac1611a7e565b0390565b90939291908115611b85579333611ade60a0830161152d565b60e08301359260c08101355b61118b578460051b6101e40335946102008201611b078184611537565b93905060005b848110611b24575050505050956103229596611f2c565b8989858e611b3c85611b368989611537565b906119c1565b803592611b6a575b91611b649391611b5d6110f7602060019998960161152d565b908c611f2c565b01611b0d565b92909493919b8c611b7a91611aae565b9b9193949092611b44565b933394611b918261152d565b6040830135926020810135611aea565b81601f8201121561000e57803591611bb883610324565b92611bc660405194856102d1565b808452602092838086019260051b82010192831161000e578301905b828210611bf0575050505090565b81358152908301908301611be2565b909291611c0b84610324565b91604094611c1b865194856102d1565b839581855260208095019160051b83019380851161000e5783925b858410611c465750505050505050565b67ffffffffffffffff90843582811161000e5786019060a08285031261000e578451611c7181610254565b8235815289830135600281101561000e578a82015285830135868201526060808401359082015260808084013594851161000e57611cb3868c96879601611ba1565b90820152815201930192611c36565b90611cf090610bdf9a99989796959493986001600160a01b03811615600014611cf6575033985b3691611bff565b90612a0b565b98611ce9565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e576020019160a082023603831361000e57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e576020019160c082023603831361000e57565b600411156107f657565b3561043d8161050f565b6004821015611dc45752565b611dcc6107bc565b52565b949290959391841515600014611e3b5761032296604051967f4ce34aa2000000000000000000000000000000000000000000000000000000008852602060048901526001602489015260448801526064870152608486015260a485015260c484015260e4830152612451565b9291946002919450611e4c816107ec565b03611e8b57600103611e61576103229361504d565b60046040517fefcc00b1000000000000000000000000000000000000000000000000000000008152fd5b9291906103229461515b565b90611ea181611efb565b600080808084865af115611eb3575050565b60449250611ebf612895565b6001600160a01b03604051927f470c7c1d0000000000000000000000000000000000000000000000000000000084521660048301526024820152fd5b15611f0257565b60046040517f91b3e514000000000000000000000000000000000000000000000000000000008152fd5b929193949094611f3b83611efb565b611f4581836122b1565b806120ba575050604051926000947f23b872dd00000000000000000000000000000000000000000000000000000000865280600452816024528260445260208660648180885af1803d15601f3d1160018a51141617163d1515811615611fb4575b505050505050604052606052565b80863b151516611fa657908795969115611ff457602486887f5f15d672000000000000000000000000000000000000000000000000000000008252600452fd5b1561202e57506084947f98891923000000000000000000000000000000000000000000000000000000008552600452602452604452606452fd5b3d61206d575b5060a4947ff486bc8700000000000000000000000000000000000000000000000000000000855260045260245260445281606452608452fd5b601f3d0160051c9060051c9080600302918082116120a1575b505060205a9101106120985785612034565b833d81803e3d90fd5b8080600392028380020360091c92030201018680612086565b9061032295929493916125c0565b959092949391936120d981836122b1565b806120f0575050600103611e61576103229361504d565b9060649593916000979593975060208251146000146121ab5760c0906001906040845260208401527f4ce34aa20000000000000000000000000000000000000000000000000000000060408401526020604484015280888401525b02019360027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc48601527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe48501526004840152602483015260448201520152565b5060c0868201600181510180915261214b565b9590919293946121cd86611efb565b6121d781836122b1565b806121e75750506103229461515b565b906064959694939291602082511460001461229e5760c0906001906040845260208401527f4ce34aa20000000000000000000000000000000000000000000000000000000060408401526020604484015280888401525b02019360037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc48601527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe48501526004840152602483015260448201520152565b5060c0868201600181510180915261223e565b906020820151036122bf5750565b610322905b60408082510361244d57602082015160c06064840151026044019180519260206001600160a01b036000928184927f00000000000000000000000000000000000000000000000000000000000000001674ff00000000000000000000000000000000000000001783528684527f000000000000000000000000000000000000000000000000000000000000000086526055600b201696855281805284880182885af190519015612402577fffffffff000000000000000000000000000000000000000000000000000000007f4ce34aa2000000000000000000000000000000000000000000000000000000009116036123c05750505060209052565b517f1cf99b2600000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03919091166024820152604490fd5b611329848361240f612895565b517fd13d53d40000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201529081906024820190565b5050565b6040519160206001600160a01b036101046000938285937f00000000000000000000000000000000000000000000000000000000000000001674ff00000000000000000000000000000000000000001784528685527f00000000000000000000000000000000000000000000000000000000000000006040526055600b20169660405282805282875af190519015612574577fffffffff000000000000000000000000000000000000000000000000000000007f4ce34aa200000000000000000000000000000000000000000000000000000000911603612530575050565b6040517f1cf99b2600000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03919091166024820152604490fd5b61132983612580612895565b6040517fd13d53d40000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201529081906024820190565b9060649492939160208251146000146126775760c0906001906040845260208401527f4ce34aa20000000000000000000000000000000000000000000000000000000060408401526020604484015280878401525b02019260017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc48501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe484015260048301526024820152600060448201520152565b5060c08582016001815101809152612615565b91909161014081018051917f0000000000000000000000000000000000000000000000000000000000000000604051604083018051928351926020809501906000915b868684106127915750505050506040519160051b8220917f00000000000000000000000000000000000000000000000000000000000000009093606086019481865101906000915b8a831061276d575050505050601f198660051b604051209401978851907f00000000000000000000000000000000000000000000000000000000000000008a5282519383528451958552865261018089209852525252565b838082601f19600194510180519089815260e0812087525201920192019190612715565b8082601f19600194510180519088815260c08120875252019201920191906126cd565b467f0000000000000000000000000000000000000000000000000000000000000000036127ff577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815261288f8161027d565b51902090565b3d61289c57565b601f3d0160051c60405160051c9080600302918082116128cf575b505060205a9101106128c557565b3d6000803e3d6000fd5b8080600392028380020360091c920302010138806128b7565b919082604091031261000e576040516040810181811067ffffffffffffffff821117612922575b6040526020808294803584520135910152565b61292a610224565b61290f565b92919261293b82610324565b60409261294a845192836102d1565b819581835260208093019160061b84019381851161000e57915b84831061297357505050505050565b83869161298084866128e8565b815201920191612964565b9291909261299884610324565b916129a660405193846102d1565b829480845260208094019060051b83019282841161000e5780915b8483106129d057505050505050565b823567ffffffffffffffff811161000e57820184601f8201121561000e578691612a00868385809535910161292f565b8152019201916129c1565b96989792612a268a612a359695612a2d95949998998b612c40565b369161298b565b93369161298b565b908251825191612a4d612a48848461314b565b61366d565b9760009586915b848310612b47575050506000935b838510612abf57505050505080612ab4575b50825115612a8a5782612a8691613b15565b9190565b60046040517fd5da9a1b000000000000000000000000000000000000000000000000000000008152fd5b835103835238612a74565b909192939488612ada84612ad38986612c1e565b518a613745565b8051608001516001600160a01b03166001600160a01b03612b086110f760208501516001600160a01b031690565b911603612b225750506001809101955b0193929190612a62565b8791612b4191612b3a85896001979c01038093612c1e565b528b612c1e565b50612b18565b9091968a612b6583612b5e8b879b98999a9b612c1e565b518c6136c9565b8051608001516001600160a01b03166001600160a01b03612b936110f760208501516001600160a01b031690565b911603612bb05750506001809101975b0191909594939295612a54565b8991612bcd91612bc6856001969d038093612c1e565b528d612c1e565b50612ba3565b90612bdd82610324565b612bea60405191826102d1565b828152601f19612bfa8294610324565b0190602036910137565b602090805115612c12570190565b612c1a611980565b0190565b6020918151811015612c33575b60051b010190565b612c3b611980565b612c2b565b93929091612c4c615008565b845192612c5884612bd3565b9160008352601d604560003560e01c061160011b9060005b868110612d30575050600314612d0657612c8a9086613266565b60005b838110612c9c57505050509050565b80612ca960019284612c1e565b5115612d0157612cfb612cbc8289612c1e565b5151612cc88386612c1e565b519086612cdc82516001600160a01b031690565b60208301516001600160a01b03169060606040850151940151946145e5565b01612c8d565b612cfb565b60046040517f12d3f5a3000000000000000000000000000000000000000000000000000000008152fd5b612d3a818a612c1e565b51918015612ebf57612d4d868685614cb3565b9290916001850189528215612eab57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91612d89868b612c1e565b52019380519260a084015193604060c08201519101518051908560005b838110612e405750505050606080935101519485519560005b878110612dd85750505050505050506001905b01612c70565b808760a0612de860019486612c1e565b5188612e2489898d6080860197612e01895187836131fa565b918701958651908a518214600014612e30575050508085525b80885284516131a0565b90520151905201612dbf565b612e39926131fa565b8552612e1a565b612e4a8184612c1e565b519b8c5115179b86868b60808401938451612e669085896131fa565b60608192019586519881518a1460001499612e919760019b612e9b575050508187525b52845161315f565b9052018690612da6565b612ea4926131fa565b8752612e89565b509360019392506000915060200152612dd2565b91906000602060019301528181018652612dd2565b612edc615008565b805192612ee884612bd3565b92600091828552601d6045843560e01c061160011b90835b878110612f90575050600314612d0657612f1a9083613266565b838110612f275750505050565b80612f3460019285612c1e565b5115612f8b57612f85612f478285612c1e565b5151612f538387612c1e565b5190612f6681516001600160a01b031690565b60208201516001600160a01b0316906060604084015193015193614513565b01612f1a565b612f85565b612f9a8187612c1e565b51918581156130fb5750612faf888685614ee0565b929091600185018b528883156130e95750907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91612fed868d612c1e565b52019380519260a084015191604060c0860151950151805190858c5b83811061308f5750505050606090510151938451948a5b86811061303857505050505050506001905b01612f00565b8061304560019284612c1e565b5160a0608082019189613083888b61305f87518d866131fa565b60608601948d8651908a518214600014612e305750505080855280885284516131a0565b90520151905201613020565b6130998184612c1e565b519b8c5115179b868a89608084019384516130b59085896131fa565b60608192019586519881518a14600014996130df9760019b612e9b5750505081875252845161315f565b9052018690613009565b92505093600193925060200152613032565b6020600193929401528181018852613032565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482118115151661313f570290565b613147611a7e565b0290565b81198111613157570190565b612c1a611a7e565b909283820361316e5750505090565b82939161318a613196946131909303954203918287039061310e565b9261310e565b9061314b565b9081049015150290565b90928382036131af5750505090565b926131906131cd9261318a856001969703964203918288039061310e565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830104019015150290565b9190918281146132435782818309613219576132159161310e565b0490565b7fc63cf0890000000000000000000000000000000000000000000000000000000060005260046000fd5b50905090565b600211156107f657565b5161043d816107ec565b611dcc826107ec565b815181519260005b8281106133a45750505060005b82811061328757505050565b6132918183612c1e565b516132c56132b160208301516effffffffffffffffffffffffffffff1690565b6effffffffffffffffffffffffffffff1690565b1561339b5751606081018051519060005b828110613354575050506040809101908151519160005b83811061330257505050506001905b0161327b565b61331f613319613313838551612c1e565b51613253565b60031090565b61332b576001016132ed565b600483517fa6cfc673000000000000000000000000000000000000000000000000000000008152fd5b613365613319613313838551612c1e565b613371576001016132d6565b60046040517fff75a340000000000000000000000000000000000000000000000000000000008152fd5b506001906132fc565b6133ae8183612c1e565b5180519086821015613565576020916133e56132b1846133ce848b612c1e565b5101516effffffffffffffffffffffffffffff1690565b1561355a576133f49087612c1e565b515191604092838301519183015161340b81613249565b61341481613249565b6134e55783015180518210156134bc579061342e91612c1e565b5191600383519361343e856107ec565b84906134558482019160048351981485039061325d565b606085015190525b11156134935750906001929181613478575b50505b0161326e565b61348c91608060608301519201519161358f565b388061346f565b600490517f94eb6af6000000000000000000000000000000000000000000000000000000008152fd5b600484517fbfb3f8ce000000000000000000000000000000000000000000000000000000008152fd5b929060608094015180518210156135315760039161350291612c1e565b5193845194613510866107ec565b85916135278583019260048451991486039061325d565b850151905261345d565b600483517f6088d7de000000000000000000000000000000000000000000000000000000008152fd5b505050600190613472565b60046040517f869586c4000000000000000000000000000000000000000000000000000000008152fd5b91909160009081526020808220928181019282825192600593841b0101915b8285106135eb575050505050036135c157565b60046040517f09bde339000000000000000000000000000000000000000000000000000000008152fd5b8451808711821b968752958418959095526040812094938301936135ae565b604051906060820182811067ffffffffffffffff821117613660575b8060405260408361363683610254565b6000928381528360808301528360a08301528360c08301528360e083015281528260208201520152565b613668610224565b613626565b9061367782610324565b61368460405191826102d1565b828152601f196136948294610324565b019060005b8281106136a557505050565b6020906136b061360a565b82828501015201613699565b906002821015611dc45752565b9092916136d461360a565b93805115613714576136f6926001600160a01b038693166080845101526137e9565b81516060810151156137055750565b60806000918260208601520152565b60246040517f375c24c100000000000000000000000000000000000000000000000000000000815260006004820152fd5b92919061375061360a565b9381511561378d576137639185916139aa565b60208301903382526040840152825190606082015115613781575050565b60009182608092520152565b60246040517f375c24c100000000000000000000000000000000000000000000000000000000815260016004820152fd5b507f7fda72790000000000000000000000000000000000000000000000000000000060005260046000fd5b92919260208201906020825151825181101561399d575b60051b82010151928351926020604085015181835101518151811015613990575b60051b01015160009460208697015161397a575b9061012060609260408b5193805185526020810151602086015201516040840152805160208c0152015160408a01522091805160051b01905b8181106138c1575050505060608293945101526138885750565b60011461389757610322611a7e565b7f91b3e5140000000000000000000000000000000000000000000000000000000060005260046000fd5b60209095949501906020825151855181101561396d575b60051b85010151602081015115613964575160606020604083015181865101518151811015613957575b60051b01015196818801519081158a8381011060011b17179801966000828201522084149060408a0151610120820151149060208b015190511416161561394a575b9061386e565b6139526137be565b613944565b61395f6137be565b613902565b50949394613944565b6139756137be565b6138d8565b6060820180516000909152801597509550613835565b6139986137be565b613821565b6139a56137be565b613800565b9291602080830194855151918151831015613b08575b80600593841b8301015194606093828588510151818b5101518151811015613afb575b831b010151926000968188990151613ae6575b51948451865281850151828701526040850151604087015260a0809501519a608087019b8c52878720948051851b01905b818110613a4257505050505050508394955001526138885750565b83909a999a01908c848351518551811015613ad9575b871b850101518581015115613acf578a869151015181855101518151811015613ac2575b881b0101518a81019b8d8d518091019e8f9115911060011b17179c9b60009052888b822089149251910151141615613ab5575b90613a27565b613abd6137be565b613aaf565b613aca6137be565b613a7c565b5050999899613aaf565b613ae16137be565b613a58565b848701805160009091528015995097506139f6565b613b036137be565b6139e3565b613b106137be565b6139c0565b908151613b2181612bd3565b9260005b828110613be5575050503490613b39611514565b9080519060005b828110613b7457505050613b53906122c4565b80613b64575b5061043d6001600055565b613b6e9033611e97565b38613b59565b613b7e8183612c1e565b518051908151613b8d816107ec565b613b96816107ec565b15613bca575b8560019392826040613bbb6020613bc49601516001600160a01b031690565b91015191613cae565b01613b40565b9560608293920181815111611a185751900395909190613b9c565b613bef8183612c1e565b51613c0f6132b160208301516effffffffffffffffffffffffffffff1690565b15613ca557613c27613c218388612c1e565b60019052565b606080915101519081519160005b838110613c4a57505050506001905b01613b25565b82613c558284612c1e565b51015180613c665750600101613c35565b6040517fa5f542080000000000000000000000000000000000000000000000000000000081526004810187905260248101929092526044820152606490fd5b50600190613c44565b9290918351613cbc816107ec565b613cc5816107ec565b613d1a57505050613ce36110f760208301516001600160a01b031690565b6001600160a01b03604083015191161761118b57806060613d1160806103229401516001600160a01b031690565b91015190611e97565b90919260018151613d2a816107ec565b613d33816107ec565b03613d8357604081015161118b5761032293613d5960208301516001600160a01b031690565b906001600160a01b036060613d7860808601516001600160a01b031690565b940151931691611f2c565b9260028451613d91816107ec565b613d9a816107ec565b03613de05783613db760206103229601516001600160a01b031690565b60808201516001600160a01b0316926001600160a01b03606060408501519401519416916120c8565b83613df860206103229601516001600160a01b031690565b60808201516001600160a01b0316926001600160a01b03606060408501519401519416916121be565b90613e33909493929482519083612ed4565b613e3c8261366d565b9160009485915b808310613e705750505090613e619184829495613e65575b50613b15565b5090565b825103825238613e5b565b909195613e7e878385613f13565b613ea4613e8b8280611537565b90613e9b60209485810190611537565b92909189613f6c565b906001600160a01b03613ed96110f7613ec960808651016001600160a01b0390511690565b938501516001600160a01b031690565b911603613ef057506001809101965b019190613e43565b96613f0d8298600193830390613f06828a612c1e565b5287612c1e565b50613ee8565b9190811015613f54575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18136030182121561000e570190565b613f5c611980565b613f1d565b61043d9036906128e8565b92909391613f7861360a565b948115801561415e575b61413457613f8e61360a565b613fa381613f9d36888861292f565b886139aa565b5191613fba87613fb436848661292f565b886137e9565b613fc48751613253565b835190613fd0826107ec565b613fd9826107ec565b613fe2816107ec565b148015906140fc575b80156140e9575b6140bf5761043d9561406f95608095896060948588019687518784510151106000146140825750505061403161402c8593614057936119b0565b613f61565b60208361404a8d828a5191510151900396845190612c1e565b5151015191015190612c1e565b5101528651015190525b01516001600160a01b031690565b6080835101906001600160a01b03169052565b86979694506140b1935061404a856140a161402c6020956040956119b0565b9451015188518551910397612c1e565b510152519086510152614061565b60046040517f09cfb455000000000000000000000000000000000000000000000000000000008152fd5b5060408751015160408401511415613ff2565b508651602001516001600160a01b03166001600160a01b0361412b6110f760208701516001600160a01b031690565b91161415613feb565b60046040517f98e9db6e000000000000000000000000000000000000000000000000000000008152fd5b508315613f82565b6040519061417382610254565b604051608083610160830167ffffffffffffffff8111848210176141f0575b6040526000808452806020850152606093846040820152848082015281848201528160a08201528160c08201528160e08201528161010082015281610120820152816101408201528252806020830152604082015282808201520152565b6141f8610224565b614192565b909291614208615017565b600260005561421784836148c0565b9490919260405195614228876102b5565b6001875260005b6020808210156142515790602091614245614166565b90828b0101520161422f565b505061428583959761428061429e9a61428e97998351156142ba575b60208401528251156142ad575b82613266565b612c04565b515195866142c7565b81516001600160a01b0316612cdc565b6142a86001600055565b600190565b6142b5611980565b61427a565b6142c2611980565b61426d565b939192909360a093848201519360c0830151966142e2611514565b96604092838601908151519160005b8381106143d7575050505034986060809601978851519860005b8a8110614338575050505050505050505050614326906122c4565b8061432e5750565b6103229033611e97565b614343818351612c1e565b51898101805161435d87878d8c60808801958651906144a1565b8092528783015190528151614371816107ec565b61437a816107ec565b15614397575b50906143918d8c6001943390613cae565b0161430b565b90919e9d8082116143ae579d9e9d039c908a614380565b600489517f1a783b8d000000000000000000000000000000000000000000000000000000008152fd5b6143e2818351612c1e565b5180516143ee816107ec565b6143f7816107ec565b15614441579061443b8d8f93868f8d6144236001988e936060870193845195608089019687519061446a565b9052528c610120613bbb82516001600160a01b031690565b016142f1565b600488517f12d3f5a3000000000000000000000000000000000000000000000000000000008152fd5b90939084810361448057505061043d93506131fa565b938361449561043d979661449b9496866131fa565b936131fa565b9061315f565b9093908481036144b757505061043d93506131fa565b938361449561043d97966144cc9496866131fa565b906131a0565b90815180825260208080930193019160005b8281106144f2575050505090565b909192938260a08261450760019489516107fe565b019501939291016144e4565b91939290936040805193608091828601918652602090600082880152838188015285518093528160a088019601936000915b84831061459a5750505050505091614595827f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f31948380950360608501526001600160a01b038091169716956144d2565b0390a3565b90919293949684836001928a5180516145b2816107ec565b8252808401516001600160a01b031684830152858101518683015260609081015190820152019801959493019190614545565b92909493916040918251946080918287019187526001600160a01b0394856020921682890152838189015286518093528160a089019701936000915b84831061466a57505050505050828285949361459593867f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f319896036060870152169716956144d2565b90919293949784836001928b518051614682816107ec565b8252808401518c1684830152858101518683015260609081015190820152019901959493019190614621565b9035907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea18136030182121561000e570190565b6146e9614166565b506147336147056146fa83806146ae565b92602081019061158b565b61471c6040519461471586610254565b3690610524565b845260016020850152600160408501523691610608565b606082015260405161474481610299565b60008152608082015290565b61475982610324565b9161476760405193846102d1565b808352601f1961477682610324565b0160005b8181106147c557505060005b8181106147935750505090565b806147a96147a46001938587613f13565b6146e1565b6147b38287612c1e565b526147be8186612c1e565b5001614786565b6020906147d0614166565b8282880101520161477a565b929190836000526002602052604060002091825460ff8160081c1661487b576effffffffffffffffffffffffffffff8160101c1661484a579460ff7101000000000000000000000000000001000195961615614839575b50505055565b61484292615303565b388080614833565b602486604051907fee9e0e630000000000000000000000000000000000000000000000000000000082526004820152fd5b602486604051907f1a5155740000000000000000000000000000000000000000000000000000000082526004820152fd5b90805b6148b7575090565b809106806148af565b90918151926148db610c7260a086015160c087015190615296565b614ca7576148fe6132b160208501516effffffffffffffffffffffffffffff1690565b9361491e6132b160408601516effffffffffffffffffffffffffffff1690565b948581118015614c9f575b614c755785811080614c5d575b614c335761498261494683614fa9565b9360e0840151608085015161495a81611da4565b85516001600160a01b0316918761497b60208901516001600160a01b031690565b948b615cc1565b614996836000526002602052604060002090565b916149a4610c7284866155a2565b614c23578254958460ff881615614bfc575b5050506effffffffffffffffffffffffffffff90818660101c169560881c96871515600014614b7f5760018103614b4757505085945b856149f7888361314b565b11614b3d575b86614a079161314b565b8082871183831117614ad6575b5090614a8f818493614a4e614ad19660017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b84547fffffffffffffffffffffffffffffff00000000000000000000000000000000ff16911660101b70ffffffffffffffffffffffffffffff000016178355565b815470ffffffffffffffffffffffffffffffffff1690861660881b7fffffffffffffffffffffffffffffff000000000000000000000000000000000016179055565b929190565b9690614ae987614aef92989594986148ac565b826148ac565b80150180809204970492049480861181841117614b0e57909138614a14565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80860396506149fd565b959096868103614b58575b506149ec565b614b7281614b6c89614b78959b9a9b61310e565b9861310e565b9761310e565b9438614b52565b9550955090614ad191614bb78260017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b81547fffffffffffffffffffffffffffffff00000000000000000000000000000000ff1687821660101b70ffffffffffffffffffffffffffffff000016178255614a8f565b6060614c12614c1b94516001600160a01b031690565b92015191615303565b3880846149b6565b5050509150915090600090600090565b60046040517fa11b63ff000000000000000000000000000000000000000000000000000000008152fd5b5060016080830151614c6e81611da4565b1615614936565b60046040517f5a052b32000000000000000000000000000000000000000000000000000000008152fd5b508015614929565b50600092508291508190565b919290928251614ccf610c7260a083015160c0840151906152df565b614ed057614cf26132b160208601516effffffffffffffffffffffffffffff1690565b614d116132b160408701516effffffffffffffffffffffffffffff1690565b958682118015614ec8575b614c755786821080614eb0575b614c3357614d7d90614d3a84614fa9565b9460e0850151608086015190614d4f82611da4565b87614d6188516001600160a01b031690565b93614d7660208a01516001600160a01b031690565b958c615da2565b614d91836000526002602052604060002090565b91614d9f610c728486615645565b614c23578254958460ff881615614e92575b5050506effffffffffffffffffffffffffffff90818660101c169560881c96871515600014614b7f5760018103614e6657505085945b85614df2888361314b565b11614e5c575b86614e029161314b565b8082871183821117614e48575090614a8f818493614a4e614ad19660017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b969050614aef614ae98789989594986148ac565b8086039650614df8565b959096868103614e77575b50614de7565b614b7281614b6c89614e8b959b9a9b61310e565b9438614e71565b6060614c12614ea894516001600160a01b031690565b388084614db1565b5060016080840151614ec181611da4565b1615614d29565b508115614d1c565b5050915050600090600090600090565b919290928251614efc610c7260a083015160c084015190615296565b614ed057614f1f6132b160208601516effffffffffffffffffffffffffffff1690565b614f3e6132b160408701516effffffffffffffffffffffffffffff1690565b958682118015614fa1575b614c755786821080614f89575b614c3357614f6790614d3a84614fa9565b614f7b836000526002602052604060002090565b91614d9f610c7284866155a2565b5060016080840151614f9a81611da4565b1615614f56565b508115614f49565b61043d90614fc2606082015151610140830151906118f6565b80516001600160a01b03166000908152600160205260409020549061268a565b909161043d92811015614ffb575b60051b8101906146ae565b615003611980565b614ff0565b615010615017565b6002600055565b60016000540361502357565b60046040517f7fa8a987000000000000000000000000000000000000000000000000000000008152fd5b9092813b1561512d57604051926000947f23b872dd000000000000000000000000000000000000000000000000000000008652806004528160245282604452858060648180885af1156150a65750505050604052606052565b8593943d6150e9575b5060a4947ff486bc870000000000000000000000000000000000000000000000000000000085526004526024526044526064526001608452fd5b601f3d0160051c9060051c908060030291808211615114575b505060205a91011061209857856150af565b8080600392028380020360091c92030201018680615102565b507f5f15d6720000000000000000000000000000000000000000000000000000000060005260045260246000fd5b929093833b1561526857604051936080519160a0519360c051956000987ff242432a000000000000000000000000000000000000000000000000000000008a528060045281602452826044528360645260a06084528960a452898060c48180895af1156151d857505050505060805260a05260c052604052606052565b89949550883d61521b575b5060a4957ff486bc87000000000000000000000000000000000000000000000000000000008652600452602452604452606452608452fd5b601f3d0160051c9060051c90806003029180821161524f575b505060205a91011061524657866151e3565b843d81803e3d90fd5b8080600392028380020360091c92030201018780615234565b837f5f15d6720000000000000000000000000000000000000000000000000000000060005260045260246000fd5b42109081156152d4575b506152aa57600190565b60046040517f6f7eac26000000000000000000000000000000000000000000000000000000008152fd5b9050421015386152a0565b42109081156152f8575b506152f357600190565b600090565b9050421015386152e9565b9091336001600160a01b0383161461559d5761531d6127b4565b926000937f190100000000000000000000000000000000000000000000000000000000000085526002526022526042832090836022528380528392815191601f198101805184604103918860018411938415615532575b508514851515169788156153c3575b5050505050505050156153935750565b60049061539e612895565b7f4f7fb80d000000000000000000000000000000000000000000000000000000008152fd5b909192939495969750604082527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc8501937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0855196019660208b60648a519b7f1626ba7e000000000000000000000000000000000000000000000000000000009d8e8b528c520188845afa998a615469575b505050505252523880808080808080615383565b8b51036154765780615455565b908a913b61550a576154e257640101000000821a156154b757807f815e1d640000000000000000000000000000000000000000000000000000000060049252fd5b6024917f1f003d0a000000000000000000000000000000000000000000000000000000008252600452fd5b807f8baa579f0000000000000000000000000000000000000000000000000000000060049252fd5b6004827f4f7fb80d000000000000000000000000000000000000000000000000000000008152fd5b9850506040840180519060608601518b1a99615569575b89865288835260208b60808560015afa5083835287865252885138615374565b9850601b8160ff1c01987f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82168152615549565b505050565b905460ff8160081c16615614576effffffffffffffffffffffffffffff8160101c1690816155d3575b505050600190565b60881c11156155e35780806155cb565b602490604051907f10fda3e10000000000000000000000000000000000000000000000000000000082526004820152fd5b602482604051907f1a5155740000000000000000000000000000000000000000000000000000000082526004820152fd5b906000905460ff8160081c16615694576effffffffffffffffffffffffffffff8160101c16908161567a575b50505050600190565b60881c111561568a578080615671565b6155e35750600090565b50905050600090565b90929160019060048110156156fd575b11806156ea575b806156d7575b6156c5575b50505050565b6156ce9361570a565b388080806156bf565b506001600160a01b0382163314156156ba565b506001600160a01b0384163314156156b4565b6157056107bc565b6156ad565b6000919290829161032295604051906001600160a01b0360208301937f0e1d31dc00000000000000000000000000000000000000000000000000000000855288602485015233604485015216606483015260848201526084815261576d8161027d565b51915afa615e78565b90815180825260208080930193019160005b828110615796575050505090565b909192938260a0600192875180516157ad816107ec565b8252808401516001600160a01b03168483015260408082015190830152606080820151908301526080908101519082015201950193929101615788565b90815180825260208080930193019160005b82811061580a575050505090565b909192938260c060019287518051615821816107ec565b8252808401516001600160a01b039081168584015260408083015190840152606080830151908401526080808301519084015260a0918201511690820152019501939291016157fc565b906004821015611dc45752565b6060519081815260208091019160809160005b828110615899575050505090565b83518552938101939281019260010161588b565b90815180825260208080930193019160005b8281106158cd575050505090565b8351855293810193928101926001016158bf565b90815180825260208092019182818360051b85019501936000915b84831061590c5750505050505090565b909192939495848061595e83856001950387528a518051825261593584820151858401906136bc565b60408082015190830152606080820151908301526080809101519160a0809282015201906158ad565b98019301930191949392906158fc565b92615b02906001600160a01b0361043d9694615b0f94875216602086015260a06040860152805160a080870152610140906159b482880182516001600160a01b03169052565b6080615af1615a286159f38a6159dc6020870151610160809301906001600160a01b03169052565b6040860151906101808d01526102a08c0190615776565b60608501517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08c8303016101a08d01526157ea565b615a3a838501516101c08c019061586b565b60a08401516101e08b015260c08401516102008b015260e08401516102208b015261010094858501516102408c015261012094858101516102608d015201516102808b0152615aa1602087015160c08c01906effffffffffffffffffffffffffffff169052565b60408601516effffffffffffffffffffffffffffff1660e08b015260608601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6095868c840301908c0152610148565b930151918784030190870152610148565b8381036060850152615878565b9160808184039101526158e1565b939061043d95936001600160a01b03615b0f94615cb393885216602087015260a06040870152805160a08088015261014090615b6482890182516001600160a01b03169052565b6080615ca2615bd8615ba38b6020860151615b8d61016091828401906001600160a01b03169052565b61018060408801519201526102a08d0190615776565b60608501518c82037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec0016101a08e01526157ea565b615bea838501516101c08d019061586b565b60a08401516101e08c015260c08401516102008c015260e08401516102208c015261010094858501516102408d0152610120948c6102608783015191015201516102808c0152615c52602087015160c08d01906effffffffffffffffffffffffffffff169052565b60408601516effffffffffffffffffffffffffffff1660e08c015260608601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6095868d840301908d0152610148565b930151918884030190880152610148565b9084820360608601526158ad565b909591929493600190615cd381611da4565b1180615d8f575b80615d7c575b615ced575b505050505050565b6080810151511580615d73575b15615d155750615d0a945061570a565b388080808080615ce5565b6000935083929450615d6061576d615d6e9760405192839160208301957f33131570000000000000000000000000000000000000000000000000000000008752338b6024860161596e565b03601f1981018352826102d1565b615d0a565b50855115615cfa565b506001600160a01b038416331415615ce0565b506001600160a01b038216331415615cda565b919692939594600190615db481611da4565b1180615e65575b80615e52575b615dcf575b50505050505050565b6080820151511580615e49575b15615df9575050615ded945061570a565b38808080808080615dc6565b600094508493955061576d615e4497615d6060405193849260208401967f33131570000000000000000000000000000000000000000000000000000000008852338c60248701615b1d565b615ded565b50805115615ddc565b506001600160a01b038516331415615dc1565b506001600160a01b038316331415615dbb565b15615f0f577f0e1d31dc000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000600060203d14615f04575b1603615ed35750565b602490604051907ffb5014fc0000000000000000000000000000000000000000000000000000000082526004820152fd5b602081803e51615eca565b602490615f1a612895565b604051907ffb5014fc0000000000000000000000000000000000000000000000000000000082526004820152fdfea26469706673582212204f3babde171047a7c5e80dad33a0544638cfdd64537413da9098740fde59609964736f6c634300080e0033","sourceMap":"3714:1283:0:-:0;;;;;;430:1439:33;3714:1283:0;;:::i;:::-;430:1439:33;:::i;:::-;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;:::o;572:125:42:-;3714:1283:0;2422:42:29;572:125:42;1969:19:29;;:::i;:::-;1762:226;;;;;;;;;;;;2089:13;2077:25;;2132:24;;:::i;:::-;2112:44;;-1:-1:-1;;;;;3714:1283:0;2215:67:29;;;;3714:1283:0;;-1:-1:-1;;;2422:42:29;;3714:1283:0;;;;;2422:42:29;;;;;;;572:125:42;2422:42:29;;;;572:125:42;2374:100:29;;;659:31:42;2346:1:30;-1:-1:-1;2346:1:30;;659:31:42;572:125::o;2422:42:29:-;;;;3714:1283:0;2422:42:29;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;3714:1283:0;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;2630:337:29;2791:24;3714:1283:0;2833:10:29;3714:1283:0;2861:13:29;3714:1283:0;;;2763:187:29;;;;3714:1283:0;;;;;;;;;;;2892:13:29;2833:10;3714:1283:0;;;2931:4:29;2861:13;3714:1283:0;;;2861:13:29;2763:187;;2791:24;3714:1283:0;;;;;;;;;;;;;;;;;;2740:220:29;;2630:337;:::o;3714:1283:0:-;;;;;;;:::i;:::-;;;;-1:-1:-1;;;3714:1283:0;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;5215:3025:29;3714:1283:0;;:::i;:::-;;;;;;;5604:31:29;3714:1283:0;;;:::i;:::-;;;;;;5722:23:29;3714:1283:0;;;5866:264:29;;;3714:1283:0;;;;;;-1:-1:-1;;;3714:1283:0;;;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;;;;;;;;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;5866:264:29;3714:1283:0;;;5866:264:29;;;;;;;;;;:::i;:::-;3714:1283:0;;-1:-1:-1;;;6267:310:29;;;3714:1283:0;;;6267:310:29;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;;;;;;;;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;6267:310:29;;;;;;;;;;:::i;:::-;3714:1283:0;;6742:490:29;;;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;;;;-1:-1:-1;;;3714:1283:0;;;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;;;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;6742:490:29;;;;;;;;;;:::i;:::-;3714:1283:0;;-1:-1:-1;;;7377:248:29;;;3714:1283:0;;;7377:248:29;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;;;;;;-1:-1:-1;;;3714:1283:0;;;;7377:248:29;;;;;;;;;;:::i;:::-;3714:1283:0;7354:281:29;;3714:1283:0;;;7745:30:29;;3714:1283:0;;;7893:38:29;;3714:1283:0;;;8061:162:29;;;;;3714:1283:0;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;8061:162:29;;;;;;;;;;:::i;:::-;3714:1283:0;8038:195:29;;5215:3025;:::o;3714:1283:0:-;;;;;;;:::i;:::-;;;;-1:-1:-1;;;3714:1283:0;;;;:::o","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610013575b600080fd5b60003560e01c806306fdde031461013f57806346423aa71461013657806355944a421461012d5780635b34b9661461012457806379df72bd1461011b57806387201b41146101125780638814773214610109578063a817440414610100578063b3a34c4c146100f7578063e7acab24146100ee578063ed98a574146100e5578063f07ec373146100dc578063f47b7740146100d3578063fb0f3ee1146100ca5763fd9f1e10146100c257600080fd5b61000e61132d565b5061000e61102c565b5061000e610f8b565b5061000e610f46565b5061000e610eb5565b5061000e610e07565b5061000e610da3565b5061000e610d32565b5061000e610be3565b5061000e610b0f565b5061000e610994565b5061000e61092f565b5061000e61089e565b5061000e6101c1565b5061000e610199565b91908251928382526000905b8482106101815750601f8460209495601f199311610174575b0116010190565b600085828601015261016d565b90602090818082850101519082860101520190610154565b503461000e57600060031936011261000e57602080526707536561706f727460475260606020f35b503461000e57602060031936011261000e57600435600052600260205260806040600020546040519060ff81161515825260ff8160081c16151560208301526effffffffffffffffffffffffffffff8160101c16604083015260881c6060820152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761027057604052565b610278610224565b604052565b60c0810190811067ffffffffffffffff82111761027057604052565b6020810190811067ffffffffffffffff82111761027057604052565b6040810190811067ffffffffffffffff82111761027057604052565b90601f601f19910116810190811067ffffffffffffffff82111761027057604052565b60405190610160820182811067ffffffffffffffff82111761027057604052565b6040519061032282610254565b565b60209067ffffffffffffffff811161033e575b60051b0190565b610346610224565b610337565b6001600160a01b0381160361000e57565b60a435906103228261034b565b35906103228261034b565b3590600682101561000e57565b92919261038d82610324565b60409461039c865192836102d1565b819584835260208093019160a080960285019481861161000e57925b8584106103c85750505050505050565b868483031261000e5784879184516103df81610254565b6103e887610374565b8152828701356103f78161034b565b83820152858701358682015260608088013590820152608080880135908201528152019301926103b8565b9080601f8301121561000e5781602061043d93359101610381565b90565b92919261044c82610324565b60409461045b865192836102d1565b819584835260208093019160c080960285019481861161000e57925b8584106104875750505050505050565b868483031261000e57848791845161049e8161027d565b6104a787610374565b8152828701356104b68161034b565b838201528587013586820152606080880135908201526080808801359082015260a080880135906104e68261034b565b820152815201930192610477565b9080601f8301121561000e5781602061043d93359101610440565b6004111561000e57565b35906103228261050f565b9190916101608184031261000e5761053a6102f4565b9261054482610369565b845261055260208301610369565b602085015267ffffffffffffffff90604083013582811161000e5781610579918501610422565b6040860152606083013591821161000e576105959183016104f4565b60608401526105a660808201610519565b608084015260a081013560a084015260c081013560c084015260e081013560e0840152610100808201359084015261012080820135908401526101408091013590830152565b35906effffffffffffffffffffffffffffff8216820361000e57565b92919267ffffffffffffffff8211610650575b604051916106336020601f19601f84011601846102d1565b82948184528183011161000e578281602093846000960137010152565b610658610224565b61061b565b9080601f8301121561000e5781602061043d93359101610608565b91909160a08184031261000e5761068d610315565b9267ffffffffffffffff823581811161000e57826106ac918501610524565b85526106ba602084016105ec565b60208601526106cb604084016105ec565b6040860152606083013581811161000e57826106e891850161065d565b6060860152608083013590811161000e57610703920161065d565b6080830152565b9080601f8301121561000e5781359061072282610324565b9261073060405194856102d1565b828452602092838086019160051b8301019280841161000e57848301915b84831061075e5750505050505090565b823567ffffffffffffffff811161000e57869161078084848094890101610678565b81520192019161074e565b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020808501948460051b01011161000e57565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600611156107f657565b6103226107bc565b608090805161080c816107ec565b8352816001600160a01b03918260208201511660208601526040810151604086015260608101516060860152015116910152565b90815180825260208080930193019160005b828110610860575050505090565b909192938260e0600192604088516108798382516107fe565b808501516001600160a01b031660a0840152015160c082015201950193929101610852565b50606060031936011261000e5767ffffffffffffffff60043581811161000e576108cc90369060040161070a565b9060243581811161000e576108e590369060040161078b565b60443592831161000e5761092b9361091161090761091795369060040161078b565b9490933691611bff565b90613e21565b604051918291602083526020830190610840565b0390f35b503461000e57600060031936011261000e57610949615017565b3360005260016020526020604060002060018154018091556040518181527f721c20121297512b72821b97f5326877ea8ecf4bb9948fea5bfcb6453074d37f833392a2604051908152f35b503461000e5760031960208136011261000e5760043567ffffffffffffffff811161000e576101608160040192823603011261000e576109d38261152d565b916109e06024830161152d565b906109ee6044840182611cfc565b6064850192916109fe8484611d50565b92909360848801610a0e90611dae565b95610a1891611d50565b969050610a236102f4565b6001600160a01b0390991689526001600160a01b031660208901523690610a4992610381565b60408701523690610a5992610440565b6060850152610a6b9060808501611db8565b60a482013560a084015260c482013560c084015260e482013560e08401526101048201356101008401526101248201356101208401526101408301526101440135610ab59161268a565b604051908152602090f35b9092916040820191604081528451809352606081019260208096019060005b818110610af95750505061043d9394818403910152610840565b8251151586529487019491870191600101610adf565b5060e060031936011261000e5767ffffffffffffffff60043581811161000e57610b3d90369060040161070a565b60243582811161000e57610b5590369060040161078b565b909160443584811161000e57610b6f90369060040161078b565b9060643595861161000e57610b8b610ba496369060040161078b565b929091610b9661035c565b9560c4359760843596611cc2565b9061092b60405192839283610ac0565b602060031982011261000e576004359067ffffffffffffffff821161000e57610bdf9160040161078b565b9091565b503461000e57610bf236610bb4565b610bfa615017565b60005b818110610c105760405160018152602090f35b80610c1e6001928486613f13565b610c2881806146ae565b610c318161152d565b91610c44610c3f3684610524565b614fa9565b91610c59836000526002602052604060002090565b610c6381856155a2565b50610c76610c72825460ff1690565b1590565b610c86575b505050505001610bfd565b7ffde361574a066b44b3b5fe98a87108b7565e327327954c4faeea56a4e6491a0a92610d2592610d01610d0793610cd6610ccf610cc86020968781019061158b565b3691610608565b898b615303565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b0161152d565b6040519384526001600160a01b039081169416929081906020820190565b0390a33880808080610c7b565b50604060031936011261000e5767ffffffffffffffff60043581811161000e57610d6090369060040161078b565b60249291923591821161000e5761092b92610d8d610d8561091794369060040161078b565b939092614750565b60405190610d9a82610299565b60008252613e21565b5060031960408136011261000e576004359067ffffffffffffffff821161000e57604090823603011261000e57610dfd610de16020926004016146e1565b60405190610dee82610299565b600082523391602435916141fd565b6040519015158152f35b5060031960808136011261000e576004359067ffffffffffffffff9081831161000e5760a090833603011261000e5760243590811161000e5761092b91610e55610e9692369060040161078b565b90606435610e628161034b565b6001600160a01b038116610ea85750610e90610e8433945b3690600401610678565b91604435933691611bff565b906141fd565b60405190151581529081906020820190565b610e84610e909194610e7a565b5060a060031936011261000e5767ffffffffffffffff60043581811161000e57610ee390369060040161078b565b9060243583811161000e57610efc90369060040161078b565b91909260443594851161000e57610f25610f1d610ba496369060040161078b565b929093614750565b9160405193610f3385610299565b6000855260843595339560643595612a0b565b503461000e57602060031936011261000e576020610f83600435610f698161034b565b6001600160a01b0316600052600160205260406000205490565b604051908152f35b503461000e57600060031936011261000e57610ff3610fa86127b4565b60405190610fb5826102b5565b600382527f312e3100000000000000000000000000000000000000000000000000000000006020830152604051928392606084526060840190610148565b9060208301526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660408301520390f35b5060031960208136011261000e5760043567ffffffffffffffff811161000e576102408160040192823603011261000e5761012435908160021c926001841193341585036112f85784936003821160028314916110d183600286117ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe870102018815926001820185028460011b880103998a92600360a088026024013593168a6115dc565b6110e38260051b6101c40135986107ec565b156111b5575050506111036110f78261152d565b6001600160a01b031690565b6001600160a01b0390811660248401351761118b5761115f60449461115a6111759761116b9461113560a4890161152d565b9060648901946111448661152d565b9060e48b01359360c48c01359333931691611dcf565b61152d565b91610204840190611537565b93909201356119df565b61117f6001600055565b60405160018152602090f35b60046040517f6ab37ce7000000000000000000000000000000000000000000000000000000008152fd5b9194509161121e6110f7606461122396611228996111d1611514565b8a819b996111df839b6107ec565b1561122d5750610d01916111f560a4850161152d565b61120086860161152d565b9060e48601359160c4870135916001600160a01b03339216906120c8565b611ac5565b6122c4565b611175565b611236816107ec565b6003810361127d57506112789161124f60a4850161152d565b61125a86860161152d565b9060e48601359160c4870135916001600160a01b03339216906121be565b610d01565b806112896004926107ec565b036112c3576112789161129b8861152d565b6112a686860161152d565b6044860135916001600160a01b03602488013592169033906120c8565b611278916112d08861152d565b6112db86860161152d565b6044860135916001600160a01b03602488013592169033906121be565b6040517fa61be9f0000000000000000000000000000000000000000000000000000000008152346004820152602490fd5b0390fd5b503461000e5761133c36610bb4565b611344615017565b60005b81811061135a5760405160018152602090f35b611365818385614fe2565b61136e8161152d565b60209061137c82840161152d565b6001600160a01b0391828116938433141580611508575b6114de576040956113a681880182611cfc565b6060808401926113b68486611d50565b90916080948a8689016113c890611dae565b976113d3908a611d50565b9a90506113de6102f4565b6001600160a01b03909c168c526001600160a01b03909116908b0152369061140592610381565b8c890152369061141492610440565b9086015284019061142491611db8565b60a0808201359084015260c0808201359084015260e08082013590840152610100808201359084015261012080820135908401526101409182840152013561146b9161268a565b93611480856000526002602052604060002090565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101001790555193845216917f6bacc01dbe442496068f7d234edd811f1a5f833243e0aec824f86ab861f3c90d90602090a3600101611347565b60046040517f80ec7374000000000000000000000000000000000000000000000000000000008152fd5b50838316331415611393565b60405190611521826102b5565b60208083523683820137565b3561043d8161034b565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e57602001918160061b3603831361000e57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e5760200191813603831361000e57565b9591906115e7615008565b6115fb610140880135610120890135615296565b50611604611927565b611622611615610200890189611537565b6101e08a013591506118f6565b7f00000000000000000000000000000000000000000000000000000000000000006080528160a0526060602460c037604060646101203760e06080908120610160526001610264359081016102a060059290921b918201526102c081019384526024906102e00137610160928460a0528560c052600060e05260005b8394610204358210156116fb5790604060a0600193602090818560061b6102840161010037838560061b6102840161012037019660e0608020885201968888528960c08201526101008360061b610284019101370193929361169e565b5090929350969590966001610204350160051b610160206060525b83610264358210156117495790604060a060019301958787528860c08201526101008360061b6102840191013701611716565b505093509490506103229391507f00000000000000000000000000000000000000000000000000000000000000006080528260a052606060c460c03760206101046101203760c0608020600052602060002060e05260016102643560051b610200015261022092836102643560051b0152606060c46102406102643560051b01376118ee610cc8608435936117f1856001600160a01b03166000526001602052604060002090565b547f00000000000000000000000000000000000000000000000000000000000000006080526040608460a03760605161010052846101205260a0610144610140376101e0526101809485608020956102643560051b0190868252336101a06102643560051b015260806101c06102643560051b01526101206101e06102643560051b01527f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f3160a4359260a061026435026101e00190a360006060526118e56060820161115a6118bf8261152d565b966118cc6080860161152d565b906001600160a01b03809916906101608701358b61569d565b9581019061158b565b9216906147dc565b106118fd57565b60046040517f466aa616000000000000000000000000000000000000000000000000000000008152fd5b601861012435106102643560061b61026001610244351461024061022435146020600435141616161561195657565b60046040517f39f3e3fd000000000000000000000000000000000000000000000000000000008152fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90156119b95790565b61043d611980565b91908110156119d2575b60061b0190565b6119da611980565b6119cb565b919234936000915b808310611a4257505050828211611a185781611a0291611e97565b808211611a0d575050565b610322910333611e97565b60046040517f1a783b8d000000000000000000000000000000000000000000000000000000008152fd5b909194611a508683856119c1565b90813590808211611a1857611a748260206001950135611a6f8161034b565b611e97565b03950191906119e7565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818110611ab9570390565b611ac1611a7e565b0390565b90939291908115611b85579333611ade60a0830161152d565b60e08301359260c08101355b61118b578460051b6101e40335946102008201611b078184611537565b93905060005b848110611b24575050505050956103229596611f2c565b8989858e611b3c85611b368989611537565b906119c1565b803592611b6a575b91611b649391611b5d6110f7602060019998960161152d565b908c611f2c565b01611b0d565b92909493919b8c611b7a91611aae565b9b9193949092611b44565b933394611b918261152d565b6040830135926020810135611aea565b81601f8201121561000e57803591611bb883610324565b92611bc660405194856102d1565b808452602092838086019260051b82010192831161000e578301905b828210611bf0575050505090565b81358152908301908301611be2565b909291611c0b84610324565b91604094611c1b865194856102d1565b839581855260208095019160051b83019380851161000e5783925b858410611c465750505050505050565b67ffffffffffffffff90843582811161000e5786019060a08285031261000e578451611c7181610254565b8235815289830135600281101561000e578a82015285830135868201526060808401359082015260808084013594851161000e57611cb3868c96879601611ba1565b90820152815201930192611c36565b90611cf090610bdf9a99989796959493986001600160a01b03811615600014611cf6575033985b3691611bff565b90612a0b565b98611ce9565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e576020019160a082023603831361000e57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e576020019160c082023603831361000e57565b600411156107f657565b3561043d8161050f565b6004821015611dc45752565b611dcc6107bc565b52565b949290959391841515600014611e3b5761032296604051967f4ce34aa2000000000000000000000000000000000000000000000000000000008852602060048901526001602489015260448801526064870152608486015260a485015260c484015260e4830152612451565b9291946002919450611e4c816107ec565b03611e8b57600103611e61576103229361504d565b60046040517fefcc00b1000000000000000000000000000000000000000000000000000000008152fd5b9291906103229461515b565b90611ea181611efb565b600080808084865af115611eb3575050565b60449250611ebf612895565b6001600160a01b03604051927f470c7c1d0000000000000000000000000000000000000000000000000000000084521660048301526024820152fd5b15611f0257565b60046040517f91b3e514000000000000000000000000000000000000000000000000000000008152fd5b929193949094611f3b83611efb565b611f4581836122b1565b806120ba575050604051926000947f23b872dd00000000000000000000000000000000000000000000000000000000865280600452816024528260445260208660648180885af1803d15601f3d1160018a51141617163d1515811615611fb4575b505050505050604052606052565b80863b151516611fa657908795969115611ff457602486887f5f15d672000000000000000000000000000000000000000000000000000000008252600452fd5b1561202e57506084947f98891923000000000000000000000000000000000000000000000000000000008552600452602452604452606452fd5b3d61206d575b5060a4947ff486bc8700000000000000000000000000000000000000000000000000000000855260045260245260445281606452608452fd5b601f3d0160051c9060051c9080600302918082116120a1575b505060205a9101106120985785612034565b833d81803e3d90fd5b8080600392028380020360091c92030201018680612086565b9061032295929493916125c0565b959092949391936120d981836122b1565b806120f0575050600103611e61576103229361504d565b9060649593916000979593975060208251146000146121ab5760c0906001906040845260208401527f4ce34aa20000000000000000000000000000000000000000000000000000000060408401526020604484015280888401525b02019360027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc48601527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe48501526004840152602483015260448201520152565b5060c0868201600181510180915261214b565b9590919293946121cd86611efb565b6121d781836122b1565b806121e75750506103229461515b565b906064959694939291602082511460001461229e5760c0906001906040845260208401527f4ce34aa20000000000000000000000000000000000000000000000000000000060408401526020604484015280888401525b02019360037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc48601527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe48501526004840152602483015260448201520152565b5060c0868201600181510180915261223e565b906020820151036122bf5750565b610322905b60408082510361244d57602082015160c06064840151026044019180519260206001600160a01b036000928184927f00000000000000000000000000000000000000000000000000000000000000001674ff00000000000000000000000000000000000000001783528684527f000000000000000000000000000000000000000000000000000000000000000086526055600b201696855281805284880182885af190519015612402577fffffffff000000000000000000000000000000000000000000000000000000007f4ce34aa2000000000000000000000000000000000000000000000000000000009116036123c05750505060209052565b517f1cf99b2600000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03919091166024820152604490fd5b611329848361240f612895565b517fd13d53d40000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201529081906024820190565b5050565b6040519160206001600160a01b036101046000938285937f00000000000000000000000000000000000000000000000000000000000000001674ff00000000000000000000000000000000000000001784528685527f00000000000000000000000000000000000000000000000000000000000000006040526055600b20169660405282805282875af190519015612574577fffffffff000000000000000000000000000000000000000000000000000000007f4ce34aa200000000000000000000000000000000000000000000000000000000911603612530575050565b6040517f1cf99b2600000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03919091166024820152604490fd5b61132983612580612895565b6040517fd13d53d40000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201529081906024820190565b9060649492939160208251146000146126775760c0906001906040845260208401527f4ce34aa20000000000000000000000000000000000000000000000000000000060408401526020604484015280878401525b02019260017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc48501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe484015260048301526024820152600060448201520152565b5060c08582016001815101809152612615565b91909161014081018051917f0000000000000000000000000000000000000000000000000000000000000000604051604083018051928351926020809501906000915b868684106127915750505050506040519160051b8220917f00000000000000000000000000000000000000000000000000000000000000009093606086019481865101906000915b8a831061276d575050505050601f198660051b604051209401978851907f00000000000000000000000000000000000000000000000000000000000000008a5282519383528451958552865261018089209852525252565b838082601f19600194510180519089815260e0812087525201920192019190612715565b8082601f19600194510180519088815260c08120875252019201920191906126cd565b467f0000000000000000000000000000000000000000000000000000000000000000036127ff577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815261288f8161027d565b51902090565b3d61289c57565b601f3d0160051c60405160051c9080600302918082116128cf575b505060205a9101106128c557565b3d6000803e3d6000fd5b8080600392028380020360091c920302010138806128b7565b919082604091031261000e576040516040810181811067ffffffffffffffff821117612922575b6040526020808294803584520135910152565b61292a610224565b61290f565b92919261293b82610324565b60409261294a845192836102d1565b819581835260208093019160061b84019381851161000e57915b84831061297357505050505050565b83869161298084866128e8565b815201920191612964565b9291909261299884610324565b916129a660405193846102d1565b829480845260208094019060051b83019282841161000e5780915b8483106129d057505050505050565b823567ffffffffffffffff811161000e57820184601f8201121561000e578691612a00868385809535910161292f565b8152019201916129c1565b96989792612a268a612a359695612a2d95949998998b612c40565b369161298b565b93369161298b565b908251825191612a4d612a48848461314b565b61366d565b9760009586915b848310612b47575050506000935b838510612abf57505050505080612ab4575b50825115612a8a5782612a8691613b15565b9190565b60046040517fd5da9a1b000000000000000000000000000000000000000000000000000000008152fd5b835103835238612a74565b909192939488612ada84612ad38986612c1e565b518a613745565b8051608001516001600160a01b03166001600160a01b03612b086110f760208501516001600160a01b031690565b911603612b225750506001809101955b0193929190612a62565b8791612b4191612b3a85896001979c01038093612c1e565b528b612c1e565b50612b18565b9091968a612b6583612b5e8b879b98999a9b612c1e565b518c6136c9565b8051608001516001600160a01b03166001600160a01b03612b936110f760208501516001600160a01b031690565b911603612bb05750506001809101975b0191909594939295612a54565b8991612bcd91612bc6856001969d038093612c1e565b528d612c1e565b50612ba3565b90612bdd82610324565b612bea60405191826102d1565b828152601f19612bfa8294610324565b0190602036910137565b602090805115612c12570190565b612c1a611980565b0190565b6020918151811015612c33575b60051b010190565b612c3b611980565b612c2b565b93929091612c4c615008565b845192612c5884612bd3565b9160008352601d604560003560e01c061160011b9060005b868110612d30575050600314612d0657612c8a9086613266565b60005b838110612c9c57505050509050565b80612ca960019284612c1e565b5115612d0157612cfb612cbc8289612c1e565b5151612cc88386612c1e565b519086612cdc82516001600160a01b031690565b60208301516001600160a01b03169060606040850151940151946145e5565b01612c8d565b612cfb565b60046040517f12d3f5a3000000000000000000000000000000000000000000000000000000008152fd5b612d3a818a612c1e565b51918015612ebf57612d4d868685614cb3565b9290916001850189528215612eab57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91612d89868b612c1e565b52019380519260a084015193604060c08201519101518051908560005b838110612e405750505050606080935101519485519560005b878110612dd85750505050505050506001905b01612c70565b808760a0612de860019486612c1e565b5188612e2489898d6080860197612e01895187836131fa565b918701958651908a518214600014612e30575050508085525b80885284516131a0565b90520151905201612dbf565b612e39926131fa565b8552612e1a565b612e4a8184612c1e565b519b8c5115179b86868b60808401938451612e669085896131fa565b60608192019586519881518a1460001499612e919760019b612e9b575050508187525b52845161315f565b9052018690612da6565b612ea4926131fa565b8752612e89565b509360019392506000915060200152612dd2565b91906000602060019301528181018652612dd2565b612edc615008565b805192612ee884612bd3565b92600091828552601d6045843560e01c061160011b90835b878110612f90575050600314612d0657612f1a9083613266565b838110612f275750505050565b80612f3460019285612c1e565b5115612f8b57612f85612f478285612c1e565b5151612f538387612c1e565b5190612f6681516001600160a01b031690565b60208201516001600160a01b0316906060604084015193015193614513565b01612f1a565b612f85565b612f9a8187612c1e565b51918581156130fb5750612faf888685614ee0565b929091600185018b528883156130e95750907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91612fed868d612c1e565b52019380519260a084015191604060c0860151950151805190858c5b83811061308f5750505050606090510151938451948a5b86811061303857505050505050506001905b01612f00565b8061304560019284612c1e565b5160a0608082019189613083888b61305f87518d866131fa565b60608601948d8651908a518214600014612e305750505080855280885284516131a0565b90520151905201613020565b6130998184612c1e565b519b8c5115179b868a89608084019384516130b59085896131fa565b60608192019586519881518a14600014996130df9760019b612e9b5750505081875252845161315f565b9052018690613009565b92505093600193925060200152613032565b6020600193929401528181018852613032565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482118115151661313f570290565b613147611a7e565b0290565b81198111613157570190565b612c1a611a7e565b909283820361316e5750505090565b82939161318a613196946131909303954203918287039061310e565b9261310e565b9061314b565b9081049015150290565b90928382036131af5750505090565b926131906131cd9261318a856001969703964203918288039061310e565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830104019015150290565b9190918281146132435782818309613219576132159161310e565b0490565b7fc63cf0890000000000000000000000000000000000000000000000000000000060005260046000fd5b50905090565b600211156107f657565b5161043d816107ec565b611dcc826107ec565b815181519260005b8281106133a45750505060005b82811061328757505050565b6132918183612c1e565b516132c56132b160208301516effffffffffffffffffffffffffffff1690565b6effffffffffffffffffffffffffffff1690565b1561339b5751606081018051519060005b828110613354575050506040809101908151519160005b83811061330257505050506001905b0161327b565b61331f613319613313838551612c1e565b51613253565b60031090565b61332b576001016132ed565b600483517fa6cfc673000000000000000000000000000000000000000000000000000000008152fd5b613365613319613313838551612c1e565b613371576001016132d6565b60046040517fff75a340000000000000000000000000000000000000000000000000000000008152fd5b506001906132fc565b6133ae8183612c1e565b5180519086821015613565576020916133e56132b1846133ce848b612c1e565b5101516effffffffffffffffffffffffffffff1690565b1561355a576133f49087612c1e565b515191604092838301519183015161340b81613249565b61341481613249565b6134e55783015180518210156134bc579061342e91612c1e565b5191600383519361343e856107ec565b84906134558482019160048351981485039061325d565b606085015190525b11156134935750906001929181613478575b50505b0161326e565b61348c91608060608301519201519161358f565b388061346f565b600490517f94eb6af6000000000000000000000000000000000000000000000000000000008152fd5b600484517fbfb3f8ce000000000000000000000000000000000000000000000000000000008152fd5b929060608094015180518210156135315760039161350291612c1e565b5193845194613510866107ec565b85916135278583019260048451991486039061325d565b850151905261345d565b600483517f6088d7de000000000000000000000000000000000000000000000000000000008152fd5b505050600190613472565b60046040517f869586c4000000000000000000000000000000000000000000000000000000008152fd5b91909160009081526020808220928181019282825192600593841b0101915b8285106135eb575050505050036135c157565b60046040517f09bde339000000000000000000000000000000000000000000000000000000008152fd5b8451808711821b968752958418959095526040812094938301936135ae565b604051906060820182811067ffffffffffffffff821117613660575b8060405260408361363683610254565b6000928381528360808301528360a08301528360c08301528360e083015281528260208201520152565b613668610224565b613626565b9061367782610324565b61368460405191826102d1565b828152601f196136948294610324565b019060005b8281106136a557505050565b6020906136b061360a565b82828501015201613699565b906002821015611dc45752565b9092916136d461360a565b93805115613714576136f6926001600160a01b038693166080845101526137e9565b81516060810151156137055750565b60806000918260208601520152565b60246040517f375c24c100000000000000000000000000000000000000000000000000000000815260006004820152fd5b92919061375061360a565b9381511561378d576137639185916139aa565b60208301903382526040840152825190606082015115613781575050565b60009182608092520152565b60246040517f375c24c100000000000000000000000000000000000000000000000000000000815260016004820152fd5b507f7fda72790000000000000000000000000000000000000000000000000000000060005260046000fd5b92919260208201906020825151825181101561399d575b60051b82010151928351926020604085015181835101518151811015613990575b60051b01015160009460208697015161397a575b9061012060609260408b5193805185526020810151602086015201516040840152805160208c0152015160408a01522091805160051b01905b8181106138c1575050505060608293945101526138885750565b60011461389757610322611a7e565b7f91b3e5140000000000000000000000000000000000000000000000000000000060005260046000fd5b60209095949501906020825151855181101561396d575b60051b85010151602081015115613964575160606020604083015181865101518151811015613957575b60051b01015196818801519081158a8381011060011b17179801966000828201522084149060408a0151610120820151149060208b015190511416161561394a575b9061386e565b6139526137be565b613944565b61395f6137be565b613902565b50949394613944565b6139756137be565b6138d8565b6060820180516000909152801597509550613835565b6139986137be565b613821565b6139a56137be565b613800565b9291602080830194855151918151831015613b08575b80600593841b8301015194606093828588510151818b5101518151811015613afb575b831b010151926000968188990151613ae6575b51948451865281850151828701526040850151604087015260a0809501519a608087019b8c52878720948051851b01905b818110613a4257505050505050508394955001526138885750565b83909a999a01908c848351518551811015613ad9575b871b850101518581015115613acf578a869151015181855101518151811015613ac2575b881b0101518a81019b8d8d518091019e8f9115911060011b17179c9b60009052888b822089149251910151141615613ab5575b90613a27565b613abd6137be565b613aaf565b613aca6137be565b613a7c565b5050999899613aaf565b613ae16137be565b613a58565b848701805160009091528015995097506139f6565b613b036137be565b6139e3565b613b106137be565b6139c0565b908151613b2181612bd3565b9260005b828110613be5575050503490613b39611514565b9080519060005b828110613b7457505050613b53906122c4565b80613b64575b5061043d6001600055565b613b6e9033611e97565b38613b59565b613b7e8183612c1e565b518051908151613b8d816107ec565b613b96816107ec565b15613bca575b8560019392826040613bbb6020613bc49601516001600160a01b031690565b91015191613cae565b01613b40565b9560608293920181815111611a185751900395909190613b9c565b613bef8183612c1e565b51613c0f6132b160208301516effffffffffffffffffffffffffffff1690565b15613ca557613c27613c218388612c1e565b60019052565b606080915101519081519160005b838110613c4a57505050506001905b01613b25565b82613c558284612c1e565b51015180613c665750600101613c35565b6040517fa5f542080000000000000000000000000000000000000000000000000000000081526004810187905260248101929092526044820152606490fd5b50600190613c44565b9290918351613cbc816107ec565b613cc5816107ec565b613d1a57505050613ce36110f760208301516001600160a01b031690565b6001600160a01b03604083015191161761118b57806060613d1160806103229401516001600160a01b031690565b91015190611e97565b90919260018151613d2a816107ec565b613d33816107ec565b03613d8357604081015161118b5761032293613d5960208301516001600160a01b031690565b906001600160a01b036060613d7860808601516001600160a01b031690565b940151931691611f2c565b9260028451613d91816107ec565b613d9a816107ec565b03613de05783613db760206103229601516001600160a01b031690565b60808201516001600160a01b0316926001600160a01b03606060408501519401519416916120c8565b83613df860206103229601516001600160a01b031690565b60808201516001600160a01b0316926001600160a01b03606060408501519401519416916121be565b90613e33909493929482519083612ed4565b613e3c8261366d565b9160009485915b808310613e705750505090613e619184829495613e65575b50613b15565b5090565b825103825238613e5b565b909195613e7e878385613f13565b613ea4613e8b8280611537565b90613e9b60209485810190611537565b92909189613f6c565b906001600160a01b03613ed96110f7613ec960808651016001600160a01b0390511690565b938501516001600160a01b031690565b911603613ef057506001809101965b019190613e43565b96613f0d8298600193830390613f06828a612c1e565b5287612c1e565b50613ee8565b9190811015613f54575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18136030182121561000e570190565b613f5c611980565b613f1d565b61043d9036906128e8565b92909391613f7861360a565b948115801561415e575b61413457613f8e61360a565b613fa381613f9d36888861292f565b886139aa565b5191613fba87613fb436848661292f565b886137e9565b613fc48751613253565b835190613fd0826107ec565b613fd9826107ec565b613fe2816107ec565b148015906140fc575b80156140e9575b6140bf5761043d9561406f95608095896060948588019687518784510151106000146140825750505061403161402c8593614057936119b0565b613f61565b60208361404a8d828a5191510151900396845190612c1e565b5151015191015190612c1e565b5101528651015190525b01516001600160a01b031690565b6080835101906001600160a01b03169052565b86979694506140b1935061404a856140a161402c6020956040956119b0565b9451015188518551910397612c1e565b510152519086510152614061565b60046040517f09cfb455000000000000000000000000000000000000000000000000000000008152fd5b5060408751015160408401511415613ff2565b508651602001516001600160a01b03166001600160a01b0361412b6110f760208701516001600160a01b031690565b91161415613feb565b60046040517f98e9db6e000000000000000000000000000000000000000000000000000000008152fd5b508315613f82565b6040519061417382610254565b604051608083610160830167ffffffffffffffff8111848210176141f0575b6040526000808452806020850152606093846040820152848082015281848201528160a08201528160c08201528160e08201528161010082015281610120820152816101408201528252806020830152604082015282808201520152565b6141f8610224565b614192565b909291614208615017565b600260005561421784836148c0565b9490919260405195614228876102b5565b6001875260005b6020808210156142515790602091614245614166565b90828b0101520161422f565b505061428583959761428061429e9a61428e97998351156142ba575b60208401528251156142ad575b82613266565b612c04565b515195866142c7565b81516001600160a01b0316612cdc565b6142a86001600055565b600190565b6142b5611980565b61427a565b6142c2611980565b61426d565b939192909360a093848201519360c0830151966142e2611514565b96604092838601908151519160005b8381106143d7575050505034986060809601978851519860005b8a8110614338575050505050505050505050614326906122c4565b8061432e5750565b6103229033611e97565b614343818351612c1e565b51898101805161435d87878d8c60808801958651906144a1565b8092528783015190528151614371816107ec565b61437a816107ec565b15614397575b50906143918d8c6001943390613cae565b0161430b565b90919e9d8082116143ae579d9e9d039c908a614380565b600489517f1a783b8d000000000000000000000000000000000000000000000000000000008152fd5b6143e2818351612c1e565b5180516143ee816107ec565b6143f7816107ec565b15614441579061443b8d8f93868f8d6144236001988e936060870193845195608089019687519061446a565b9052528c610120613bbb82516001600160a01b031690565b016142f1565b600488517f12d3f5a3000000000000000000000000000000000000000000000000000000008152fd5b90939084810361448057505061043d93506131fa565b938361449561043d979661449b9496866131fa565b936131fa565b9061315f565b9093908481036144b757505061043d93506131fa565b938361449561043d97966144cc9496866131fa565b906131a0565b90815180825260208080930193019160005b8281106144f2575050505090565b909192938260a08261450760019489516107fe565b019501939291016144e4565b91939290936040805193608091828601918652602090600082880152838188015285518093528160a088019601936000915b84831061459a5750505050505091614595827f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f31948380950360608501526001600160a01b038091169716956144d2565b0390a3565b90919293949684836001928a5180516145b2816107ec565b8252808401516001600160a01b031684830152858101518683015260609081015190820152019801959493019190614545565b92909493916040918251946080918287019187526001600160a01b0394856020921682890152838189015286518093528160a089019701936000915b84831061466a57505050505050828285949361459593867f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f319896036060870152169716956144d2565b90919293949784836001928b518051614682816107ec565b8252808401518c1684830152858101518683015260609081015190820152019901959493019190614621565b9035907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea18136030182121561000e570190565b6146e9614166565b506147336147056146fa83806146ae565b92602081019061158b565b61471c6040519461471586610254565b3690610524565b845260016020850152600160408501523691610608565b606082015260405161474481610299565b60008152608082015290565b61475982610324565b9161476760405193846102d1565b808352601f1961477682610324565b0160005b8181106147c557505060005b8181106147935750505090565b806147a96147a46001938587613f13565b6146e1565b6147b38287612c1e565b526147be8186612c1e565b5001614786565b6020906147d0614166565b8282880101520161477a565b929190836000526002602052604060002091825460ff8160081c1661487b576effffffffffffffffffffffffffffff8160101c1661484a579460ff7101000000000000000000000000000001000195961615614839575b50505055565b61484292615303565b388080614833565b602486604051907fee9e0e630000000000000000000000000000000000000000000000000000000082526004820152fd5b602486604051907f1a5155740000000000000000000000000000000000000000000000000000000082526004820152fd5b90805b6148b7575090565b809106806148af565b90918151926148db610c7260a086015160c087015190615296565b614ca7576148fe6132b160208501516effffffffffffffffffffffffffffff1690565b9361491e6132b160408601516effffffffffffffffffffffffffffff1690565b948581118015614c9f575b614c755785811080614c5d575b614c335761498261494683614fa9565b9360e0840151608085015161495a81611da4565b85516001600160a01b0316918761497b60208901516001600160a01b031690565b948b615cc1565b614996836000526002602052604060002090565b916149a4610c7284866155a2565b614c23578254958460ff881615614bfc575b5050506effffffffffffffffffffffffffffff90818660101c169560881c96871515600014614b7f5760018103614b4757505085945b856149f7888361314b565b11614b3d575b86614a079161314b565b8082871183831117614ad6575b5090614a8f818493614a4e614ad19660017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b84547fffffffffffffffffffffffffffffff00000000000000000000000000000000ff16911660101b70ffffffffffffffffffffffffffffff000016178355565b815470ffffffffffffffffffffffffffffffffff1690861660881b7fffffffffffffffffffffffffffffff000000000000000000000000000000000016179055565b929190565b9690614ae987614aef92989594986148ac565b826148ac565b80150180809204970492049480861181841117614b0e57909138614a14565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80860396506149fd565b959096868103614b58575b506149ec565b614b7281614b6c89614b78959b9a9b61310e565b9861310e565b9761310e565b9438614b52565b9550955090614ad191614bb78260017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b81547fffffffffffffffffffffffffffffff00000000000000000000000000000000ff1687821660101b70ffffffffffffffffffffffffffffff000016178255614a8f565b6060614c12614c1b94516001600160a01b031690565b92015191615303565b3880846149b6565b5050509150915090600090600090565b60046040517fa11b63ff000000000000000000000000000000000000000000000000000000008152fd5b5060016080830151614c6e81611da4565b1615614936565b60046040517f5a052b32000000000000000000000000000000000000000000000000000000008152fd5b508015614929565b50600092508291508190565b919290928251614ccf610c7260a083015160c0840151906152df565b614ed057614cf26132b160208601516effffffffffffffffffffffffffffff1690565b614d116132b160408701516effffffffffffffffffffffffffffff1690565b958682118015614ec8575b614c755786821080614eb0575b614c3357614d7d90614d3a84614fa9565b9460e0850151608086015190614d4f82611da4565b87614d6188516001600160a01b031690565b93614d7660208a01516001600160a01b031690565b958c615da2565b614d91836000526002602052604060002090565b91614d9f610c728486615645565b614c23578254958460ff881615614e92575b5050506effffffffffffffffffffffffffffff90818660101c169560881c96871515600014614b7f5760018103614e6657505085945b85614df2888361314b565b11614e5c575b86614e029161314b565b8082871183821117614e48575090614a8f818493614a4e614ad19660017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b969050614aef614ae98789989594986148ac565b8086039650614df8565b959096868103614e77575b50614de7565b614b7281614b6c89614e8b959b9a9b61310e565b9438614e71565b6060614c12614ea894516001600160a01b031690565b388084614db1565b5060016080840151614ec181611da4565b1615614d29565b508115614d1c565b5050915050600090600090600090565b919290928251614efc610c7260a083015160c084015190615296565b614ed057614f1f6132b160208601516effffffffffffffffffffffffffffff1690565b614f3e6132b160408701516effffffffffffffffffffffffffffff1690565b958682118015614fa1575b614c755786821080614f89575b614c3357614f6790614d3a84614fa9565b614f7b836000526002602052604060002090565b91614d9f610c7284866155a2565b5060016080840151614f9a81611da4565b1615614f56565b508115614f49565b61043d90614fc2606082015151610140830151906118f6565b80516001600160a01b03166000908152600160205260409020549061268a565b909161043d92811015614ffb575b60051b8101906146ae565b615003611980565b614ff0565b615010615017565b6002600055565b60016000540361502357565b60046040517f7fa8a987000000000000000000000000000000000000000000000000000000008152fd5b9092813b1561512d57604051926000947f23b872dd000000000000000000000000000000000000000000000000000000008652806004528160245282604452858060648180885af1156150a65750505050604052606052565b8593943d6150e9575b5060a4947ff486bc870000000000000000000000000000000000000000000000000000000085526004526024526044526064526001608452fd5b601f3d0160051c9060051c908060030291808211615114575b505060205a91011061209857856150af565b8080600392028380020360091c92030201018680615102565b507f5f15d6720000000000000000000000000000000000000000000000000000000060005260045260246000fd5b929093833b1561526857604051936080519160a0519360c051956000987ff242432a000000000000000000000000000000000000000000000000000000008a528060045281602452826044528360645260a06084528960a452898060c48180895af1156151d857505050505060805260a05260c052604052606052565b89949550883d61521b575b5060a4957ff486bc87000000000000000000000000000000000000000000000000000000008652600452602452604452606452608452fd5b601f3d0160051c9060051c90806003029180821161524f575b505060205a91011061524657866151e3565b843d81803e3d90fd5b8080600392028380020360091c92030201018780615234565b837f5f15d6720000000000000000000000000000000000000000000000000000000060005260045260246000fd5b42109081156152d4575b506152aa57600190565b60046040517f6f7eac26000000000000000000000000000000000000000000000000000000008152fd5b9050421015386152a0565b42109081156152f8575b506152f357600190565b600090565b9050421015386152e9565b9091336001600160a01b0383161461559d5761531d6127b4565b926000937f190100000000000000000000000000000000000000000000000000000000000085526002526022526042832090836022528380528392815191601f198101805184604103918860018411938415615532575b508514851515169788156153c3575b5050505050505050156153935750565b60049061539e612895565b7f4f7fb80d000000000000000000000000000000000000000000000000000000008152fd5b909192939495969750604082527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc8501937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0855196019660208b60648a519b7f1626ba7e000000000000000000000000000000000000000000000000000000009d8e8b528c520188845afa998a615469575b505050505252523880808080808080615383565b8b51036154765780615455565b908a913b61550a576154e257640101000000821a156154b757807f815e1d640000000000000000000000000000000000000000000000000000000060049252fd5b6024917f1f003d0a000000000000000000000000000000000000000000000000000000008252600452fd5b807f8baa579f0000000000000000000000000000000000000000000000000000000060049252fd5b6004827f4f7fb80d000000000000000000000000000000000000000000000000000000008152fd5b9850506040840180519060608601518b1a99615569575b89865288835260208b60808560015afa5083835287865252885138615374565b9850601b8160ff1c01987f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82168152615549565b505050565b905460ff8160081c16615614576effffffffffffffffffffffffffffff8160101c1690816155d3575b505050600190565b60881c11156155e35780806155cb565b602490604051907f10fda3e10000000000000000000000000000000000000000000000000000000082526004820152fd5b602482604051907f1a5155740000000000000000000000000000000000000000000000000000000082526004820152fd5b906000905460ff8160081c16615694576effffffffffffffffffffffffffffff8160101c16908161567a575b50505050600190565b60881c111561568a578080615671565b6155e35750600090565b50905050600090565b90929160019060048110156156fd575b11806156ea575b806156d7575b6156c5575b50505050565b6156ce9361570a565b388080806156bf565b506001600160a01b0382163314156156ba565b506001600160a01b0384163314156156b4565b6157056107bc565b6156ad565b6000919290829161032295604051906001600160a01b0360208301937f0e1d31dc00000000000000000000000000000000000000000000000000000000855288602485015233604485015216606483015260848201526084815261576d8161027d565b51915afa615e78565b90815180825260208080930193019160005b828110615796575050505090565b909192938260a0600192875180516157ad816107ec565b8252808401516001600160a01b03168483015260408082015190830152606080820151908301526080908101519082015201950193929101615788565b90815180825260208080930193019160005b82811061580a575050505090565b909192938260c060019287518051615821816107ec565b8252808401516001600160a01b039081168584015260408083015190840152606080830151908401526080808301519084015260a0918201511690820152019501939291016157fc565b906004821015611dc45752565b6060519081815260208091019160809160005b828110615899575050505090565b83518552938101939281019260010161588b565b90815180825260208080930193019160005b8281106158cd575050505090565b8351855293810193928101926001016158bf565b90815180825260208092019182818360051b85019501936000915b84831061590c5750505050505090565b909192939495848061595e83856001950387528a518051825261593584820151858401906136bc565b60408082015190830152606080820151908301526080809101519160a0809282015201906158ad565b98019301930191949392906158fc565b92615b02906001600160a01b0361043d9694615b0f94875216602086015260a06040860152805160a080870152610140906159b482880182516001600160a01b03169052565b6080615af1615a286159f38a6159dc6020870151610160809301906001600160a01b03169052565b6040860151906101808d01526102a08c0190615776565b60608501517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08c8303016101a08d01526157ea565b615a3a838501516101c08c019061586b565b60a08401516101e08b015260c08401516102008b015260e08401516102208b015261010094858501516102408c015261012094858101516102608d015201516102808b0152615aa1602087015160c08c01906effffffffffffffffffffffffffffff169052565b60408601516effffffffffffffffffffffffffffff1660e08b015260608601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6095868c840301908c0152610148565b930151918784030190870152610148565b8381036060850152615878565b9160808184039101526158e1565b939061043d95936001600160a01b03615b0f94615cb393885216602087015260a06040870152805160a08088015261014090615b6482890182516001600160a01b03169052565b6080615ca2615bd8615ba38b6020860151615b8d61016091828401906001600160a01b03169052565b61018060408801519201526102a08d0190615776565b60608501518c82037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec0016101a08e01526157ea565b615bea838501516101c08d019061586b565b60a08401516101e08c015260c08401516102008c015260e08401516102208c015261010094858501516102408d0152610120948c6102608783015191015201516102808c0152615c52602087015160c08d01906effffffffffffffffffffffffffffff169052565b60408601516effffffffffffffffffffffffffffff1660e08c015260608601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6095868d840301908d0152610148565b930151918884030190880152610148565b9084820360608601526158ad565b909591929493600190615cd381611da4565b1180615d8f575b80615d7c575b615ced575b505050505050565b6080810151511580615d73575b15615d155750615d0a945061570a565b388080808080615ce5565b6000935083929450615d6061576d615d6e9760405192839160208301957f33131570000000000000000000000000000000000000000000000000000000008752338b6024860161596e565b03601f1981018352826102d1565b615d0a565b50855115615cfa565b506001600160a01b038416331415615ce0565b506001600160a01b038216331415615cda565b919692939594600190615db481611da4565b1180615e65575b80615e52575b615dcf575b50505050505050565b6080820151511580615e49575b15615df9575050615ded945061570a565b38808080808080615dc6565b600094508493955061576d615e4497615d6060405193849260208401967f33131570000000000000000000000000000000000000000000000000000000008852338c60248701615b1d565b615ded565b50805115615ddc565b506001600160a01b038516331415615dc1565b506001600160a01b038316331415615dbb565b15615f0f577f0e1d31dc000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000600060203d14615f04575b1603615ed35750565b602490604051907ffb5014fc0000000000000000000000000000000000000000000000000000000082526004820152fd5b602081803e51615eca565b602490615f1a612895565b604051907ffb5014fc0000000000000000000000000000000000000000000000000000000082526004820152fdfea26469706673582212204f3babde171047a7c5e80dad33a0544638cfdd64537413da9098740fde59609964736f6c634300080e0033","sourceMap":"3714:1283:0:-:0;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;4473:127;;;;;;3714:1283;4473:127;;3714:1283;;;;;;-1:-1:-1;;3714:1283:0;;;;;;;-1:-1:-1;3714:1283:0;19420:12:41;3714:1283:0;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;;-1:-1:-1;;;;;3714:1283:0;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;3714:1283:0;;;:::o;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;:::o;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;:::o;:::-;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;22863:131:28;3714:1283:0;;;;;;:::i;:::-;;;;;;;:::i;:::-;22863:131:28;;:::i;:::-;3714:1283:0;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;955:18:33;;:::i;:::-;1273:10;3714:1283:0;;1263:9:33;3714:1283:0;;;;;;1263:9:33;3714:1283:0;;;;;;;;;;;1363:42:33;1273:10;;1363:42;;3714:1283:0;;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;25687:13:28;;;:::i;:::-;25718:10;;;;;;:::i;:::-;25746:11;;;;;;;:::i;:::-;25775:19;;;;;;;;;:::i;:::-;25812:15;;;;;;;;;:::i;:::-;26003:19;;;;:::i;:::-;3714:1283:0;;;;;:::i;:::-;-1:-1:-1;;;;;3714:1283:0;;;;;-1:-1:-1;;;;;3714:1283:0;;25654:389:28;;3714:1283:0;;;;;;:::i;:::-;25746:11:28;25654:389;;3714:1283:0;;;;;;:::i;:::-;25775:19:28;25654:389;;3714:1283:0;25654:389:28;;25812:15;25654:389;;;:::i;:::-;25845:15;;;14394:4:30;25845:15:28;25654:389;;3714:1283:0;25878:13:28;;;14394:4:30;25878:13:28;25654:389;;3714:1283:0;25909:14:28;;;3714:1283:0;25909:14:28;25654:389;;3714:1283:0;25941:10:28;;;14394:4:30;25941:10:28;25654:389;;3714:1283:0;25969:16:28;;;3714:1283:0;25969:16:28;25654:389;;3714:1283:0;25654:389:28;;;3714:1283:0;26057:13:28;;14394:4:30;25624:456:28;;;:::i;:::-;25746:11;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;:::i;:::-;15711:14:41;;:::i;:::-;-1:-1:-1;16268:15:41;;;;;;3714:1283:0;;17231:4:41;3714:1283:0;;;;;16253:13:41;16367:9;;17231:4;16367:9;;;;:::i;:::-;16488:16;;;;:::i;:::-;16591:23;;;:::i;:::-;3714:1283:0;16725:96:41;3714:1283:0;;;;:::i;:::-;16725:96:41;:::i;:::-;16929:23;;;3714:1283:0;;16929:12:41;3714:1283:0;;;;;;;16929:23:41;17047:254;;;;:::i;:::-;;17390:24;3714:1283:0;;;;;;;;17390:24:41;;3714:1283:0;17390:24:41;17386:558;;16253:13;3714:1283:0;;;;;;16253:13:41;;17386:558;17775:150;17529:15;17775:150;17529:15;17639:30;17883:20;17529:15;17492:53;3714:1283:0;17529:15:41;;;;;;;;:::i;:::-;3714:1283:0;;;:::i;:::-;17492:53:41;;;:::i;:::-;17231:4;3714:1283:0;;;;;;;;17639:30:41;17883:20;;:::i;:::-;3714:1283:0;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;17775:150:41;;;;17386:558;;;;;;;3714:1283:0;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19913:32:28;3714:1283:0;19875:192:28;3714:1283:0;;;;;;:::i;:::-;19913:32:28;;;;:::i;:::-;3714:1283:0;;;;;;:::i;:::-;-1:-1:-1;3714:1283:0;;19875:192:28;:::i;3714:1283:0:-;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;5237:217:28;5283:30;3714:1283:0;;;;5283:30:28;:::i;:::-;3714:1283:0;;;;;;:::i;:::-;-1:-1:-1;3714:1283:0;;5434:10:28;3714:1283:0;;;5237:217:28;;:::i;:::-;3714:1283:0;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8478:195:28;3714:1283:0;;;;;;:::i;:::-;;;;;;;:::i;:::-;-1:-1:-1;;;;;3714:1283:0;;;;8641:10:28;3714:1283:0;;8641:10:28;8615:48;;3714:1283:0;;;;;:::i;:::-;;;;;;;;:::i;:::-;8478:195:28;;:::i;:::-;3714:1283:0;;;;;;;;;;;;;;;8615:48:28;3714:1283:0;;8615:48:28;;;;3714:1283:0;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;12239:32:28;3714:1283:0;12190:381:28;3714:1283:0;;;;;;:::i;:::-;12239:32:28;;;;:::i;:::-;3714:1283:0;;;;;;;:::i;:::-;-1:-1:-1;3714:1283:0;;;;12513:10:28;;3714:1283:0;;;12190:381:28;;:::i;3714:1283:0:-;;;;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3714:1283:0;-1:-1:-1;3714:1283:0;1842:9:33;3714:1283:0;;;-1:-1:-1;3714:1283:0;;27520:225:28;;3714:1283:0;;;;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;;12316:18:37;;:::i;:::-;3714:1283:0;;;;;;:::i;:::-;2271:1:30;14394:4;;12650:91:37;2271:1:30;;;12650:91:37;3714:1283:0;;;;;;;;;;;;;:::i;:::-;;2271:1:30;3714:1283:0;;;-1:-1:-1;;;;;12451:19:37;3714:1283:0;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;3368:528:27;;;;;;;;;;4103:254;;;;;4521:93;;5049:1375;;3368:528;5049:1375;;3368:528;5049:1375;;;6751:15;5049:1375;3368:528;5049:1375;;;;;;;;;;3368:528;5049:1375;;;;;3368:528;5049:1375;;;;;;;3368:528;5049:1375;;;;;;3368:528;;6751:15;;:::i;:::-;3714:1283:0;6973:316:27;;;;;;3714:1283:0;;:::i;:::-;7350:47:27;;;7522:29;;;7514:38;7522:29;;;:::i;:::-;-1:-1:-1;;;;;3714:1283:0;;;7514:38:27;-1:-1:-1;;;;;3714:1283:0;;;5049:1375:27;7575:34;;14394:4:30;7514:95:27;7492:200;;8264:18;8216:30;7868:21;7785:294;8300:31;7868:21;8300:31;7868:21;;;;;;:::i;:::-;7907:18;;;;;;;;:::i;:::-;8015:22;;;;14394:4:30;7971:26:27;;;;14394:4:30;7943:10:27;;3714:1283:0;;7785:294:27;;:::i;:::-;8264:18;:::i;:::-;8300:31;;;;;;:::i;:::-;8216:30;;;;14394:4:30;8300:31:27;:::i;:::-;7346:3915;2346:1:30;1324:31:42;3714:1283:0;1233:129:42;7346:3915:27;3714:1283:0;;3368:528:27;3714:1283:0;;;;;7492:200:27;3714:1283:0;;;7655:22:27;;;;7346:3915;8773:30;;;;10942:185;10985:18;;10942:185;8773:30;11238:11;8773:30;;;:::i;:::-;3714:1283:0;;;;;;;;:::i;:::-;8903:44:27;;;9085:21;9048:305;9085:21;;;;;;:::i;:::-;9128:18;;;;;:::i;:::-;9248:22;;;;14394:4:30;9200:26:27;;;;14394:4:30;9168:10:27;-1:-1:-1;;;;;9168:10:27;3714:1283:0;;9048:305:27;;:::i;10942:185::-;;:::i;:::-;11238:11;:::i;:::-;7346:3915;;8899:1961;3714:1283:0;;;:::i;:::-;3368:528:27;9378:45;;3368:528;;9562:21;9524:306;9562:21;;;;;;:::i;:::-;9605:18;;;;;:::i;:::-;9725:22;;;;14394:4:30;9677:26:27;;;;14394:4:30;9645:10:27;-1:-1:-1;;;;;9645:10:27;3714:1283:0;;9524:306:27;;:::i;:::-;8899:1961;;9374:1486;3714:1283:0;;;;;:::i;:::-;9855:44:27;3714:1283:0;;10000:329:27;10037:29;;;;:::i;:::-;10120:18;;;;;:::i;:::-;10216:30;;;14394:4:30;10160:34:27;-1:-1:-1;;;;;5049:1375:27;10160:34;;14394:4:30;3714:1283:0;;10088:10:27;;10000:329;;:::i;9851:1009::-;10515:330;10553:29;;;;:::i;:::-;10636:18;;;;;:::i;:::-;10732:30;;;14394:4:30;10676:34:27;-1:-1:-1;;;;;5049:1375:27;10676:34;;14394:4:30;3714:1283:0;;10604:10:27;;10515:330;;:::i;4521:93::-;3714:1283:0;;4573:26:27;;;4103:254;3714:1283:0;4573:26:27;;3714:1283:0;;;4573:26:27;;;;;3714:1283:0;;;;;;;;:::i;:::-;12484:14:41;;:::i;:::-;-1:-1:-1;13036:15:41;;;;;;13699:11;3714:1283:0;17231:4:41;3714:1283:0;;;;;13021:13:41;13145:9;;;;;:::i;:::-;13183:13;;;:::i;:::-;13221:10;;;;;;;:::i;:::-;-1:-1:-1;;;;;3714:1283:0;;;;13327:10:41;;;:21;;:43;;;13021:13;13323:115;;13699:11;;;;;;;;:::i;:::-;13736:19;;;;;;;;;:::i;:::-;13781:15;;;;;;;;;;;:::i;:::-;14020:19;;;;;:::i;:::-;3714:1283:0;;;;;:::i;:::-;-1:-1:-1;;;;;3714:1283:0;;;;;-1:-1:-1;;;;;3714:1283:0;;;13595:473:41;;;3714:1283:0;;;;;;:::i;:::-;13595:473:41;;;3714:1283:0;;;;;;:::i;:::-;13595:473:41;;;3714:1283:0;13595:473:41;;;;;;:::i;:::-;13822:15;;;;14394:4:30;13595:473:41;;;3714:1283:0;13863:13:41;;;;14394:4:30;13595:473:41;;;3714:1283:0;13902:14:41;;;;3714:1283:0;13595:473:41;;;3714:1283:0;13942:10:41;;;;14394:4:30;13595:473:41;;;3714:1283:0;13978:16:41;;;;3714:1283:0;13595:473:41;;;3714:1283:0;13595:473:41;;;;;3714:1283:0;14090:13:41;14394:4:30;13557:564:41;;;:::i;:::-;14229:23;;;3714:1283:0;;16929:12:41;3714:1283:0;;;;;;;14229:23:41;3714:1283:0;;;;;;;;;;;;;;14524:40:41;;3714:1283:0;;14524:40:41;14417:4;3714:1283:0;13021:13:41;;13323:115;3714:1283:0;13699:11:41;3714:1283:0;13401:18:41;;;;13327:43;3714:1283:0;;;;13327:10:41;13352:18;;13327:43;;14394:4:30;3714:1283:0;;;;;;:::i;:::-;;14394:4:30;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3714:1283:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13220:24982:27:-;;;;;;:::i;:::-;13719:59;13753:18;;;14394:4:30;13731:20:27;;;14394:4:30;13719:59:27;:::i;:::-;;;;:::i;:::-;14387:44;14335:31;;;;;;:::i;:::-;14387:44;;;14394:4:30;;-1:-1:-1;14387:44:27;:::i;:::-;15656:28;15821:11919;;;;;;;;;;;13731:20;15821:11919;;;;;;;;13773:4;15821:11919;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15821:11919:27;;-1:-1:-1;15821:11919:27;;;;;;;;;;;;;13773:4;15821:11919;;;;;;;;;;;;;;;;;13731:20;15821:11919;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13773:4;15821:11919;;;;;;;;;;;;;;;;;;;;;13773:4;15821:11919;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38062:133;15821:11919;;;28253:20;15821:11919;28369:3007;;15821:11919;28369:3007;15821:11919;28369:3007;15821:11919;28369:3007;15821:11919;28369:3007;13731:20;28369:3007;15821:11919;;28369:3007;-1:-1:-1;28369:3007:27;15821:11919;-1:-1:-1;28369:3007:27;15821:11919;28369:3007;13773:4;15821:11919;;;;14335:31;28369:3007;;;15821:11919;;;;;;28369:3007;;15821:11919;28369:3007;;15821:11919;;;;28369:3007;;3714:1283:0;38165:20:27;32441:90;;1842:18:33;;;-1:-1:-1;;;;;3714:1283:0;;;13773:4:27;3714:1283:0;;;;;;;1842:18:33;3714:1283:0;32769:15:27;15821:11919;32799:1443;15821:11919;32441:90;15821:11919;32799:1443;15821:11919;32799:1443;15821:11919;32799:1443;;13731:20;32799:1443;15821:11919;32799:1443;13753:18;32799:1443;14387:44;32799:1443;;;;15821:11919;32799:1443;15821:11919;;;;;34262:3453;;;;;;;15821:11919;;;;34262:3453;;15821:11919;34262:3453;15821:11919;;;;34262:3453;;13731:20;14387:44;15821:11919;;;;34262:3453;;;;;15821:11919;;;;34262:3453;14387:44;34262:3453;;;-1:-1:-1;15821:11919:27;34262:3453;38133:18;15821:11919;37932:18;;37804:185;37932:18;;;:::i;:::-;37964:15;;15821:11919;37964:15;;;:::i;:::-;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;37876:19:27;15821:11919;37876:19;;3714:1283:0;37804:185:27;;:::i;38133:18::-;38165:20;;;;;:::i;3714:1283:0:-;;;38062:133:27;;:::i;2810:425:26:-;3097:63;3093:136;;2810:425::o;3093:136::-;3183:35;3714:1283:0;;3183:35:26;;;;4112:2496;4369:2058;;;;;;;;;;;;;;;;;;;;;;;;6519:13;6515:87;;4112:2496::o;6515:87::-;4369:2058;3714:1283:0;;6555:36:26;;;;3714:1283:0;;;;;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;38721:2240:27;;;38981:9;39309:13;39321:1;39304:1045;39324:29;;;;;;40433:23;;;;;;40429:88;;40586:6;;;;:::i;:::-;40682:23;;;40678:277;;38721:2240;;:::o;40678:277::-;40906:23;3714:1283:0;;40893:10:27;40906:23;:::i;40429:88::-;40479:27;3714:1283:0;;40479:27:27;;;;39355:3;39505:23;;;;;;;;:::i;:::-;14394:4:30;;;39792:42:27;;;;39788:123;;40077:25;40026:29;;3714:1283:0;40026:29:27;;14394:4:30;;;;:::i;:::-;40077:25:27;:::i;:::-;3714:1283:0;39355:3:27;3714:1283:0;39309:13:27;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;:::o;41505:3513:27:-;;;;;;42222:815;;;;42367:10;;42484:21;;;;;:::i;:::-;42589:22;;;14394:4:30;;42536:26:27;;;14394:4:30;42222:815:27;43105:83;;43370:294;;;;;;43802:31;;;;;;;;:::i;:::-;43917:13;;;-1:-1:-1;43932:29:27;;;;;;44999:11;;;;;;;;;;:::i;43917:13::-;44098:31;;;;:34;:31;;;;;:::i;:::-;:34;;:::i;:::-;14394:4:30;;44313:85:27;;;43917:13;44566:29;44489:220;44566:29;;44489:220;44566:29;43370:294;3714:1283:0;44566:29:27;;;;;:::i;44489:220::-;;;;:::i;:::-;3714:1283:0;43917:13:27;;44313:85;44348:35;;;;;;;;;;:::i;:::-;44313:85;;;;;;;;42222:815;42730:10;;42758:12;42871:29;;;:::i;:::-;42992:30;;;14394:4:30;;42931:34:27;;;14394:4:30;42222:815:27;;3714:1283:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17182:913:28;;3714:1283:0;17182:913:28;17761:327;17182:913;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;17992:23:28;:48;3714:1283:0;;;18018:10:28;;17992:48;;3714:1283:0;;;:::i;:::-;17761:327:28;;:::i;17992:48::-;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;3714:1283:0;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;:::i;:::-;;:::o;4793:3517:35:-;;;;;;;5107:24;;;5103:3201;5107:24;;;7610:22;5335:2111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7610:22;:::i;5103:3201::-;3714:1283:0;;;7770:15:35;3714:1283:0;;;;;;:::i;:::-;7758:27:35;7770:15;;7893:1;7883:11;7879:94;;8100:10;;;:::i;7879:94::-;7925:29;3714:1283:0;;7925:29:35;;;;7754:540;8272:6;;;;;;:::i;8541:742::-;;8695:6;;;:::i;:::-;-1:-1:-1;8817:145:35;;;;;;;9008:8;9004:273;;8541:742;;:::o;9004:273::-;3714:1283:0;9004:273:35;;;;:::i;:::-;-1:-1:-1;;;;;3714:1283:0;;9227:39:35;;;;3714:1283:0;9227:39:35;;;3714:1283:0;;;;;9227:39:35;3401:203:26;3534:11;3530:68;;3401:203::o;3530:68::-;3568:19;3714:1283:0;;3568:19:26;;;;10219:969:35;;;;;;;10496:6;;;:::i;:::-;10627:10;;;;:::i;:::-;10700:24;;;1564:9390:44;;;;10722:1:35;;1564:9390:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10696:486:35;1564:9390:44;;;;;;;;;;10219:969:35:o;1564:9390:44:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10696:486:35;11151:6;;;;;;;;:::i;12189:1092::-;;;;;;;;12531:10;;;;:::i;:::-;12604:24;;;12718:11;;12728:1;12718:11;12714:86;;12919:10;;;:::i;12600:675::-;23167:16;24384:671;23167:16;;;-1:-1:-1;23167:16:35;;;;3714:1283:0;14394:4:30;3714:1283:0;;23341:41:35;23337:1009;14394:4:30;;;24384:671:35;23398:12;23409:1;23489:498;;;;14394:4:30;23489:498:35;;;23442:33;23489:498;;;;14394:4:30;23489:498:35;;;;;;;;;23337:1009;24384:671;;;13111:22;24384:671;;;;;;;;;;;;;;;;;;;;;;12189:1092::o;23337:1009::-;24083:253;24384:671;24083:253;;;;;;;;;;23337:1009;;14248:1028;;;;;;;14555:6;;;:::i;:::-;14686:10;;;;:::i;:::-;14759:24;;;14917:6;;;;;:::i;14755:515::-;23167:16;24384:671;23167:16;;;;;;14394:4:30;3714:1283:0;;23341:41:35;23337:1009;14394:4:30;;;24384:671:35;23398:12;23409:1;23489:498;;;;14394:4:30;23489:498:35;;;23442:33;23489:498;;;;14394:4:30;23489:498:35;;;;;;;;;23337:1009;24384:671;;;15105:23;24384:671;;;;;;;;;;;;;;;;;;;;;;14248:1028::o;23337:1009::-;24083:253;24384:671;24083:253;;;;;;;;;;23337:1009;;16027:458;;21766:139;;;;16389:35;16385:94;;16027:458;:::o;16385:94::-;16456:11;;16849:437;14436:4:30;3714:1283:0;;;16974:38:35;16970:75;;21766:139;;;;18282:502;;;;;;;;9862:1318:37;;;3714:1283:0;21766:139:35;-1:-1:-1;;;;;;9615:19:37;;;;;3714:1283:0;9862:1318:37;;;;;;;9760:27;9862:1318;;;;;;;;;20121:506:35;;;18282:502;;;20121:506;;;;;;20674:8;;20670:254;;3714:1283:0;21021:33:35;3714:1283:0;;21011:43:35;21007:116;;19025:73;;;21766:139;19025:73;;16849:437::o;21007:116::-;3714:1283:0;21077:35:35;;;;;;3714:1283:0;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;4573:26:27;20670:254:35;20884:29;20670:254;;;;:::i;:::-;3714:1283:0;20884:29:35;;;-1:-1:-1;;;;;3714:1283:0;;;20884:29:35;;;3714:1283:0;;;;;;;;;16970:75:35;17028:7;;:::o;19774:1355::-;9862:1318:37;;3714:1283:0;9862:1318:37;-1:-1:-1;;;;;14274:5:30;-1:-1:-1;9615:19:37;;;;;3714:1283:0;9862:1318:37;;;;;;;9760:27;9862:1318;;;;;;;;;20121:506:35;;;;;;;;;20674:8;;20670:254;;3714:1283:0;21021:33:35;3714:1283:0;;21011:43:35;21007:116;;19774:1355;;:::o;21007:116::-;9862:1318:37;3714:1283:0;21077:35:35;;;;;;3714:1283:0;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;4573:26:27;20670:254:35;20884:29;20670:254;;;:::i;:::-;9862:1318:37;3714:1283:0;20884:29:35;;;-1:-1:-1;;;;;3714:1283:0;;;20884:29:35;;;3714:1283:0;;;;;;;;;22907:2154:35;;24384:671;22907:2154;;;;14394:4:30;3714:1283:0;;23341:41:35;23337:1009;14394:4:30;;;24384:671:35;23398:12;11019:21;23489:498;;;;14394:4:30;23489:498:35;;;23442:33;23489:498;;;;14394:4:30;23489:498:35;;;;;;;;;23337:1009;24384:671;;;11019:21;24384:671;;;;;;;;;;;;;;;;10722:1;24384:671;;;;;;22907:2154::o;23337:1009::-;24083:253;24384:671;24083:253;;;11019:21;24083:253;;;;;;23337:1009;;1372:7415:37;;;;1662:47;;;3714:1283:0;;2238:20:37;;2349:1709;;;;;;;;;;;;;;;;-1:-1:-1;2349:1709:37;;;;;;;;;;;;;;;;;;;;4274:28;;4393:1858;;;;;;;;;;;-1:-1:-1;4393:1858:37;;;;;;;;;;;;-1:-1:-1;;4393:1858:37;2349:1709;4393:1858;2349:1709;4393:1858;;6459:2322;;;;;6352:15;;6459:2322;;;;;;;;;;;;;;;;;;;;;;1372:7415::o;4393:1858::-;;;;-1:-1:-1;;2349:1709:37;4393:1858;;;;;;;;;;;;;;;;;;;;;;;;2349:1709;;;-1:-1:-1;;2349:1709:37;;;;;;;;;;;;;;;;;;;;;;;;;11504:208;11608:13;11625:9;11608:26;11625:9;;11649:17;11504:208;:::o;11608:97::-;3714:1283:0;;2763:187:29;;;2791:24;;3714:1283:0;;2833:10:29;3714:1283:0;;;;2861:13:29;3714:1283:0;;;;11608:13:37;3714:1283:0;;;;2931:4:29;3714:1283:0;;;;;2763:187:29;;;;;:::i;:::-;3714:1283:0;2740:220:29;;11504:208:37;:::o;1348:2237:38:-;1416:2163;;;1348:2237::o;1416:2163::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1348:2237::o;1416:2163::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;5780:1222:39;;;;;6554:9;5780:1222;3714:1283:0;5780:1222:39;;3714:1283:0;5780:1222:39;;;;;6554:9;;:::i;:::-;3714:1283:0;;;:::i;:::-;;;;;:::i;:::-;;;;;;24381:55:39;24352:94;24381:55;;;;:::i;:::-;24352:94;:::i;:::-;24612:35;6453:5;24719:13;;24714:1050;24734:26;;;;;;25843:13;;;6453:5;25838:1160;25858:34;;;;;;27082:28;;;;;;27078:320;;25838:1160;3714:1283:0;;;27468:22:39;27464:88;;27624:97;;;;:::i;:::-;6959:36;5780:1222;:::o;27464:88::-;27513:28;3714:1283:0;;27513:28:39;;;;27078:320;27198:186;;;;;27078:320;;;25894:3;26061:28;;;;;;26234:228;26061:28;;;;;:::i;:::-;;26234:228;;:::i;:::-;26562:14;;25399:24;26562;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;-1:-1:-1;;;;;26562:45:39;3714:1283:0;25427:17:39;26590;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;26562:45:39;3714:1283:0;;26562:45:39;25427:17;;3714:1283:0;;;;;;26558:426:39;;3714:1283:0;25843:13:39;;;;;;26558:426;3714:1283:0;;26843:122:39;3714:1283:0;26843:122:39;3714:1283:0;;;;;;;26843:122:39;;;:::i;:::-;;;;:::i;:::-;;26558:426;;24762:3;24925:20;;;;6751:2174:36;24925:20:39;;;;;;;;;;:::i;:::-;;6751:2174:36;;:::i;:::-;25399:14:39;;:24;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;-1:-1:-1;;;;;25399:45:39;3714:1283:0;25427:17:39;;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;25399:45:39;3714:1283:0;;25399:45:39;25427:17;;3714:1283:0;;;;;;25395:355:39;;3714:1283:0;24719:13:39;;;;;;;;;25395:355;3714:1283:0;;25680:51:39;3714:1283:0;25680:51:39;3714:1283:0;;;;;25680:51:39;;;:::i;:::-;;;;:::i;:::-;;25395:355;;3714:1283:0;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;3714:1283:0;;;;:::i;:::-;;14394:4:30;3714:1283:0;14394:4:30;3714:1283:0;;14394:4:30;3714:1283:0:o;:::-;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;8386:11661:39;;;;;;;:::i;:::-;3714:1283:0;;8967:26:39;;;;:::i;:::-;9084:55;6453:5;9084:55;;9674:754;;6453:5;9674:754;;;;;;;10586:13;6453:5;10601:15;;;;;;18791:38;;18828:1;18791:38;18787:100;;19002:17;;;;:::i;:::-;6453:5;19273:15;;;;;;8386:11661;;;;;;:::o;19290:3::-;19386:14;;9674:754;19386:14;;;:::i;:::-;3714:1283:0;19386:28:39;19382:83;;19969:29;19612:17;;;;:::i;:::-;;:28;19772:14;;;;:::i;:::-;3714:1283:0;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;19853:20:39;;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;19926:21:39;14168;12997:30;19926:21;;;19969:29;;;;;:::i;:::-;3714:1283:0;19258:13:39;;19382:83;19438:8;;18787:100;18852:24;12997:30;3714:1283:0;18852:24:39;;;;10618:3;10725:17;;;;:::i;:::-;;10844:21;;;10840:455;;11532:211;;;;;:::i;:::-;11825:79;;;9674:754;11825:79;;;;12007:14;;12003:272;;12357:26;3714:1283:0;12357:26:39;;;;;:::i;:::-;3714:1283:0;;12706:24:39;;;:34;;;;3714:1283:0;12843:32:39;12997:30;12843:32;;;3714:1283:0;12997:30:39;;;3714:1283:0;;13240:13:39;;6453:5;13255:19;;;;;;14168:21;;;;;15387:24;;;:38;;3714:1283:0;;;15688:13:39;6453:5;15703:27;;;;;;10618:3;;;;;;;;9674:754;10618:3;10586:13;3714:1283:0;10586:13:39;;15732:3;15886:16;;12706:34;15886:16;9674:754;15886:16;;;:::i;:::-;;16149:27;17249:284;16149:27;;;14021:19;16149:27;;3714:1283:0;16039:159:39;3714:1283:0;;16039:159:39;;;:::i;:::-;16329:29;;;3714:1283:0;;;;;;16329:84:39;;16300:646;16386:27;;;3714:1283:0;;;;;;16300:646:39;3714:1283:0;;;;;17249:284:39;:::i;:::-;3714:1283:0;;17659:760:39;;;;3714:1283:0;15688:13:39;;16300:646;16746:177;;;:::i;:::-;3714:1283:0;;16300:646:39;;13276:3;13380:8;;;;:::i;:::-;;13411:383;;;;;14021:19;;;;;;;3714:1283:0;;;13911:151:39;;;;;:::i;:::-;14168:21;;;;3714:1283:0;;;;;;14168:44:39;;14164:539;14193:19;;14958:247;14193:19;9674:754;14193:19;;;3714:1283:0;;;;;;14164:539:39;3714:1283:0;;;14958:247:39;:::i;:::-;3714:1283:0;;;13240:13:39;;;;14164:539;14511:169;;;:::i;:::-;3714:1283:0;;14164:539:39;;12003:272;12126:23;;9674:754;12126:23;;;6453:5;12126:23;;;;3714:1283:0;12248:8:39;;10840:455;10970:23;;6453:5;10970:23;9674:754;10970:23;;3714:1283:0;11087:87:39;;;;;11268:8;;8386:11661;;;:::i;:::-;3714:1283:0;;8967:26:39;;;;:::i;:::-;3714:1283:0;;9084:55:39;;;;9674:754;;;;;;;;35934:4;9674:754;10586:13;;10601:15;;;;;;18791:38;;18828:1;18791:38;18787:100;;19002:17;;;;:::i;:::-;19273:15;;;;;8386:11661;;;;:::o;19290:3::-;19386:14;;35934:4;19386:14;;;:::i;:::-;3714:1283:0;19386:28:39;19382:83;;19969:29;19612:17;;;;:::i;:::-;;:28;19772:14;;;;:::i;:::-;3714:1283:0;;;;;-1:-1:-1;;;;;3714:1283:0;;;;19853:20:39;;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;19926:21:39;14168;12997:30;19926:21;;;19969:29;;;;;:::i;:::-;3714:1283:0;19258:13:39;;19382:83;19438:8;;10618:3;10725:17;;;;:::i;:::-;;10844:21;;;;10840:455;;11532:211;;;;;;:::i;:::-;11825:79;;;35934:4;11825:79;;;;12007:14;;;12003:272;;12357:26;;3714:1283:0;12357:26:39;;;;;:::i;:::-;3714:1283:0;;12706:24:39;;;:34;;;;3714:1283:0;12843:32:39;12997:30;12843:32;;;3714:1283:0;12997:30:39;;;3714:1283:0;;13240:13:39;;;13255:19;;;;;;15387:24;;;;14168:21;15387:24;;:38;;3714:1283:0;;;15688:13:39;;15703:27;;;;;;10618:3;;;;;;;35934:4;10618:3;10586:13;3714:1283:0;10586:13:39;;15732:3;15886:16;;35934:4;15886:16;;;:::i;:::-;;12706:34;14021:19;16149:27;;3714:1283:0;;17249:284:39;3714:1283:0;;16039:159:39;3714:1283:0;;16039:159:39;;;:::i;:::-;14168:21;16329:29;;3714:1283:0;;;;;;;16329:84:39;;16300:646;16386:27;;;3714:1283:0;;;;;;;;;;;17249:284:39;:::i;:::-;3714:1283:0;;17659:760:39;;;;3714:1283:0;15688:13:39;;13276:3;13380:8;;;;:::i;:::-;;13411:383;;;;;14021:19;;;;;;;3714:1283:0;;;13911:151:39;;;;;:::i;:::-;14168:21;;;;3714:1283:0;;;;;;14168:44:39;;14164:539;14193:19;;14958:247;14193:19;35934:4;14193:19;;;3714:1283:0;;;;;;;;;14958:247:39;:::i;:::-;3714:1283:0;;;13240:13:39;;;;12003:272;12126:23;;;;35934:4;12126:23;;;;;3714:1283:0;12248:8:39;;10840:455;10970:23;35934:4;10970:23;;;;3714:1283:0;11087:87:39;;;;;11268:8;;3714:1283:0;;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;:::o;:::-;;;;;;;;;:::o;:::-;;;:::i;1612:2272:25:-;;;1907:24;;;1903:1881;;3861:16;;;1612:2272;:::o;1903:1881::-;3714:1283:0;;;2738:23:25;2737:65;3714:1283:0;2782:19:25;3714:1283:0;;2444:15:25;;3714:1283:0;;;;;2738:23:25;;:::i;:::-;2782:19;;:::i;:::-;2737:65;;:::i;:::-;2899:805;;;;;;;3760:13;:::o;1612:2272::-;;;1907:24;;;1903:1881;;3861:16;;;1612:2272;:::o;1903:1881::-;3714:1283:0;2782:19:25;2737:65;3714:1283:0;2738:23:25;3714:1283:0;9674:754:39;3714:1283:0;;;2444:15:25;;3714:1283:0;;;;;2738:23:25;;:::i;2737:65::-;2899:805;;;;;;;;;;3760:13;:::o;4692:1158::-;;;;4927:24;;;4923:67;;5127:356;;;;;;5601:17;;;:::i;:::-;5710:134;4692:1158;:::o;5127:356::-;;;;;;;4923:67;4967:12;;;;:::o;3714:1283:0:-;;-1:-1:-1;3714:1283:0;;;:::o;:::-;;;;;:::i;:::-;;;;:::i;1536:7446:34:-;3714:1283:0;;;;2143:13:34;2155:1;2158:26;;;;;;7223:13;;;2155:1;7238:23;;;;;;1536:7446;;;:::o;7263:3::-;7371:17;;;;:::i;:::-;;7483:28;3714:1283:0;2802:36:34;7483:23;;3714:1283:0;;;;;;;;;;7483:28:34;;7479:83;;7701:24;7860:29;;;;;3714:1283:0;7990:13:34;2155:1;8005:14;;;;;;3211:22;;;;8499:21;;;;;;3714:1283:0;8613:13:34;2155:1;8628:14;;;;;;7263:3;;;;3714:1283:0;7263:3:34;7223:13;3714:1283:0;7223:13:34;;8644:3;8776:54;8796:33;:24;:21;;;:24;:::i;:::-;;:33;:::i;:::-;9689:64;-1:-1:-1;9481:278:34;;8776:54;8747:187;;3714:1283:0;;8613:13:34;;8747:187;8886:25;3714:1283:0;;8886:25:34;;;;8021:3;8153:116;8202:41;:32;:29;;;:32;:::i;8153:116::-;8124:257;;3714:1283:0;;7990:13:34;;8124:257;8325:33;3211:22;3714:1283:0;8325:33:34;;;;7479:83;7535:8;3714:1283:0;7535:8:34;;;2186:3;2325:20;;;;:::i;:::-;;3714:1283:0;;2592:33:34;;;;;2588:120;;2802:36;:26;:41;:36;:26;;;;;:::i;:::-;;:36;3714:1283:0;;;;;2802:41:34;;2798:96;;3033:26;;;;:::i;:::-;;:37;3211:22;;;;;;3714:1283:0;3316:17:34;3473:21;;3714:1283:0;;;;:::i;:::-;;;;:::i;:::-;3473:35:34;;3602:21;;;3714:1283:0;;3718:30:34;;;3714:125;;3963:21;;;;:::i;:::-;;3714:1283:0;9689:64:34;3714:1283:0;;;;;;:::i;:::-;4088:29:34;4162:30;4607:32;4162:30;;;3714:1283:0;4415:171:34;3714:1283:0;;4415:171:34;;;;4607:32;;:::i;:::-;4775:52;;;3714:1283:0;;;3469:3024:34;9689:64;6591:30;6587:111;;6794:34;;3714:1283:0;6794:34:34;;;6790:351;;3469:3024;2186:3;;2143:13;3714:1283:0;2143:13:34;;6790:351;7070:30;6971:27;7070:30;6971:27;;;3714:1283:0;7070:30:34;;;;;:::i;:::-;6790:351;;;;6587:111;6652:27;3714:1283:0;;6652:27:34;;;;3714:125;3783:33;3714:1283:0;;3783:33:34;;;;3469:3024;5022:29;;;;;;;3714:1283:0;;5168:38:34;;;5164:141;;9689:64;5477:29;;;;:::i;:::-;;3714:1283:0;;;;;;;:::i;:::-;5632:37:34;5740:38;6215:40;5740:38;;;3714:1283:0;6023:171:34;3714:1283:0;;6023:171:34;;;;6215:40;;:::i;:::-;6425:27;;3714:1283:0;;;3469:3024:34;;5164:141;5241:41;3714:1283:0;;5241:41:34;;;;2798:96;2867:8;;;3714:1283:0;2867:8:34;;;2588:120;2656:33;3211:22;3714:1283:0;2656:33:34;;;;10093:2127;;;;-1:-1:-1;10399:1680:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12154:60;;10093:2127::o;12154:60::-;12189:14;10399:1680;3714:1283:0;12189:14:34;;;;10399:1680;;;;;;;;;;;;;;;;;;;;;;;;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;3714:1283:0;;;;:::i;:::-;;;-1:-1:-1;3714:1283:0;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::o;6751:2174:36:-;;;;3714:1283:0;;:::i;:::-;;;;7302:33:36;7298:125;;7896:9;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;7617:24:36;:14;;:24;3714:1283:0;7896:9:36;:::i;:::-;8763:14;;:21;;;3714:1283:0;8763:26:36;8759:150;;6751:2174;:::o;8759:150::-;7617:24;6453:5:39;8809:17:36;;;;;3714:1283:0;8857:24:36;3714:1283:0;6751:2174:36:o;7298:125::-;3714:1283:0;;;7362:46:36;;;6453:5:39;7362:46:36;;;3714:1283:0;7362:46:36;6751:2174;;;;3714:1283:0;;:::i;:::-;;;;7302:33:36;7298:125;;8293:9;;;;;:::i;:::-;8406:17;;;8426:10;;3714:1283:0;;8533:20:36;;;3714:1283:0;8763:14:36;;:21;;;;3714:1283:0;8763:26:36;8759:150;;6751:2174;;:::o;8759:150::-;3714:1283:0;;;8857:24:36;3714:1283:0;;8857:24:36;3714:1283:0;6751:2174:36:o;7298:125::-;3714:1283:0;;;7362:46:36;;;26311:18:39;7362:46:36;;;3714:1283:0;7362:46:36;9759:10618;;;;;;;;9545:10838;;;;9759:10618;;;;;;;;;;;;;;;9545:10838;9759:10618;;;;;;;;;;;;;;;;;;;;;;;;;;;9545:10838;9759:10618;;;;;;;;;;;;;;9545:10838;9759:10618;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9545:10838;:::o;9759:10618::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;9759:10618:36;-1:-1:-1;9759:10618:36;;;;;:::i;:::-;;;;;;:::i;:::-;;;21135:10619;;;21438:10310;;;;;;;;;;;;;;;;21135:10619;21438:10310;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21135:10619;21438:10310;;;;;;;;;;;;;;;21135:10619;21438:10310;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21135:10619;:::o;21438:10310::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;21438:10310:36;-1:-1:-1;21438:10310:36;;;;;:::i;:::-;;;;;;:::i;:::-;;;28560:4511:39;;3714:1283:0;;28967:23:39;;;:::i;:::-;29182:13;29194:1;29197:15;;;;;;30867:9;;;;31264:30;;;:::i;:::-;3714:1283:0;;;31479:13:39;29194:1;31494:19;;;;;;32701:11;;;;;;:::i;:::-;32805:19;32801:99;;31474:1121;32801:99;;2346:1:30;1324:31:42;3714:1283:0;1233:129:42;32801:99:39;32874:14;32861:10;;32874:14;:::i;:::-;32801:99;;;31479:13;31632;;;;:::i;:::-;;31686:14;;3714:1283:0;;;;;;:::i;:::-;;;;:::i;:::-;31796:32:39;31792:434;;31479:13;32350:17;3714:1283:0;32350:17:39;;;32385:20;3714:1283:0;29443:23:39;32423:11;32350:17;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;32385:20:39;;3714:1283:0;32423:11:39;;:::i;:::-;3714:1283:0;31479:13:39;;31792:434;31929:11;30015:38;31929:11;;;;3714:1283:0;;;31929:28:39;31925:109;;3714:1283:0;;;;31792:434:39;;3714:1283:0;31792:434:39;;29214:3;29325:17;;;;:::i;:::-;;29443:28;3714:1283:0;29443:23:39;;;3714:1283:0;;;;;29443:28:39;;29439:323;;29828:25;;;;;:::i;:::-;29849:4;3714:1283:0;;;29828:25:39;30015:38;:24;;;:38;;3714:1283:0;;;30323:13:39;29194:1;30338:27;;;;;;29214:3;;;;3714:1283:0;29214:3:39;29182:13;3714:1283:0;29182:13:39;;30367:3;30492:16;;;;;:::i;:::-;;:28;3714:1283:0;30614:16:39;30610:116;;30367:3;3714:1283:0;;30323:13:39;;30610:116;3714:1283:0;;30665:38:39;;;;;;3714:1283:0;;;;;;;;;;;;;;;;4573:26:27;29439:323:39;29735:8;3714:1283:0;29735:8:39;;;1885:1797:35;;;;3714:1283:0;;;;;:::i;:::-;;;;:::i;:::-;2116:32:35;;2256:10;;;2248:19;3714:1283:0;2256:10:35;;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;2248:19:35;-1:-1:-1;;;;;2270:15:35;;;3714:1283:0;;;2248:37:35;2243:112;;2442:14;2458:11;3714:1283:0;2442:14:35;2458:11;2442:14;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;2458:11:35;;3714:1283:0;2458:11:35;;:::i;2112:1564::-;3714:1283:0;;;2508:14:35;3714:1283:0;;;;;:::i;:::-;;;;:::i;:::-;2491:31:35;2508:14;;2596:15;;;3714:1283:0;2592:88:35;;2765:196;2797:10;3714:1283:0;2797:10:35;;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;2847:14:35;-1:-1:-1;;;;;2879:11:35;3714:1283:0;2847:14:35;;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;2879:11:35;;3714:1283:0;;;2765:196:35;;:::i;2487:1189::-;3714:1283:0;2999:15:35;3714:1283:0;;;;;:::i;:::-;;;;:::i;:::-;2982:32:35;2999:15;;3134:10;3714:1283:0;3134:10:35;3101:230;3134:10;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;3184:14:35;;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;3216:15:35;-1:-1:-1;;;;;3249:11:35;3216:15;;;3714:1283:0;3249:11:35;;3714:1283:0;;;3101:230:35;;:::i;2978:698::-;3468:10;3714:1283:0;3468:10:35;3434:231;3468:10;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;3518:14:35;;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;3550:15:35;-1:-1:-1;;;;;3583:11:35;3550:15;;;3714:1283:0;3583:11:35;;3714:1283:0;;;3434:231:35;;:::i;35510:741:39:-;;36035:10;35510:741;;;;;3714:1283:0;;36035:10:39;;;:::i;:::-;37575:34;;;:::i;:::-;37775:35;36043:1;37876:13;;37871:940;37891:21;;;;;;38895:28;;;;39283:63;38895:28;;;;;38891:320;;37871:940;39283:63;;:::i;:::-;;35510:741;:::o;38891:320::-;39011:186;;;;;38891:320;;;37914:3;38030:15;;;;;;;;:::i;:::-;38169:177;38244:27;;;;:::i;:::-;38293:35;;;;;;;;;:::i;:::-;38169:177;;;;;:::i;:::-;38446:14;-1:-1:-1;;;;;38446:45:39;3714:1283:0;38446:24:39;;:14;;:24;-1:-1:-1;;;;;3714:1283:0;;;;;38446:24:39;38474:17;;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;38446:45:39;3714:1283:0;;38446:45:39;38293:35;;3714:1283:0;35934:4:39;3714:1283:0;;;38442:355:39;;3714:1283:0;37876:13:39;;;;38442:355;3714:1283:0;38727:51:39;3714:1283:0;;35934:4:39;3714:1283:0;;;38727:51:39;;;;;:::i;:::-;;;;:::i;:::-;;38442:355;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;;;;;;;:::i;1732:3815:36:-;;;;;3714:1283:0;;:::i;:::-;2090:27:36;;;:66;;;;1732:3815;2073:170;;3714:1283:0;;:::i;:::-;2423:155:36;3714:1283:0;;;;;;:::i;:::-;2423:155:36;;:::i;:::-;2699:27;3714:1283:0;2924:126:36;3714:1283:0;;;;;;:::i;:::-;2924:126:36;;:::i;:::-;3157:23;:14;;:23;:::i;:::-;3714:1283:0;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;3157:53:36;;;:116;;;1732:3815;3157:189;;;;1732:3815;3140:303;;5324:54;3526:24;3714:1283:0;3526:24:36;5351:27;3526:24;;;;;;;3714:1283:0;;;3553:14:36;;;:21;3714:1283:0;-1:-1:-1;3522:1750:36;3526:24;;;3734:26;;;3670:104;3734:26;;;4042:136;3734:26;;:::i;:::-;3670:104;:::i;:::-;4152:25;3714:1283:0;4042:42:36;3714:1283:0;;;;4262:14:36;;:21;3714:1283:0;;;;;;4042:42:36;;:::i;:::-;;:74;:109;;4152:25;;3714:1283:0;4042:136:36;;:::i;:::-;;:169;3714:1283:0;4416:14:36;;:21;3714:1283:0;;;3522:1750:36;5351:27;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;5351:27:36;5324:14;;:24;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;3522:1750:36;4586:18;;;;;4874:128;4586:18;;4874:42;4586:18;4540:64;4586:18;4976:25;4586:18;4874:101;4586:18;;:::i;4540:64::-;5039:14;;:21;3714:1283:0;;;;;;;;4874:42:36;:::i;:128::-;;:161;3714:1283:0;;5213:14:36;;;:21;3714:1283:0;3522:1750:36;;3140:303;3378:54;3714:1283:0;;3378:54:36;;;;3157:189;3289:14;:25;:14;;:25;3714:1283:0;3289:25:36;3318:28;;3714:1283:0;3289:57:36;;3157:189;;:116;-1:-1:-1;3226:14:36;;:20;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;-1:-1:-1;;;;;3226:47:36;3714:1283:0;3226:20:36;3250:23;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;3226:47:36;3714:1283:0;;3226:47:36;;3157:116;;2073:170;2188:44;3714:1283:0;;2188:44:36;;;;2090:66;2121:35;;;2090:66;;3714:1283:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;3017:2064:40;;;;918:217:42;;:::i;:::-;2377:1:30;1101:27:42;3714:1283:0;3671:165:40;;;;:::i;:::-;3714:1283:0;;;;;;;;;;:::i;:::-;3784:4:40;3714:1283:0;;1101:27:42;3714:1283:0;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4370:17:40;3714:1283:0;;;4224:17:40;4940:29;3714:1283:0;4649:9:40;3714:1283:0;;;;;;;;;;;4061:33:40;3714:1283:0;;;;;;4224:17:40;;:::i;:::-;4370;:::i;:::-;;:28;4649:9;;;:::i;:::-;3714:1283:0;;-1:-1:-1;;;;;3714:1283:0;;;4940:29:40;;2346:1:30;1324:31:42;3714:1283:0;1233:129:42;4940:29:40;3784:4;3017:2064;:::o;3714:1283:0:-;;;:::i;:::-;;;;;;:::i;:::-;;;6034:9639:40;;;;;;6367:25;;;;;3714:1283:0;6420:23:40;;;;3714:1283:0;6831:30:40;;;:::i;:::-;8960:21;;;;;;;;;3714:1283:0;9137:13:40;-1:-1:-1;9152:19:40;;;;;;11103:9;;;;;9810:21;;12849:46;;;;;;3714:1283:0;13081:13:40;-1:-1:-1;13096:27:40;;;;;;15451:11;;;;;;;;;;;;;;:::i;:::-;15532:19;15528:139;;6034:9639;:::o;15528:139::-;15641:14;15218:10;;15641:14;:::i;13125:3::-;13267:32;:29;;;:32;:::i;:::-;;13470:29;;;3714:1283:0;;13434:282:40;13521:27;;;;9857:19;13521:27;;3714:1283:0;;;13434:282:40;;:::i;:::-;13814:709;;;;;;;;;3714:1283:0;;;;;:::i;:::-;;;;:::i;:::-;14625:45:40;14621:411;;13125:3;15218:10;;3714:1283:0;15218:10:40;;3714:1283:0;15218:10:40;;3714:1283:0;;:::i;:::-;;13081:13:40;;14621:411;14779:23;;;;;;;14775:112;;3714:1283:0;;;;;;;14621:411:40;;14775:112;14837:27;3714:1283:0;;14837:27:40;;;;9173:3;9269:24;:21;;;:24;:::i;:::-;;3714:1283:0;;;;;:::i;:::-;;;;:::i;:::-;9442:37:40;9438:115;;9810:21;3714:1283:0;9810:21:40;;;;;;9770:299;3714:1283:0;9810:21:40;;;;;;3714:1283:0;;;9857:19:40;;;;3714:1283:0;;;9770:299:40;;:::i;:::-;10171:507;;;3714:1283:0;10902:26:40;3714:1283:0;;;-1:-1:-1;;;;;3714:1283:0;;;;;9137:13:40;;9438:115;9510:24;3714:1283:0;;9510:24:40;;;;6645:866:25;;;;6990:24;;;;;7084:47;;;;;;:::i;6986:519::-;7289:49;;;7251:243;7289:49;;7356:47;7289:49;;;;:::i;:::-;7356:47;;:::i;:::-;7251:243;;:::i;6645:866::-;;;;6990:24;;;;;7084:47;;;;;;:::i;6986:519::-;7289:49;;;7251:243;7289:49;;7356:47;7289:49;;;;:::i;7356:47::-;7251:243;;:::i;3714:1283:0:-;;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16317:855:40;;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17005:160:40;3714:1283:0;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;:::i;:::-;17005:160:40;;;16317:855::o;3714:1283:0:-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16317:855:40;;;;;;3714:1283:0;;;;;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;;;;;;;;;;;17005:160:40;3714:1283:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17448:380:40:-;3714:1283:0;;:::i;:::-;;;17780:15:40;17720:16;;;;:::i;:::-;17780:15;;;;;;:::i;:::-;3714:1283:0;;;;;;;:::i;:::-;;;;:::i;:::-;;;17750:1:40;17780:15;17693:128;;3714:1283:0;17750:1:40;3714:1283:0;17693:128:40;;3714:1283:0;;;;:::i;:::-;17693:128:40;;;3714:1283:0;;;;;;:::i;:::-;-1:-1:-1;14394:4:30;;17693:128:40;;;3714:1283:0;17448:380:40;:::o;18116:859::-;3714:1283:0;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3714:1283:0;;;:::i;:::-;;-1:-1:-1;3714:1283:0;;;;;;18674:13:40;;-1:-1:-1;18689:15:40;;;;;;18947:21;;;18116:859;:::o;18706:3::-;18854:9;18830:34;18854:9;3714:1283:0;18854:9:40;;;;:::i;:::-;18830:34;:::i;:::-;18810:54;;;;:::i;:::-;;;;;;:::i;:::-;;3714:1283:0;18674:13:40;;3714:1283:0;;;;;:::i;:::-;;;;;;;;;;1544:985:41;;;;3714:1283:0;-1:-1:-1;3714:1283:0;1794:12:41;3714:1283:0;;;-1:-1:-1;3714:1283:0;;;;;;;;;4258:301:46;;3714:1283:0;;;;;4754:754:46;;3714:1283:0;;;;;;2200:24:41;2196:102;;1544:985;3714:1283:0;;;;1544:985:41:o;2196:102::-;2277:9;;;:::i;:::-;2196:102;;;;;4754:754:46;3714:1283:0;;;;5005:31:46;;;;;;;3714:1283:0;5005:31:46;4258:301;3714:1283:0;;;;4420:27:46;;;;;;;3714:1283:0;4420:27:46;9095:1911:41;;;;;;;;:::o;:::-;;;;;;;4344:7531;;;4809:24;;4972:25;4942:143;4943:142;4972:25;;;3714:1283:0;5015:23:41;;;3714:1283:0;4943:142:41;;:::i;4942:143::-;4925:302;;5335:32;3714:1283:0;5343:23:41;;;3714:1283:0;;;;;5335:32:41;5407:25;5399:34;3714:1283:0;5407:25:41;;;3714:1283:0;;;;;5399:34:41;5521:23;;;;:41;;;;4344:7531;5517:92;;5717:23;;;:93;;;4344:7531;5700:262;;6492:20;6065:58;;;:::i;:::-;6378:24;;;;3714:1283:0;6416:25:41;;;3714:1283:0;;;;:::i;:::-;;;-1:-1:-1;;;;;3714:1283:0;6492:20:41;;3714:1283:0;5343:23:41;6492:20;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;6492:20:41;;;:::i;:::-;6634:23;;3714:1283:0;;16929:12:41;3714:1283:0;;;;;;;6634:23:41;6744:189;6743:190;6744:189;;;;:::i;6743:190::-;6726:348;;3714:1283:0;;;;;;;7169:24:41;7165:194;;4344:7531;3714:1283:0;;;;;;;;;;;;;7679:22:41;;;;7675:4061;7679:22;;;3784:4:40;7802:16:41;;3784:4:40;;7917:29:41;;;7798:668;;8565:27;;;;;:::i;:::-;:41;8561:329;;7798:668;8972:28;;;;:::i;:::-;;9095:1911;;;;;;;;;7798:668;11205:30;;11302:48;11205:30;;;;11368:46;11205:30;17231:4;3714:1283:0;;;;;;;;11205:30:41;3714:1283:0;;;;;;;;;;;;;;11302:48:41;3714:1283:0;;;;;;;;;;;;;;;11368:46:41;11826:42;;4344:7531;:::o;9095:1911::-;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9095:1911:41;;;;;-1:-1:-1;9095:1911:41;8561:329;3714:1283:0;;;;-1:-1:-1;8561:329:41;;7798:668;8110:32;;;;;;8106:360;;7798:668;;;;8106:360;8371:30;8242;;;8419:32;8242:30;;;;;:::i;:::-;8371;;:::i;:::-;8419:32;;:::i;:::-;8106:360;;;;7675:4061;11534:30;;;;;11679:46;11534:30;;;17231:4;3714:1283:0;;;;;;;;11534:30:41;3714:1283:0;;;;;;;;;;;;;;11623:42:41;3714:1283:0;7165:194:41;3714:1283:0;;7311:23:41;3714:1283:0;;-1:-1:-1;;;;;3714:1283:0;;;;7311:23:41;;;;;:::i;:::-;7165:194;;;;;6726:348;7039:24;;;;;;;;-1:-1:-1;7039:24:41;-1:-1:-1;7039:24:41;:::o;5700:262::-;5919:32;5407:25;3714:1283:0;5919:32:41;;;;5717:93;5784:25;3784:4:40;5784:25:41;;;3714:1283:0;;;;:::i;:::-;20387:133:41;;5717:93;;5517:92;5585:13;5407:25;3714:1283:0;5585:13:41;;;;5521:41;5548:14;;;5521:41;;4925:302;-1:-1:-1;;;;;;;;;5191:25:41:o;4344:7531::-;;;;;4809:24;;4942:143;4943:142;4972:25;;;3714:1283:0;5015:23:41;;;3714:1283:0;4943:142:41;;:::i;4942:143::-;4925:302;;5335:32;3714:1283:0;5343:23:41;;;3714:1283:0;;;;;5335:32:41;5399:34;3714:1283:0;5407:25:41;;;3714:1283:0;;;;;5399:34:41;5521:23;;;;:41;;;;4344:7531;5517:92;;5717:23;;;:93;;;4344:7531;5700:262;;6492:20;6065:58;;;;:::i;:::-;6378:24;;;;3714:1283:0;6416:25:41;;;3714:1283:0;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;3714:1283:0;;;;6492:20:41;3714:1283:0;5343:23:41;6492:20;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;6492:20:41;;;:::i;:::-;6634:23;;3714:1283:0;;16929:12:41;3714:1283:0;;;;;;;6634:23:41;6744:189;6743:190;6744:189;;;;:::i;6743:190::-;6726:348;;3714:1283:0;;;;;;;7169:24:41;7165:194;;4344:7531;3714:1283:0;;;;;;;;;;;;;7679:22:41;;;;7675:4061;7679:22;;;7817:1;7802:16;;7817:1;;7917:29;;;7798:668;;8565:27;;;;;:::i;:::-;:41;8561:329;;7798:668;8972:28;;;;:::i;:::-;;9095:1911;;;;;;;;;11205:30;;11302:48;11205:30;;;;11368:46;11205:30;17231:4;3714:1283:0;;;;;;;;9095:1911:41;;;;;;;;;;;;;:::i;8561:329::-;3714:1283:0;;;;-1:-1:-1;8561:329:41;;7798:668;8110:32;;;;;;8106:360;;7798:668;;;;8106:360;8371:30;8242;;;8419:32;8242:30;;;;;:::i;8419:32::-;8106:360;;;;7165:194;7311:23;3714:1283:0;7311:23:41;3714:1283:0;;-1:-1:-1;;;;;3714:1283:0;;;7311:23:41;7165:194;;;;;5717:93;5784:25;20387:133;5784:25;;;3714:1283:0;;;;:::i;:::-;20387:133:41;;5717:93;;5521:41;5548:14;;;5521:41;;4925:302;5191:25;;;;;6453:5:39;5191:25:41;6453:5:39;5191:25:41;6453:5:39;5191:25:41;:::o;4344:7531::-;;;;;4809:24;;4942:143;4943:142;4972:25;;;3714:1283:0;5015:23:41;;;3714:1283:0;4943:142:41;;:::i;4942:143::-;4925:302;;5335:32;3714:1283:0;5343:23:41;;;3714:1283:0;;;;;5335:32:41;5399:34;3714:1283:0;5407:25:41;;;3714:1283:0;;;;;5399:34:41;5521:23;;;;:41;;;;4344:7531;5517:92;;5717:23;;;:93;;;4344:7531;5700:262;;6492:20;6065:58;;;;:::i;6492:20::-;6634:23;;3714:1283:0;;16929:12:41;3714:1283:0;;;;;;;6634:23:41;6744:189;6743:190;6744:189;;;;:::i;5717:93::-;5784:25;35934:4:39;5784:25:41;;;3714:1283:0;;;;:::i;:::-;20387:133:41;;5717:93;;5521:41;5548:14;;;5521:41;;1597:648:26;2121:117;1597:648;1955:47;1905:29;;;;3714:1283:0;1955:47:26;;;3714:1283:0;1955:47:26;;:::i;:::-;3714:1283:0;;-1:-1:-1;;;;;3714:1283:0;-1:-1:-1;3714:1283:0;;;1842:9:33;3714:1283:0;;;;;;2121:117:26;;:::i;3714:1283:0:-;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;918:217:42;;;:::i;:::-;2377:1:30;1101:27:42;3714:1283:0;918:217:42:o;1512:215::-;2346:1:30;1637:16:42;3714:1283:0;1637:32:42;1633:88;;1512:215::o;1633:88::-;1692:18;3714:1283:0;;1692:18:42;;;;11564:4914:44;;;11789:4683;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11564:4914::o;11789:4683::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17126:5620;;;;17377:5363;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17126:5620::o;17377:5363::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1339:627:46;1588:15;-1:-1:-1;1576:57:46;;;;;1339:627;1572:314;;;13773:4:27;1339:627:46;:::o;1572:314::-;1768:13;3714:1283:0;;1768:13:46;;;;1576:57;1588:15;;;-1:-1:-1;1607:26:46;1576:57;;;1339:627;1588:15;-1:-1:-1;1576:57:46;;;;;1339:627;1572:314;;;1955:4;1339:627;:::o;1572:314::-;-1:-1:-1;1863:12:46;:::o;1576:57::-;1588:15;;;-1:-1:-1;1607:26:46;1576:57;;;2641:569;;;2865:10;-1:-1:-1;;;;;3714:1283:0;;2854:21:46;2850:58;;3035:18;;:::i;:::-;-1:-1:-1;;13253:843:37;;;;;;;;;;;;;;;1406:9170:43;;;;;;;;-1:-1:-1;;1406:9170:43;;;;;;;;;;;;;;;;;2641:569:46;-1:-1:-1;1406:9170:43;;;;;;;;;;;2641:569:46;10623:8:43;;;;;;;;;10619:380;;2641:569:46;:::o;10619:380:43:-;10840:149;10619:380;;;:::i;:::-;10840:149;;;;1406:9170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2850:58:46;2891:7;;;:::o;3994:1596::-;;3714:1283:0;;;;;;4258:301:46;;3714:1283:0;;;;;4758:25:46;;4754:754;;3994:1596;5571:12;;;17231:4:41;3994:1596:46;:::o;4754:754::-;3714:1283:0;;-1:-1:-1;5147:47:46;5143:355;;4754:754;;;;5143:355;3714:1283:0;;;;5341:29:46;;;;;;;3714:1283:0;5341:29:46;4258:301;3714:1283:0;;;;4420:27:46;;;;;;;3714:1283:0;4420:27:46;3994:1596;;6453:5:39;3714:1283:0;;;;;;;4258:301:46;;3714:1283:0;;;;;4758:25:46;;4754:754;;3994:1596;5571:12;;;;5579:4;3994:1596;:::o;4754:754::-;3714:1283:0;;-1:-1:-1;5147:47:46;5143:355;;4754:754;;;;5143:355;5291:98;;5471:12;6453:5:39;5471:12:46;:::o;4258:301::-;4374:88;;;4536:12;6453:5:39;4536:12:46;:::o;1279:544:47:-;;;;1601:1;1279:544;3714:1283:0;;;;;;1279:544:47;1580:22;:56;;;1279:544;1580:93;;;1279:544;1563:254;;1279:544;;;;;:::o;1563:254::-;1797:8;;;:::i;:::-;1563:254;;;;;;1580:93;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;1652:10:47;:21;;1580:93;;:56;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;1618:10:47;:18;;1580:56;;3714:1283:0;;;:::i;:::-;;;1829:621:47;-1:-1:-1;1829:621:47;;;;;2433:9;1829:621;3714:1283:0;;2095:195:47;-1:-1:-1;;;;;2095:195:47;;;;2135:35;2095:195;;;;;;3714:1283:0;2215:10:47;3714:1283:0;;;;;;;;;;;;;;2095:195:47;;;;;:::i;:::-;831:265:38;;;;2433:9:47;:::i;3714:1283:0:-;;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;4159:1675:47:-;;;;;;;4624:1;4159:1675;3714:1283:0;;;:::i;:::-;4603:22:47;:56;;;4159:1675;4603:93;;;4159:1675;4586:1242;;4159:1675;;;;;;;:::o;4586:1242::-;4811:23;;;;3714:1283:0;4811:35:47;:84;;;4586:1242;4790:1028;;;5031:8;;;;;:::i;:::-;4586:1242;;;;;;;;4790:1028;-1:-1:-1;3714:1283:0;;;;;;5312:318:47;;5793:9;3714:1283:0;;;5312:318:47;;;;;;;5360:53;5312:318;;5474:10;5312:318;;;;;:::i;:::-;;-1:-1:-1;;5312:318:47;;;;;;:::i;5793:9::-;4790:1028;;4811:84;3714:1283:0;;;4866:29:47;4811:84;;4603:93;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;4675:10:47;:21;;4603:93;;:56;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;4641:10:47;:18;;4603:56;;4159:1675;;;;;;;4624:1;4159:1675;3714:1283:0;;;:::i;:::-;4603:22:47;:56;;;4159:1675;4603:93;;;4159:1675;4586:1242;;4159:1675;;;;;;;;:::o;4586:1242::-;4811:23;;;;3714:1283:0;4811:35:47;:84;;;4586:1242;4790:1028;;;5031:8;;;;;;:::i;:::-;4586:1242;;;;;;;;;4790:1028;-1:-1:-1;3714:1283:0;;;;;;5312:318:47;5793:9;3714:1283:0;5312:318:47;3714:1283:0;;5312:318:47;;;;;;;5360:53;5312:318;;5474:10;5312:318;;;;;:::i;5793:9::-;4790:1028;;4811:84;3714:1283:0;;;4866:29:47;4811:84;;4603:93;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;4675:10:47;:21;;4603:93;;:56;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;4641:10:47;:18;;4603:56;;6303:633;6465:8;6461:256;;6827:35;3714:1283:0;-1:-1:-1;4192:394:38;;;;;6303:633:47;3714:1283:0;4684:18:38;6804:126:47;;6303:633;:::o;6804:126::-;3714:1283:0;;;;6886:33:47;;;;;;;3714:1283:0;6886:33:47;4192:394:38;;;;;;;;6461:256:47;3714:1283:0;6461:256:47;;;:::i;:::-;3714:1283:0;;6673:33:47;;;;;;;3714:1283:0;6673:33:47","linkReferences":{},"immutableReferences":{"3871":[{"start":10284,"length":32}],"3873":[{"start":10322,"length":32}],"3875":[{"start":10249,"length":32}],"3877":[{"start":5976,"length":32},{"start":9879,"length":32}],"3879":[{"start":5668,"length":32},{"start":9958,"length":32}],"3881":[{"start":6132,"length":32},{"start":10036,"length":32}],"3883":[{"start":10167,"length":32}],"3885":[{"start":10205,"length":32}],"3888":[{"start":4099,"length":32},{"start":8948,"length":32},{"start":9322,"length":32}],"3890":[{"start":9010,"length":32},{"start":9384,"length":32}]}},"methodIdentifiers":{"cancel((address,address,(uint8,address,uint256,uint256,uint256)[],(uint8,address,uint256,uint256,uint256,address)[],uint8,uint256,uint256,bytes32,uint256,bytes32,uint256)[])":"fd9f1e10","fulfillAdvancedOrder(((address,address,(uint8,address,uint256,uint256,uint256)[],(uint8,address,uint256,uint256,uint256,address)[],uint8,uint256,uint256,bytes32,uint256,bytes32,uint256),uint120,uint120,bytes,bytes),(uint256,uint8,uint256,uint256,bytes32[])[],bytes32,address)":"e7acab24","fulfillAvailableAdvancedOrders(((address,address,(uint8,address,uint256,uint256,uint256)[],(uint8,address,uint256,uint256,uint256,address)[],uint8,uint256,uint256,bytes32,uint256,bytes32,uint256),uint120,uint120,bytes,bytes)[],(uint256,uint8,uint256,uint256,bytes32[])[],(uint256,uint256)[][],(uint256,uint256)[][],bytes32,address,uint256)":"87201b41","fulfillAvailableOrders(((address,address,(uint8,address,uint256,uint256,uint256)[],(uint8,address,uint256,uint256,uint256,address)[],uint8,uint256,uint256,bytes32,uint256,bytes32,uint256),bytes)[],(uint256,uint256)[][],(uint256,uint256)[][],bytes32,uint256)":"ed98a574","fulfillBasicOrder((address,uint256,uint256,address,address,address,uint256,uint256,uint8,uint256,uint256,bytes32,uint256,bytes32,bytes32,uint256,(uint256,address)[],bytes))":"fb0f3ee1","fulfillOrder(((address,address,(uint8,address,uint256,uint256,uint256)[],(uint8,address,uint256,uint256,uint256,address)[],uint8,uint256,uint256,bytes32,uint256,bytes32,uint256),bytes),bytes32)":"b3a34c4c","getCounter(address)":"f07ec373","getOrderHash((address,address,(uint8,address,uint256,uint256,uint256)[],(uint8,address,uint256,uint256,uint256,address)[],uint8,uint256,uint256,bytes32,uint256,bytes32,uint256))":"79df72bd","getOrderStatus(bytes32)":"46423aa7","incrementCounter()":"5b34b966","information()":"f47b7740","matchAdvancedOrders(((address,address,(uint8,address,uint256,uint256,uint256)[],(uint8,address,uint256,uint256,uint256,address)[],uint8,uint256,uint256,bytes32,uint256,bytes32,uint256),uint120,uint120,bytes,bytes)[],(uint256,uint8,uint256,uint256,bytes32[])[],((uint256,uint256)[],(uint256,uint256)[])[])":"55944a42","matchOrders(((address,address,(uint8,address,uint256,uint256,uint256)[],(uint8,address,uint256,uint256,uint256,address)[],uint8,uint256,uint256,bytes32,uint256,bytes32,uint256),bytes)[],((uint256,uint256)[],(uint256,uint256)[])[])":"a8174404","name()":"06fdde03","validate(((address,address,(uint8,address,uint256,uint256,uint256)[],(uint8,address,uint256,uint256,uint256,address)[],uint8,uint256,uint256,bytes32,uint256,bytes32,uint256),bytes)[])":"88147732"},"ast":{"absolutePath":"contracts/Seaport.sol","id":37,"exportedSymbols":{"Consideration":[3859],"Seaport":[36]},"nodeType":"SourceUnit","src":"32:4966:0","nodes":[{"id":1,"nodeType":"PragmaDirective","src":"32:25:0","literals":["solidity",">=","0.8",".13"]},{"id":3,"nodeType":"ImportDirective","src":"59:56:0","absolutePath":"contracts/lib/Consideration.sol","file":"./lib/Consideration.sol","nameLocation":"-1:-1:-1","scope":37,"sourceUnit":3860,"symbolAliases":[{"foreign":{"id":2,"name":"Consideration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3859,"src":"68:13:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":36,"nodeType":"ContractDefinition","src":"3714:1283:0","nodes":[{"id":16,"nodeType":"FunctionDefinition","src":"4113:74:0","body":{"id":15,"nodeType":"Block","src":"4185:2:0","statements":[]},"documentation":{"id":7,"nodeType":"StructuredDocumentation","src":"3754:354:0","text":" @notice Derive and set hashes, reference chainId, and associated domain\n separator during deployment.\n @param conduitController A contract that deploys conduits, or proxies\n that may optionally be used to transfer approved\n ERC20/721/1155 tokens."},"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":12,"name":"conduitController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9,"src":"4166:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":13,"kind":"baseConstructorSpecifier","modifierName":{"id":11,"name":"Consideration","nodeType":"IdentifierPath","referencedDeclaration":3859,"src":"4152:13:0"},"nodeType":"ModifierInvocation","src":"4152:32:0"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":10,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9,"mutability":"mutable","name":"conduitController","nameLocation":"4133:17:0","nodeType":"VariableDeclaration","scope":16,"src":"4125:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8,"name":"address","nodeType":"ElementaryTypeName","src":"4125:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4124:27:0"},"returnParameters":{"id":14,"nodeType":"ParameterList","parameters":[],"src":"4185:0:0"},"scope":36,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":25,"nodeType":"FunctionDefinition","src":"4355:251:0","body":{"id":24,"nodeType":"Block","src":"4419:187:0","statements":[{"AST":{"nodeType":"YulBlock","src":"4482:118:0","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4503:4:0","type":"","value":"0x20"},{"kind":"number","nodeType":"YulLiteral","src":"4509:4:0","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4496:6:0"},"nodeType":"YulFunctionCall","src":"4496:18:0"},"nodeType":"YulExpressionStatement","src":"4496:18:0"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4534:4:0","type":"","value":"0x47"},{"kind":"number","nodeType":"YulLiteral","src":"4540:18:0","type":"","value":"0x07536561706f7274"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4527:6:0"},"nodeType":"YulFunctionCall","src":"4527:32:0"},"nodeType":"YulExpressionStatement","src":"4527:32:0"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4579:4:0","type":"","value":"0x20"},{"kind":"number","nodeType":"YulLiteral","src":"4585:4:0","type":"","value":"0x60"}],"functionName":{"name":"return","nodeType":"YulIdentifier","src":"4572:6:0"},"nodeType":"YulFunctionCall","src":"4572:18:0"},"nodeType":"YulExpressionStatement","src":"4572:18:0"}]},"evmVersion":"london","externalReferences":[],"id":23,"nodeType":"InlineAssembly","src":"4473:127:0"}]},"baseFunctions":[3962],"documentation":{"id":17,"nodeType":"StructuredDocumentation","src":"4193:157:0","text":" @dev Internal pure function to retrieve and return the name of this\n contract.\n @return The name of this contract."},"implemented":true,"kind":"function","modifiers":[],"name":"_name","nameLocation":"4364:5:0","overrides":{"id":19,"nodeType":"OverrideSpecifier","overrides":[],"src":"4386:8:0"},"parameters":{"id":18,"nodeType":"ParameterList","parameters":[],"src":"4369:2:0"},"returnParameters":{"id":22,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25,"src":"4404:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":20,"name":"string","nodeType":"ElementaryTypeName","src":"4404:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4403:15:0"},"scope":36,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":35,"nodeType":"FunctionDefinition","src":"4848:147:0","body":{"id":34,"nodeType":"Block","src":"4918:77:0","statements":[{"expression":{"hexValue":"536561706f7274","id":32,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4979:9:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_32b5c112df393a49218d7552f96b2eeb829dfb4272f4f24eef510a586b85feef","typeString":"literal_string \"Seaport\""},"value":"Seaport"},"functionReturnParameters":31,"id":33,"nodeType":"Return","src":"4972:16:0"}]},"baseFunctions":[3971],"documentation":{"id":26,"nodeType":"StructuredDocumentation","src":"4612:231:0","text":" @dev Internal pure function to retrieve the name of this contract as a\n string that will be used to derive the name hash in the constructor.\n @return The name of this contract as a string."},"implemented":true,"kind":"function","modifiers":[],"name":"_nameString","nameLocation":"4857:11:0","overrides":{"id":28,"nodeType":"OverrideSpecifier","overrides":[],"src":"4885:8:0"},"parameters":{"id":27,"nodeType":"ParameterList","parameters":[],"src":"4868:2:0"},"returnParameters":{"id":31,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35,"src":"4903:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":29,"name":"string","nodeType":"ElementaryTypeName","src":"4903:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4902:15:0"},"scope":36,"stateMutability":"pure","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":5,"name":"Consideration","nodeType":"IdentifierPath","referencedDeclaration":3859,"src":"3734:13:0"},"id":6,"nodeType":"InheritanceSpecifier","src":"3734:13:0"}],"canonicalName":"Seaport","contractDependencies":[],"contractKind":"contract","documentation":{"id":4,"nodeType":"StructuredDocumentation","src":"117:3596:0","text":" @title Seaport\n @custom:version 1.1\n @author 0age (0age.eth)\n @custom:coauthor d1ll0n (d1ll0n.eth)\n @custom:coauthor transmissions11 (t11s.eth)\n @custom:contributor Kartik (slokh.eth)\n @custom:contributor LeFevre (lefevre.eth)\n @custom:contributor Joseph Schiarizzi (CupOJoseph.eth)\n @custom:contributor Aspyn Palatnick (stuckinaboot.eth)\n @custom:contributor James Wenzel (emo.eth)\n @custom:contributor Stephan Min (stephanm.eth)\n @custom:contributor Ryan Ghods (ralxz.eth)\n @custom:contributor hack3r-0m (hack3r-0m.eth)\n @custom:contributor Diego Estevez (antidiego.eth)\n @custom:contributor Chomtana (chomtana.eth)\n @custom:contributor Saw-mon and Natalie (sawmonandnatalie.eth)\n @custom:contributor 0xBeans (0xBeans.eth)\n @custom:contributor 0x4non (punkdev.eth)\n @custom:contributor Laurence E. Day (norsefire.eth)\n @custom:contributor vectorized.eth (vectorized.eth)\n @custom:contributor karmacoma (karmacoma.eth)\n @custom:contributor horsefacts (horsefacts.eth)\n @custom:contributor UncarvedBlock (uncarvedblock.eth)\n @custom:contributor Zoraiz Mahmood (zorz.eth)\n @custom:contributor William Poulin (wpoulin.eth)\n @custom:contributor Rajiv Patel-O'Connor (rajivpoc.eth)\n @custom:contributor tserg (tserg.eth)\n @custom:contributor cygaar (cygaar.eth)\n @custom:contributor Meta0xNull (meta0xnull.eth)\n @custom:contributor gpersoon (gpersoon.eth)\n @custom:contributor Matt Solomon (msolomon.eth)\n @custom:contributor Weikang Song (weikangs.eth)\n @custom:contributor zer0dot (zer0dot.eth)\n @custom:contributor Mudit Gupta (mudit.eth)\n @custom:contributor leonardoalt (leoalt.eth)\n @custom:contributor cmichel (cmichel.eth)\n @custom:contributor PraneshASP (pranesh.eth)\n @custom:contributor JasperAlexander (jasperalexander.eth)\n @custom:contributor Ellahi (ellahi.eth)\n @custom:contributor zaz (1zaz1.eth)\n @custom:contributor berndartmueller (berndartmueller.eth)\n @custom:contributor dmfxyz (dmfxyz.eth)\n @custom:contributor daltoncoder (dontkillrobots.eth)\n @custom:contributor 0xf4ce (0xf4ce.eth)\n @custom:contributor phaze (phaze.eth)\n @custom:contributor hrkrshnn (hrkrshnn.eth)\n @custom:contributor axic (axic.eth)\n @custom:contributor leastwood (leastwood.eth)\n @custom:contributor 0xsanson (sanson.eth)\n @custom:contributor blockdev (blockd3v.eth)\n @custom:contributor fiveoutofnine (fiveoutofnine.eth)\n @custom:contributor shuklaayush (shuklaayush.eth)\n @custom:contributor 0xPatissier\n @custom:contributor pcaversaccio\n @custom:contributor David Eiber\n @custom:contributor csanuragjain\n @custom:contributor sach1r0\n @custom:contributor twojoy0\n @custom:contributor ori_dabush\n @custom:contributor Daniel Gelfand\n @custom:contributor okkothejawa\n @custom:contributor FlameHorizon\n @custom:contributor vdrg\n @custom:contributor dmitriia\n @custom:contributor bokeh-eth\n @custom:contributor asutorufos\n @custom:contributor rfart(rfa)\n @custom:contributor Riley Holterhus\n @custom:contributor big-tech-sux\n @notice Seaport is a generalized ETH/ERC20/ERC721/ERC1155 marketplace. It\n minimizes external calls to the greatest extent possible and provides\n lightweight methods for common routes as well as more flexible\n methods for composing advanced orders or groups of orders. Each order\n contains an arbitrary number of items that may be spent (the \"offer\")\n along with an arbitrary number of items that must be received back by\n the indicated recipients (the \"consideration\")."},"fullyImplemented":true,"linearizedBaseContracts":[36,3859,7413,6233,2143,7917,2722,1457,5317,2110,3422,8570,9353,5902,8727,9140,8662,6413,2525,2434,2825,2494,4944,8624,2192,6373,4091,1861,2085],"name":"Seaport","nameLocation":"3723:7:0","scope":37,"usedErrors":[1456,1790,1793,1800,1803,1808,1817,1820,1827,1830,1835,1840,1843,1846,1851,1854,1857,1860,2091,2094,2097,2100,2103,2106,2109,2133,2136,2139,2142,2191,2424,2427,2430,2433,2440,2443,2446,2459,2474,2485,2490,2493,2524]}],"license":"MIT"},"id":0} \ No newline at end of file +{"abi":[{"inputs":[{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BadContractSignature","type":"error"},{"inputs":[],"name":"BadFraction","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BadReturnValueFromERC20OnTransfer","type":"error"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"}],"name":"BadSignatureV","type":"error"},{"inputs":[],"name":"ConsiderationCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"},{"internalType":"uint256","name":"shortfallAmount","type":"uint256"}],"name":"ConsiderationNotMet","type":"error"},{"inputs":[],"name":"CriteriaNotEnabledForItem","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"identifiers","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"ERC1155BatchTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EtherTransferGenericFailure","type":"error"},{"inputs":[],"name":"InexactFraction","type":"error"},{"inputs":[],"name":"InsufficientEtherSupplied","type":"error"},{"inputs":[],"name":"Invalid1155BatchTransferEncoding","type":"error"},{"inputs":[],"name":"InvalidBasicOrderParameterEncoding","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidCallToConduit","type":"error"},{"inputs":[],"name":"InvalidCanceller","type":"error"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidConduit","type":"error"},{"inputs":[],"name":"InvalidERC721TransferAmount","type":"error"},{"inputs":[],"name":"InvalidFulfillmentComponentData","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InvalidMsgValue","type":"error"},{"inputs":[],"name":"InvalidNativeOfferItem","type":"error"},{"inputs":[],"name":"InvalidProof","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidRestrictedOrder","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"InvalidSigner","type":"error"},{"inputs":[],"name":"InvalidTime","type":"error"},{"inputs":[],"name":"MismatchedFulfillmentOfferAndConsiderationComponents","type":"error"},{"inputs":[{"internalType":"enum Side","name":"side","type":"uint8"}],"name":"MissingFulfillmentComponentOnAggregation","type":"error"},{"inputs":[],"name":"MissingItemAmount","type":"error"},{"inputs":[],"name":"MissingOriginalConsiderationItems","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NoContract","type":"error"},{"inputs":[],"name":"NoReentrantCalls","type":"error"},{"inputs":[],"name":"NoSpecifiedOrdersAvailable","type":"error"},{"inputs":[],"name":"OfferAndConsiderationRequiredOnFulfillment","type":"error"},{"inputs":[],"name":"OfferCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderAlreadyFilled","type":"error"},{"inputs":[],"name":"OrderCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderIsCancelled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderPartiallyFilled","type":"error"},{"inputs":[],"name":"PartialFillsNotEnabledForOrder","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenTransferGenericFailure","type":"error"},{"inputs":[],"name":"UnresolvedConsiderationCriteria","type":"error"},{"inputs":[],"name":"UnresolvedOfferCriteria","type":"error"},{"inputs":[],"name":"UnusedItemParameters","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCounter","type":"uint256"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"}],"name":"CounterIncremented","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct SpentItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"indexed":false,"internalType":"struct ReceivedItem[]","name":"consideration","type":"tuple[]"}],"name":"OrderFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderValidated","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"counter","type":"uint256"}],"internalType":"struct OrderComponents[]","name":"orders","type":"tuple[]"}],"name":"cancel","outputs":[{"internalType":"bool","name":"cancelled","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder","name":"advancedOrder","type":"tuple"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"}],"name":"fulfillAdvancedOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder[]","name":"advancedOrders","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"offerFulfillments","type":"tuple[][]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"considerationFulfillments","type":"tuple[][]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"maximumFulfilled","type":"uint256"}],"name":"fulfillAvailableAdvancedOrders","outputs":[{"internalType":"bool[]","name":"availableOrders","type":"bool[]"},{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order[]","name":"orders","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"offerFulfillments","type":"tuple[][]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"considerationFulfillments","type":"tuple[][]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"maximumFulfilled","type":"uint256"}],"name":"fulfillAvailableOrders","outputs":[{"internalType":"bool[]","name":"availableOrders","type":"bool[]"},{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"considerationToken","type":"address"},{"internalType":"uint256","name":"considerationIdentifier","type":"uint256"},{"internalType":"uint256","name":"considerationAmount","type":"uint256"},{"internalType":"address payable","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"internalType":"address","name":"offerToken","type":"address"},{"internalType":"uint256","name":"offerIdentifier","type":"uint256"},{"internalType":"uint256","name":"offerAmount","type":"uint256"},{"internalType":"enum BasicOrderType","name":"basicOrderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"offererConduitKey","type":"bytes32"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalAdditionalRecipients","type":"uint256"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct AdditionalRecipient[]","name":"additionalRecipients","type":"tuple[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct BasicOrderParameters","name":"parameters","type":"tuple"}],"name":"fulfillBasicOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order","name":"order","type":"tuple"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"}],"name":"fulfillOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"offerer","type":"address"}],"name":"getCounter","outputs":[{"internalType":"uint256","name":"counter","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"counter","type":"uint256"}],"internalType":"struct OrderComponents","name":"order","type":"tuple"}],"name":"getOrderHash","outputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"getOrderStatus","outputs":[{"internalType":"bool","name":"isValidated","type":"bool"},{"internalType":"bool","name":"isCancelled","type":"bool"},{"internalType":"uint256","name":"totalFilled","type":"uint256"},{"internalType":"uint256","name":"totalSize","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementCounter","outputs":[{"internalType":"uint256","name":"newCounter","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"information","outputs":[{"internalType":"string","name":"version","type":"string"},{"internalType":"bytes32","name":"domainSeparator","type":"bytes32"},{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder[]","name":"advancedOrders","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"offerComponents","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"considerationComponents","type":"tuple[]"}],"internalType":"struct Fulfillment[]","name":"fulfillments","type":"tuple[]"}],"name":"matchAdvancedOrders","outputs":[{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order[]","name":"orders","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"offerComponents","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"considerationComponents","type":"tuple[]"}],"internalType":"struct Fulfillment[]","name":"fulfillments","type":"tuple[]"}],"name":"matchOrders","outputs":[{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"contractName","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order[]","name":"orders","type":"tuple[]"}],"name":"validate","outputs":[{"internalType":"bool","name":"validated","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"bytecode":{"object":"0x6101c060405234620000b9576200001f6200001962000114565b62000151565b604051615f7e90816200076d82396080518161282c015260a05181612852015260c05181612809015260e051818181611758015261269701526101005181818161162401526126e60152610120518181816117f40152612734015261014051816127b7015261016051816127dd015261018051818181611003015281816122f4015261246a01526101a05181818161233201526124a80152f35b600080fd5b604081019081106001600160401b03821117620000da57604052565b634e487b7160e01b600052604160045260246000fd5b601f909101601f19168101906001600160401b03821190821017620000da57604052565b620066eb60208138039182604051938492620001318285620000f0565b833981010312620000b957516001600160a01b0381168103620000b95790565b604060049162000160620002e3565b610120526101005260e05260c05260a05260805246610140526200018362000237565b610160526001600160a01b03166101808190528151630a96ad3960e01b815292839182905afa90811562000203575b600091620001cd575b506101a052620001cb6001600055565b565b620001f3915060403d8111620001fb575b620001ea8183620000f0565b81019062000213565b5038620001bb565b503d620001de565b6200020d6200022a565b620001b2565b9190826040910312620000b9576020825192015190565b506040513d6000823e3d90fd5b60c05160805160a0516040519160208301938452604083015260608201524660808201523060a082015260a0815260c0810181811060018060401b03821117620000da5760405251902090565b604051906200029382620000be565b6003825262312e3160e81b6020830152565b90815180926000905b828210620002cb575011620002c1570190565b6000828201520190565b915080602080928401015181850152018391620002ae565b620002ed62000747565b8051602080920120916200030062000284565b8281519101209160405181810192816200032b85600a906909ecccccae492e8cada560b31b81520190565b6e1d5a5b9d0e081a5d195b551e5c194b608a1b8152600f016d1859191c995cdcc81d1bdad95b8b60921b8152600e017f75696e74323536206964656e7469666965724f7243726974657269612c0000008152601d017f75696e74323536207374617274416d6f756e742c0000000000000000000000008152601401701d5a5b9d0c8d4d88195b99105b5bdd5b9d607a1b8152601101602960f81b81526001010392601f19938481018452620003e19084620000f0565b60405171086dedce6d2c8cae4c2e8d2dedc92e8cada560731b8282019081529481601287016e1d5a5b9d0e081a5d195b551e5c194b608a1b8152600f016d1859191c995cdcc81d1bdad95b8b60921b8152600e017f75696e74323536206964656e7469666965724f7243726974657269612c0000008152601d017f75696e74323536207374617274416d6f756e742c0000000000000000000000008152601401711d5a5b9d0c8d4d88195b99105b5bdd5b9d0b60721b8152601201701859191c995cdcc81c9958da5c1a595b9d607a1b8152601101602960f81b8152600101038181018352620004d29083620000f0565b6040519283818101620004fc906010906f09ee4c8cae486dedae0dedccadce8e6560831b81520190565b6f1859191c995cdcc81bd999995c995c8b60821b81526010016c1859191c995cdcc81e9bdb994b609a1b8152600d017113d999995c925d195b56d7481bd999995c8b60721b81526012017f436f6e73696465726174696f6e4974656d5b5d20636f6e73696465726174696f8152611b8b60f21b60208201526022016f1d5a5b9d0e081bdc99195c951e5c194b60821b8152601001711d5a5b9d0c8d4d881cdd185c9d151a5b594b60721b81526012016f1d5a5b9d0c8d4d88195b99151a5b594b60821b815260100170189e5d195ccccc881e9bdb9952185cda0b607a1b81526011016c1d5a5b9d0c8d4d881cd85b1d0b609a1b8152600d017f6279746573333220636f6e647569744b65792c0000000000000000000000000081526013016e3ab4b73a191a9b1031b7bab73a32b960891b8152600f01602960f81b81526001010382810185526200064e9085620000f0565b6040516c08a92a06e626488dedac2d2dc5609b1b8282019081529080600d83016b1cdd1c9a5b99c81b985b594b60a21b8152600c016e1cdd1c9a5b99c81d995c9cda5bdb8b608a1b8152600f016f1d5a5b9d0c8d4d8818da185a5b92590b60821b81526010017f6164647265737320766572696679696e67436f6e7472616374000000000000008152601901602960f81b8152600101038481018252620006f69082620000f0565b5190209786519020968351902095604051938492830195866200071991620002a5565b6200072491620002a5565b6200072f91620002a5565b039081018252620007419082620000f0565b51902090565b604051906200075682620000be565b600782526614d9585c1bdc9d60ca1b602083015256fe60806040526004361015610013575b600080fd5b60003560e01c806306fdde031461013f57806346423aa71461013657806355944a421461012d5780635b34b9661461012457806379df72bd1461011b57806387201b41146101125780638814773214610109578063a817440414610100578063b3a34c4c146100f7578063e7acab24146100ee578063ed98a574146100e5578063f07ec373146100dc578063f47b7740146100d3578063fb0f3ee1146100ca5763fd9f1e10146100c257600080fd5b61000e61132d565b5061000e61102c565b5061000e610f8b565b5061000e610f46565b5061000e610eb5565b5061000e610e07565b5061000e610da3565b5061000e610d32565b5061000e610be3565b5061000e610b0f565b5061000e610994565b5061000e61092f565b5061000e61089e565b5061000e6101c1565b5061000e610199565b91908251928382526000905b8482106101815750601f8460209495601f199311610174575b0116010190565b600085828601015261016d565b90602090818082850101519082860101520190610154565b503461000e57600060031936011261000e57602080526707536561706f727460475260606020f35b503461000e57602060031936011261000e57600435600052600260205260806040600020546040519060ff81161515825260ff8160081c16151560208301526effffffffffffffffffffffffffffff8160101c16604083015260881c6060820152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761027057604052565b610278610224565b604052565b60c0810190811067ffffffffffffffff82111761027057604052565b6020810190811067ffffffffffffffff82111761027057604052565b6040810190811067ffffffffffffffff82111761027057604052565b90601f601f19910116810190811067ffffffffffffffff82111761027057604052565b60405190610160820182811067ffffffffffffffff82111761027057604052565b6040519061032282610254565b565b60209067ffffffffffffffff811161033e575b60051b0190565b610346610224565b610337565b6001600160a01b0381160361000e57565b60a435906103228261034b565b35906103228261034b565b3590600682101561000e57565b92919261038d82610324565b60409461039c865192836102d1565b819584835260208093019160a080960285019481861161000e57925b8584106103c85750505050505050565b868483031261000e5784879184516103df81610254565b6103e887610374565b8152828701356103f78161034b565b83820152858701358682015260608088013590820152608080880135908201528152019301926103b8565b9080601f8301121561000e5781602061043d93359101610381565b90565b92919261044c82610324565b60409461045b865192836102d1565b819584835260208093019160c080960285019481861161000e57925b8584106104875750505050505050565b868483031261000e57848791845161049e8161027d565b6104a787610374565b8152828701356104b68161034b565b838201528587013586820152606080880135908201526080808801359082015260a080880135906104e68261034b565b820152815201930192610477565b9080601f8301121561000e5781602061043d93359101610440565b6004111561000e57565b35906103228261050f565b9190916101608184031261000e5761053a6102f4565b9261054482610369565b845261055260208301610369565b602085015267ffffffffffffffff90604083013582811161000e5781610579918501610422565b6040860152606083013591821161000e576105959183016104f4565b60608401526105a660808201610519565b608084015260a081013560a084015260c081013560c084015260e081013560e0840152610100808201359084015261012080820135908401526101408091013590830152565b35906effffffffffffffffffffffffffffff8216820361000e57565b92919267ffffffffffffffff8211610650575b604051916106336020601f19601f84011601846102d1565b82948184528183011161000e578281602093846000960137010152565b610658610224565b61061b565b9080601f8301121561000e5781602061043d93359101610608565b91909160a08184031261000e5761068d610315565b9267ffffffffffffffff823581811161000e57826106ac918501610524565b85526106ba602084016105ec565b60208601526106cb604084016105ec565b6040860152606083013581811161000e57826106e891850161065d565b6060860152608083013590811161000e57610703920161065d565b6080830152565b9080601f8301121561000e5781359061072282610324565b9261073060405194856102d1565b828452602092838086019160051b8301019280841161000e57848301915b84831061075e5750505050505090565b823567ffffffffffffffff811161000e57869161078084848094890101610678565b81520192019161074e565b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020808501948460051b01011161000e57565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600611156107f657565b6103226107bc565b608090805161080c816107ec565b8352816001600160a01b03918260208201511660208601526040810151604086015260608101516060860152015116910152565b90815180825260208080930193019160005b828110610860575050505090565b909192938260e0600192604088516108798382516107fe565b808501516001600160a01b031660a0840152015160c082015201950193929101610852565b50606060031936011261000e5767ffffffffffffffff60043581811161000e576108cc90369060040161070a565b9060243581811161000e576108e590369060040161078b565b60443592831161000e5761092b9361091161090761091795369060040161078b565b9490933691611bff565b90613e21565b604051918291602083526020830190610840565b0390f35b503461000e57600060031936011261000e57610949615017565b3360005260016020526020604060002060018154018091556040518181527f721c20121297512b72821b97f5326877ea8ecf4bb9948fea5bfcb6453074d37f833392a2604051908152f35b503461000e5760031960208136011261000e5760043567ffffffffffffffff811161000e576101608160040192823603011261000e576109d38261152d565b916109e06024830161152d565b906109ee6044840182611cfc565b6064850192916109fe8484611d50565b92909360848801610a0e90611dae565b95610a1891611d50565b969050610a236102f4565b6001600160a01b0390991689526001600160a01b031660208901523690610a4992610381565b60408701523690610a5992610440565b6060850152610a6b9060808501611db8565b60a482013560a084015260c482013560c084015260e482013560e08401526101048201356101008401526101248201356101208401526101408301526101440135610ab59161268a565b604051908152602090f35b9092916040820191604081528451809352606081019260208096019060005b818110610af95750505061043d9394818403910152610840565b8251151586529487019491870191600101610adf565b5060e060031936011261000e5767ffffffffffffffff60043581811161000e57610b3d90369060040161070a565b60243582811161000e57610b5590369060040161078b565b909160443584811161000e57610b6f90369060040161078b565b9060643595861161000e57610b8b610ba496369060040161078b565b929091610b9661035c565b9560c4359760843596611cc2565b9061092b60405192839283610ac0565b602060031982011261000e576004359067ffffffffffffffff821161000e57610bdf9160040161078b565b9091565b503461000e57610bf236610bb4565b610bfa615017565b60005b818110610c105760405160018152602090f35b80610c1e6001928486613f13565b610c2881806146ae565b610c318161152d565b91610c44610c3f3684610524565b614fa9565b91610c59836000526002602052604060002090565b610c6381856155a2565b50610c76610c72825460ff1690565b1590565b610c86575b505050505001610bfd565b7ffde361574a066b44b3b5fe98a87108b7565e327327954c4faeea56a4e6491a0a92610d2592610d01610d0793610cd6610ccf610cc86020968781019061158b565b3691610608565b898b615303565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b0161152d565b6040519384526001600160a01b039081169416929081906020820190565b0390a33880808080610c7b565b50604060031936011261000e5767ffffffffffffffff60043581811161000e57610d6090369060040161078b565b60249291923591821161000e5761092b92610d8d610d8561091794369060040161078b565b939092614750565b60405190610d9a82610299565b60008252613e21565b5060031960408136011261000e576004359067ffffffffffffffff821161000e57604090823603011261000e57610dfd610de16020926004016146e1565b60405190610dee82610299565b600082523391602435916141fd565b6040519015158152f35b5060031960808136011261000e576004359067ffffffffffffffff9081831161000e5760a090833603011261000e5760243590811161000e5761092b91610e55610e9692369060040161078b565b90606435610e628161034b565b6001600160a01b038116610ea85750610e90610e8433945b3690600401610678565b91604435933691611bff565b906141fd565b60405190151581529081906020820190565b610e84610e909194610e7a565b5060a060031936011261000e5767ffffffffffffffff60043581811161000e57610ee390369060040161078b565b9060243583811161000e57610efc90369060040161078b565b91909260443594851161000e57610f25610f1d610ba496369060040161078b565b929093614750565b9160405193610f3385610299565b6000855260843595339560643595612a0b565b503461000e57602060031936011261000e576020610f83600435610f698161034b565b6001600160a01b0316600052600160205260406000205490565b604051908152f35b503461000e57600060031936011261000e57610ff3610fa86127b4565b60405190610fb5826102b5565b600382527f312e3100000000000000000000000000000000000000000000000000000000006020830152604051928392606084526060840190610148565b9060208301526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660408301520390f35b5060031960208136011261000e5760043567ffffffffffffffff811161000e576102408160040192823603011261000e5761012435908160021c926001841193341585036112f85784936003821160028314916110d183600286117ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe870102018815926001820185028460011b880103998a92600360a088026024013593168a6115dc565b6110e38260051b6101c40135986107ec565b156111b5575050506111036110f78261152d565b6001600160a01b031690565b6001600160a01b0390811660248401351761118b5761115f60449461115a6111759761116b9461113560a4890161152d565b9060648901946111448661152d565b9060e48b01359360c48c01359333931691611dcf565b61152d565b91610204840190611537565b93909201356119df565b61117f6001600055565b60405160018152602090f35b60046040517f6ab37ce7000000000000000000000000000000000000000000000000000000008152fd5b9194509161121e6110f7606461122396611228996111d1611514565b8a819b996111df839b6107ec565b1561122d5750610d01916111f560a4850161152d565b61120086860161152d565b9060e48601359160c4870135916001600160a01b03339216906120c8565b611ac5565b6122c4565b611175565b611236816107ec565b6003810361127d57506112789161124f60a4850161152d565b61125a86860161152d565b9060e48601359160c4870135916001600160a01b03339216906121be565b610d01565b806112896004926107ec565b036112c3576112789161129b8861152d565b6112a686860161152d565b6044860135916001600160a01b03602488013592169033906120c8565b611278916112d08861152d565b6112db86860161152d565b6044860135916001600160a01b03602488013592169033906121be565b6040517fa61be9f0000000000000000000000000000000000000000000000000000000008152346004820152602490fd5b0390fd5b503461000e5761133c36610bb4565b611344615017565b60005b81811061135a5760405160018152602090f35b611365818385614fe2565b61136e8161152d565b60209061137c82840161152d565b6001600160a01b0391828116938433141580611508575b6114de576040956113a681880182611cfc565b6060808401926113b68486611d50565b90916080948a8689016113c890611dae565b976113d3908a611d50565b9a90506113de6102f4565b6001600160a01b03909c168c526001600160a01b03909116908b0152369061140592610381565b8c890152369061141492610440565b9086015284019061142491611db8565b60a0808201359084015260c0808201359084015260e08082013590840152610100808201359084015261012080820135908401526101409182840152013561146b9161268a565b93611480856000526002602052604060002090565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101001790555193845216917f6bacc01dbe442496068f7d234edd811f1a5f833243e0aec824f86ab861f3c90d90602090a3600101611347565b60046040517f80ec7374000000000000000000000000000000000000000000000000000000008152fd5b50838316331415611393565b60405190611521826102b5565b60208083523683820137565b3561043d8161034b565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e57602001918160061b3603831361000e57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e5760200191813603831361000e57565b9591906115e7615008565b6115fb610140880135610120890135615296565b50611604611927565b611622611615610200890189611537565b6101e08a013591506118f6565b7f00000000000000000000000000000000000000000000000000000000000000006080528160a0526060602460c037604060646101203760e06080908120610160526001610264359081016102a060059290921b918201526102c081019384526024906102e00137610160928460a0528560c052600060e05260005b8394610204358210156116fb5790604060a0600193602090818560061b6102840161010037838560061b6102840161012037019660e0608020885201968888528960c08201526101008360061b610284019101370193929361169e565b5090929350969590966001610204350160051b610160206060525b83610264358210156117495790604060a060019301958787528860c08201526101008360061b6102840191013701611716565b505093509490506103229391507f00000000000000000000000000000000000000000000000000000000000000006080528260a052606060c460c03760206101046101203760c0608020600052602060002060e05260016102643560051b610200015261022092836102643560051b0152606060c46102406102643560051b01376118ee610cc8608435936117f1856001600160a01b03166000526001602052604060002090565b547f00000000000000000000000000000000000000000000000000000000000000006080526040608460a03760605161010052846101205260a0610144610140376101e0526101809485608020956102643560051b0190868252336101a06102643560051b015260806101c06102643560051b01526101206101e06102643560051b01527f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f3160a4359260a061026435026101e00190a360006060526118e56060820161115a6118bf8261152d565b966118cc6080860161152d565b906001600160a01b03809916906101608701358b61569d565b9581019061158b565b9216906147dc565b106118fd57565b60046040517f466aa616000000000000000000000000000000000000000000000000000000008152fd5b601861012435106102643560061b61026001610244351461024061022435146020600435141616161561195657565b60046040517f39f3e3fd000000000000000000000000000000000000000000000000000000008152fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90156119b95790565b61043d611980565b91908110156119d2575b60061b0190565b6119da611980565b6119cb565b919234936000915b808310611a4257505050828211611a185781611a0291611e97565b808211611a0d575050565b610322910333611e97565b60046040517f1a783b8d000000000000000000000000000000000000000000000000000000008152fd5b909194611a508683856119c1565b90813590808211611a1857611a748260206001950135611a6f8161034b565b611e97565b03950191906119e7565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818110611ab9570390565b611ac1611a7e565b0390565b90939291908115611b85579333611ade60a0830161152d565b60e08301359260c08101355b61118b578460051b6101e40335946102008201611b078184611537565b93905060005b848110611b24575050505050956103229596611f2c565b8989858e611b3c85611b368989611537565b906119c1565b803592611b6a575b91611b649391611b5d6110f7602060019998960161152d565b908c611f2c565b01611b0d565b92909493919b8c611b7a91611aae565b9b9193949092611b44565b933394611b918261152d565b6040830135926020810135611aea565b81601f8201121561000e57803591611bb883610324565b92611bc660405194856102d1565b808452602092838086019260051b82010192831161000e578301905b828210611bf0575050505090565b81358152908301908301611be2565b909291611c0b84610324565b91604094611c1b865194856102d1565b839581855260208095019160051b83019380851161000e5783925b858410611c465750505050505050565b67ffffffffffffffff90843582811161000e5786019060a08285031261000e578451611c7181610254565b8235815289830135600281101561000e578a82015285830135868201526060808401359082015260808084013594851161000e57611cb3868c96879601611ba1565b90820152815201930192611c36565b90611cf090610bdf9a99989796959493986001600160a01b03811615600014611cf6575033985b3691611bff565b90612a0b565b98611ce9565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e576020019160a082023603831361000e57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e576020019160c082023603831361000e57565b600411156107f657565b3561043d8161050f565b6004821015611dc45752565b611dcc6107bc565b52565b949290959391841515600014611e3b5761032296604051967f4ce34aa2000000000000000000000000000000000000000000000000000000008852602060048901526001602489015260448801526064870152608486015260a485015260c484015260e4830152612451565b9291946002919450611e4c816107ec565b03611e8b57600103611e61576103229361504d565b60046040517fefcc00b1000000000000000000000000000000000000000000000000000000008152fd5b9291906103229461515b565b90611ea181611efb565b600080808084865af115611eb3575050565b60449250611ebf612895565b6001600160a01b03604051927f470c7c1d0000000000000000000000000000000000000000000000000000000084521660048301526024820152fd5b15611f0257565b60046040517f91b3e514000000000000000000000000000000000000000000000000000000008152fd5b929193949094611f3b83611efb565b611f4581836122b1565b806120ba575050604051926000947f23b872dd00000000000000000000000000000000000000000000000000000000865280600452816024528260445260208660648180885af1803d15601f3d1160018a51141617163d1515811615611fb4575b505050505050604052606052565b80863b151516611fa657908795969115611ff457602486887f5f15d672000000000000000000000000000000000000000000000000000000008252600452fd5b1561202e57506084947f98891923000000000000000000000000000000000000000000000000000000008552600452602452604452606452fd5b3d61206d575b5060a4947ff486bc8700000000000000000000000000000000000000000000000000000000855260045260245260445281606452608452fd5b601f3d0160051c9060051c9080600302918082116120a1575b505060205a9101106120985785612034565b833d81803e3d90fd5b8080600392028380020360091c92030201018680612086565b9061032295929493916125c0565b959092949391936120d981836122b1565b806120f0575050600103611e61576103229361504d565b9060649593916000979593975060208251146000146121ab5760c0906001906040845260208401527f4ce34aa20000000000000000000000000000000000000000000000000000000060408401526020604484015280888401525b02019360027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc48601527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe48501526004840152602483015260448201520152565b5060c0868201600181510180915261214b565b9590919293946121cd86611efb565b6121d781836122b1565b806121e75750506103229461515b565b906064959694939291602082511460001461229e5760c0906001906040845260208401527f4ce34aa20000000000000000000000000000000000000000000000000000000060408401526020604484015280888401525b02019360037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc48601527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe48501526004840152602483015260448201520152565b5060c0868201600181510180915261223e565b906020820151036122bf5750565b610322905b60408082510361244d57602082015160c06064840151026044019180519260206001600160a01b036000928184927f00000000000000000000000000000000000000000000000000000000000000001674ff00000000000000000000000000000000000000001783528684527f000000000000000000000000000000000000000000000000000000000000000086526055600b201696855281805284880182885af190519015612402577fffffffff000000000000000000000000000000000000000000000000000000007f4ce34aa2000000000000000000000000000000000000000000000000000000009116036123c05750505060209052565b517f1cf99b2600000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03919091166024820152604490fd5b611329848361240f612895565b517fd13d53d40000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201529081906024820190565b5050565b6040519160206001600160a01b036101046000938285937f00000000000000000000000000000000000000000000000000000000000000001674ff00000000000000000000000000000000000000001784528685527f00000000000000000000000000000000000000000000000000000000000000006040526055600b20169660405282805282875af190519015612574577fffffffff000000000000000000000000000000000000000000000000000000007f4ce34aa200000000000000000000000000000000000000000000000000000000911603612530575050565b6040517f1cf99b2600000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03919091166024820152604490fd5b61132983612580612895565b6040517fd13d53d40000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201529081906024820190565b9060649492939160208251146000146126775760c0906001906040845260208401527f4ce34aa20000000000000000000000000000000000000000000000000000000060408401526020604484015280878401525b02019260017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc48501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe484015260048301526024820152600060448201520152565b5060c08582016001815101809152612615565b91909161014081018051917f0000000000000000000000000000000000000000000000000000000000000000604051604083018051928351926020809501906000915b868684106127915750505050506040519160051b8220917f00000000000000000000000000000000000000000000000000000000000000009093606086019481865101906000915b8a831061276d575050505050601f198660051b604051209401978851907f00000000000000000000000000000000000000000000000000000000000000008a5282519383528451958552865261018089209852525252565b838082601f19600194510180519089815260e0812087525201920192019190612715565b8082601f19600194510180519088815260c08120875252019201920191906126cd565b467f0000000000000000000000000000000000000000000000000000000000000000036127ff577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815261288f8161027d565b51902090565b3d61289c57565b601f3d0160051c60405160051c9080600302918082116128cf575b505060205a9101106128c557565b3d6000803e3d6000fd5b8080600392028380020360091c920302010138806128b7565b919082604091031261000e576040516040810181811067ffffffffffffffff821117612922575b6040526020808294803584520135910152565b61292a610224565b61290f565b92919261293b82610324565b60409261294a845192836102d1565b819581835260208093019160061b84019381851161000e57915b84831061297357505050505050565b83869161298084866128e8565b815201920191612964565b9291909261299884610324565b916129a660405193846102d1565b829480845260208094019060051b83019282841161000e5780915b8483106129d057505050505050565b823567ffffffffffffffff811161000e57820184601f8201121561000e578691612a00868385809535910161292f565b8152019201916129c1565b96989792612a268a612a359695612a2d95949998998b612c40565b369161298b565b93369161298b565b908251825191612a4d612a48848461314b565b61366d565b9760009586915b848310612b47575050506000935b838510612abf57505050505080612ab4575b50825115612a8a5782612a8691613b15565b9190565b60046040517fd5da9a1b000000000000000000000000000000000000000000000000000000008152fd5b835103835238612a74565b909192939488612ada84612ad38986612c1e565b518a613745565b8051608001516001600160a01b03166001600160a01b03612b086110f760208501516001600160a01b031690565b911603612b225750506001809101955b0193929190612a62565b8791612b4191612b3a85896001979c01038093612c1e565b528b612c1e565b50612b18565b9091968a612b6583612b5e8b879b98999a9b612c1e565b518c6136c9565b8051608001516001600160a01b03166001600160a01b03612b936110f760208501516001600160a01b031690565b911603612bb05750506001809101975b0191909594939295612a54565b8991612bcd91612bc6856001969d038093612c1e565b528d612c1e565b50612ba3565b90612bdd82610324565b612bea60405191826102d1565b828152601f19612bfa8294610324565b0190602036910137565b602090805115612c12570190565b612c1a611980565b0190565b6020918151811015612c33575b60051b010190565b612c3b611980565b612c2b565b93929091612c4c615008565b845192612c5884612bd3565b9160008352601d604560003560e01c061160011b9060005b868110612d30575050600314612d0657612c8a9086613266565b60005b838110612c9c57505050509050565b80612ca960019284612c1e565b5115612d0157612cfb612cbc8289612c1e565b5151612cc88386612c1e565b519086612cdc82516001600160a01b031690565b60208301516001600160a01b03169060606040850151940151946145e5565b01612c8d565b612cfb565b60046040517f12d3f5a3000000000000000000000000000000000000000000000000000000008152fd5b612d3a818a612c1e565b51918015612ebf57612d4d868685614cb3565b9290916001850189528215612eab57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91612d89868b612c1e565b52019380519260a084015193604060c08201519101518051908560005b838110612e405750505050606080935101519485519560005b878110612dd85750505050505050506001905b01612c70565b808760a0612de860019486612c1e565b5188612e2489898d6080860197612e01895187836131fa565b918701958651908a518214600014612e30575050508085525b80885284516131a0565b90520151905201612dbf565b612e39926131fa565b8552612e1a565b612e4a8184612c1e565b519b8c5115179b86868b60808401938451612e669085896131fa565b60608192019586519881518a1460001499612e919760019b612e9b575050508187525b52845161315f565b9052018690612da6565b612ea4926131fa565b8752612e89565b509360019392506000915060200152612dd2565b91906000602060019301528181018652612dd2565b612edc615008565b805192612ee884612bd3565b92600091828552601d6045843560e01c061160011b90835b878110612f90575050600314612d0657612f1a9083613266565b838110612f275750505050565b80612f3460019285612c1e565b5115612f8b57612f85612f478285612c1e565b5151612f538387612c1e565b5190612f6681516001600160a01b031690565b60208201516001600160a01b0316906060604084015193015193614513565b01612f1a565b612f85565b612f9a8187612c1e565b51918581156130fb5750612faf888685614ee0565b929091600185018b528883156130e95750907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91612fed868d612c1e565b52019380519260a084015191604060c0860151950151805190858c5b83811061308f5750505050606090510151938451948a5b86811061303857505050505050506001905b01612f00565b8061304560019284612c1e565b5160a0608082019189613083888b61305f87518d866131fa565b60608601948d8651908a518214600014612e305750505080855280885284516131a0565b90520151905201613020565b6130998184612c1e565b519b8c5115179b868a89608084019384516130b59085896131fa565b60608192019586519881518a14600014996130df9760019b612e9b5750505081875252845161315f565b9052018690613009565b92505093600193925060200152613032565b6020600193929401528181018852613032565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482118115151661313f570290565b613147611a7e565b0290565b81198111613157570190565b612c1a611a7e565b909283820361316e5750505090565b82939161318a613196946131909303954203918287039061310e565b9261310e565b9061314b565b9081049015150290565b90928382036131af5750505090565b926131906131cd9261318a856001969703964203918288039061310e565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830104019015150290565b9190918281146132435782818309613219576132159161310e565b0490565b7fc63cf0890000000000000000000000000000000000000000000000000000000060005260046000fd5b50905090565b600211156107f657565b5161043d816107ec565b611dcc826107ec565b815181519260005b8281106133a45750505060005b82811061328757505050565b6132918183612c1e565b516132c56132b160208301516effffffffffffffffffffffffffffff1690565b6effffffffffffffffffffffffffffff1690565b1561339b5751606081018051519060005b828110613354575050506040809101908151519160005b83811061330257505050506001905b0161327b565b61331f613319613313838551612c1e565b51613253565b60031090565b61332b576001016132ed565b600483517fa6cfc673000000000000000000000000000000000000000000000000000000008152fd5b613365613319613313838551612c1e565b613371576001016132d6565b60046040517fff75a340000000000000000000000000000000000000000000000000000000008152fd5b506001906132fc565b6133ae8183612c1e565b5180519086821015613565576020916133e56132b1846133ce848b612c1e565b5101516effffffffffffffffffffffffffffff1690565b1561355a576133f49087612c1e565b515191604092838301519183015161340b81613249565b61341481613249565b6134e55783015180518210156134bc579061342e91612c1e565b5191600383519361343e856107ec565b84906134558482019160048351981485039061325d565b606085015190525b11156134935750906001929181613478575b50505b0161326e565b61348c91608060608301519201519161358f565b388061346f565b600490517f94eb6af6000000000000000000000000000000000000000000000000000000008152fd5b600484517fbfb3f8ce000000000000000000000000000000000000000000000000000000008152fd5b929060608094015180518210156135315760039161350291612c1e565b5193845194613510866107ec565b85916135278583019260048451991486039061325d565b850151905261345d565b600483517f6088d7de000000000000000000000000000000000000000000000000000000008152fd5b505050600190613472565b60046040517f869586c4000000000000000000000000000000000000000000000000000000008152fd5b91909160009081526020808220928181019282825192600593841b0101915b8285106135eb575050505050036135c157565b60046040517f09bde339000000000000000000000000000000000000000000000000000000008152fd5b8451808711821b968752958418959095526040812094938301936135ae565b604051906060820182811067ffffffffffffffff821117613660575b8060405260408361363683610254565b6000928381528360808301528360a08301528360c08301528360e083015281528260208201520152565b613668610224565b613626565b9061367782610324565b61368460405191826102d1565b828152601f196136948294610324565b019060005b8281106136a557505050565b6020906136b061360a565b82828501015201613699565b906002821015611dc45752565b9092916136d461360a565b93805115613714576136f6926001600160a01b038693166080845101526137e9565b81516060810151156137055750565b60806000918260208601520152565b60246040517f375c24c100000000000000000000000000000000000000000000000000000000815260006004820152fd5b92919061375061360a565b9381511561378d576137639185916139aa565b60208301903382526040840152825190606082015115613781575050565b60009182608092520152565b60246040517f375c24c100000000000000000000000000000000000000000000000000000000815260016004820152fd5b507f7fda72790000000000000000000000000000000000000000000000000000000060005260046000fd5b92919260208201906020825151825181101561399d575b60051b82010151928351926020604085015181835101518151811015613990575b60051b01015160009460208697015161397a575b9061012060609260408b5193805185526020810151602086015201516040840152805160208c0152015160408a01522091805160051b01905b8181106138c1575050505060608293945101526138885750565b60011461389757610322611a7e565b7f91b3e5140000000000000000000000000000000000000000000000000000000060005260046000fd5b60209095949501906020825151855181101561396d575b60051b85010151602081015115613964575160606020604083015181865101518151811015613957575b60051b01015196818801519081158a8381011060011b17179801966000828201522084149060408a0151610120820151149060208b015190511416161561394a575b9061386e565b6139526137be565b613944565b61395f6137be565b613902565b50949394613944565b6139756137be565b6138d8565b6060820180516000909152801597509550613835565b6139986137be565b613821565b6139a56137be565b613800565b9291602080830194855151918151831015613b08575b80600593841b8301015194606093828588510151818b5101518151811015613afb575b831b010151926000968188990151613ae6575b51948451865281850151828701526040850151604087015260a0809501519a608087019b8c52878720948051851b01905b818110613a4257505050505050508394955001526138885750565b83909a999a01908c848351518551811015613ad9575b871b850101518581015115613acf578a869151015181855101518151811015613ac2575b881b0101518a81019b8d8d518091019e8f9115911060011b17179c9b60009052888b822089149251910151141615613ab5575b90613a27565b613abd6137be565b613aaf565b613aca6137be565b613a7c565b5050999899613aaf565b613ae16137be565b613a58565b848701805160009091528015995097506139f6565b613b036137be565b6139e3565b613b106137be565b6139c0565b908151613b2181612bd3565b9260005b828110613be5575050503490613b39611514565b9080519060005b828110613b7457505050613b53906122c4565b80613b64575b5061043d6001600055565b613b6e9033611e97565b38613b59565b613b7e8183612c1e565b518051908151613b8d816107ec565b613b96816107ec565b15613bca575b8560019392826040613bbb6020613bc49601516001600160a01b031690565b91015191613cae565b01613b40565b9560608293920181815111611a185751900395909190613b9c565b613bef8183612c1e565b51613c0f6132b160208301516effffffffffffffffffffffffffffff1690565b15613ca557613c27613c218388612c1e565b60019052565b606080915101519081519160005b838110613c4a57505050506001905b01613b25565b82613c558284612c1e565b51015180613c665750600101613c35565b6040517fa5f542080000000000000000000000000000000000000000000000000000000081526004810187905260248101929092526044820152606490fd5b50600190613c44565b9290918351613cbc816107ec565b613cc5816107ec565b613d1a57505050613ce36110f760208301516001600160a01b031690565b6001600160a01b03604083015191161761118b57806060613d1160806103229401516001600160a01b031690565b91015190611e97565b90919260018151613d2a816107ec565b613d33816107ec565b03613d8357604081015161118b5761032293613d5960208301516001600160a01b031690565b906001600160a01b036060613d7860808601516001600160a01b031690565b940151931691611f2c565b9260028451613d91816107ec565b613d9a816107ec565b03613de05783613db760206103229601516001600160a01b031690565b60808201516001600160a01b0316926001600160a01b03606060408501519401519416916120c8565b83613df860206103229601516001600160a01b031690565b60808201516001600160a01b0316926001600160a01b03606060408501519401519416916121be565b90613e33909493929482519083612ed4565b613e3c8261366d565b9160009485915b808310613e705750505090613e619184829495613e65575b50613b15565b5090565b825103825238613e5b565b909195613e7e878385613f13565b613ea4613e8b8280611537565b90613e9b60209485810190611537565b92909189613f6c565b906001600160a01b03613ed96110f7613ec960808651016001600160a01b0390511690565b938501516001600160a01b031690565b911603613ef057506001809101965b019190613e43565b96613f0d8298600193830390613f06828a612c1e565b5287612c1e565b50613ee8565b9190811015613f54575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18136030182121561000e570190565b613f5c611980565b613f1d565b61043d9036906128e8565b92909391613f7861360a565b948115801561415e575b61413457613f8e61360a565b613fa381613f9d36888861292f565b886139aa565b5191613fba87613fb436848661292f565b886137e9565b613fc48751613253565b835190613fd0826107ec565b613fd9826107ec565b613fe2816107ec565b148015906140fc575b80156140e9575b6140bf5761043d9561406f95608095896060948588019687518784510151106000146140825750505061403161402c8593614057936119b0565b613f61565b60208361404a8d828a5191510151900396845190612c1e565b5151015191015190612c1e565b5101528651015190525b01516001600160a01b031690565b6080835101906001600160a01b03169052565b86979694506140b1935061404a856140a161402c6020956040956119b0565b9451015188518551910397612c1e565b510152519086510152614061565b60046040517f09cfb455000000000000000000000000000000000000000000000000000000008152fd5b5060408751015160408401511415613ff2565b508651602001516001600160a01b03166001600160a01b0361412b6110f760208701516001600160a01b031690565b91161415613feb565b60046040517f98e9db6e000000000000000000000000000000000000000000000000000000008152fd5b508315613f82565b6040519061417382610254565b604051608083610160830167ffffffffffffffff8111848210176141f0575b6040526000808452806020850152606093846040820152848082015281848201528160a08201528160c08201528160e08201528161010082015281610120820152816101408201528252806020830152604082015282808201520152565b6141f8610224565b614192565b909291614208615017565b600260005561421784836148c0565b9490919260405195614228876102b5565b6001875260005b6020808210156142515790602091614245614166565b90828b0101520161422f565b505061428583959761428061429e9a61428e97998351156142ba575b60208401528251156142ad575b82613266565b612c04565b515195866142c7565b81516001600160a01b0316612cdc565b6142a86001600055565b600190565b6142b5611980565b61427a565b6142c2611980565b61426d565b939192909360a093848201519360c0830151966142e2611514565b96604092838601908151519160005b8381106143d7575050505034986060809601978851519860005b8a8110614338575050505050505050505050614326906122c4565b8061432e5750565b6103229033611e97565b614343818351612c1e565b51898101805161435d87878d8c60808801958651906144a1565b8092528783015190528151614371816107ec565b61437a816107ec565b15614397575b50906143918d8c6001943390613cae565b0161430b565b90919e9d8082116143ae579d9e9d039c908a614380565b600489517f1a783b8d000000000000000000000000000000000000000000000000000000008152fd5b6143e2818351612c1e565b5180516143ee816107ec565b6143f7816107ec565b15614441579061443b8d8f93868f8d6144236001988e936060870193845195608089019687519061446a565b9052528c610120613bbb82516001600160a01b031690565b016142f1565b600488517f12d3f5a3000000000000000000000000000000000000000000000000000000008152fd5b90939084810361448057505061043d93506131fa565b938361449561043d979661449b9496866131fa565b936131fa565b9061315f565b9093908481036144b757505061043d93506131fa565b938361449561043d97966144cc9496866131fa565b906131a0565b90815180825260208080930193019160005b8281106144f2575050505090565b909192938260a08261450760019489516107fe565b019501939291016144e4565b91939290936040805193608091828601918652602090600082880152838188015285518093528160a088019601936000915b84831061459a5750505050505091614595827f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f31948380950360608501526001600160a01b038091169716956144d2565b0390a3565b90919293949684836001928a5180516145b2816107ec565b8252808401516001600160a01b031684830152858101518683015260609081015190820152019801959493019190614545565b92909493916040918251946080918287019187526001600160a01b0394856020921682890152838189015286518093528160a089019701936000915b84831061466a57505050505050828285949361459593867f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f319896036060870152169716956144d2565b90919293949784836001928b518051614682816107ec565b8252808401518c1684830152858101518683015260609081015190820152019901959493019190614621565b9035907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea18136030182121561000e570190565b6146e9614166565b506147336147056146fa83806146ae565b92602081019061158b565b61471c6040519461471586610254565b3690610524565b845260016020850152600160408501523691610608565b606082015260405161474481610299565b60008152608082015290565b61475982610324565b9161476760405193846102d1565b808352601f1961477682610324565b0160005b8181106147c557505060005b8181106147935750505090565b806147a96147a46001938587613f13565b6146e1565b6147b38287612c1e565b526147be8186612c1e565b5001614786565b6020906147d0614166565b8282880101520161477a565b929190836000526002602052604060002091825460ff8160081c1661487b576effffffffffffffffffffffffffffff8160101c1661484a579460ff7101000000000000000000000000000001000195961615614839575b50505055565b61484292615303565b388080614833565b602486604051907fee9e0e630000000000000000000000000000000000000000000000000000000082526004820152fd5b602486604051907f1a5155740000000000000000000000000000000000000000000000000000000082526004820152fd5b90805b6148b7575090565b809106806148af565b90918151926148db610c7260a086015160c087015190615296565b614ca7576148fe6132b160208501516effffffffffffffffffffffffffffff1690565b9361491e6132b160408601516effffffffffffffffffffffffffffff1690565b948581118015614c9f575b614c755785811080614c5d575b614c335761498261494683614fa9565b9360e0840151608085015161495a81611da4565b85516001600160a01b0316918761497b60208901516001600160a01b031690565b948b615cc1565b614996836000526002602052604060002090565b916149a4610c7284866155a2565b614c23578254958460ff881615614bfc575b5050506effffffffffffffffffffffffffffff90818660101c169560881c96871515600014614b7f5760018103614b4757505085945b856149f7888361314b565b11614b3d575b86614a079161314b565b8082871183831117614ad6575b5090614a8f818493614a4e614ad19660017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b84547fffffffffffffffffffffffffffffff00000000000000000000000000000000ff16911660101b70ffffffffffffffffffffffffffffff000016178355565b815470ffffffffffffffffffffffffffffffffff1690861660881b7fffffffffffffffffffffffffffffff000000000000000000000000000000000016179055565b929190565b9690614ae987614aef92989594986148ac565b826148ac565b80150180809204970492049480861181841117614b0e57909138614a14565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80860396506149fd565b959096868103614b58575b506149ec565b614b7281614b6c89614b78959b9a9b61310e565b9861310e565b9761310e565b9438614b52565b9550955090614ad191614bb78260017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b81547fffffffffffffffffffffffffffffff00000000000000000000000000000000ff1687821660101b70ffffffffffffffffffffffffffffff000016178255614a8f565b6060614c12614c1b94516001600160a01b031690565b92015191615303565b3880846149b6565b5050509150915090600090600090565b60046040517fa11b63ff000000000000000000000000000000000000000000000000000000008152fd5b5060016080830151614c6e81611da4565b1615614936565b60046040517f5a052b32000000000000000000000000000000000000000000000000000000008152fd5b508015614929565b50600092508291508190565b919290928251614ccf610c7260a083015160c0840151906152df565b614ed057614cf26132b160208601516effffffffffffffffffffffffffffff1690565b614d116132b160408701516effffffffffffffffffffffffffffff1690565b958682118015614ec8575b614c755786821080614eb0575b614c3357614d7d90614d3a84614fa9565b9460e0850151608086015190614d4f82611da4565b87614d6188516001600160a01b031690565b93614d7660208a01516001600160a01b031690565b958c615da2565b614d91836000526002602052604060002090565b91614d9f610c728486615645565b614c23578254958460ff881615614e92575b5050506effffffffffffffffffffffffffffff90818660101c169560881c96871515600014614b7f5760018103614e6657505085945b85614df2888361314b565b11614e5c575b86614e029161314b565b8082871183821117614e48575090614a8f818493614a4e614ad19660017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b969050614aef614ae98789989594986148ac565b8086039650614df8565b959096868103614e77575b50614de7565b614b7281614b6c89614e8b959b9a9b61310e565b9438614e71565b6060614c12614ea894516001600160a01b031690565b388084614db1565b5060016080840151614ec181611da4565b1615614d29565b508115614d1c565b5050915050600090600090600090565b919290928251614efc610c7260a083015160c084015190615296565b614ed057614f1f6132b160208601516effffffffffffffffffffffffffffff1690565b614f3e6132b160408701516effffffffffffffffffffffffffffff1690565b958682118015614fa1575b614c755786821080614f89575b614c3357614f6790614d3a84614fa9565b614f7b836000526002602052604060002090565b91614d9f610c7284866155a2565b5060016080840151614f9a81611da4565b1615614f56565b508115614f49565b61043d90614fc2606082015151610140830151906118f6565b80516001600160a01b03166000908152600160205260409020549061268a565b909161043d92811015614ffb575b60051b8101906146ae565b615003611980565b614ff0565b615010615017565b6002600055565b60016000540361502357565b60046040517f7fa8a987000000000000000000000000000000000000000000000000000000008152fd5b9092813b1561512d57604051926000947f23b872dd000000000000000000000000000000000000000000000000000000008652806004528160245282604452858060648180885af1156150a65750505050604052606052565b8593943d6150e9575b5060a4947ff486bc870000000000000000000000000000000000000000000000000000000085526004526024526044526064526001608452fd5b601f3d0160051c9060051c908060030291808211615114575b505060205a91011061209857856150af565b8080600392028380020360091c92030201018680615102565b507f5f15d6720000000000000000000000000000000000000000000000000000000060005260045260246000fd5b929093833b1561526857604051936080519160a0519360c051956000987ff242432a000000000000000000000000000000000000000000000000000000008a528060045281602452826044528360645260a06084528960a452898060c48180895af1156151d857505050505060805260a05260c052604052606052565b89949550883d61521b575b5060a4957ff486bc87000000000000000000000000000000000000000000000000000000008652600452602452604452606452608452fd5b601f3d0160051c9060051c90806003029180821161524f575b505060205a91011061524657866151e3565b843d81803e3d90fd5b8080600392028380020360091c92030201018780615234565b837f5f15d6720000000000000000000000000000000000000000000000000000000060005260045260246000fd5b42109081156152d4575b506152aa57600190565b60046040517f6f7eac26000000000000000000000000000000000000000000000000000000008152fd5b9050421015386152a0565b42109081156152f8575b506152f357600190565b600090565b9050421015386152e9565b9091336001600160a01b0383161461559d5761531d6127b4565b926000937f190100000000000000000000000000000000000000000000000000000000000085526002526022526042832090836022528380528392815191601f198101805184604103918860018411938415615532575b508514851515169788156153c3575b5050505050505050156153935750565b60049061539e612895565b7f4f7fb80d000000000000000000000000000000000000000000000000000000008152fd5b909192939495969750604082527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc8501937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0855196019660208b60648a519b7f1626ba7e000000000000000000000000000000000000000000000000000000009d8e8b528c520188845afa998a615469575b505050505252523880808080808080615383565b8b51036154765780615455565b908a913b61550a576154e257640101000000821a156154b757807f815e1d640000000000000000000000000000000000000000000000000000000060049252fd5b6024917f1f003d0a000000000000000000000000000000000000000000000000000000008252600452fd5b807f8baa579f0000000000000000000000000000000000000000000000000000000060049252fd5b6004827f4f7fb80d000000000000000000000000000000000000000000000000000000008152fd5b9850506040840180519060608601518b1a99615569575b89865288835260208b60808560015afa5083835287865252885138615374565b9850601b8160ff1c01987f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82168152615549565b505050565b905460ff8160081c16615614576effffffffffffffffffffffffffffff8160101c1690816155d3575b505050600190565b60881c11156155e35780806155cb565b602490604051907f10fda3e10000000000000000000000000000000000000000000000000000000082526004820152fd5b602482604051907f1a5155740000000000000000000000000000000000000000000000000000000082526004820152fd5b906000905460ff8160081c16615694576effffffffffffffffffffffffffffff8160101c16908161567a575b50505050600190565b60881c111561568a578080615671565b6155e35750600090565b50905050600090565b90929160019060048110156156fd575b11806156ea575b806156d7575b6156c5575b50505050565b6156ce9361570a565b388080806156bf565b506001600160a01b0382163314156156ba565b506001600160a01b0384163314156156b4565b6157056107bc565b6156ad565b6000919290829161032295604051906001600160a01b0360208301937f0e1d31dc00000000000000000000000000000000000000000000000000000000855288602485015233604485015216606483015260848201526084815261576d8161027d565b51915afa615e78565b90815180825260208080930193019160005b828110615796575050505090565b909192938260a0600192875180516157ad816107ec565b8252808401516001600160a01b03168483015260408082015190830152606080820151908301526080908101519082015201950193929101615788565b90815180825260208080930193019160005b82811061580a575050505090565b909192938260c060019287518051615821816107ec565b8252808401516001600160a01b039081168584015260408083015190840152606080830151908401526080808301519084015260a0918201511690820152019501939291016157fc565b906004821015611dc45752565b6060519081815260208091019160809160005b828110615899575050505090565b83518552938101939281019260010161588b565b90815180825260208080930193019160005b8281106158cd575050505090565b8351855293810193928101926001016158bf565b90815180825260208092019182818360051b85019501936000915b84831061590c5750505050505090565b909192939495848061595e83856001950387528a518051825261593584820151858401906136bc565b60408082015190830152606080820151908301526080809101519160a0809282015201906158ad565b98019301930191949392906158fc565b92615b02906001600160a01b0361043d9694615b0f94875216602086015260a06040860152805160a080870152610140906159b482880182516001600160a01b03169052565b6080615af1615a286159f38a6159dc6020870151610160809301906001600160a01b03169052565b6040860151906101808d01526102a08c0190615776565b60608501517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08c8303016101a08d01526157ea565b615a3a838501516101c08c019061586b565b60a08401516101e08b015260c08401516102008b015260e08401516102208b015261010094858501516102408c015261012094858101516102608d015201516102808b0152615aa1602087015160c08c01906effffffffffffffffffffffffffffff169052565b60408601516effffffffffffffffffffffffffffff1660e08b015260608601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6095868c840301908c0152610148565b930151918784030190870152610148565b8381036060850152615878565b9160808184039101526158e1565b939061043d95936001600160a01b03615b0f94615cb393885216602087015260a06040870152805160a08088015261014090615b6482890182516001600160a01b03169052565b6080615ca2615bd8615ba38b6020860151615b8d61016091828401906001600160a01b03169052565b61018060408801519201526102a08d0190615776565b60608501518c82037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec0016101a08e01526157ea565b615bea838501516101c08d019061586b565b60a08401516101e08c015260c08401516102008c015260e08401516102208c015261010094858501516102408d0152610120948c6102608783015191015201516102808c0152615c52602087015160c08d01906effffffffffffffffffffffffffffff169052565b60408601516effffffffffffffffffffffffffffff1660e08c015260608601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6095868d840301908d0152610148565b930151918884030190880152610148565b9084820360608601526158ad565b909591929493600190615cd381611da4565b1180615d8f575b80615d7c575b615ced575b505050505050565b6080810151511580615d73575b15615d155750615d0a945061570a565b388080808080615ce5565b6000935083929450615d6061576d615d6e9760405192839160208301957f33131570000000000000000000000000000000000000000000000000000000008752338b6024860161596e565b03601f1981018352826102d1565b615d0a565b50855115615cfa565b506001600160a01b038416331415615ce0565b506001600160a01b038216331415615cda565b919692939594600190615db481611da4565b1180615e65575b80615e52575b615dcf575b50505050505050565b6080820151511580615e49575b15615df9575050615ded945061570a565b38808080808080615dc6565b600094508493955061576d615e4497615d6060405193849260208401967f33131570000000000000000000000000000000000000000000000000000000008852338c60248701615b1d565b615ded565b50805115615ddc565b506001600160a01b038516331415615dc1565b506001600160a01b038316331415615dbb565b15615f0f577f0e1d31dc000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000600060203d14615f04575b1603615ed35750565b602490604051907ffb5014fc0000000000000000000000000000000000000000000000000000000082526004820152fd5b602081803e51615eca565b602490615f1a612895565b604051907ffb5014fc0000000000000000000000000000000000000000000000000000000082526004820152fdfea26469706673582212204f3babde171047a7c5e80dad33a0544638cfdd64537413da9098740fde59609964736f6c634300080e0033","sourceMap":"3714:1283:0:-:0;;;;;;430:1439:33;3714:1283:0;;:::i;:::-;430:1439:33;:::i;:::-;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;:::o;572:125:42:-;3714:1283:0;2422:42:29;572:125:42;1969:19:29;;:::i;:::-;1762:226;;;;;;;;;;;;2089:13;2077:25;;2132:24;;:::i;:::-;2112:44;;-1:-1:-1;;;;;3714:1283:0;2215:67:29;;;;3714:1283:0;;-1:-1:-1;;;2422:42:29;;3714:1283:0;;;;;2422:42:29;;;;;;;572:125:42;2422:42:29;;;;572:125:42;2374:100:29;;;659:31:42;2346:1:30;-1:-1:-1;2346:1:30;;659:31:42;572:125::o;2422:42:29:-;;;;3714:1283:0;2422:42:29;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;3714:1283:0;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;2630:337:29;2791:24;3714:1283:0;2833:10:29;3714:1283:0;2861:13:29;3714:1283:0;;;2763:187:29;;;;3714:1283:0;;;;;;;;;;;2892:13:29;2833:10;3714:1283:0;;;2931:4:29;2861:13;3714:1283:0;;;2861:13:29;2763:187;;2791:24;3714:1283:0;;;;;;;;;;;;;;;;;;2740:220:29;;2630:337;:::o;3714:1283:0:-;;;;;;;:::i;:::-;;;;-1:-1:-1;;;3714:1283:0;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;5215:3025:29;3714:1283:0;;:::i;:::-;;;;;;;5604:31:29;3714:1283:0;;;:::i;:::-;;;;;;5722:23:29;3714:1283:0;;;5866:264:29;;;3714:1283:0;;;;;;-1:-1:-1;;;3714:1283:0;;;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;;;;;;;;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;5866:264:29;3714:1283:0;;;5866:264:29;;;;;;;;;;:::i;:::-;3714:1283:0;;-1:-1:-1;;;6267:310:29;;;3714:1283:0;;;6267:310:29;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;;;;;;;;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;6267:310:29;;;;;;;;;;:::i;:::-;3714:1283:0;;6742:490:29;;;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;;;;-1:-1:-1;;;3714:1283:0;;;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;;;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;6742:490:29;;;;;;;;;;:::i;:::-;3714:1283:0;;-1:-1:-1;;;7377:248:29;;;3714:1283:0;;;7377:248:29;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;-1:-1:-1;;;3714:1283:0;;;;;;;;;-1:-1:-1;;;3714:1283:0;;;;7377:248:29;;;;;;;;;;:::i;:::-;3714:1283:0;7354:281:29;;3714:1283:0;;;7745:30:29;;3714:1283:0;;;7893:38:29;;3714:1283:0;;;8061:162:29;;;;;3714:1283:0;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;8061:162:29;;;;;;;;;;:::i;:::-;3714:1283:0;8038:195:29;;5215:3025;:::o;3714:1283:0:-;;;;;;;:::i;:::-;;;;-1:-1:-1;;;3714:1283:0;;;;:::o","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610013575b600080fd5b60003560e01c806306fdde031461013f57806346423aa71461013657806355944a421461012d5780635b34b9661461012457806379df72bd1461011b57806387201b41146101125780638814773214610109578063a817440414610100578063b3a34c4c146100f7578063e7acab24146100ee578063ed98a574146100e5578063f07ec373146100dc578063f47b7740146100d3578063fb0f3ee1146100ca5763fd9f1e10146100c257600080fd5b61000e61132d565b5061000e61102c565b5061000e610f8b565b5061000e610f46565b5061000e610eb5565b5061000e610e07565b5061000e610da3565b5061000e610d32565b5061000e610be3565b5061000e610b0f565b5061000e610994565b5061000e61092f565b5061000e61089e565b5061000e6101c1565b5061000e610199565b91908251928382526000905b8482106101815750601f8460209495601f199311610174575b0116010190565b600085828601015261016d565b90602090818082850101519082860101520190610154565b503461000e57600060031936011261000e57602080526707536561706f727460475260606020f35b503461000e57602060031936011261000e57600435600052600260205260806040600020546040519060ff81161515825260ff8160081c16151560208301526effffffffffffffffffffffffffffff8160101c16604083015260881c6060820152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761027057604052565b610278610224565b604052565b60c0810190811067ffffffffffffffff82111761027057604052565b6020810190811067ffffffffffffffff82111761027057604052565b6040810190811067ffffffffffffffff82111761027057604052565b90601f601f19910116810190811067ffffffffffffffff82111761027057604052565b60405190610160820182811067ffffffffffffffff82111761027057604052565b6040519061032282610254565b565b60209067ffffffffffffffff811161033e575b60051b0190565b610346610224565b610337565b6001600160a01b0381160361000e57565b60a435906103228261034b565b35906103228261034b565b3590600682101561000e57565b92919261038d82610324565b60409461039c865192836102d1565b819584835260208093019160a080960285019481861161000e57925b8584106103c85750505050505050565b868483031261000e5784879184516103df81610254565b6103e887610374565b8152828701356103f78161034b565b83820152858701358682015260608088013590820152608080880135908201528152019301926103b8565b9080601f8301121561000e5781602061043d93359101610381565b90565b92919261044c82610324565b60409461045b865192836102d1565b819584835260208093019160c080960285019481861161000e57925b8584106104875750505050505050565b868483031261000e57848791845161049e8161027d565b6104a787610374565b8152828701356104b68161034b565b838201528587013586820152606080880135908201526080808801359082015260a080880135906104e68261034b565b820152815201930192610477565b9080601f8301121561000e5781602061043d93359101610440565b6004111561000e57565b35906103228261050f565b9190916101608184031261000e5761053a6102f4565b9261054482610369565b845261055260208301610369565b602085015267ffffffffffffffff90604083013582811161000e5781610579918501610422565b6040860152606083013591821161000e576105959183016104f4565b60608401526105a660808201610519565b608084015260a081013560a084015260c081013560c084015260e081013560e0840152610100808201359084015261012080820135908401526101408091013590830152565b35906effffffffffffffffffffffffffffff8216820361000e57565b92919267ffffffffffffffff8211610650575b604051916106336020601f19601f84011601846102d1565b82948184528183011161000e578281602093846000960137010152565b610658610224565b61061b565b9080601f8301121561000e5781602061043d93359101610608565b91909160a08184031261000e5761068d610315565b9267ffffffffffffffff823581811161000e57826106ac918501610524565b85526106ba602084016105ec565b60208601526106cb604084016105ec565b6040860152606083013581811161000e57826106e891850161065d565b6060860152608083013590811161000e57610703920161065d565b6080830152565b9080601f8301121561000e5781359061072282610324565b9261073060405194856102d1565b828452602092838086019160051b8301019280841161000e57848301915b84831061075e5750505050505090565b823567ffffffffffffffff811161000e57869161078084848094890101610678565b81520192019161074e565b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020808501948460051b01011161000e57565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600611156107f657565b6103226107bc565b608090805161080c816107ec565b8352816001600160a01b03918260208201511660208601526040810151604086015260608101516060860152015116910152565b90815180825260208080930193019160005b828110610860575050505090565b909192938260e0600192604088516108798382516107fe565b808501516001600160a01b031660a0840152015160c082015201950193929101610852565b50606060031936011261000e5767ffffffffffffffff60043581811161000e576108cc90369060040161070a565b9060243581811161000e576108e590369060040161078b565b60443592831161000e5761092b9361091161090761091795369060040161078b565b9490933691611bff565b90613e21565b604051918291602083526020830190610840565b0390f35b503461000e57600060031936011261000e57610949615017565b3360005260016020526020604060002060018154018091556040518181527f721c20121297512b72821b97f5326877ea8ecf4bb9948fea5bfcb6453074d37f833392a2604051908152f35b503461000e5760031960208136011261000e5760043567ffffffffffffffff811161000e576101608160040192823603011261000e576109d38261152d565b916109e06024830161152d565b906109ee6044840182611cfc565b6064850192916109fe8484611d50565b92909360848801610a0e90611dae565b95610a1891611d50565b969050610a236102f4565b6001600160a01b0390991689526001600160a01b031660208901523690610a4992610381565b60408701523690610a5992610440565b6060850152610a6b9060808501611db8565b60a482013560a084015260c482013560c084015260e482013560e08401526101048201356101008401526101248201356101208401526101408301526101440135610ab59161268a565b604051908152602090f35b9092916040820191604081528451809352606081019260208096019060005b818110610af95750505061043d9394818403910152610840565b8251151586529487019491870191600101610adf565b5060e060031936011261000e5767ffffffffffffffff60043581811161000e57610b3d90369060040161070a565b60243582811161000e57610b5590369060040161078b565b909160443584811161000e57610b6f90369060040161078b565b9060643595861161000e57610b8b610ba496369060040161078b565b929091610b9661035c565b9560c4359760843596611cc2565b9061092b60405192839283610ac0565b602060031982011261000e576004359067ffffffffffffffff821161000e57610bdf9160040161078b565b9091565b503461000e57610bf236610bb4565b610bfa615017565b60005b818110610c105760405160018152602090f35b80610c1e6001928486613f13565b610c2881806146ae565b610c318161152d565b91610c44610c3f3684610524565b614fa9565b91610c59836000526002602052604060002090565b610c6381856155a2565b50610c76610c72825460ff1690565b1590565b610c86575b505050505001610bfd565b7ffde361574a066b44b3b5fe98a87108b7565e327327954c4faeea56a4e6491a0a92610d2592610d01610d0793610cd6610ccf610cc86020968781019061158b565b3691610608565b898b615303565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b0161152d565b6040519384526001600160a01b039081169416929081906020820190565b0390a33880808080610c7b565b50604060031936011261000e5767ffffffffffffffff60043581811161000e57610d6090369060040161078b565b60249291923591821161000e5761092b92610d8d610d8561091794369060040161078b565b939092614750565b60405190610d9a82610299565b60008252613e21565b5060031960408136011261000e576004359067ffffffffffffffff821161000e57604090823603011261000e57610dfd610de16020926004016146e1565b60405190610dee82610299565b600082523391602435916141fd565b6040519015158152f35b5060031960808136011261000e576004359067ffffffffffffffff9081831161000e5760a090833603011261000e5760243590811161000e5761092b91610e55610e9692369060040161078b565b90606435610e628161034b565b6001600160a01b038116610ea85750610e90610e8433945b3690600401610678565b91604435933691611bff565b906141fd565b60405190151581529081906020820190565b610e84610e909194610e7a565b5060a060031936011261000e5767ffffffffffffffff60043581811161000e57610ee390369060040161078b565b9060243583811161000e57610efc90369060040161078b565b91909260443594851161000e57610f25610f1d610ba496369060040161078b565b929093614750565b9160405193610f3385610299565b6000855260843595339560643595612a0b565b503461000e57602060031936011261000e576020610f83600435610f698161034b565b6001600160a01b0316600052600160205260406000205490565b604051908152f35b503461000e57600060031936011261000e57610ff3610fa86127b4565b60405190610fb5826102b5565b600382527f312e3100000000000000000000000000000000000000000000000000000000006020830152604051928392606084526060840190610148565b9060208301526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660408301520390f35b5060031960208136011261000e5760043567ffffffffffffffff811161000e576102408160040192823603011261000e5761012435908160021c926001841193341585036112f85784936003821160028314916110d183600286117ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe870102018815926001820185028460011b880103998a92600360a088026024013593168a6115dc565b6110e38260051b6101c40135986107ec565b156111b5575050506111036110f78261152d565b6001600160a01b031690565b6001600160a01b0390811660248401351761118b5761115f60449461115a6111759761116b9461113560a4890161152d565b9060648901946111448661152d565b9060e48b01359360c48c01359333931691611dcf565b61152d565b91610204840190611537565b93909201356119df565b61117f6001600055565b60405160018152602090f35b60046040517f6ab37ce7000000000000000000000000000000000000000000000000000000008152fd5b9194509161121e6110f7606461122396611228996111d1611514565b8a819b996111df839b6107ec565b1561122d5750610d01916111f560a4850161152d565b61120086860161152d565b9060e48601359160c4870135916001600160a01b03339216906120c8565b611ac5565b6122c4565b611175565b611236816107ec565b6003810361127d57506112789161124f60a4850161152d565b61125a86860161152d565b9060e48601359160c4870135916001600160a01b03339216906121be565b610d01565b806112896004926107ec565b036112c3576112789161129b8861152d565b6112a686860161152d565b6044860135916001600160a01b03602488013592169033906120c8565b611278916112d08861152d565b6112db86860161152d565b6044860135916001600160a01b03602488013592169033906121be565b6040517fa61be9f0000000000000000000000000000000000000000000000000000000008152346004820152602490fd5b0390fd5b503461000e5761133c36610bb4565b611344615017565b60005b81811061135a5760405160018152602090f35b611365818385614fe2565b61136e8161152d565b60209061137c82840161152d565b6001600160a01b0391828116938433141580611508575b6114de576040956113a681880182611cfc565b6060808401926113b68486611d50565b90916080948a8689016113c890611dae565b976113d3908a611d50565b9a90506113de6102f4565b6001600160a01b03909c168c526001600160a01b03909116908b0152369061140592610381565b8c890152369061141492610440565b9086015284019061142491611db8565b60a0808201359084015260c0808201359084015260e08082013590840152610100808201359084015261012080820135908401526101409182840152013561146b9161268a565b93611480856000526002602052604060002090565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101001790555193845216917f6bacc01dbe442496068f7d234edd811f1a5f833243e0aec824f86ab861f3c90d90602090a3600101611347565b60046040517f80ec7374000000000000000000000000000000000000000000000000000000008152fd5b50838316331415611393565b60405190611521826102b5565b60208083523683820137565b3561043d8161034b565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e57602001918160061b3603831361000e57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e5760200191813603831361000e57565b9591906115e7615008565b6115fb610140880135610120890135615296565b50611604611927565b611622611615610200890189611537565b6101e08a013591506118f6565b7f00000000000000000000000000000000000000000000000000000000000000006080528160a0526060602460c037604060646101203760e06080908120610160526001610264359081016102a060059290921b918201526102c081019384526024906102e00137610160928460a0528560c052600060e05260005b8394610204358210156116fb5790604060a0600193602090818560061b6102840161010037838560061b6102840161012037019660e0608020885201968888528960c08201526101008360061b610284019101370193929361169e565b5090929350969590966001610204350160051b610160206060525b83610264358210156117495790604060a060019301958787528860c08201526101008360061b6102840191013701611716565b505093509490506103229391507f00000000000000000000000000000000000000000000000000000000000000006080528260a052606060c460c03760206101046101203760c0608020600052602060002060e05260016102643560051b610200015261022092836102643560051b0152606060c46102406102643560051b01376118ee610cc8608435936117f1856001600160a01b03166000526001602052604060002090565b547f00000000000000000000000000000000000000000000000000000000000000006080526040608460a03760605161010052846101205260a0610144610140376101e0526101809485608020956102643560051b0190868252336101a06102643560051b015260806101c06102643560051b01526101206101e06102643560051b01527f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f3160a4359260a061026435026101e00190a360006060526118e56060820161115a6118bf8261152d565b966118cc6080860161152d565b906001600160a01b03809916906101608701358b61569d565b9581019061158b565b9216906147dc565b106118fd57565b60046040517f466aa616000000000000000000000000000000000000000000000000000000008152fd5b601861012435106102643560061b61026001610244351461024061022435146020600435141616161561195657565b60046040517f39f3e3fd000000000000000000000000000000000000000000000000000000008152fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90156119b95790565b61043d611980565b91908110156119d2575b60061b0190565b6119da611980565b6119cb565b919234936000915b808310611a4257505050828211611a185781611a0291611e97565b808211611a0d575050565b610322910333611e97565b60046040517f1a783b8d000000000000000000000000000000000000000000000000000000008152fd5b909194611a508683856119c1565b90813590808211611a1857611a748260206001950135611a6f8161034b565b611e97565b03950191906119e7565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818110611ab9570390565b611ac1611a7e565b0390565b90939291908115611b85579333611ade60a0830161152d565b60e08301359260c08101355b61118b578460051b6101e40335946102008201611b078184611537565b93905060005b848110611b24575050505050956103229596611f2c565b8989858e611b3c85611b368989611537565b906119c1565b803592611b6a575b91611b649391611b5d6110f7602060019998960161152d565b908c611f2c565b01611b0d565b92909493919b8c611b7a91611aae565b9b9193949092611b44565b933394611b918261152d565b6040830135926020810135611aea565b81601f8201121561000e57803591611bb883610324565b92611bc660405194856102d1565b808452602092838086019260051b82010192831161000e578301905b828210611bf0575050505090565b81358152908301908301611be2565b909291611c0b84610324565b91604094611c1b865194856102d1565b839581855260208095019160051b83019380851161000e5783925b858410611c465750505050505050565b67ffffffffffffffff90843582811161000e5786019060a08285031261000e578451611c7181610254565b8235815289830135600281101561000e578a82015285830135868201526060808401359082015260808084013594851161000e57611cb3868c96879601611ba1565b90820152815201930192611c36565b90611cf090610bdf9a99989796959493986001600160a01b03811615600014611cf6575033985b3691611bff565b90612a0b565b98611ce9565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e576020019160a082023603831361000e57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561000e570180359067ffffffffffffffff821161000e576020019160c082023603831361000e57565b600411156107f657565b3561043d8161050f565b6004821015611dc45752565b611dcc6107bc565b52565b949290959391841515600014611e3b5761032296604051967f4ce34aa2000000000000000000000000000000000000000000000000000000008852602060048901526001602489015260448801526064870152608486015260a485015260c484015260e4830152612451565b9291946002919450611e4c816107ec565b03611e8b57600103611e61576103229361504d565b60046040517fefcc00b1000000000000000000000000000000000000000000000000000000008152fd5b9291906103229461515b565b90611ea181611efb565b600080808084865af115611eb3575050565b60449250611ebf612895565b6001600160a01b03604051927f470c7c1d0000000000000000000000000000000000000000000000000000000084521660048301526024820152fd5b15611f0257565b60046040517f91b3e514000000000000000000000000000000000000000000000000000000008152fd5b929193949094611f3b83611efb565b611f4581836122b1565b806120ba575050604051926000947f23b872dd00000000000000000000000000000000000000000000000000000000865280600452816024528260445260208660648180885af1803d15601f3d1160018a51141617163d1515811615611fb4575b505050505050604052606052565b80863b151516611fa657908795969115611ff457602486887f5f15d672000000000000000000000000000000000000000000000000000000008252600452fd5b1561202e57506084947f98891923000000000000000000000000000000000000000000000000000000008552600452602452604452606452fd5b3d61206d575b5060a4947ff486bc8700000000000000000000000000000000000000000000000000000000855260045260245260445281606452608452fd5b601f3d0160051c9060051c9080600302918082116120a1575b505060205a9101106120985785612034565b833d81803e3d90fd5b8080600392028380020360091c92030201018680612086565b9061032295929493916125c0565b959092949391936120d981836122b1565b806120f0575050600103611e61576103229361504d565b9060649593916000979593975060208251146000146121ab5760c0906001906040845260208401527f4ce34aa20000000000000000000000000000000000000000000000000000000060408401526020604484015280888401525b02019360027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc48601527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe48501526004840152602483015260448201520152565b5060c0868201600181510180915261214b565b9590919293946121cd86611efb565b6121d781836122b1565b806121e75750506103229461515b565b906064959694939291602082511460001461229e5760c0906001906040845260208401527f4ce34aa20000000000000000000000000000000000000000000000000000000060408401526020604484015280888401525b02019360037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc48601527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe48501526004840152602483015260448201520152565b5060c0868201600181510180915261223e565b906020820151036122bf5750565b610322905b60408082510361244d57602082015160c06064840151026044019180519260206001600160a01b036000928184927f00000000000000000000000000000000000000000000000000000000000000001674ff00000000000000000000000000000000000000001783528684527f000000000000000000000000000000000000000000000000000000000000000086526055600b201696855281805284880182885af190519015612402577fffffffff000000000000000000000000000000000000000000000000000000007f4ce34aa2000000000000000000000000000000000000000000000000000000009116036123c05750505060209052565b517f1cf99b2600000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03919091166024820152604490fd5b611329848361240f612895565b517fd13d53d40000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201529081906024820190565b5050565b6040519160206001600160a01b036101046000938285937f00000000000000000000000000000000000000000000000000000000000000001674ff00000000000000000000000000000000000000001784528685527f00000000000000000000000000000000000000000000000000000000000000006040526055600b20169660405282805282875af190519015612574577fffffffff000000000000000000000000000000000000000000000000000000007f4ce34aa200000000000000000000000000000000000000000000000000000000911603612530575050565b6040517f1cf99b2600000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03919091166024820152604490fd5b61132983612580612895565b6040517fd13d53d40000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201529081906024820190565b9060649492939160208251146000146126775760c0906001906040845260208401527f4ce34aa20000000000000000000000000000000000000000000000000000000060408401526020604484015280878401525b02019260017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc48501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe484015260048301526024820152600060448201520152565b5060c08582016001815101809152612615565b91909161014081018051917f0000000000000000000000000000000000000000000000000000000000000000604051604083018051928351926020809501906000915b868684106127915750505050506040519160051b8220917f00000000000000000000000000000000000000000000000000000000000000009093606086019481865101906000915b8a831061276d575050505050601f198660051b604051209401978851907f00000000000000000000000000000000000000000000000000000000000000008a5282519383528451958552865261018089209852525252565b838082601f19600194510180519089815260e0812087525201920192019190612715565b8082601f19600194510180519088815260c08120875252019201920191906126cd565b467f0000000000000000000000000000000000000000000000000000000000000000036127ff577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815261288f8161027d565b51902090565b3d61289c57565b601f3d0160051c60405160051c9080600302918082116128cf575b505060205a9101106128c557565b3d6000803e3d6000fd5b8080600392028380020360091c920302010138806128b7565b919082604091031261000e576040516040810181811067ffffffffffffffff821117612922575b6040526020808294803584520135910152565b61292a610224565b61290f565b92919261293b82610324565b60409261294a845192836102d1565b819581835260208093019160061b84019381851161000e57915b84831061297357505050505050565b83869161298084866128e8565b815201920191612964565b9291909261299884610324565b916129a660405193846102d1565b829480845260208094019060051b83019282841161000e5780915b8483106129d057505050505050565b823567ffffffffffffffff811161000e57820184601f8201121561000e578691612a00868385809535910161292f565b8152019201916129c1565b96989792612a268a612a359695612a2d95949998998b612c40565b369161298b565b93369161298b565b908251825191612a4d612a48848461314b565b61366d565b9760009586915b848310612b47575050506000935b838510612abf57505050505080612ab4575b50825115612a8a5782612a8691613b15565b9190565b60046040517fd5da9a1b000000000000000000000000000000000000000000000000000000008152fd5b835103835238612a74565b909192939488612ada84612ad38986612c1e565b518a613745565b8051608001516001600160a01b03166001600160a01b03612b086110f760208501516001600160a01b031690565b911603612b225750506001809101955b0193929190612a62565b8791612b4191612b3a85896001979c01038093612c1e565b528b612c1e565b50612b18565b9091968a612b6583612b5e8b879b98999a9b612c1e565b518c6136c9565b8051608001516001600160a01b03166001600160a01b03612b936110f760208501516001600160a01b031690565b911603612bb05750506001809101975b0191909594939295612a54565b8991612bcd91612bc6856001969d038093612c1e565b528d612c1e565b50612ba3565b90612bdd82610324565b612bea60405191826102d1565b828152601f19612bfa8294610324565b0190602036910137565b602090805115612c12570190565b612c1a611980565b0190565b6020918151811015612c33575b60051b010190565b612c3b611980565b612c2b565b93929091612c4c615008565b845192612c5884612bd3565b9160008352601d604560003560e01c061160011b9060005b868110612d30575050600314612d0657612c8a9086613266565b60005b838110612c9c57505050509050565b80612ca960019284612c1e565b5115612d0157612cfb612cbc8289612c1e565b5151612cc88386612c1e565b519086612cdc82516001600160a01b031690565b60208301516001600160a01b03169060606040850151940151946145e5565b01612c8d565b612cfb565b60046040517f12d3f5a3000000000000000000000000000000000000000000000000000000008152fd5b612d3a818a612c1e565b51918015612ebf57612d4d868685614cb3565b9290916001850189528215612eab57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91612d89868b612c1e565b52019380519260a084015193604060c08201519101518051908560005b838110612e405750505050606080935101519485519560005b878110612dd85750505050505050506001905b01612c70565b808760a0612de860019486612c1e565b5188612e2489898d6080860197612e01895187836131fa565b918701958651908a518214600014612e30575050508085525b80885284516131a0565b90520151905201612dbf565b612e39926131fa565b8552612e1a565b612e4a8184612c1e565b519b8c5115179b86868b60808401938451612e669085896131fa565b60608192019586519881518a1460001499612e919760019b612e9b575050508187525b52845161315f565b9052018690612da6565b612ea4926131fa565b8752612e89565b509360019392506000915060200152612dd2565b91906000602060019301528181018652612dd2565b612edc615008565b805192612ee884612bd3565b92600091828552601d6045843560e01c061160011b90835b878110612f90575050600314612d0657612f1a9083613266565b838110612f275750505050565b80612f3460019285612c1e565b5115612f8b57612f85612f478285612c1e565b5151612f538387612c1e565b5190612f6681516001600160a01b031690565b60208201516001600160a01b0316906060604084015193015193614513565b01612f1a565b612f85565b612f9a8187612c1e565b51918581156130fb5750612faf888685614ee0565b929091600185018b528883156130e95750907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91612fed868d612c1e565b52019380519260a084015191604060c0860151950151805190858c5b83811061308f5750505050606090510151938451948a5b86811061303857505050505050506001905b01612f00565b8061304560019284612c1e565b5160a0608082019189613083888b61305f87518d866131fa565b60608601948d8651908a518214600014612e305750505080855280885284516131a0565b90520151905201613020565b6130998184612c1e565b519b8c5115179b868a89608084019384516130b59085896131fa565b60608192019586519881518a14600014996130df9760019b612e9b5750505081875252845161315f565b9052018690613009565b92505093600193925060200152613032565b6020600193929401528181018852613032565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482118115151661313f570290565b613147611a7e565b0290565b81198111613157570190565b612c1a611a7e565b909283820361316e5750505090565b82939161318a613196946131909303954203918287039061310e565b9261310e565b9061314b565b9081049015150290565b90928382036131af5750505090565b926131906131cd9261318a856001969703964203918288039061310e565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830104019015150290565b9190918281146132435782818309613219576132159161310e565b0490565b7fc63cf0890000000000000000000000000000000000000000000000000000000060005260046000fd5b50905090565b600211156107f657565b5161043d816107ec565b611dcc826107ec565b815181519260005b8281106133a45750505060005b82811061328757505050565b6132918183612c1e565b516132c56132b160208301516effffffffffffffffffffffffffffff1690565b6effffffffffffffffffffffffffffff1690565b1561339b5751606081018051519060005b828110613354575050506040809101908151519160005b83811061330257505050506001905b0161327b565b61331f613319613313838551612c1e565b51613253565b60031090565b61332b576001016132ed565b600483517fa6cfc673000000000000000000000000000000000000000000000000000000008152fd5b613365613319613313838551612c1e565b613371576001016132d6565b60046040517fff75a340000000000000000000000000000000000000000000000000000000008152fd5b506001906132fc565b6133ae8183612c1e565b5180519086821015613565576020916133e56132b1846133ce848b612c1e565b5101516effffffffffffffffffffffffffffff1690565b1561355a576133f49087612c1e565b515191604092838301519183015161340b81613249565b61341481613249565b6134e55783015180518210156134bc579061342e91612c1e565b5191600383519361343e856107ec565b84906134558482019160048351981485039061325d565b606085015190525b11156134935750906001929181613478575b50505b0161326e565b61348c91608060608301519201519161358f565b388061346f565b600490517f94eb6af6000000000000000000000000000000000000000000000000000000008152fd5b600484517fbfb3f8ce000000000000000000000000000000000000000000000000000000008152fd5b929060608094015180518210156135315760039161350291612c1e565b5193845194613510866107ec565b85916135278583019260048451991486039061325d565b850151905261345d565b600483517f6088d7de000000000000000000000000000000000000000000000000000000008152fd5b505050600190613472565b60046040517f869586c4000000000000000000000000000000000000000000000000000000008152fd5b91909160009081526020808220928181019282825192600593841b0101915b8285106135eb575050505050036135c157565b60046040517f09bde339000000000000000000000000000000000000000000000000000000008152fd5b8451808711821b968752958418959095526040812094938301936135ae565b604051906060820182811067ffffffffffffffff821117613660575b8060405260408361363683610254565b6000928381528360808301528360a08301528360c08301528360e083015281528260208201520152565b613668610224565b613626565b9061367782610324565b61368460405191826102d1565b828152601f196136948294610324565b019060005b8281106136a557505050565b6020906136b061360a565b82828501015201613699565b906002821015611dc45752565b9092916136d461360a565b93805115613714576136f6926001600160a01b038693166080845101526137e9565b81516060810151156137055750565b60806000918260208601520152565b60246040517f375c24c100000000000000000000000000000000000000000000000000000000815260006004820152fd5b92919061375061360a565b9381511561378d576137639185916139aa565b60208301903382526040840152825190606082015115613781575050565b60009182608092520152565b60246040517f375c24c100000000000000000000000000000000000000000000000000000000815260016004820152fd5b507f7fda72790000000000000000000000000000000000000000000000000000000060005260046000fd5b92919260208201906020825151825181101561399d575b60051b82010151928351926020604085015181835101518151811015613990575b60051b01015160009460208697015161397a575b9061012060609260408b5193805185526020810151602086015201516040840152805160208c0152015160408a01522091805160051b01905b8181106138c1575050505060608293945101526138885750565b60011461389757610322611a7e565b7f91b3e5140000000000000000000000000000000000000000000000000000000060005260046000fd5b60209095949501906020825151855181101561396d575b60051b85010151602081015115613964575160606020604083015181865101518151811015613957575b60051b01015196818801519081158a8381011060011b17179801966000828201522084149060408a0151610120820151149060208b015190511416161561394a575b9061386e565b6139526137be565b613944565b61395f6137be565b613902565b50949394613944565b6139756137be565b6138d8565b6060820180516000909152801597509550613835565b6139986137be565b613821565b6139a56137be565b613800565b9291602080830194855151918151831015613b08575b80600593841b8301015194606093828588510151818b5101518151811015613afb575b831b010151926000968188990151613ae6575b51948451865281850151828701526040850151604087015260a0809501519a608087019b8c52878720948051851b01905b818110613a4257505050505050508394955001526138885750565b83909a999a01908c848351518551811015613ad9575b871b850101518581015115613acf578a869151015181855101518151811015613ac2575b881b0101518a81019b8d8d518091019e8f9115911060011b17179c9b60009052888b822089149251910151141615613ab5575b90613a27565b613abd6137be565b613aaf565b613aca6137be565b613a7c565b5050999899613aaf565b613ae16137be565b613a58565b848701805160009091528015995097506139f6565b613b036137be565b6139e3565b613b106137be565b6139c0565b908151613b2181612bd3565b9260005b828110613be5575050503490613b39611514565b9080519060005b828110613b7457505050613b53906122c4565b80613b64575b5061043d6001600055565b613b6e9033611e97565b38613b59565b613b7e8183612c1e565b518051908151613b8d816107ec565b613b96816107ec565b15613bca575b8560019392826040613bbb6020613bc49601516001600160a01b031690565b91015191613cae565b01613b40565b9560608293920181815111611a185751900395909190613b9c565b613bef8183612c1e565b51613c0f6132b160208301516effffffffffffffffffffffffffffff1690565b15613ca557613c27613c218388612c1e565b60019052565b606080915101519081519160005b838110613c4a57505050506001905b01613b25565b82613c558284612c1e565b51015180613c665750600101613c35565b6040517fa5f542080000000000000000000000000000000000000000000000000000000081526004810187905260248101929092526044820152606490fd5b50600190613c44565b9290918351613cbc816107ec565b613cc5816107ec565b613d1a57505050613ce36110f760208301516001600160a01b031690565b6001600160a01b03604083015191161761118b57806060613d1160806103229401516001600160a01b031690565b91015190611e97565b90919260018151613d2a816107ec565b613d33816107ec565b03613d8357604081015161118b5761032293613d5960208301516001600160a01b031690565b906001600160a01b036060613d7860808601516001600160a01b031690565b940151931691611f2c565b9260028451613d91816107ec565b613d9a816107ec565b03613de05783613db760206103229601516001600160a01b031690565b60808201516001600160a01b0316926001600160a01b03606060408501519401519416916120c8565b83613df860206103229601516001600160a01b031690565b60808201516001600160a01b0316926001600160a01b03606060408501519401519416916121be565b90613e33909493929482519083612ed4565b613e3c8261366d565b9160009485915b808310613e705750505090613e619184829495613e65575b50613b15565b5090565b825103825238613e5b565b909195613e7e878385613f13565b613ea4613e8b8280611537565b90613e9b60209485810190611537565b92909189613f6c565b906001600160a01b03613ed96110f7613ec960808651016001600160a01b0390511690565b938501516001600160a01b031690565b911603613ef057506001809101965b019190613e43565b96613f0d8298600193830390613f06828a612c1e565b5287612c1e565b50613ee8565b9190811015613f54575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18136030182121561000e570190565b613f5c611980565b613f1d565b61043d9036906128e8565b92909391613f7861360a565b948115801561415e575b61413457613f8e61360a565b613fa381613f9d36888861292f565b886139aa565b5191613fba87613fb436848661292f565b886137e9565b613fc48751613253565b835190613fd0826107ec565b613fd9826107ec565b613fe2816107ec565b148015906140fc575b80156140e9575b6140bf5761043d9561406f95608095896060948588019687518784510151106000146140825750505061403161402c8593614057936119b0565b613f61565b60208361404a8d828a5191510151900396845190612c1e565b5151015191015190612c1e565b5101528651015190525b01516001600160a01b031690565b6080835101906001600160a01b03169052565b86979694506140b1935061404a856140a161402c6020956040956119b0565b9451015188518551910397612c1e565b510152519086510152614061565b60046040517f09cfb455000000000000000000000000000000000000000000000000000000008152fd5b5060408751015160408401511415613ff2565b508651602001516001600160a01b03166001600160a01b0361412b6110f760208701516001600160a01b031690565b91161415613feb565b60046040517f98e9db6e000000000000000000000000000000000000000000000000000000008152fd5b508315613f82565b6040519061417382610254565b604051608083610160830167ffffffffffffffff8111848210176141f0575b6040526000808452806020850152606093846040820152848082015281848201528160a08201528160c08201528160e08201528161010082015281610120820152816101408201528252806020830152604082015282808201520152565b6141f8610224565b614192565b909291614208615017565b600260005561421784836148c0565b9490919260405195614228876102b5565b6001875260005b6020808210156142515790602091614245614166565b90828b0101520161422f565b505061428583959761428061429e9a61428e97998351156142ba575b60208401528251156142ad575b82613266565b612c04565b515195866142c7565b81516001600160a01b0316612cdc565b6142a86001600055565b600190565b6142b5611980565b61427a565b6142c2611980565b61426d565b939192909360a093848201519360c0830151966142e2611514565b96604092838601908151519160005b8381106143d7575050505034986060809601978851519860005b8a8110614338575050505050505050505050614326906122c4565b8061432e5750565b6103229033611e97565b614343818351612c1e565b51898101805161435d87878d8c60808801958651906144a1565b8092528783015190528151614371816107ec565b61437a816107ec565b15614397575b50906143918d8c6001943390613cae565b0161430b565b90919e9d8082116143ae579d9e9d039c908a614380565b600489517f1a783b8d000000000000000000000000000000000000000000000000000000008152fd5b6143e2818351612c1e565b5180516143ee816107ec565b6143f7816107ec565b15614441579061443b8d8f93868f8d6144236001988e936060870193845195608089019687519061446a565b9052528c610120613bbb82516001600160a01b031690565b016142f1565b600488517f12d3f5a3000000000000000000000000000000000000000000000000000000008152fd5b90939084810361448057505061043d93506131fa565b938361449561043d979661449b9496866131fa565b936131fa565b9061315f565b9093908481036144b757505061043d93506131fa565b938361449561043d97966144cc9496866131fa565b906131a0565b90815180825260208080930193019160005b8281106144f2575050505090565b909192938260a08261450760019489516107fe565b019501939291016144e4565b91939290936040805193608091828601918652602090600082880152838188015285518093528160a088019601936000915b84831061459a5750505050505091614595827f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f31948380950360608501526001600160a01b038091169716956144d2565b0390a3565b90919293949684836001928a5180516145b2816107ec565b8252808401516001600160a01b031684830152858101518683015260609081015190820152019801959493019190614545565b92909493916040918251946080918287019187526001600160a01b0394856020921682890152838189015286518093528160a089019701936000915b84831061466a57505050505050828285949361459593867f9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f319896036060870152169716956144d2565b90919293949784836001928b518051614682816107ec565b8252808401518c1684830152858101518683015260609081015190820152019901959493019190614621565b9035907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea18136030182121561000e570190565b6146e9614166565b506147336147056146fa83806146ae565b92602081019061158b565b61471c6040519461471586610254565b3690610524565b845260016020850152600160408501523691610608565b606082015260405161474481610299565b60008152608082015290565b61475982610324565b9161476760405193846102d1565b808352601f1961477682610324565b0160005b8181106147c557505060005b8181106147935750505090565b806147a96147a46001938587613f13565b6146e1565b6147b38287612c1e565b526147be8186612c1e565b5001614786565b6020906147d0614166565b8282880101520161477a565b929190836000526002602052604060002091825460ff8160081c1661487b576effffffffffffffffffffffffffffff8160101c1661484a579460ff7101000000000000000000000000000001000195961615614839575b50505055565b61484292615303565b388080614833565b602486604051907fee9e0e630000000000000000000000000000000000000000000000000000000082526004820152fd5b602486604051907f1a5155740000000000000000000000000000000000000000000000000000000082526004820152fd5b90805b6148b7575090565b809106806148af565b90918151926148db610c7260a086015160c087015190615296565b614ca7576148fe6132b160208501516effffffffffffffffffffffffffffff1690565b9361491e6132b160408601516effffffffffffffffffffffffffffff1690565b948581118015614c9f575b614c755785811080614c5d575b614c335761498261494683614fa9565b9360e0840151608085015161495a81611da4565b85516001600160a01b0316918761497b60208901516001600160a01b031690565b948b615cc1565b614996836000526002602052604060002090565b916149a4610c7284866155a2565b614c23578254958460ff881615614bfc575b5050506effffffffffffffffffffffffffffff90818660101c169560881c96871515600014614b7f5760018103614b4757505085945b856149f7888361314b565b11614b3d575b86614a079161314b565b8082871183831117614ad6575b5090614a8f818493614a4e614ad19660017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b84547fffffffffffffffffffffffffffffff00000000000000000000000000000000ff16911660101b70ffffffffffffffffffffffffffffff000016178355565b815470ffffffffffffffffffffffffffffffffff1690861660881b7fffffffffffffffffffffffffffffff000000000000000000000000000000000016179055565b929190565b9690614ae987614aef92989594986148ac565b826148ac565b80150180809204970492049480861181841117614b0e57909138614a14565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80860396506149fd565b959096868103614b58575b506149ec565b614b7281614b6c89614b78959b9a9b61310e565b9861310e565b9761310e565b9438614b52565b9550955090614ad191614bb78260017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b81547fffffffffffffffffffffffffffffff00000000000000000000000000000000ff1687821660101b70ffffffffffffffffffffffffffffff000016178255614a8f565b6060614c12614c1b94516001600160a01b031690565b92015191615303565b3880846149b6565b5050509150915090600090600090565b60046040517fa11b63ff000000000000000000000000000000000000000000000000000000008152fd5b5060016080830151614c6e81611da4565b1615614936565b60046040517f5a052b32000000000000000000000000000000000000000000000000000000008152fd5b508015614929565b50600092508291508190565b919290928251614ccf610c7260a083015160c0840151906152df565b614ed057614cf26132b160208601516effffffffffffffffffffffffffffff1690565b614d116132b160408701516effffffffffffffffffffffffffffff1690565b958682118015614ec8575b614c755786821080614eb0575b614c3357614d7d90614d3a84614fa9565b9460e0850151608086015190614d4f82611da4565b87614d6188516001600160a01b031690565b93614d7660208a01516001600160a01b031690565b958c615da2565b614d91836000526002602052604060002090565b91614d9f610c728486615645565b614c23578254958460ff881615614e92575b5050506effffffffffffffffffffffffffffff90818660101c169560881c96871515600014614b7f5760018103614e6657505085945b85614df2888361314b565b11614e5c575b86614e029161314b565b8082871183821117614e48575090614a8f818493614a4e614ad19660017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b969050614aef614ae98789989594986148ac565b8086039650614df8565b959096868103614e77575b50614de7565b614b7281614b6c89614e8b959b9a9b61310e565b9438614e71565b6060614c12614ea894516001600160a01b031690565b388084614db1565b5060016080840151614ec181611da4565b1615614d29565b508115614d1c565b5050915050600090600090600090565b919290928251614efc610c7260a083015160c084015190615296565b614ed057614f1f6132b160208601516effffffffffffffffffffffffffffff1690565b614f3e6132b160408701516effffffffffffffffffffffffffffff1690565b958682118015614fa1575b614c755786821080614f89575b614c3357614f6790614d3a84614fa9565b614f7b836000526002602052604060002090565b91614d9f610c7284866155a2565b5060016080840151614f9a81611da4565b1615614f56565b508115614f49565b61043d90614fc2606082015151610140830151906118f6565b80516001600160a01b03166000908152600160205260409020549061268a565b909161043d92811015614ffb575b60051b8101906146ae565b615003611980565b614ff0565b615010615017565b6002600055565b60016000540361502357565b60046040517f7fa8a987000000000000000000000000000000000000000000000000000000008152fd5b9092813b1561512d57604051926000947f23b872dd000000000000000000000000000000000000000000000000000000008652806004528160245282604452858060648180885af1156150a65750505050604052606052565b8593943d6150e9575b5060a4947ff486bc870000000000000000000000000000000000000000000000000000000085526004526024526044526064526001608452fd5b601f3d0160051c9060051c908060030291808211615114575b505060205a91011061209857856150af565b8080600392028380020360091c92030201018680615102565b507f5f15d6720000000000000000000000000000000000000000000000000000000060005260045260246000fd5b929093833b1561526857604051936080519160a0519360c051956000987ff242432a000000000000000000000000000000000000000000000000000000008a528060045281602452826044528360645260a06084528960a452898060c48180895af1156151d857505050505060805260a05260c052604052606052565b89949550883d61521b575b5060a4957ff486bc87000000000000000000000000000000000000000000000000000000008652600452602452604452606452608452fd5b601f3d0160051c9060051c90806003029180821161524f575b505060205a91011061524657866151e3565b843d81803e3d90fd5b8080600392028380020360091c92030201018780615234565b837f5f15d6720000000000000000000000000000000000000000000000000000000060005260045260246000fd5b42109081156152d4575b506152aa57600190565b60046040517f6f7eac26000000000000000000000000000000000000000000000000000000008152fd5b9050421015386152a0565b42109081156152f8575b506152f357600190565b600090565b9050421015386152e9565b9091336001600160a01b0383161461559d5761531d6127b4565b926000937f190100000000000000000000000000000000000000000000000000000000000085526002526022526042832090836022528380528392815191601f198101805184604103918860018411938415615532575b508514851515169788156153c3575b5050505050505050156153935750565b60049061539e612895565b7f4f7fb80d000000000000000000000000000000000000000000000000000000008152fd5b909192939495969750604082527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc8501937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0855196019660208b60648a519b7f1626ba7e000000000000000000000000000000000000000000000000000000009d8e8b528c520188845afa998a615469575b505050505252523880808080808080615383565b8b51036154765780615455565b908a913b61550a576154e257640101000000821a156154b757807f815e1d640000000000000000000000000000000000000000000000000000000060049252fd5b6024917f1f003d0a000000000000000000000000000000000000000000000000000000008252600452fd5b807f8baa579f0000000000000000000000000000000000000000000000000000000060049252fd5b6004827f4f7fb80d000000000000000000000000000000000000000000000000000000008152fd5b9850506040840180519060608601518b1a99615569575b89865288835260208b60808560015afa5083835287865252885138615374565b9850601b8160ff1c01987f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82168152615549565b505050565b905460ff8160081c16615614576effffffffffffffffffffffffffffff8160101c1690816155d3575b505050600190565b60881c11156155e35780806155cb565b602490604051907f10fda3e10000000000000000000000000000000000000000000000000000000082526004820152fd5b602482604051907f1a5155740000000000000000000000000000000000000000000000000000000082526004820152fd5b906000905460ff8160081c16615694576effffffffffffffffffffffffffffff8160101c16908161567a575b50505050600190565b60881c111561568a578080615671565b6155e35750600090565b50905050600090565b90929160019060048110156156fd575b11806156ea575b806156d7575b6156c5575b50505050565b6156ce9361570a565b388080806156bf565b506001600160a01b0382163314156156ba565b506001600160a01b0384163314156156b4565b6157056107bc565b6156ad565b6000919290829161032295604051906001600160a01b0360208301937f0e1d31dc00000000000000000000000000000000000000000000000000000000855288602485015233604485015216606483015260848201526084815261576d8161027d565b51915afa615e78565b90815180825260208080930193019160005b828110615796575050505090565b909192938260a0600192875180516157ad816107ec565b8252808401516001600160a01b03168483015260408082015190830152606080820151908301526080908101519082015201950193929101615788565b90815180825260208080930193019160005b82811061580a575050505090565b909192938260c060019287518051615821816107ec565b8252808401516001600160a01b039081168584015260408083015190840152606080830151908401526080808301519084015260a0918201511690820152019501939291016157fc565b906004821015611dc45752565b6060519081815260208091019160809160005b828110615899575050505090565b83518552938101939281019260010161588b565b90815180825260208080930193019160005b8281106158cd575050505090565b8351855293810193928101926001016158bf565b90815180825260208092019182818360051b85019501936000915b84831061590c5750505050505090565b909192939495848061595e83856001950387528a518051825261593584820151858401906136bc565b60408082015190830152606080820151908301526080809101519160a0809282015201906158ad565b98019301930191949392906158fc565b92615b02906001600160a01b0361043d9694615b0f94875216602086015260a06040860152805160a080870152610140906159b482880182516001600160a01b03169052565b6080615af1615a286159f38a6159dc6020870151610160809301906001600160a01b03169052565b6040860151906101808d01526102a08c0190615776565b60608501517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08c8303016101a08d01526157ea565b615a3a838501516101c08c019061586b565b60a08401516101e08b015260c08401516102008b015260e08401516102208b015261010094858501516102408c015261012094858101516102608d015201516102808b0152615aa1602087015160c08c01906effffffffffffffffffffffffffffff169052565b60408601516effffffffffffffffffffffffffffff1660e08b015260608601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6095868c840301908c0152610148565b930151918784030190870152610148565b8381036060850152615878565b9160808184039101526158e1565b939061043d95936001600160a01b03615b0f94615cb393885216602087015260a06040870152805160a08088015261014090615b6482890182516001600160a01b03169052565b6080615ca2615bd8615ba38b6020860151615b8d61016091828401906001600160a01b03169052565b61018060408801519201526102a08d0190615776565b60608501518c82037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec0016101a08e01526157ea565b615bea838501516101c08d019061586b565b60a08401516101e08c015260c08401516102008c015260e08401516102208c015261010094858501516102408d0152610120948c6102608783015191015201516102808c0152615c52602087015160c08d01906effffffffffffffffffffffffffffff169052565b60408601516effffffffffffffffffffffffffffff1660e08c015260608601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6095868d840301908d0152610148565b930151918884030190880152610148565b9084820360608601526158ad565b909591929493600190615cd381611da4565b1180615d8f575b80615d7c575b615ced575b505050505050565b6080810151511580615d73575b15615d155750615d0a945061570a565b388080808080615ce5565b6000935083929450615d6061576d615d6e9760405192839160208301957f33131570000000000000000000000000000000000000000000000000000000008752338b6024860161596e565b03601f1981018352826102d1565b615d0a565b50855115615cfa565b506001600160a01b038416331415615ce0565b506001600160a01b038216331415615cda565b919692939594600190615db481611da4565b1180615e65575b80615e52575b615dcf575b50505050505050565b6080820151511580615e49575b15615df9575050615ded945061570a565b38808080808080615dc6565b600094508493955061576d615e4497615d6060405193849260208401967f33131570000000000000000000000000000000000000000000000000000000008852338c60248701615b1d565b615ded565b50805115615ddc565b506001600160a01b038516331415615dc1565b506001600160a01b038316331415615dbb565b15615f0f577f0e1d31dc000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000600060203d14615f04575b1603615ed35750565b602490604051907ffb5014fc0000000000000000000000000000000000000000000000000000000082526004820152fd5b602081803e51615eca565b602490615f1a612895565b604051907ffb5014fc0000000000000000000000000000000000000000000000000000000082526004820152fdfea26469706673582212204f3babde171047a7c5e80dad33a0544638cfdd64537413da9098740fde59609964736f6c634300080e0033","sourceMap":"3714:1283:0:-:0;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;4473:127;;;;;;3714:1283;4473:127;;3714:1283;;;;;;-1:-1:-1;;3714:1283:0;;;;;;;-1:-1:-1;3714:1283:0;19420:12:41;3714:1283:0;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;;-1:-1:-1;;;;;3714:1283:0;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;3714:1283:0;;;:::o;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;:::o;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;:::o;:::-;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;22863:131:28;3714:1283:0;;;;;;:::i;:::-;;;;;;;:::i;:::-;22863:131:28;;:::i;:::-;3714:1283:0;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;955:18:33;;:::i;:::-;1273:10;3714:1283:0;;1263:9:33;3714:1283:0;;;;;;1263:9:33;3714:1283:0;;;;;;;;;;;1363:42:33;1273:10;;1363:42;;3714:1283:0;;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;25687:13:28;;;:::i;:::-;25718:10;;;;;;:::i;:::-;25746:11;;;;;;;:::i;:::-;25775:19;;;;;;;;;:::i;:::-;25812:15;;;;;;;;;:::i;:::-;26003:19;;;;:::i;:::-;3714:1283:0;;;;;:::i;:::-;-1:-1:-1;;;;;3714:1283:0;;;;;-1:-1:-1;;;;;3714:1283:0;;25654:389:28;;3714:1283:0;;;;;;:::i;:::-;25746:11:28;25654:389;;3714:1283:0;;;;;;:::i;:::-;25775:19:28;25654:389;;3714:1283:0;25654:389:28;;25812:15;25654:389;;;:::i;:::-;25845:15;;;14394:4:30;25845:15:28;25654:389;;3714:1283:0;25878:13:28;;;14394:4:30;25878:13:28;25654:389;;3714:1283:0;25909:14:28;;;3714:1283:0;25909:14:28;25654:389;;3714:1283:0;25941:10:28;;;14394:4:30;25941:10:28;25654:389;;3714:1283:0;25969:16:28;;;3714:1283:0;25969:16:28;25654:389;;3714:1283:0;25654:389:28;;;3714:1283:0;26057:13:28;;14394:4:30;25624:456:28;;;:::i;:::-;25746:11;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;:::i;:::-;15711:14:41;;:::i;:::-;-1:-1:-1;16268:15:41;;;;;;3714:1283:0;;17231:4:41;3714:1283:0;;;;;16253:13:41;16367:9;;17231:4;16367:9;;;;:::i;:::-;16488:16;;;;:::i;:::-;16591:23;;;:::i;:::-;3714:1283:0;16725:96:41;3714:1283:0;;;;:::i;:::-;16725:96:41;:::i;:::-;16929:23;;;3714:1283:0;;16929:12:41;3714:1283:0;;;;;;;16929:23:41;17047:254;;;;:::i;:::-;;17390:24;3714:1283:0;;;;;;;;17390:24:41;;3714:1283:0;17390:24:41;17386:558;;16253:13;3714:1283:0;;;;;;16253:13:41;;17386:558;17775:150;17529:15;17775:150;17529:15;17639:30;17883:20;17529:15;17492:53;3714:1283:0;17529:15:41;;;;;;;;:::i;:::-;3714:1283:0;;;:::i;:::-;17492:53:41;;;:::i;:::-;17231:4;3714:1283:0;;;;;;;;17639:30:41;17883:20;;:::i;:::-;3714:1283:0;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;17775:150:41;;;;17386:558;;;;;;;3714:1283:0;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19913:32:28;3714:1283:0;19875:192:28;3714:1283:0;;;;;;:::i;:::-;19913:32:28;;;;:::i;:::-;3714:1283:0;;;;;;:::i;:::-;-1:-1:-1;3714:1283:0;;19875:192:28;:::i;3714:1283:0:-;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;5237:217:28;5283:30;3714:1283:0;;;;5283:30:28;:::i;:::-;3714:1283:0;;;;;;:::i;:::-;-1:-1:-1;3714:1283:0;;5434:10:28;3714:1283:0;;;5237:217:28;;:::i;:::-;3714:1283:0;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8478:195:28;3714:1283:0;;;;;;:::i;:::-;;;;;;;:::i;:::-;-1:-1:-1;;;;;3714:1283:0;;;;8641:10:28;3714:1283:0;;8641:10:28;8615:48;;3714:1283:0;;;;;:::i;:::-;;;;;;;;:::i;:::-;8478:195:28;;:::i;:::-;3714:1283:0;;;;;;;;;;;;;;;8615:48:28;3714:1283:0;;8615:48:28;;;;3714:1283:0;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;12239:32:28;3714:1283:0;12190:381:28;3714:1283:0;;;;;;:::i;:::-;12239:32:28;;;;:::i;:::-;3714:1283:0;;;;;;;:::i;:::-;-1:-1:-1;3714:1283:0;;;;12513:10:28;;3714:1283:0;;;12190:381:28;;:::i;3714:1283:0:-;;;;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3714:1283:0;-1:-1:-1;3714:1283:0;1842:9:33;3714:1283:0;;;-1:-1:-1;3714:1283:0;;27520:225:28;;3714:1283:0;;;;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;;12316:18:37;;:::i;:::-;3714:1283:0;;;;;;:::i;:::-;2271:1:30;14394:4;;12650:91:37;2271:1:30;;;12650:91:37;3714:1283:0;;;;;;;;;;;;;:::i;:::-;;2271:1:30;3714:1283:0;;;-1:-1:-1;;;;;12451:19:37;3714:1283:0;;;;;;;;;;-1:-1:-1;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;3368:528:27;;;;;;;;;;4103:254;;;;;4521:93;;5049:1375;;3368:528;5049:1375;;3368:528;5049:1375;;;6751:15;5049:1375;3368:528;5049:1375;;;;;;;;;;3368:528;5049:1375;;;;;3368:528;5049:1375;;;;;;;3368:528;5049:1375;;;;;;3368:528;;6751:15;;:::i;:::-;3714:1283:0;6973:316:27;;;;;;3714:1283:0;;:::i;:::-;7350:47:27;;;7522:29;;;7514:38;7522:29;;;:::i;:::-;-1:-1:-1;;;;;3714:1283:0;;;7514:38:27;-1:-1:-1;;;;;3714:1283:0;;;5049:1375:27;7575:34;;14394:4:30;7514:95:27;7492:200;;8264:18;8216:30;7868:21;7785:294;8300:31;7868:21;8300:31;7868:21;;;;;;:::i;:::-;7907:18;;;;;;;;:::i;:::-;8015:22;;;;14394:4:30;7971:26:27;;;;14394:4:30;7943:10:27;;3714:1283:0;;7785:294:27;;:::i;:::-;8264:18;:::i;:::-;8300:31;;;;;;:::i;:::-;8216:30;;;;14394:4:30;8300:31:27;:::i;:::-;7346:3915;2346:1:30;1324:31:42;3714:1283:0;1233:129:42;7346:3915:27;3714:1283:0;;3368:528:27;3714:1283:0;;;;;7492:200:27;3714:1283:0;;;7655:22:27;;;;7346:3915;8773:30;;;;10942:185;10985:18;;10942:185;8773:30;11238:11;8773:30;;;:::i;:::-;3714:1283:0;;;;;;;;:::i;:::-;8903:44:27;;;9085:21;9048:305;9085:21;;;;;;:::i;:::-;9128:18;;;;;:::i;:::-;9248:22;;;;14394:4:30;9200:26:27;;;;14394:4:30;9168:10:27;-1:-1:-1;;;;;9168:10:27;3714:1283:0;;9048:305:27;;:::i;10942:185::-;;:::i;:::-;11238:11;:::i;:::-;7346:3915;;8899:1961;3714:1283:0;;;:::i;:::-;3368:528:27;9378:45;;3368:528;;9562:21;9524:306;9562:21;;;;;;:::i;:::-;9605:18;;;;;:::i;:::-;9725:22;;;;14394:4:30;9677:26:27;;;;14394:4:30;9645:10:27;-1:-1:-1;;;;;9645:10:27;3714:1283:0;;9524:306:27;;:::i;:::-;8899:1961;;9374:1486;3714:1283:0;;;;;:::i;:::-;9855:44:27;3714:1283:0;;10000:329:27;10037:29;;;;:::i;:::-;10120:18;;;;;:::i;:::-;10216:30;;;14394:4:30;10160:34:27;-1:-1:-1;;;;;5049:1375:27;10160:34;;14394:4:30;3714:1283:0;;10088:10:27;;10000:329;;:::i;9851:1009::-;10515:330;10553:29;;;;:::i;:::-;10636:18;;;;;:::i;:::-;10732:30;;;14394:4:30;10676:34:27;-1:-1:-1;;;;;5049:1375:27;10676:34;;14394:4:30;3714:1283:0;;10604:10:27;;10515:330;;:::i;4521:93::-;3714:1283:0;;4573:26:27;;;4103:254;3714:1283:0;4573:26:27;;3714:1283:0;;;4573:26:27;;;;;3714:1283:0;;;;;;;;:::i;:::-;12484:14:41;;:::i;:::-;-1:-1:-1;13036:15:41;;;;;;13699:11;3714:1283:0;17231:4:41;3714:1283:0;;;;;13021:13:41;13145:9;;;;;:::i;:::-;13183:13;;;:::i;:::-;13221:10;;;;;;;:::i;:::-;-1:-1:-1;;;;;3714:1283:0;;;;13327:10:41;;;:21;;:43;;;13021:13;13323:115;;13699:11;;;;;;;;:::i;:::-;13736:19;;;;;;;;;:::i;:::-;13781:15;;;;;;;;;;;:::i;:::-;14020:19;;;;;:::i;:::-;3714:1283:0;;;;;:::i;:::-;-1:-1:-1;;;;;3714:1283:0;;;;;-1:-1:-1;;;;;3714:1283:0;;;13595:473:41;;;3714:1283:0;;;;;;:::i;:::-;13595:473:41;;;3714:1283:0;;;;;;:::i;:::-;13595:473:41;;;3714:1283:0;13595:473:41;;;;;;:::i;:::-;13822:15;;;;14394:4:30;13595:473:41;;;3714:1283:0;13863:13:41;;;;14394:4:30;13595:473:41;;;3714:1283:0;13902:14:41;;;;3714:1283:0;13595:473:41;;;3714:1283:0;13942:10:41;;;;14394:4:30;13595:473:41;;;3714:1283:0;13978:16:41;;;;3714:1283:0;13595:473:41;;;3714:1283:0;13595:473:41;;;;;3714:1283:0;14090:13:41;14394:4:30;13557:564:41;;;:::i;:::-;14229:23;;;3714:1283:0;;16929:12:41;3714:1283:0;;;;;;;14229:23:41;3714:1283:0;;;;;;;;;;;;;;14524:40:41;;3714:1283:0;;14524:40:41;14417:4;3714:1283:0;13021:13:41;;13323:115;3714:1283:0;13699:11:41;3714:1283:0;13401:18:41;;;;13327:43;3714:1283:0;;;;13327:10:41;13352:18;;13327:43;;14394:4:30;3714:1283:0;;;;;;:::i;:::-;;14394:4:30;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3714:1283:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13220:24982:27:-;;;;;;:::i;:::-;13719:59;13753:18;;;14394:4:30;13731:20:27;;;14394:4:30;13719:59:27;:::i;:::-;;;;:::i;:::-;14387:44;14335:31;;;;;;:::i;:::-;14387:44;;;14394:4:30;;-1:-1:-1;14387:44:27;:::i;:::-;15656:28;15821:11919;;;;;;;;;;;13731:20;15821:11919;;;;;;;;13773:4;15821:11919;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15821:11919:27;;-1:-1:-1;15821:11919:27;;;;;;;;;;;;;13773:4;15821:11919;;;;;;;;;;;;;;;;;13731:20;15821:11919;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13773:4;15821:11919;;;;;;;;;;;;;;;;;;;;;13773:4;15821:11919;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38062:133;15821:11919;;;28253:20;15821:11919;28369:3007;;15821:11919;28369:3007;15821:11919;28369:3007;15821:11919;28369:3007;15821:11919;28369:3007;13731:20;28369:3007;15821:11919;;28369:3007;-1:-1:-1;28369:3007:27;15821:11919;-1:-1:-1;28369:3007:27;15821:11919;28369:3007;13773:4;15821:11919;;;;14335:31;28369:3007;;;15821:11919;;;;;;28369:3007;;15821:11919;28369:3007;;15821:11919;;;;28369:3007;;3714:1283:0;38165:20:27;32441:90;;1842:18:33;;;-1:-1:-1;;;;;3714:1283:0;;;13773:4:27;3714:1283:0;;;;;;;1842:18:33;3714:1283:0;32769:15:27;15821:11919;32799:1443;15821:11919;32441:90;15821:11919;32799:1443;15821:11919;32799:1443;15821:11919;32799:1443;;13731:20;32799:1443;15821:11919;32799:1443;13753:18;32799:1443;14387:44;32799:1443;;;;15821:11919;32799:1443;15821:11919;;;;;34262:3453;;;;;;;15821:11919;;;;34262:3453;;15821:11919;34262:3453;15821:11919;;;;34262:3453;;13731:20;14387:44;15821:11919;;;;34262:3453;;;;;15821:11919;;;;34262:3453;14387:44;34262:3453;;;-1:-1:-1;15821:11919:27;34262:3453;38133:18;15821:11919;37932:18;;37804:185;37932:18;;;:::i;:::-;37964:15;;15821:11919;37964:15;;;:::i;:::-;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;37876:19:27;15821:11919;37876:19;;3714:1283:0;37804:185:27;;:::i;38133:18::-;38165:20;;;;;:::i;3714:1283:0:-;;;38062:133:27;;:::i;2810:425:26:-;3097:63;3093:136;;2810:425::o;3093:136::-;3183:35;3714:1283:0;;3183:35:26;;;;4112:2496;4369:2058;;;;;;;;;;;;;;;;;;;;;;;;6519:13;6515:87;;4112:2496::o;6515:87::-;4369:2058;3714:1283:0;;6555:36:26;;;;3714:1283:0;;;;;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;38721:2240:27;;;38981:9;39309:13;39321:1;39304:1045;39324:29;;;;;;40433:23;;;;;;40429:88;;40586:6;;;;:::i;:::-;40682:23;;;40678:277;;38721:2240;;:::o;40678:277::-;40906:23;3714:1283:0;;40893:10:27;40906:23;:::i;40429:88::-;40479:27;3714:1283:0;;40479:27:27;;;;39355:3;39505:23;;;;;;;;:::i;:::-;14394:4:30;;;39792:42:27;;;;39788:123;;40077:25;40026:29;;3714:1283:0;40026:29:27;;14394:4:30;;;;:::i;:::-;40077:25:27;:::i;:::-;3714:1283:0;39355:3:27;3714:1283:0;39309:13:27;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;:::o;41505:3513:27:-;;;;;;42222:815;;;;42367:10;;42484:21;;;;;:::i;:::-;42589:22;;;14394:4:30;;42536:26:27;;;14394:4:30;42222:815:27;43105:83;;43370:294;;;;;;43802:31;;;;;;;;:::i;:::-;43917:13;;;-1:-1:-1;43932:29:27;;;;;;44999:11;;;;;;;;;;:::i;43917:13::-;44098:31;;;;:34;:31;;;;;:::i;:::-;:34;;:::i;:::-;14394:4:30;;44313:85:27;;;43917:13;44566:29;44489:220;44566:29;;44489:220;44566:29;43370:294;3714:1283:0;44566:29:27;;;;;:::i;44489:220::-;;;;:::i;:::-;3714:1283:0;43917:13:27;;44313:85;44348:35;;;;;;;;;;:::i;:::-;44313:85;;;;;;;;42222:815;42730:10;;42758:12;42871:29;;;:::i;:::-;42992:30;;;14394:4:30;;42931:34:27;;;14394:4:30;42222:815:27;;3714:1283:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17182:913:28;;3714:1283:0;17182:913:28;17761:327;17182:913;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;17992:23:28;:48;3714:1283:0;;;18018:10:28;;17992:48;;3714:1283:0;;;:::i;:::-;17761:327:28;;:::i;17992:48::-;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;3714:1283:0;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;:::i;:::-;;:::o;4793:3517:35:-;;;;;;;5107:24;;;5103:3201;5107:24;;;7610:22;5335:2111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7610:22;:::i;5103:3201::-;3714:1283:0;;;7770:15:35;3714:1283:0;;;;;;:::i;:::-;7758:27:35;7770:15;;7893:1;7883:11;7879:94;;8100:10;;;:::i;7879:94::-;7925:29;3714:1283:0;;7925:29:35;;;;7754:540;8272:6;;;;;;:::i;8541:742::-;;8695:6;;;:::i;:::-;-1:-1:-1;8817:145:35;;;;;;;9008:8;9004:273;;8541:742;;:::o;9004:273::-;3714:1283:0;9004:273:35;;;;:::i;:::-;-1:-1:-1;;;;;3714:1283:0;;9227:39:35;;;;3714:1283:0;9227:39:35;;;3714:1283:0;;;;;9227:39:35;3401:203:26;3534:11;3530:68;;3401:203::o;3530:68::-;3568:19;3714:1283:0;;3568:19:26;;;;10219:969:35;;;;;;;10496:6;;;:::i;:::-;10627:10;;;;:::i;:::-;10700:24;;;1564:9390:44;;;;10722:1:35;;1564:9390:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10696:486:35;1564:9390:44;;;;;;;;;;10219:969:35:o;1564:9390:44:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10696:486:35;11151:6;;;;;;;;:::i;12189:1092::-;;;;;;;;12531:10;;;;:::i;:::-;12604:24;;;12718:11;;12728:1;12718:11;12714:86;;12919:10;;;:::i;12600:675::-;23167:16;24384:671;23167:16;;;-1:-1:-1;23167:16:35;;;;3714:1283:0;14394:4:30;3714:1283:0;;23341:41:35;23337:1009;14394:4:30;;;24384:671:35;23398:12;23409:1;23489:498;;;;14394:4:30;23489:498:35;;;23442:33;23489:498;;;;14394:4:30;23489:498:35;;;;;;;;;23337:1009;24384:671;;;13111:22;24384:671;;;;;;;;;;;;;;;;;;;;;;12189:1092::o;23337:1009::-;24083:253;24384:671;24083:253;;;;;;;;;;23337:1009;;14248:1028;;;;;;;14555:6;;;:::i;:::-;14686:10;;;;:::i;:::-;14759:24;;;14917:6;;;;;:::i;14755:515::-;23167:16;24384:671;23167:16;;;;;;14394:4:30;3714:1283:0;;23341:41:35;23337:1009;14394:4:30;;;24384:671:35;23398:12;23409:1;23489:498;;;;14394:4:30;23489:498:35;;;23442:33;23489:498;;;;14394:4:30;23489:498:35;;;;;;;;;23337:1009;24384:671;;;15105:23;24384:671;;;;;;;;;;;;;;;;;;;;;;14248:1028::o;23337:1009::-;24083:253;24384:671;24083:253;;;;;;;;;;23337:1009;;16027:458;;21766:139;;;;16389:35;16385:94;;16027:458;:::o;16385:94::-;16456:11;;16849:437;14436:4:30;3714:1283:0;;;16974:38:35;16970:75;;21766:139;;;;18282:502;;;;;;;;9862:1318:37;;;3714:1283:0;21766:139:35;-1:-1:-1;;;;;;9615:19:37;;;;;3714:1283:0;9862:1318:37;;;;;;;9760:27;9862:1318;;;;;;;;;20121:506:35;;;18282:502;;;20121:506;;;;;;20674:8;;20670:254;;3714:1283:0;21021:33:35;3714:1283:0;;21011:43:35;21007:116;;19025:73;;;21766:139;19025:73;;16849:437::o;21007:116::-;3714:1283:0;21077:35:35;;;;;;3714:1283:0;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;4573:26:27;20670:254:35;20884:29;20670:254;;;;:::i;:::-;3714:1283:0;20884:29:35;;;-1:-1:-1;;;;;3714:1283:0;;;20884:29:35;;;3714:1283:0;;;;;;;;;16970:75:35;17028:7;;:::o;19774:1355::-;9862:1318:37;;3714:1283:0;9862:1318:37;-1:-1:-1;;;;;14274:5:30;-1:-1:-1;9615:19:37;;;;;3714:1283:0;9862:1318:37;;;;;;;9760:27;9862:1318;;;;;;;;;20121:506:35;;;;;;;;;20674:8;;20670:254;;3714:1283:0;21021:33:35;3714:1283:0;;21011:43:35;21007:116;;19774:1355;;:::o;21007:116::-;9862:1318:37;3714:1283:0;21077:35:35;;;;;;3714:1283:0;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;4573:26:27;20670:254:35;20884:29;20670:254;;;:::i;:::-;9862:1318:37;3714:1283:0;20884:29:35;;;-1:-1:-1;;;;;3714:1283:0;;;20884:29:35;;;3714:1283:0;;;;;;;;;22907:2154:35;;24384:671;22907:2154;;;;14394:4:30;3714:1283:0;;23341:41:35;23337:1009;14394:4:30;;;24384:671:35;23398:12;11019:21;23489:498;;;;14394:4:30;23489:498:35;;;23442:33;23489:498;;;;14394:4:30;23489:498:35;;;;;;;;;23337:1009;24384:671;;;11019:21;24384:671;;;;;;;;;;;;;;;;10722:1;24384:671;;;;;;22907:2154::o;23337:1009::-;24083:253;24384:671;24083:253;;;11019:21;24083:253;;;;;;23337:1009;;1372:7415:37;;;;1662:47;;;3714:1283:0;;2238:20:37;;2349:1709;;;;;;;;;;;;;;;;-1:-1:-1;2349:1709:37;;;;;;;;;;;;;;;;;;;;4274:28;;4393:1858;;;;;;;;;;;-1:-1:-1;4393:1858:37;;;;;;;;;;;;-1:-1:-1;;4393:1858:37;2349:1709;4393:1858;2349:1709;4393:1858;;6459:2322;;;;;6352:15;;6459:2322;;;;;;;;;;;;;;;;;;;;;;1372:7415::o;4393:1858::-;;;;-1:-1:-1;;2349:1709:37;4393:1858;;;;;;;;;;;;;;;;;;;;;;;;2349:1709;;;-1:-1:-1;;2349:1709:37;;;;;;;;;;;;;;;;;;;;;;;;;11504:208;11608:13;11625:9;11608:26;11625:9;;11649:17;11504:208;:::o;11608:97::-;3714:1283:0;;2763:187:29;;;2791:24;;3714:1283:0;;2833:10:29;3714:1283:0;;;;2861:13:29;3714:1283:0;;;;11608:13:37;3714:1283:0;;;;2931:4:29;3714:1283:0;;;;;2763:187:29;;;;;:::i;:::-;3714:1283:0;2740:220:29;;11504:208:37;:::o;1348:2237:38:-;1416:2163;;;1348:2237::o;1416:2163::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1348:2237::o;1416:2163::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;5780:1222:39;;;;;6554:9;5780:1222;3714:1283:0;5780:1222:39;;3714:1283:0;5780:1222:39;;;;;6554:9;;:::i;:::-;3714:1283:0;;;:::i;:::-;;;;;:::i;:::-;;;;;;24381:55:39;24352:94;24381:55;;;;:::i;:::-;24352:94;:::i;:::-;24612:35;6453:5;24719:13;;24714:1050;24734:26;;;;;;25843:13;;;6453:5;25838:1160;25858:34;;;;;;27082:28;;;;;;27078:320;;25838:1160;3714:1283:0;;;27468:22:39;27464:88;;27624:97;;;;:::i;:::-;6959:36;5780:1222;:::o;27464:88::-;27513:28;3714:1283:0;;27513:28:39;;;;27078:320;27198:186;;;;;27078:320;;;25894:3;26061:28;;;;;;26234:228;26061:28;;;;;:::i;:::-;;26234:228;;:::i;:::-;26562:14;;25399:24;26562;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;-1:-1:-1;;;;;26562:45:39;3714:1283:0;25427:17:39;26590;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;26562:45:39;3714:1283:0;;26562:45:39;25427:17;;3714:1283:0;;;;;;26558:426:39;;3714:1283:0;25843:13:39;;;;;;26558:426;3714:1283:0;;26843:122:39;3714:1283:0;26843:122:39;3714:1283:0;;;;;;;26843:122:39;;;:::i;:::-;;;;:::i;:::-;;26558:426;;24762:3;24925:20;;;;6751:2174:36;24925:20:39;;;;;;;;;;:::i;:::-;;6751:2174:36;;:::i;:::-;25399:14:39;;:24;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;-1:-1:-1;;;;;25399:45:39;3714:1283:0;25427:17:39;;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;25399:45:39;3714:1283:0;;25399:45:39;25427:17;;3714:1283:0;;;;;;25395:355:39;;3714:1283:0;24719:13:39;;;;;;;;;25395:355;3714:1283:0;;25680:51:39;3714:1283:0;25680:51:39;3714:1283:0;;;;;25680:51:39;;;:::i;:::-;;;;:::i;:::-;;25395:355;;3714:1283:0;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;3714:1283:0;;;;:::i;:::-;;14394:4:30;3714:1283:0;14394:4:30;3714:1283:0;;14394:4:30;3714:1283:0:o;:::-;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;8386:11661:39;;;;;;;:::i;:::-;3714:1283:0;;8967:26:39;;;;:::i;:::-;9084:55;6453:5;9084:55;;9674:754;;6453:5;9674:754;;;;;;;10586:13;6453:5;10601:15;;;;;;18791:38;;18828:1;18791:38;18787:100;;19002:17;;;;:::i;:::-;6453:5;19273:15;;;;;;8386:11661;;;;;;:::o;19290:3::-;19386:14;;9674:754;19386:14;;;:::i;:::-;3714:1283:0;19386:28:39;19382:83;;19969:29;19612:17;;;;:::i;:::-;;:28;19772:14;;;;:::i;:::-;3714:1283:0;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;19853:20:39;;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;19926:21:39;14168;12997:30;19926:21;;;19969:29;;;;;:::i;:::-;3714:1283:0;19258:13:39;;19382:83;19438:8;;18787:100;18852:24;12997:30;3714:1283:0;18852:24:39;;;;10618:3;10725:17;;;;:::i;:::-;;10844:21;;;10840:455;;11532:211;;;;;:::i;:::-;11825:79;;;9674:754;11825:79;;;;12007:14;;12003:272;;12357:26;3714:1283:0;12357:26:39;;;;;:::i;:::-;3714:1283:0;;12706:24:39;;;:34;;;;3714:1283:0;12843:32:39;12997:30;12843:32;;;3714:1283:0;12997:30:39;;;3714:1283:0;;13240:13:39;;6453:5;13255:19;;;;;;14168:21;;;;;15387:24;;;:38;;3714:1283:0;;;15688:13:39;6453:5;15703:27;;;;;;10618:3;;;;;;;;9674:754;10618:3;10586:13;3714:1283:0;10586:13:39;;15732:3;15886:16;;12706:34;15886:16;9674:754;15886:16;;;:::i;:::-;;16149:27;17249:284;16149:27;;;14021:19;16149:27;;3714:1283:0;16039:159:39;3714:1283:0;;16039:159:39;;;:::i;:::-;16329:29;;;3714:1283:0;;;;;;16329:84:39;;16300:646;16386:27;;;3714:1283:0;;;;;;16300:646:39;3714:1283:0;;;;;17249:284:39;:::i;:::-;3714:1283:0;;17659:760:39;;;;3714:1283:0;15688:13:39;;16300:646;16746:177;;;:::i;:::-;3714:1283:0;;16300:646:39;;13276:3;13380:8;;;;:::i;:::-;;13411:383;;;;;14021:19;;;;;;;3714:1283:0;;;13911:151:39;;;;;:::i;:::-;14168:21;;;;3714:1283:0;;;;;;14168:44:39;;14164:539;14193:19;;14958:247;14193:19;9674:754;14193:19;;;3714:1283:0;;;;;;14164:539:39;3714:1283:0;;;14958:247:39;:::i;:::-;3714:1283:0;;;13240:13:39;;;;14164:539;14511:169;;;:::i;:::-;3714:1283:0;;14164:539:39;;12003:272;12126:23;;9674:754;12126:23;;;6453:5;12126:23;;;;3714:1283:0;12248:8:39;;10840:455;10970:23;;6453:5;10970:23;9674:754;10970:23;;3714:1283:0;11087:87:39;;;;;11268:8;;8386:11661;;;:::i;:::-;3714:1283:0;;8967:26:39;;;;:::i;:::-;3714:1283:0;;9084:55:39;;;;9674:754;;;;;;;;35934:4;9674:754;10586:13;;10601:15;;;;;;18791:38;;18828:1;18791:38;18787:100;;19002:17;;;;:::i;:::-;19273:15;;;;;8386:11661;;;;:::o;19290:3::-;19386:14;;35934:4;19386:14;;;:::i;:::-;3714:1283:0;19386:28:39;19382:83;;19969:29;19612:17;;;;:::i;:::-;;:28;19772:14;;;;:::i;:::-;3714:1283:0;;;;;-1:-1:-1;;;;;3714:1283:0;;;;19853:20:39;;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;19926:21:39;14168;12997:30;19926:21;;;19969:29;;;;;:::i;:::-;3714:1283:0;19258:13:39;;19382:83;19438:8;;10618:3;10725:17;;;;:::i;:::-;;10844:21;;;;10840:455;;11532:211;;;;;;:::i;:::-;11825:79;;;35934:4;11825:79;;;;12007:14;;;12003:272;;12357:26;;3714:1283:0;12357:26:39;;;;;:::i;:::-;3714:1283:0;;12706:24:39;;;:34;;;;3714:1283:0;12843:32:39;12997:30;12843:32;;;3714:1283:0;12997:30:39;;;3714:1283:0;;13240:13:39;;;13255:19;;;;;;15387:24;;;;14168:21;15387:24;;:38;;3714:1283:0;;;15688:13:39;;15703:27;;;;;;10618:3;;;;;;;35934:4;10618:3;10586:13;3714:1283:0;10586:13:39;;15732:3;15886:16;;35934:4;15886:16;;;:::i;:::-;;12706:34;14021:19;16149:27;;3714:1283:0;;17249:284:39;3714:1283:0;;16039:159:39;3714:1283:0;;16039:159:39;;;:::i;:::-;14168:21;16329:29;;3714:1283:0;;;;;;;16329:84:39;;16300:646;16386:27;;;3714:1283:0;;;;;;;;;;;17249:284:39;:::i;:::-;3714:1283:0;;17659:760:39;;;;3714:1283:0;15688:13:39;;13276:3;13380:8;;;;:::i;:::-;;13411:383;;;;;14021:19;;;;;;;3714:1283:0;;;13911:151:39;;;;;:::i;:::-;14168:21;;;;3714:1283:0;;;;;;14168:44:39;;14164:539;14193:19;;14958:247;14193:19;35934:4;14193:19;;;3714:1283:0;;;;;;;;;14958:247:39;:::i;:::-;3714:1283:0;;;13240:13:39;;;;12003:272;12126:23;;;;35934:4;12126:23;;;;;3714:1283:0;12248:8:39;;10840:455;10970:23;35934:4;10970:23;;;;3714:1283:0;11087:87:39;;;;;11268:8;;3714:1283:0;;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;:::o;:::-;;;;;;;;;:::o;:::-;;;:::i;1612:2272:25:-;;;1907:24;;;1903:1881;;3861:16;;;1612:2272;:::o;1903:1881::-;3714:1283:0;;;2738:23:25;2737:65;3714:1283:0;2782:19:25;3714:1283:0;;2444:15:25;;3714:1283:0;;;;;2738:23:25;;:::i;:::-;2782:19;;:::i;:::-;2737:65;;:::i;:::-;2899:805;;;;;;;3760:13;:::o;1612:2272::-;;;1907:24;;;1903:1881;;3861:16;;;1612:2272;:::o;1903:1881::-;3714:1283:0;2782:19:25;2737:65;3714:1283:0;2738:23:25;3714:1283:0;9674:754:39;3714:1283:0;;;2444:15:25;;3714:1283:0;;;;;2738:23:25;;:::i;2737:65::-;2899:805;;;;;;;;;;3760:13;:::o;4692:1158::-;;;;4927:24;;;4923:67;;5127:356;;;;;;5601:17;;;:::i;:::-;5710:134;4692:1158;:::o;5127:356::-;;;;;;;4923:67;4967:12;;;;:::o;3714:1283:0:-;;-1:-1:-1;3714:1283:0;;;:::o;:::-;;;;;:::i;:::-;;;;:::i;1536:7446:34:-;3714:1283:0;;;;2143:13:34;2155:1;2158:26;;;;;;7223:13;;;2155:1;7238:23;;;;;;1536:7446;;;:::o;7263:3::-;7371:17;;;;:::i;:::-;;7483:28;3714:1283:0;2802:36:34;7483:23;;3714:1283:0;;;;;;;;;;7483:28:34;;7479:83;;7701:24;7860:29;;;;;3714:1283:0;7990:13:34;2155:1;8005:14;;;;;;3211:22;;;;8499:21;;;;;;3714:1283:0;8613:13:34;2155:1;8628:14;;;;;;7263:3;;;;3714:1283:0;7263:3:34;7223:13;3714:1283:0;7223:13:34;;8644:3;8776:54;8796:33;:24;:21;;;:24;:::i;:::-;;:33;:::i;:::-;9689:64;-1:-1:-1;9481:278:34;;8776:54;8747:187;;3714:1283:0;;8613:13:34;;8747:187;8886:25;3714:1283:0;;8886:25:34;;;;8021:3;8153:116;8202:41;:32;:29;;;:32;:::i;8153:116::-;8124:257;;3714:1283:0;;7990:13:34;;8124:257;8325:33;3211:22;3714:1283:0;8325:33:34;;;;7479:83;7535:8;3714:1283:0;7535:8:34;;;2186:3;2325:20;;;;:::i;:::-;;3714:1283:0;;2592:33:34;;;;;2588:120;;2802:36;:26;:41;:36;:26;;;;;:::i;:::-;;:36;3714:1283:0;;;;;2802:41:34;;2798:96;;3033:26;;;;:::i;:::-;;:37;3211:22;;;;;;3714:1283:0;3316:17:34;3473:21;;3714:1283:0;;;;:::i;:::-;;;;:::i;:::-;3473:35:34;;3602:21;;;3714:1283:0;;3718:30:34;;;3714:125;;3963:21;;;;:::i;:::-;;3714:1283:0;9689:64:34;3714:1283:0;;;;;;:::i;:::-;4088:29:34;4162:30;4607:32;4162:30;;;3714:1283:0;4415:171:34;3714:1283:0;;4415:171:34;;;;4607:32;;:::i;:::-;4775:52;;;3714:1283:0;;;3469:3024:34;9689:64;6591:30;6587:111;;6794:34;;3714:1283:0;6794:34:34;;;6790:351;;3469:3024;2186:3;;2143:13;3714:1283:0;2143:13:34;;6790:351;7070:30;6971:27;7070:30;6971:27;;;3714:1283:0;7070:30:34;;;;;:::i;:::-;6790:351;;;;6587:111;6652:27;3714:1283:0;;6652:27:34;;;;3714:125;3783:33;3714:1283:0;;3783:33:34;;;;3469:3024;5022:29;;;;;;;3714:1283:0;;5168:38:34;;;5164:141;;9689:64;5477:29;;;;:::i;:::-;;3714:1283:0;;;;;;;:::i;:::-;5632:37:34;5740:38;6215:40;5740:38;;;3714:1283:0;6023:171:34;3714:1283:0;;6023:171:34;;;;6215:40;;:::i;:::-;6425:27;;3714:1283:0;;;3469:3024:34;;5164:141;5241:41;3714:1283:0;;5241:41:34;;;;2798:96;2867:8;;;3714:1283:0;2867:8:34;;;2588:120;2656:33;3211:22;3714:1283:0;2656:33:34;;;;10093:2127;;;;-1:-1:-1;10399:1680:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12154:60;;10093:2127::o;12154:60::-;12189:14;10399:1680;3714:1283:0;12189:14:34;;;;10399:1680;;;;;;;;;;;;;;;;;;;;;;;;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;3714:1283:0;;;;:::i;:::-;;;-1:-1:-1;3714:1283:0;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::o;6751:2174:36:-;;;;3714:1283:0;;:::i;:::-;;;;7302:33:36;7298:125;;7896:9;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;7617:24:36;:14;;:24;3714:1283:0;7896:9:36;:::i;:::-;8763:14;;:21;;;3714:1283:0;8763:26:36;8759:150;;6751:2174;:::o;8759:150::-;7617:24;6453:5:39;8809:17:36;;;;;3714:1283:0;8857:24:36;3714:1283:0;6751:2174:36:o;7298:125::-;3714:1283:0;;;7362:46:36;;;6453:5:39;7362:46:36;;;3714:1283:0;7362:46:36;6751:2174;;;;3714:1283:0;;:::i;:::-;;;;7302:33:36;7298:125;;8293:9;;;;;:::i;:::-;8406:17;;;8426:10;;3714:1283:0;;8533:20:36;;;3714:1283:0;8763:14:36;;:21;;;;3714:1283:0;8763:26:36;8759:150;;6751:2174;;:::o;8759:150::-;3714:1283:0;;;8857:24:36;3714:1283:0;;8857:24:36;3714:1283:0;6751:2174:36:o;7298:125::-;3714:1283:0;;;7362:46:36;;;26311:18:39;7362:46:36;;;3714:1283:0;7362:46:36;9759:10618;;;;;;;;9545:10838;;;;9759:10618;;;;;;;;;;;;;;;9545:10838;9759:10618;;;;;;;;;;;;;;;;;;;;;;;;;;;9545:10838;9759:10618;;;;;;;;;;;;;;9545:10838;9759:10618;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9545:10838;:::o;9759:10618::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;9759:10618:36;-1:-1:-1;9759:10618:36;;;;;:::i;:::-;;;;;;:::i;:::-;;;21135:10619;;;21438:10310;;;;;;;;;;;;;;;;21135:10619;21438:10310;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21135:10619;21438:10310;;;;;;;;;;;;;;;21135:10619;21438:10310;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21135:10619;:::o;21438:10310::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;21438:10310:36;-1:-1:-1;21438:10310:36;;;;;:::i;:::-;;;;;;:::i;:::-;;;28560:4511:39;;3714:1283:0;;28967:23:39;;;:::i;:::-;29182:13;29194:1;29197:15;;;;;;30867:9;;;;31264:30;;;:::i;:::-;3714:1283:0;;;31479:13:39;29194:1;31494:19;;;;;;32701:11;;;;;;:::i;:::-;32805:19;32801:99;;31474:1121;32801:99;;2346:1:30;1324:31:42;3714:1283:0;1233:129:42;32801:99:39;32874:14;32861:10;;32874:14;:::i;:::-;32801:99;;;31479:13;31632;;;;:::i;:::-;;31686:14;;3714:1283:0;;;;;;:::i;:::-;;;;:::i;:::-;31796:32:39;31792:434;;31479:13;32350:17;3714:1283:0;32350:17:39;;;32385:20;3714:1283:0;29443:23:39;32423:11;32350:17;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;32385:20:39;;3714:1283:0;32423:11:39;;:::i;:::-;3714:1283:0;31479:13:39;;31792:434;31929:11;30015:38;31929:11;;;;3714:1283:0;;;31929:28:39;31925:109;;3714:1283:0;;;;31792:434:39;;3714:1283:0;31792:434:39;;29214:3;29325:17;;;;:::i;:::-;;29443:28;3714:1283:0;29443:23:39;;;3714:1283:0;;;;;29443:28:39;;29439:323;;29828:25;;;;;:::i;:::-;29849:4;3714:1283:0;;;29828:25:39;30015:38;:24;;;:38;;3714:1283:0;;;30323:13:39;29194:1;30338:27;;;;;;29214:3;;;;3714:1283:0;29214:3:39;29182:13;3714:1283:0;29182:13:39;;30367:3;30492:16;;;;;:::i;:::-;;:28;3714:1283:0;30614:16:39;30610:116;;30367:3;3714:1283:0;;30323:13:39;;30610:116;3714:1283:0;;30665:38:39;;;;;;3714:1283:0;;;;;;;;;;;;;;;;4573:26:27;29439:323:39;29735:8;3714:1283:0;29735:8:39;;;1885:1797:35;;;;3714:1283:0;;;;;:::i;:::-;;;;:::i;:::-;2116:32:35;;2256:10;;;2248:19;3714:1283:0;2256:10:35;;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;2248:19:35;-1:-1:-1;;;;;2270:15:35;;;3714:1283:0;;;2248:37:35;2243:112;;2442:14;2458:11;3714:1283:0;2442:14:35;2458:11;2442:14;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;2458:11:35;;3714:1283:0;2458:11:35;;:::i;2112:1564::-;3714:1283:0;;;2508:14:35;3714:1283:0;;;;;:::i;:::-;;;;:::i;:::-;2491:31:35;2508:14;;2596:15;;;3714:1283:0;2592:88:35;;2765:196;2797:10;3714:1283:0;2797:10:35;;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;2847:14:35;-1:-1:-1;;;;;2879:11:35;3714:1283:0;2847:14:35;;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;2879:11:35;;3714:1283:0;;;2765:196:35;;:::i;2487:1189::-;3714:1283:0;2999:15:35;3714:1283:0;;;;;:::i;:::-;;;;:::i;:::-;2982:32:35;2999:15;;3134:10;3714:1283:0;3134:10:35;3101:230;3134:10;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;3184:14:35;;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;3216:15:35;-1:-1:-1;;;;;3249:11:35;3216:15;;;3714:1283:0;3249:11:35;;3714:1283:0;;;3101:230:35;;:::i;2978:698::-;3468:10;3714:1283:0;3468:10:35;3434:231;3468:10;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;3518:14:35;;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;3550:15:35;-1:-1:-1;;;;;3583:11:35;3550:15;;;3714:1283:0;3583:11:35;;3714:1283:0;;;3434:231:35;;:::i;35510:741:39:-;;36035:10;35510:741;;;;;3714:1283:0;;36035:10:39;;;:::i;:::-;37575:34;;;:::i;:::-;37775:35;36043:1;37876:13;;37871:940;37891:21;;;;;;38895:28;;;;39283:63;38895:28;;;;;38891:320;;37871:940;39283:63;;:::i;:::-;;35510:741;:::o;38891:320::-;39011:186;;;;;38891:320;;;37914:3;38030:15;;;;;;;;:::i;:::-;38169:177;38244:27;;;;:::i;:::-;38293:35;;;;;;;;;:::i;:::-;38169:177;;;;;:::i;:::-;38446:14;-1:-1:-1;;;;;38446:45:39;3714:1283:0;38446:24:39;;:14;;:24;-1:-1:-1;;;;;3714:1283:0;;;;;38446:24:39;38474:17;;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;38446:45:39;3714:1283:0;;38446:45:39;38293:35;;3714:1283:0;35934:4:39;3714:1283:0;;;38442:355:39;;3714:1283:0;37876:13:39;;;;38442:355;3714:1283:0;38727:51:39;3714:1283:0;;35934:4:39;3714:1283:0;;;38727:51:39;;;;;:::i;:::-;;;;:::i;:::-;;38442:355;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;;;;;;;:::i;1732:3815:36:-;;;;;3714:1283:0;;:::i;:::-;2090:27:36;;;:66;;;;1732:3815;2073:170;;3714:1283:0;;:::i;:::-;2423:155:36;3714:1283:0;;;;;;:::i;:::-;2423:155:36;;:::i;:::-;2699:27;3714:1283:0;2924:126:36;3714:1283:0;;;;;;:::i;:::-;2924:126:36;;:::i;:::-;3157:23;:14;;:23;:::i;:::-;3714:1283:0;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;3157:53:36;;;:116;;;1732:3815;3157:189;;;;1732:3815;3140:303;;5324:54;3526:24;3714:1283:0;3526:24:36;5351:27;3526:24;;;;;;;3714:1283:0;;;3553:14:36;;;:21;3714:1283:0;-1:-1:-1;3522:1750:36;3526:24;;;3734:26;;;3670:104;3734:26;;;4042:136;3734:26;;:::i;:::-;3670:104;:::i;:::-;4152:25;3714:1283:0;4042:42:36;3714:1283:0;;;;4262:14:36;;:21;3714:1283:0;;;;;;4042:42:36;;:::i;:::-;;:74;:109;;4152:25;;3714:1283:0;4042:136:36;;:::i;:::-;;:169;3714:1283:0;4416:14:36;;:21;3714:1283:0;;;3522:1750:36;5351:27;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;5351:27:36;5324:14;;:24;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;3522:1750:36;4586:18;;;;;4874:128;4586:18;;4874:42;4586:18;4540:64;4586:18;4976:25;4586:18;4874:101;4586:18;;:::i;4540:64::-;5039:14;;:21;3714:1283:0;;;;;;;;4874:42:36;:::i;:128::-;;:161;3714:1283:0;;5213:14:36;;;:21;3714:1283:0;3522:1750:36;;3140:303;3378:54;3714:1283:0;;3378:54:36;;;;3157:189;3289:14;:25;:14;;:25;3714:1283:0;3289:25:36;3318:28;;3714:1283:0;3289:57:36;;3157:189;;:116;-1:-1:-1;3226:14:36;;:20;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;-1:-1:-1;;;;;3226:47:36;3714:1283:0;3226:20:36;3250:23;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;3226:47:36;3714:1283:0;;3226:47:36;;3157:116;;2073:170;2188:44;3714:1283:0;;2188:44:36;;;;2090:66;2121:35;;;2090:66;;3714:1283:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;:::i;:::-;;;3017:2064:40;;;;918:217:42;;:::i;:::-;2377:1:30;1101:27:42;3714:1283:0;3671:165:40;;;;:::i;:::-;3714:1283:0;;;;;;;;;;:::i;:::-;3784:4:40;3714:1283:0;;1101:27:42;3714:1283:0;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4370:17:40;3714:1283:0;;;4224:17:40;4940:29;3714:1283:0;4649:9:40;3714:1283:0;;;;;;;;;;;4061:33:40;3714:1283:0;;;;;;4224:17:40;;:::i;:::-;4370;:::i;:::-;;:28;4649:9;;;:::i;:::-;3714:1283:0;;-1:-1:-1;;;;;3714:1283:0;;;4940:29:40;;2346:1:30;1324:31:42;3714:1283:0;1233:129:42;4940:29:40;3784:4;3017:2064;:::o;3714:1283:0:-;;;:::i;:::-;;;;;;:::i;:::-;;;6034:9639:40;;;;;;6367:25;;;;;3714:1283:0;6420:23:40;;;;3714:1283:0;6831:30:40;;;:::i;:::-;8960:21;;;;;;;;;3714:1283:0;9137:13:40;-1:-1:-1;9152:19:40;;;;;;11103:9;;;;;9810:21;;12849:46;;;;;;3714:1283:0;13081:13:40;-1:-1:-1;13096:27:40;;;;;;15451:11;;;;;;;;;;;;;;:::i;:::-;15532:19;15528:139;;6034:9639;:::o;15528:139::-;15641:14;15218:10;;15641:14;:::i;13125:3::-;13267:32;:29;;;:32;:::i;:::-;;13470:29;;;3714:1283:0;;13434:282:40;13521:27;;;;9857:19;13521:27;;3714:1283:0;;;13434:282:40;;:::i;:::-;13814:709;;;;;;;;;3714:1283:0;;;;;:::i;:::-;;;;:::i;:::-;14625:45:40;14621:411;;13125:3;15218:10;;3714:1283:0;15218:10:40;;3714:1283:0;15218:10:40;;3714:1283:0;;:::i;:::-;;13081:13:40;;14621:411;14779:23;;;;;;;14775:112;;3714:1283:0;;;;;;;14621:411:40;;14775:112;14837:27;3714:1283:0;;14837:27:40;;;;9173:3;9269:24;:21;;;:24;:::i;:::-;;3714:1283:0;;;;;:::i;:::-;;;;:::i;:::-;9442:37:40;9438:115;;9810:21;3714:1283:0;9810:21:40;;;;;;9770:299;3714:1283:0;9810:21:40;;;;;;3714:1283:0;;;9857:19:40;;;;3714:1283:0;;;9770:299:40;;:::i;:::-;10171:507;;;3714:1283:0;10902:26:40;3714:1283:0;;;-1:-1:-1;;;;;3714:1283:0;;;;;9137:13:40;;9438:115;9510:24;3714:1283:0;;9510:24:40;;;;6645:866:25;;;;6990:24;;;;;7084:47;;;;;;:::i;6986:519::-;7289:49;;;7251:243;7289:49;;7356:47;7289:49;;;;:::i;:::-;7356:47;;:::i;:::-;7251:243;;:::i;6645:866::-;;;;6990:24;;;;;7084:47;;;;;;:::i;6986:519::-;7289:49;;;7251:243;7289:49;;7356:47;7289:49;;;;:::i;7356:47::-;7251:243;;:::i;3714:1283:0:-;;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16317:855:40;;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17005:160:40;3714:1283:0;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;:::i;:::-;17005:160:40;;;16317:855::o;3714:1283:0:-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16317:855:40;;;;;;3714:1283:0;;;;;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;;;;;;;;;;;17005:160:40;3714:1283:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17448:380:40:-;3714:1283:0;;:::i;:::-;;;17780:15:40;17720:16;;;;:::i;:::-;17780:15;;;;;;:::i;:::-;3714:1283:0;;;;;;;:::i;:::-;;;;:::i;:::-;;;17750:1:40;17780:15;17693:128;;3714:1283:0;17750:1:40;3714:1283:0;17693:128:40;;3714:1283:0;;;;:::i;:::-;17693:128:40;;;3714:1283:0;;;;;;:::i;:::-;-1:-1:-1;14394:4:30;;17693:128:40;;;3714:1283:0;17448:380:40;:::o;18116:859::-;3714:1283:0;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3714:1283:0;;;:::i;:::-;;-1:-1:-1;3714:1283:0;;;;;;18674:13:40;;-1:-1:-1;18689:15:40;;;;;;18947:21;;;18116:859;:::o;18706:3::-;18854:9;18830:34;18854:9;3714:1283:0;18854:9:40;;;;:::i;:::-;18830:34;:::i;:::-;18810:54;;;;:::i;:::-;;;;;;:::i;:::-;;3714:1283:0;18674:13:40;;3714:1283:0;;;;;:::i;:::-;;;;;;;;;;1544:985:41;;;;3714:1283:0;-1:-1:-1;3714:1283:0;1794:12:41;3714:1283:0;;;-1:-1:-1;3714:1283:0;;;;;;;;;4258:301:46;;3714:1283:0;;;;;4754:754:46;;3714:1283:0;;;;;;2200:24:41;2196:102;;1544:985;3714:1283:0;;;;1544:985:41:o;2196:102::-;2277:9;;;:::i;:::-;2196:102;;;;;4754:754:46;3714:1283:0;;;;5005:31:46;;;;;;;3714:1283:0;5005:31:46;4258:301;3714:1283:0;;;;4420:27:46;;;;;;;3714:1283:0;4420:27:46;9095:1911:41;;;;;;;;:::o;:::-;;;;;;;4344:7531;;;4809:24;;4972:25;4942:143;4943:142;4972:25;;;3714:1283:0;5015:23:41;;;3714:1283:0;4943:142:41;;:::i;4942:143::-;4925:302;;5335:32;3714:1283:0;5343:23:41;;;3714:1283:0;;;;;5335:32:41;5407:25;5399:34;3714:1283:0;5407:25:41;;;3714:1283:0;;;;;5399:34:41;5521:23;;;;:41;;;;4344:7531;5517:92;;5717:23;;;:93;;;4344:7531;5700:262;;6492:20;6065:58;;;:::i;:::-;6378:24;;;;3714:1283:0;6416:25:41;;;3714:1283:0;;;;:::i;:::-;;;-1:-1:-1;;;;;3714:1283:0;6492:20:41;;3714:1283:0;5343:23:41;6492:20;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;6492:20:41;;;:::i;:::-;6634:23;;3714:1283:0;;16929:12:41;3714:1283:0;;;;;;;6634:23:41;6744:189;6743:190;6744:189;;;;:::i;6743:190::-;6726:348;;3714:1283:0;;;;;;;7169:24:41;7165:194;;4344:7531;3714:1283:0;;;;;;;;;;;;;7679:22:41;;;;7675:4061;7679:22;;;3784:4:40;7802:16:41;;3784:4:40;;7917:29:41;;;7798:668;;8565:27;;;;;:::i;:::-;:41;8561:329;;7798:668;8972:28;;;;:::i;:::-;;9095:1911;;;;;;;;;7798:668;11205:30;;11302:48;11205:30;;;;11368:46;11205:30;17231:4;3714:1283:0;;;;;;;;11205:30:41;3714:1283:0;;;;;;;;;;;;;;11302:48:41;3714:1283:0;;;;;;;;;;;;;;;11368:46:41;11826:42;;4344:7531;:::o;9095:1911::-;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9095:1911:41;;;;;-1:-1:-1;9095:1911:41;8561:329;3714:1283:0;;;;-1:-1:-1;8561:329:41;;7798:668;8110:32;;;;;;8106:360;;7798:668;;;;8106:360;8371:30;8242;;;8419:32;8242:30;;;;;:::i;:::-;8371;;:::i;:::-;8419:32;;:::i;:::-;8106:360;;;;7675:4061;11534:30;;;;;11679:46;11534:30;;;17231:4;3714:1283:0;;;;;;;;11534:30:41;3714:1283:0;;;;;;;;;;;;;;11623:42:41;3714:1283:0;7165:194:41;3714:1283:0;;7311:23:41;3714:1283:0;;-1:-1:-1;;;;;3714:1283:0;;;;7311:23:41;;;;;:::i;:::-;7165:194;;;;;6726:348;7039:24;;;;;;;;-1:-1:-1;7039:24:41;-1:-1:-1;7039:24:41;:::o;5700:262::-;5919:32;5407:25;3714:1283:0;5919:32:41;;;;5717:93;5784:25;3784:4:40;5784:25:41;;;3714:1283:0;;;;:::i;:::-;20387:133:41;;5717:93;;5517:92;5585:13;5407:25;3714:1283:0;5585:13:41;;;;5521:41;5548:14;;;5521:41;;4925:302;-1:-1:-1;;;;;;;;;5191:25:41:o;4344:7531::-;;;;;4809:24;;4942:143;4943:142;4972:25;;;3714:1283:0;5015:23:41;;;3714:1283:0;4943:142:41;;:::i;4942:143::-;4925:302;;5335:32;3714:1283:0;5343:23:41;;;3714:1283:0;;;;;5335:32:41;5399:34;3714:1283:0;5407:25:41;;;3714:1283:0;;;;;5399:34:41;5521:23;;;;:41;;;;4344:7531;5517:92;;5717:23;;;:93;;;4344:7531;5700:262;;6492:20;6065:58;;;;:::i;:::-;6378:24;;;;3714:1283:0;6416:25:41;;;3714:1283:0;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;3714:1283:0;;;;6492:20:41;3714:1283:0;5343:23:41;6492:20;;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;;;6492:20:41;;;:::i;:::-;6634:23;;3714:1283:0;;16929:12:41;3714:1283:0;;;;;;;6634:23:41;6744:189;6743:190;6744:189;;;;:::i;6743:190::-;6726:348;;3714:1283:0;;;;;;;7169:24:41;7165:194;;4344:7531;3714:1283:0;;;;;;;;;;;;;7679:22:41;;;;7675:4061;7679:22;;;7817:1;7802:16;;7817:1;;7917:29;;;7798:668;;8565:27;;;;;:::i;:::-;:41;8561:329;;7798:668;8972:28;;;;:::i;:::-;;9095:1911;;;;;;;;;11205:30;;11302:48;11205:30;;;;11368:46;11205:30;17231:4;3714:1283:0;;;;;;;;9095:1911:41;;;;;;;;;;;;;:::i;8561:329::-;3714:1283:0;;;;-1:-1:-1;8561:329:41;;7798:668;8110:32;;;;;;8106:360;;7798:668;;;;8106:360;8371:30;8242;;;8419:32;8242:30;;;;;:::i;8419:32::-;8106:360;;;;7165:194;7311:23;3714:1283:0;7311:23:41;3714:1283:0;;-1:-1:-1;;;;;3714:1283:0;;;7311:23:41;7165:194;;;;;5717:93;5784:25;20387:133;5784:25;;;3714:1283:0;;;;:::i;:::-;20387:133:41;;5717:93;;5521:41;5548:14;;;5521:41;;4925:302;5191:25;;;;;6453:5:39;5191:25:41;6453:5:39;5191:25:41;6453:5:39;5191:25:41;:::o;4344:7531::-;;;;;4809:24;;4942:143;4943:142;4972:25;;;3714:1283:0;5015:23:41;;;3714:1283:0;4943:142:41;;:::i;4942:143::-;4925:302;;5335:32;3714:1283:0;5343:23:41;;;3714:1283:0;;;;;5335:32:41;5399:34;3714:1283:0;5407:25:41;;;3714:1283:0;;;;;5399:34:41;5521:23;;;;:41;;;;4344:7531;5517:92;;5717:23;;;:93;;;4344:7531;5700:262;;6492:20;6065:58;;;;:::i;6492:20::-;6634:23;;3714:1283:0;;16929:12:41;3714:1283:0;;;;;;;6634:23:41;6744:189;6743:190;6744:189;;;;:::i;5717:93::-;5784:25;35934:4:39;5784:25:41;;;3714:1283:0;;;;:::i;:::-;20387:133:41;;5717:93;;5521:41;5548:14;;;5521:41;;1597:648:26;2121:117;1597:648;1955:47;1905:29;;;;3714:1283:0;1955:47:26;;;3714:1283:0;1955:47:26;;:::i;:::-;3714:1283:0;;-1:-1:-1;;;;;3714:1283:0;-1:-1:-1;3714:1283:0;;;1842:9:33;3714:1283:0;;;;;;2121:117:26;;:::i;3714:1283:0:-;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;918:217:42;;;:::i;:::-;2377:1:30;1101:27:42;3714:1283:0;918:217:42:o;1512:215::-;2346:1:30;1637:16:42;3714:1283:0;1637:32:42;1633:88;;1512:215::o;1633:88::-;1692:18;3714:1283:0;;1692:18:42;;;;11564:4914:44;;;11789:4683;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11564:4914::o;11789:4683::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17126:5620;;;;17377:5363;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17126:5620::o;17377:5363::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1339:627:46;1588:15;-1:-1:-1;1576:57:46;;;;;1339:627;1572:314;;;13773:4:27;1339:627:46;:::o;1572:314::-;1768:13;3714:1283:0;;1768:13:46;;;;1576:57;1588:15;;;-1:-1:-1;1607:26:46;1576:57;;;1339:627;1588:15;-1:-1:-1;1576:57:46;;;;;1339:627;1572:314;;;1955:4;1339:627;:::o;1572:314::-;-1:-1:-1;1863:12:46;:::o;1576:57::-;1588:15;;;-1:-1:-1;1607:26:46;1576:57;;;2641:569;;;2865:10;-1:-1:-1;;;;;3714:1283:0;;2854:21:46;2850:58;;3035:18;;:::i;:::-;-1:-1:-1;;13253:843:37;;;;;;;;;;;;;;;1406:9170:43;;;;;;;;-1:-1:-1;;1406:9170:43;;;;;;;;;;;;;;;;;2641:569:46;-1:-1:-1;1406:9170:43;;;;;;;;;;;2641:569:46;10623:8:43;;;;;;;;;10619:380;;2641:569:46;:::o;10619:380:43:-;10840:149;10619:380;;;:::i;:::-;10840:149;;;;1406:9170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2850:58:46;2891:7;;;:::o;3994:1596::-;;3714:1283:0;;;;;;4258:301:46;;3714:1283:0;;;;;4758:25:46;;4754:754;;3994:1596;5571:12;;;17231:4:41;3994:1596:46;:::o;4754:754::-;3714:1283:0;;-1:-1:-1;5147:47:46;5143:355;;4754:754;;;;5143:355;3714:1283:0;;;;5341:29:46;;;;;;;3714:1283:0;5341:29:46;4258:301;3714:1283:0;;;;4420:27:46;;;;;;;3714:1283:0;4420:27:46;3994:1596;;6453:5:39;3714:1283:0;;;;;;;4258:301:46;;3714:1283:0;;;;;4758:25:46;;4754:754;;3994:1596;5571:12;;;;5579:4;3994:1596;:::o;4754:754::-;3714:1283:0;;-1:-1:-1;5147:47:46;5143:355;;4754:754;;;;5143:355;5291:98;;5471:12;6453:5:39;5471:12:46;:::o;4258:301::-;4374:88;;;4536:12;6453:5:39;4536:12:46;:::o;1279:544:47:-;;;;1601:1;1279:544;3714:1283:0;;;;;;1279:544:47;1580:22;:56;;;1279:544;1580:93;;;1279:544;1563:254;;1279:544;;;;;:::o;1563:254::-;1797:8;;;:::i;:::-;1563:254;;;;;;1580:93;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;1652:10:47;:21;;1580:93;;:56;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;1618:10:47;:18;;1580:56;;3714:1283:0;;;:::i;:::-;;;1829:621:47;-1:-1:-1;1829:621:47;;;;;2433:9;1829:621;3714:1283:0;;2095:195:47;-1:-1:-1;;;;;2095:195:47;;;;2135:35;2095:195;;;;;;3714:1283:0;2215:10:47;3714:1283:0;;;;;;;;;;;;;;2095:195:47;;;;;:::i;:::-;831:265:38;;;;2433:9:47;:::i;3714:1283:0:-;;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3714:1283:0;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3714:1283:0;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;4159:1675:47:-;;;;;;;4624:1;4159:1675;3714:1283:0;;;:::i;:::-;4603:22:47;:56;;;4159:1675;4603:93;;;4159:1675;4586:1242;;4159:1675;;;;;;;:::o;4586:1242::-;4811:23;;;;3714:1283:0;4811:35:47;:84;;;4586:1242;4790:1028;;;5031:8;;;;;:::i;:::-;4586:1242;;;;;;;;4790:1028;-1:-1:-1;3714:1283:0;;;;;;5312:318:47;;5793:9;3714:1283:0;;;5312:318:47;;;;;;;5360:53;5312:318;;5474:10;5312:318;;;;;:::i;:::-;;-1:-1:-1;;5312:318:47;;;;;;:::i;5793:9::-;4790:1028;;4811:84;3714:1283:0;;;4866:29:47;4811:84;;4603:93;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;4675:10:47;:21;;4603:93;;:56;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;4641:10:47;:18;;4603:56;;4159:1675;;;;;;;4624:1;4159:1675;3714:1283:0;;;:::i;:::-;4603:22:47;:56;;;4159:1675;4603:93;;;4159:1675;4586:1242;;4159:1675;;;;;;;;:::o;4586:1242::-;4811:23;;;;3714:1283:0;4811:35:47;:84;;;4586:1242;4790:1028;;;5031:8;;;;;;:::i;:::-;4586:1242;;;;;;;;;4790:1028;-1:-1:-1;3714:1283:0;;;;;;5312:318:47;5793:9;3714:1283:0;5312:318:47;3714:1283:0;;5312:318:47;;;;;;;5360:53;5312:318;;5474:10;5312:318;;;;;:::i;5793:9::-;4790:1028;;4811:84;3714:1283:0;;;4866:29:47;4811:84;;4603:93;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;4675:10:47;:21;;4603:93;;:56;3714:1283:0;-1:-1:-1;;;;;3714:1283:0;;4641:10:47;:18;;4603:56;;6303:633;6465:8;6461:256;;6827:35;3714:1283:0;-1:-1:-1;4192:394:38;;;;;6303:633:47;3714:1283:0;4684:18:38;6804:126:47;;6303:633;:::o;6804:126::-;3714:1283:0;;;;6886:33:47;;;;;;;3714:1283:0;6886:33:47;4192:394:38;;;;;;;;6461:256:47;3714:1283:0;6461:256:47;;;:::i;:::-;3714:1283:0;;6673:33:47;;;;;;;3714:1283:0;6673:33:47","linkReferences":{},"immutableReferences":{"3871":[{"start":10284,"length":32}],"3873":[{"start":10322,"length":32}],"3875":[{"start":10249,"length":32}],"3877":[{"start":5976,"length":32},{"start":9879,"length":32}],"3879":[{"start":5668,"length":32},{"start":9958,"length":32}],"3881":[{"start":6132,"length":32},{"start":10036,"length":32}],"3883":[{"start":10167,"length":32}],"3885":[{"start":10205,"length":32}],"3888":[{"start":4099,"length":32},{"start":8948,"length":32},{"start":9322,"length":32}],"3890":[{"start":9010,"length":32},{"start":9384,"length":32}]}},"methodIdentifiers":{"cancel((address,address,(uint8,address,uint256,uint256,uint256)[],(uint8,address,uint256,uint256,uint256,address)[],uint8,uint256,uint256,bytes32,uint256,bytes32,uint256)[])":"fd9f1e10","fulfillAdvancedOrder(((address,address,(uint8,address,uint256,uint256,uint256)[],(uint8,address,uint256,uint256,uint256,address)[],uint8,uint256,uint256,bytes32,uint256,bytes32,uint256),uint120,uint120,bytes,bytes),(uint256,uint8,uint256,uint256,bytes32[])[],bytes32,address)":"e7acab24","fulfillAvailableAdvancedOrders(((address,address,(uint8,address,uint256,uint256,uint256)[],(uint8,address,uint256,uint256,uint256,address)[],uint8,uint256,uint256,bytes32,uint256,bytes32,uint256),uint120,uint120,bytes,bytes)[],(uint256,uint8,uint256,uint256,bytes32[])[],(uint256,uint256)[][],(uint256,uint256)[][],bytes32,address,uint256)":"87201b41","fulfillAvailableOrders(((address,address,(uint8,address,uint256,uint256,uint256)[],(uint8,address,uint256,uint256,uint256,address)[],uint8,uint256,uint256,bytes32,uint256,bytes32,uint256),bytes)[],(uint256,uint256)[][],(uint256,uint256)[][],bytes32,uint256)":"ed98a574","fulfillBasicOrder((address,uint256,uint256,address,address,address,uint256,uint256,uint8,uint256,uint256,bytes32,uint256,bytes32,bytes32,uint256,(uint256,address)[],bytes))":"fb0f3ee1","fulfillOrder(((address,address,(uint8,address,uint256,uint256,uint256)[],(uint8,address,uint256,uint256,uint256,address)[],uint8,uint256,uint256,bytes32,uint256,bytes32,uint256),bytes),bytes32)":"b3a34c4c","getCounter(address)":"f07ec373","getOrderHash((address,address,(uint8,address,uint256,uint256,uint256)[],(uint8,address,uint256,uint256,uint256,address)[],uint8,uint256,uint256,bytes32,uint256,bytes32,uint256))":"79df72bd","getOrderStatus(bytes32)":"46423aa7","incrementCounter()":"5b34b966","information()":"f47b7740","matchAdvancedOrders(((address,address,(uint8,address,uint256,uint256,uint256)[],(uint8,address,uint256,uint256,uint256,address)[],uint8,uint256,uint256,bytes32,uint256,bytes32,uint256),uint120,uint120,bytes,bytes)[],(uint256,uint8,uint256,uint256,bytes32[])[],((uint256,uint256)[],(uint256,uint256)[])[])":"55944a42","matchOrders(((address,address,(uint8,address,uint256,uint256,uint256)[],(uint8,address,uint256,uint256,uint256,address)[],uint8,uint256,uint256,bytes32,uint256,bytes32,uint256),bytes)[],((uint256,uint256)[],(uint256,uint256)[])[])":"a8174404","name()":"06fdde03","validate(((address,address,(uint8,address,uint256,uint256,uint256)[],(uint8,address,uint256,uint256,uint256,address)[],uint8,uint256,uint256,bytes32,uint256,bytes32,uint256),bytes)[])":"88147732"},"ast":{"absolutePath":"contracts/Seaport.sol","id":37,"exportedSymbols":{"Consideration":[3859],"Seaport":[36]},"nodeType":"SourceUnit","src":"32:4966:0","nodes":[{"id":1,"nodeType":"PragmaDirective","src":"32:25:0","literals":["solidity",">=","0.8",".13"]},{"id":3,"nodeType":"ImportDirective","src":"59:56:0","absolutePath":"contracts/lib/Consideration.sol","file":"./lib/Consideration.sol","nameLocation":"-1:-1:-1","scope":37,"sourceUnit":3860,"symbolAliases":[{"foreign":{"id":2,"name":"Consideration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3859,"src":"68:13:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":36,"nodeType":"ContractDefinition","src":"3714:1283:0","nodes":[{"id":16,"nodeType":"FunctionDefinition","src":"4113:74:0","body":{"id":15,"nodeType":"Block","src":"4185:2:0","statements":[]},"documentation":{"id":7,"nodeType":"StructuredDocumentation","src":"3754:354:0","text":" @notice Derive and set hashes, reference chainId, and associated domain\n separator during deployment.\n @param conduitController A contract that deploys conduits, or proxies\n that may optionally be used to transfer approved\n ERC20/721/1155 tokens."},"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":12,"name":"conduitController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9,"src":"4166:17:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":13,"kind":"baseConstructorSpecifier","modifierName":{"id":11,"name":"Consideration","nodeType":"IdentifierPath","referencedDeclaration":3859,"src":"4152:13:0"},"nodeType":"ModifierInvocation","src":"4152:32:0"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":10,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9,"mutability":"mutable","name":"conduitController","nameLocation":"4133:17:0","nodeType":"VariableDeclaration","scope":16,"src":"4125:25:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8,"name":"address","nodeType":"ElementaryTypeName","src":"4125:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4124:27:0"},"returnParameters":{"id":14,"nodeType":"ParameterList","parameters":[],"src":"4185:0:0"},"scope":36,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":25,"nodeType":"FunctionDefinition","src":"4355:251:0","body":{"id":24,"nodeType":"Block","src":"4419:187:0","statements":[{"AST":{"nodeType":"YulBlock","src":"4482:118:0","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4503:4:0","type":"","value":"0x20"},{"kind":"number","nodeType":"YulLiteral","src":"4509:4:0","type":"","value":"0x20"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4496:6:0"},"nodeType":"YulFunctionCall","src":"4496:18:0"},"nodeType":"YulExpressionStatement","src":"4496:18:0"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4534:4:0","type":"","value":"0x47"},{"kind":"number","nodeType":"YulLiteral","src":"4540:18:0","type":"","value":"0x07536561706f7274"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4527:6:0"},"nodeType":"YulFunctionCall","src":"4527:32:0"},"nodeType":"YulExpressionStatement","src":"4527:32:0"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4579:4:0","type":"","value":"0x20"},{"kind":"number","nodeType":"YulLiteral","src":"4585:4:0","type":"","value":"0x60"}],"functionName":{"name":"return","nodeType":"YulIdentifier","src":"4572:6:0"},"nodeType":"YulFunctionCall","src":"4572:18:0"},"nodeType":"YulExpressionStatement","src":"4572:18:0"}]},"evmVersion":"london","externalReferences":[],"id":23,"nodeType":"InlineAssembly","src":"4473:127:0"}]},"baseFunctions":[3962],"documentation":{"id":17,"nodeType":"StructuredDocumentation","src":"4193:157:0","text":" @dev Internal pure function to retrieve and return the name of this\n contract.\n @return The name of this contract."},"implemented":true,"kind":"function","modifiers":[],"name":"_name","nameLocation":"4364:5:0","overrides":{"id":19,"nodeType":"OverrideSpecifier","overrides":[],"src":"4386:8:0"},"parameters":{"id":18,"nodeType":"ParameterList","parameters":[],"src":"4369:2:0"},"returnParameters":{"id":22,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25,"src":"4404:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":20,"name":"string","nodeType":"ElementaryTypeName","src":"4404:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4403:15:0"},"scope":36,"stateMutability":"pure","virtual":false,"visibility":"internal"},{"id":35,"nodeType":"FunctionDefinition","src":"4848:147:0","body":{"id":34,"nodeType":"Block","src":"4918:77:0","statements":[{"expression":{"hexValue":"536561706f7274","id":32,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4979:9:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_32b5c112df393a49218d7552f96b2eeb829dfb4272f4f24eef510a586b85feef","typeString":"literal_string \"Seaport\""},"value":"Seaport"},"functionReturnParameters":31,"id":33,"nodeType":"Return","src":"4972:16:0"}]},"baseFunctions":[3971],"documentation":{"id":26,"nodeType":"StructuredDocumentation","src":"4612:231:0","text":" @dev Internal pure function to retrieve the name of this contract as a\n string that will be used to derive the name hash in the constructor.\n @return The name of this contract as a string."},"implemented":true,"kind":"function","modifiers":[],"name":"_nameString","nameLocation":"4857:11:0","overrides":{"id":28,"nodeType":"OverrideSpecifier","overrides":[],"src":"4885:8:0"},"parameters":{"id":27,"nodeType":"ParameterList","parameters":[],"src":"4868:2:0"},"returnParameters":{"id":31,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35,"src":"4903:13:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":29,"name":"string","nodeType":"ElementaryTypeName","src":"4903:6:0","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4902:15:0"},"scope":36,"stateMutability":"pure","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":5,"name":"Consideration","nodeType":"IdentifierPath","referencedDeclaration":3859,"src":"3734:13:0"},"id":6,"nodeType":"InheritanceSpecifier","src":"3734:13:0"}],"canonicalName":"Seaport","contractDependencies":[],"contractKind":"contract","documentation":{"id":4,"nodeType":"StructuredDocumentation","src":"117:3596:0","text":" @title Seaport\n @custom:version 1.1\n @author 0age (0age.eth)\n @custom:coauthor d1ll0n (d1ll0n.eth)\n @custom:coauthor transmissions11 (t11s.eth)\n @custom:contributor Kartik (slokh.eth)\n @custom:contributor LeFevre (lefevre.eth)\n @custom:contributor Joseph Schiarizzi (CupOJoseph.eth)\n @custom:contributor Aspyn Palatnick (stuckinaboot.eth)\n @custom:contributor James Wenzel (emo.eth)\n @custom:contributor Stephan Min (stephanm.eth)\n @custom:contributor Ryan Ghods (ralxz.eth)\n @custom:contributor hack3r-0m (hack3r-0m.eth)\n @custom:contributor Diego Estevez (antidiego.eth)\n @custom:contributor Chomtana (chomtana.eth)\n @custom:contributor Saw-mon and Natalie (sawmonandnatalie.eth)\n @custom:contributor 0xBeans (0xBeans.eth)\n @custom:contributor 0x4non (punkdev.eth)\n @custom:contributor Laurence E. Day (norsefire.eth)\n @custom:contributor vectorized.eth (vectorized.eth)\n @custom:contributor karmacoma (karmacoma.eth)\n @custom:contributor horsefacts (horsefacts.eth)\n @custom:contributor UncarvedBlock (uncarvedblock.eth)\n @custom:contributor Zoraiz Mahmood (zorz.eth)\n @custom:contributor William Poulin (wpoulin.eth)\n @custom:contributor Rajiv Patel-O'Connor (rajivpoc.eth)\n @custom:contributor tserg (tserg.eth)\n @custom:contributor cygaar (cygaar.eth)\n @custom:contributor Meta0xNull (meta0xnull.eth)\n @custom:contributor gpersoon (gpersoon.eth)\n @custom:contributor Matt Solomon (msolomon.eth)\n @custom:contributor Weikang Song (weikangs.eth)\n @custom:contributor zer0dot (zer0dot.eth)\n @custom:contributor Mudit Gupta (mudit.eth)\n @custom:contributor leonardoalt (leoalt.eth)\n @custom:contributor cmichel (cmichel.eth)\n @custom:contributor PraneshASP (pranesh.eth)\n @custom:contributor JasperAlexander (jasperalexander.eth)\n @custom:contributor Ellahi (ellahi.eth)\n @custom:contributor zaz (1zaz1.eth)\n @custom:contributor berndartmueller (berndartmueller.eth)\n @custom:contributor dmfxyz (dmfxyz.eth)\n @custom:contributor daltoncoder (dontkillrobots.eth)\n @custom:contributor 0xf4ce (0xf4ce.eth)\n @custom:contributor phaze (phaze.eth)\n @custom:contributor hrkrshnn (hrkrshnn.eth)\n @custom:contributor axic (axic.eth)\n @custom:contributor leastwood (leastwood.eth)\n @custom:contributor 0xsanson (sanson.eth)\n @custom:contributor blockdev (blockd3v.eth)\n @custom:contributor fiveoutofnine (fiveoutofnine.eth)\n @custom:contributor shuklaayush (shuklaayush.eth)\n @custom:contributor 0xPatissier\n @custom:contributor pcaversaccio\n @custom:contributor David Eiber\n @custom:contributor csanuragjain\n @custom:contributor sach1r0\n @custom:contributor twojoy0\n @custom:contributor ori_dabush\n @custom:contributor Daniel Gelfand\n @custom:contributor okkothejawa\n @custom:contributor FlameHorizon\n @custom:contributor vdrg\n @custom:contributor dmitriia\n @custom:contributor bokeh-eth\n @custom:contributor asutorufos\n @custom:contributor rfart(rfa)\n @custom:contributor Riley Holterhus\n @custom:contributor big-tech-sux\n @notice Seaport is a generalized ETH/ERC20/ERC721/ERC1155 marketplace. It\n minimizes external calls to the greatest extent possible and provides\n lightweight methods for common routes as well as more flexible\n methods for composing advanced orders or groups of orders. Each order\n contains an arbitrary number of items that may be spent (the \"offer\")\n along with an arbitrary number of items that must be received back by\n the indicated recipients (the \"consideration\")."},"fullyImplemented":true,"linearizedBaseContracts":[36,3859,7413,6233,2143,7917,2722,1457,5317,2110,3422,8570,9353,5902,8727,9140,8662,6413,2525,2434,2825,2494,4944,8624,2192,6373,4091,1861,2085],"name":"Seaport","nameLocation":"3723:7:0","scope":37,"usedErrors":[1456,1790,1793,1800,1803,1808,1817,1820,1827,1830,1835,1840,1843,1846,1851,1854,1857,1860,2091,2094,2097,2100,2103,2106,2109,2133,2136,2139,2142,2191,2424,2427,2430,2433,2440,2443,2446,2459,2474,2485,2490,2493,2524]}],"license":"MIT"},"id":0} diff --git a/ethers-contract/tests/solidity-contracts/seaport_1_1.json b/ethers-contract/tests/solidity-contracts/seaport_1_1.json new file mode 100644 index 000000000..e2d92ece2 --- /dev/null +++ b/ethers-contract/tests/solidity-contracts/seaport_1_1.json @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BadContractSignature","type":"error"},{"inputs":[],"name":"BadFraction","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BadReturnValueFromERC20OnTransfer","type":"error"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"}],"name":"BadSignatureV","type":"error"},{"inputs":[],"name":"ConsiderationCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"},{"internalType":"uint256","name":"shortfallAmount","type":"uint256"}],"name":"ConsiderationNotMet","type":"error"},{"inputs":[],"name":"CriteriaNotEnabledForItem","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"identifiers","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"ERC1155BatchTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EtherTransferGenericFailure","type":"error"},{"inputs":[],"name":"InexactFraction","type":"error"},{"inputs":[],"name":"InsufficientEtherSupplied","type":"error"},{"inputs":[],"name":"Invalid1155BatchTransferEncoding","type":"error"},{"inputs":[],"name":"InvalidBasicOrderParameterEncoding","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidCallToConduit","type":"error"},{"inputs":[],"name":"InvalidCanceller","type":"error"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidConduit","type":"error"},{"inputs":[],"name":"InvalidERC721TransferAmount","type":"error"},{"inputs":[],"name":"InvalidFulfillmentComponentData","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InvalidMsgValue","type":"error"},{"inputs":[],"name":"InvalidNativeOfferItem","type":"error"},{"inputs":[],"name":"InvalidProof","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidRestrictedOrder","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"InvalidSigner","type":"error"},{"inputs":[],"name":"InvalidTime","type":"error"},{"inputs":[],"name":"MismatchedFulfillmentOfferAndConsiderationComponents","type":"error"},{"inputs":[{"internalType":"enum Side","name":"side","type":"uint8"}],"name":"MissingFulfillmentComponentOnAggregation","type":"error"},{"inputs":[],"name":"MissingItemAmount","type":"error"},{"inputs":[],"name":"MissingOriginalConsiderationItems","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NoContract","type":"error"},{"inputs":[],"name":"NoReentrantCalls","type":"error"},{"inputs":[],"name":"NoSpecifiedOrdersAvailable","type":"error"},{"inputs":[],"name":"OfferAndConsiderationRequiredOnFulfillment","type":"error"},{"inputs":[],"name":"OfferCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderAlreadyFilled","type":"error"},{"inputs":[],"name":"OrderCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderIsCancelled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderPartiallyFilled","type":"error"},{"inputs":[],"name":"PartialFillsNotEnabledForOrder","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenTransferGenericFailure","type":"error"},{"inputs":[],"name":"UnresolvedConsiderationCriteria","type":"error"},{"inputs":[],"name":"UnresolvedOfferCriteria","type":"error"},{"inputs":[],"name":"UnusedItemParameters","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCounter","type":"uint256"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"}],"name":"CounterIncremented","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct SpentItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"indexed":false,"internalType":"struct ReceivedItem[]","name":"consideration","type":"tuple[]"}],"name":"OrderFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderValidated","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"counter","type":"uint256"}],"internalType":"struct OrderComponents[]","name":"orders","type":"tuple[]"}],"name":"cancel","outputs":[{"internalType":"bool","name":"cancelled","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder","name":"advancedOrder","type":"tuple"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"}],"name":"fulfillAdvancedOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder[]","name":"advancedOrders","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"offerFulfillments","type":"tuple[][]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"considerationFulfillments","type":"tuple[][]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"maximumFulfilled","type":"uint256"}],"name":"fulfillAvailableAdvancedOrders","outputs":[{"internalType":"bool[]","name":"availableOrders","type":"bool[]"},{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order[]","name":"orders","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"offerFulfillments","type":"tuple[][]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"considerationFulfillments","type":"tuple[][]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"maximumFulfilled","type":"uint256"}],"name":"fulfillAvailableOrders","outputs":[{"internalType":"bool[]","name":"availableOrders","type":"bool[]"},{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"considerationToken","type":"address"},{"internalType":"uint256","name":"considerationIdentifier","type":"uint256"},{"internalType":"uint256","name":"considerationAmount","type":"uint256"},{"internalType":"address payable","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"internalType":"address","name":"offerToken","type":"address"},{"internalType":"uint256","name":"offerIdentifier","type":"uint256"},{"internalType":"uint256","name":"offerAmount","type":"uint256"},{"internalType":"enum BasicOrderType","name":"basicOrderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"offererConduitKey","type":"bytes32"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalAdditionalRecipients","type":"uint256"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct AdditionalRecipient[]","name":"additionalRecipients","type":"tuple[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct BasicOrderParameters","name":"parameters","type":"tuple"}],"name":"fulfillBasicOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order","name":"order","type":"tuple"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"}],"name":"fulfillOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"offerer","type":"address"}],"name":"getCounter","outputs":[{"internalType":"uint256","name":"counter","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"counter","type":"uint256"}],"internalType":"struct OrderComponents","name":"order","type":"tuple"}],"name":"getOrderHash","outputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"getOrderStatus","outputs":[{"internalType":"bool","name":"isValidated","type":"bool"},{"internalType":"bool","name":"isCancelled","type":"bool"},{"internalType":"uint256","name":"totalFilled","type":"uint256"},{"internalType":"uint256","name":"totalSize","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementCounter","outputs":[{"internalType":"uint256","name":"newCounter","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"information","outputs":[{"internalType":"string","name":"version","type":"string"},{"internalType":"bytes32","name":"domainSeparator","type":"bytes32"},{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder[]","name":"advancedOrders","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"offerComponents","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"considerationComponents","type":"tuple[]"}],"internalType":"struct Fulfillment[]","name":"fulfillments","type":"tuple[]"}],"name":"matchAdvancedOrders","outputs":[{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order[]","name":"orders","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"offerComponents","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[]","name":"considerationComponents","type":"tuple[]"}],"internalType":"struct Fulfillment[]","name":"fulfillments","type":"tuple[]"}],"name":"matchOrders","outputs":[{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"contractName","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct Order[]","name":"orders","type":"tuple[]"}],"name":"validate","outputs":[{"internalType":"bool","name":"validated","type":"bool"}],"stateMutability":"nonpayable","type":"function"}] diff --git a/ethers-contract/tests/solidity-contracts/seaport_1_2.json b/ethers-contract/tests/solidity-contracts/seaport_1_2.json new file mode 100644 index 000000000..30f1c2e2d --- /dev/null +++ b/ethers-contract/tests/solidity-contracts/seaport_1_2.json @@ -0,0 +1 @@ +[{"inputs":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"counter","type":"uint256"}],"internalType":"structOrderComponents[]","name":"orders","type":"tuple[]"}],"name":"cancel","outputs":[{"internalType":"bool","name":"cancelled","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"structOrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"structAdvancedOrder","name":"advancedOrder","type":"tuple"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enumSide","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"structCriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"}],"name":"fulfillAdvancedOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"structOrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"structAdvancedOrder[]","name":"advancedOrders","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enumSide","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"structCriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"structFulfillmentComponent[][]","name":"offerFulfillments","type":"tuple[][]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"structFulfillmentComponent[][]","name":"considerationFulfillments","type":"tuple[][]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"maximumFulfilled","type":"uint256"}],"name":"fulfillAvailableAdvancedOrders","outputs":[{"internalType":"bool[]","name":"availableOrders","type":"bool[]"},{"components":[{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"structExecution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"structOrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"structOrder[]","name":"orders","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"structFulfillmentComponent[][]","name":"offerFulfillments","type":"tuple[][]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"structFulfillmentComponent[][]","name":"considerationFulfillments","type":"tuple[][]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"maximumFulfilled","type":"uint256"}],"name":"fulfillAvailableOrders","outputs":[{"internalType":"bool[]","name":"availableOrders","type":"bool[]"},{"components":[{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"structExecution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"considerationToken","type":"address"},{"internalType":"uint256","name":"considerationIdentifier","type":"uint256"},{"internalType":"uint256","name":"considerationAmount","type":"uint256"},{"internalType":"addresspayable","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"internalType":"address","name":"offerToken","type":"address"},{"internalType":"uint256","name":"offerIdentifier","type":"uint256"},{"internalType":"uint256","name":"offerAmount","type":"uint256"},{"internalType":"enumBasicOrderType","name":"basicOrderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"offererConduitKey","type":"bytes32"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalAdditionalRecipients","type":"uint256"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structAdditionalRecipient[]","name":"additionalRecipients","type":"tuple[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"structBasicOrderParameters","name":"parameters","type":"tuple"}],"name":"fulfillBasicOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"considerationToken","type":"address"},{"internalType":"uint256","name":"considerationIdentifier","type":"uint256"},{"internalType":"uint256","name":"considerationAmount","type":"uint256"},{"internalType":"addresspayable","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"internalType":"address","name":"offerToken","type":"address"},{"internalType":"uint256","name":"offerIdentifier","type":"uint256"},{"internalType":"uint256","name":"offerAmount","type":"uint256"},{"internalType":"enumBasicOrderType","name":"basicOrderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"offererConduitKey","type":"bytes32"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalAdditionalRecipients","type":"uint256"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structAdditionalRecipient[]","name":"additionalRecipients","type":"tuple[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"structBasicOrderParameters","name":"parameters","type":"tuple"}],"name":"fulfillBasicOrder_efficient_6GL6yc","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"structOrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"structOrder","name":"order","type":"tuple"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"}],"name":"fulfillOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"contractOfferer","type":"address"}],"name":"getContractOffererNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"offerer","type":"address"}],"name":"getCounter","outputs":[{"internalType":"uint256","name":"counter","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"counter","type":"uint256"}],"internalType":"structOrderComponents","name":"order","type":"tuple"}],"name":"getOrderHash","outputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"getOrderStatus","outputs":[{"internalType":"bool","name":"isValidated","type":"bool"},{"internalType":"bool","name":"isCancelled","type":"bool"},{"internalType":"uint256","name":"totalFilled","type":"uint256"},{"internalType":"uint256","name":"totalSize","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementCounter","outputs":[{"internalType":"uint256","name":"newCounter","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"information","outputs":[{"internalType":"string","name":"version","type":"string"},{"internalType":"bytes32","name":"domainSeparator","type":"bytes32"},{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"structOrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"structAdvancedOrder[]","name":"orders","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enumSide","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"structCriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"structFulfillmentComponent[]","name":"offerComponents","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"structFulfillmentComponent[]","name":"considerationComponents","type":"tuple[]"}],"internalType":"structFulfillment[]","name":"fulfillments","type":"tuple[]"},{"internalType":"address","name":"recipient","type":"address"}],"name":"matchAdvancedOrders","outputs":[{"components":[{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"structExecution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"structOrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"structOrder[]","name":"orders","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"structFulfillmentComponent[]","name":"offerComponents","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"structFulfillmentComponent[]","name":"considerationComponents","type":"tuple[]"}],"internalType":"structFulfillment[]","name":"fulfillments","type":"tuple[]"}],"name":"matchOrders","outputs":[{"components":[{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"structExecution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"contractName","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"structOrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"structOrder[]","name":"orders","type":"tuple[]"}],"name":"validate","outputs":[{"internalType":"bool","name":"validated","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BadContractSignature","type":"error"},{"inputs":[],"name":"BadFraction","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BadReturnValueFromERC20OnTransfer","type":"error"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"}],"name":"BadSignatureV","type":"error"},{"inputs":[],"name":"CannotCancelOrder","type":"error"},{"inputs":[],"name":"ConsiderationCriteriaResolverOutOfRange","type":"error"},{"inputs":[],"name":"ConsiderationLengthNotEqualToTotalOriginal","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"},{"internalType":"uint256","name":"shortfallAmount","type":"uint256"}],"name":"ConsiderationNotMet","type":"error"},{"inputs":[],"name":"CriteriaNotEnabledForItem","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"identifiers","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"ERC1155BatchTransferGenericFailure","type":"error"},{"inputs":[],"name":"InexactFraction","type":"error"},{"inputs":[],"name":"InsufficientNativeTokensSupplied","type":"error"},{"inputs":[],"name":"Invalid1155BatchTransferEncoding","type":"error"},{"inputs":[],"name":"InvalidBasicOrderParameterEncoding","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidCallToConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidContractOrder","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InvalidERC721TransferAmount","type":"error"},{"inputs":[],"name":"InvalidFulfillmentComponentData","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InvalidMsgValue","type":"error"},{"inputs":[],"name":"InvalidNativeOfferItem","type":"error"},{"inputs":[],"name":"InvalidProof","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidRestrictedOrder","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"InvalidSigner","type":"error"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"InvalidTime","type":"error"},{"inputs":[{"internalType":"uint256","name":"fulfillmentIndex","type":"uint256"}],"name":"MismatchedFulfillmentOfferAndConsiderationComponents","type":"error"},{"inputs":[{"internalType":"enumSide","name":"side","type":"uint8"}],"name":"MissingFulfillmentComponentOnAggregation","type":"error"},{"inputs":[],"name":"MissingItemAmount","type":"error"},{"inputs":[],"name":"MissingOriginalConsiderationItems","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NativeTokenTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NoContract","type":"error"},{"inputs":[],"name":"NoReentrantCalls","type":"error"},{"inputs":[],"name":"NoSpecifiedOrdersAvailable","type":"error"},{"inputs":[],"name":"OfferAndConsiderationRequiredOnFulfillment","type":"error"},{"inputs":[],"name":"OfferCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderAlreadyFilled","type":"error"},{"inputs":[{"internalType":"enumSide","name":"side","type":"uint8"}],"name":"OrderCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderIsCancelled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderPartiallyFilled","type":"error"},{"inputs":[],"name":"PartialFillsNotEnabledForOrder","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"}],"name":"UnresolvedConsiderationCriteria","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"offerIndex","type":"uint256"}],"name":"UnresolvedOfferCriteria","type":"error"},{"inputs":[],"name":"UnusedItemParameters","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCounter","type":"uint256"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"}],"name":"CounterIncremented","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"structSpentItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"indexed":false,"internalType":"structReceivedItem[]","name":"consideration","type":"tuple[]"}],"name":"OrderFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"indexed":false,"internalType":"structOrderParameters","name":"orderParameters","type":"tuple"}],"name":"OrderValidated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"orderHashes","type":"bytes32[]"}],"name":"OrdersMatched","type":"event"}] diff --git a/ethers-contract/tests/solidity-contracts/seaport_1_3.json b/ethers-contract/tests/solidity-contracts/seaport_1_3.json new file mode 100644 index 000000000..30f1c2e2d --- /dev/null +++ b/ethers-contract/tests/solidity-contracts/seaport_1_3.json @@ -0,0 +1 @@ +[{"inputs":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"counter","type":"uint256"}],"internalType":"structOrderComponents[]","name":"orders","type":"tuple[]"}],"name":"cancel","outputs":[{"internalType":"bool","name":"cancelled","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"structOrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"structAdvancedOrder","name":"advancedOrder","type":"tuple"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enumSide","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"structCriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"}],"name":"fulfillAdvancedOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"structOrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"structAdvancedOrder[]","name":"advancedOrders","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enumSide","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"structCriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"structFulfillmentComponent[][]","name":"offerFulfillments","type":"tuple[][]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"structFulfillmentComponent[][]","name":"considerationFulfillments","type":"tuple[][]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"maximumFulfilled","type":"uint256"}],"name":"fulfillAvailableAdvancedOrders","outputs":[{"internalType":"bool[]","name":"availableOrders","type":"bool[]"},{"components":[{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"structExecution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"structOrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"structOrder[]","name":"orders","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"structFulfillmentComponent[][]","name":"offerFulfillments","type":"tuple[][]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"structFulfillmentComponent[][]","name":"considerationFulfillments","type":"tuple[][]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"maximumFulfilled","type":"uint256"}],"name":"fulfillAvailableOrders","outputs":[{"internalType":"bool[]","name":"availableOrders","type":"bool[]"},{"components":[{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"structExecution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"considerationToken","type":"address"},{"internalType":"uint256","name":"considerationIdentifier","type":"uint256"},{"internalType":"uint256","name":"considerationAmount","type":"uint256"},{"internalType":"addresspayable","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"internalType":"address","name":"offerToken","type":"address"},{"internalType":"uint256","name":"offerIdentifier","type":"uint256"},{"internalType":"uint256","name":"offerAmount","type":"uint256"},{"internalType":"enumBasicOrderType","name":"basicOrderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"offererConduitKey","type":"bytes32"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalAdditionalRecipients","type":"uint256"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structAdditionalRecipient[]","name":"additionalRecipients","type":"tuple[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"structBasicOrderParameters","name":"parameters","type":"tuple"}],"name":"fulfillBasicOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"considerationToken","type":"address"},{"internalType":"uint256","name":"considerationIdentifier","type":"uint256"},{"internalType":"uint256","name":"considerationAmount","type":"uint256"},{"internalType":"addresspayable","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"internalType":"address","name":"offerToken","type":"address"},{"internalType":"uint256","name":"offerIdentifier","type":"uint256"},{"internalType":"uint256","name":"offerAmount","type":"uint256"},{"internalType":"enumBasicOrderType","name":"basicOrderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"offererConduitKey","type":"bytes32"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalAdditionalRecipients","type":"uint256"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structAdditionalRecipient[]","name":"additionalRecipients","type":"tuple[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"structBasicOrderParameters","name":"parameters","type":"tuple"}],"name":"fulfillBasicOrder_efficient_6GL6yc","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"structOrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"structOrder","name":"order","type":"tuple"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"}],"name":"fulfillOrder","outputs":[{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"contractOfferer","type":"address"}],"name":"getContractOffererNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"offerer","type":"address"}],"name":"getCounter","outputs":[{"internalType":"uint256","name":"counter","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"counter","type":"uint256"}],"internalType":"structOrderComponents","name":"order","type":"tuple"}],"name":"getOrderHash","outputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"getOrderStatus","outputs":[{"internalType":"bool","name":"isValidated","type":"bool"},{"internalType":"bool","name":"isCancelled","type":"bool"},{"internalType":"uint256","name":"totalFilled","type":"uint256"},{"internalType":"uint256","name":"totalSize","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementCounter","outputs":[{"internalType":"uint256","name":"newCounter","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"information","outputs":[{"internalType":"string","name":"version","type":"string"},{"internalType":"bytes32","name":"domainSeparator","type":"bytes32"},{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"structOrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"structAdvancedOrder[]","name":"orders","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enumSide","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"structCriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"structFulfillmentComponent[]","name":"offerComponents","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"structFulfillmentComponent[]","name":"considerationComponents","type":"tuple[]"}],"internalType":"structFulfillment[]","name":"fulfillments","type":"tuple[]"},{"internalType":"address","name":"recipient","type":"address"}],"name":"matchAdvancedOrders","outputs":[{"components":[{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"structExecution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"structOrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"structOrder[]","name":"orders","type":"tuple[]"},{"components":[{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"structFulfillmentComponent[]","name":"offerComponents","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"structFulfillmentComponent[]","name":"considerationComponents","type":"tuple[]"}],"internalType":"structFulfillment[]","name":"fulfillments","type":"tuple[]"}],"name":"matchOrders","outputs":[{"components":[{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"structExecution[]","name":"executions","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"contractName","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"structOrderParameters","name":"parameters","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"structOrder[]","name":"orders","type":"tuple[]"}],"name":"validate","outputs":[{"internalType":"bool","name":"validated","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BadContractSignature","type":"error"},{"inputs":[],"name":"BadFraction","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BadReturnValueFromERC20OnTransfer","type":"error"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"}],"name":"BadSignatureV","type":"error"},{"inputs":[],"name":"CannotCancelOrder","type":"error"},{"inputs":[],"name":"ConsiderationCriteriaResolverOutOfRange","type":"error"},{"inputs":[],"name":"ConsiderationLengthNotEqualToTotalOriginal","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"},{"internalType":"uint256","name":"shortfallAmount","type":"uint256"}],"name":"ConsiderationNotMet","type":"error"},{"inputs":[],"name":"CriteriaNotEnabledForItem","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"identifiers","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"ERC1155BatchTransferGenericFailure","type":"error"},{"inputs":[],"name":"InexactFraction","type":"error"},{"inputs":[],"name":"InsufficientNativeTokensSupplied","type":"error"},{"inputs":[],"name":"Invalid1155BatchTransferEncoding","type":"error"},{"inputs":[],"name":"InvalidBasicOrderParameterEncoding","type":"error"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidCallToConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"conduit","type":"address"}],"name":"InvalidConduit","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidContractOrder","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InvalidERC721TransferAmount","type":"error"},{"inputs":[],"name":"InvalidFulfillmentComponentData","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"InvalidMsgValue","type":"error"},{"inputs":[],"name":"InvalidNativeOfferItem","type":"error"},{"inputs":[],"name":"InvalidProof","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"InvalidRestrictedOrder","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"InvalidSigner","type":"error"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"InvalidTime","type":"error"},{"inputs":[{"internalType":"uint256","name":"fulfillmentIndex","type":"uint256"}],"name":"MismatchedFulfillmentOfferAndConsiderationComponents","type":"error"},{"inputs":[{"internalType":"enumSide","name":"side","type":"uint8"}],"name":"MissingFulfillmentComponentOnAggregation","type":"error"},{"inputs":[],"name":"MissingItemAmount","type":"error"},{"inputs":[],"name":"MissingOriginalConsiderationItems","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NativeTokenTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NoContract","type":"error"},{"inputs":[],"name":"NoReentrantCalls","type":"error"},{"inputs":[],"name":"NoSpecifiedOrdersAvailable","type":"error"},{"inputs":[],"name":"OfferAndConsiderationRequiredOnFulfillment","type":"error"},{"inputs":[],"name":"OfferCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderAlreadyFilled","type":"error"},{"inputs":[{"internalType":"enumSide","name":"side","type":"uint8"}],"name":"OrderCriteriaResolverOutOfRange","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderIsCancelled","type":"error"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderPartiallyFilled","type":"error"},{"inputs":[],"name":"PartialFillsNotEnabledForOrder","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenTransferGenericFailure","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"considerationIndex","type":"uint256"}],"name":"UnresolvedConsiderationCriteria","type":"error"},{"inputs":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"offerIndex","type":"uint256"}],"name":"UnresolvedOfferCriteria","type":"error"},{"inputs":[],"name":"UnusedItemParameters","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCounter","type":"uint256"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"}],"name":"CounterIncremented","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"offerer","type":"address"},{"indexed":true,"internalType":"address","name":"zone","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"structSpentItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"indexed":false,"internalType":"structReceivedItem[]","name":"consideration","type":"tuple[]"}],"name":"OrderFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"structOfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enumItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"addresspayable","name":"recipient","type":"address"}],"internalType":"structConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enumOrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"indexed":false,"internalType":"structOrderParameters","name":"orderParameters","type":"tuple"}],"name":"OrderValidated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32[]","name":"orderHashes","type":"bytes32[]"}],"name":"OrdersMatched","type":"event"}] diff --git a/ethers-core/src/abi/struct_def.rs b/ethers-core/src/abi/struct_def.rs index 2d9380efe..cc588fcab 100644 --- a/ethers-core/src/abi/struct_def.rs +++ b/ethers-core/src/abi/struct_def.rs @@ -33,13 +33,24 @@ pub enum FieldType { /// /// Note: tuples will be treated as rust tuples Elementary(ParamType), - /// A non elementary type field, treated as user defined struct + /// A non elementary type field, treated as user-defined struct Struct(StructFieldType), /// Mapping Mapping(Box), } impl FieldType { + /// Whether this field is an elementary [`ParamType`]. + pub fn is_elementary(&self) -> bool { + matches!(self, FieldType::Elementary(_)) + } + + /// Whether this field is a user-defined struct. + pub fn is_struct(&self) -> bool { + matches!(self, FieldType::Struct(_)) + } + + /// Whether this field is a mapping. pub fn is_mapping(&self) -> bool { matches!(self, FieldType::Mapping(_)) }