[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [], "name": "AdminRole_Caller_Does_Not_Have_Admin_Role", "type": "error" }, { "inputs": [], "name": "CollectionTokenRoyalties_Address_Already_Set", "type": "error" }, { "inputs": [], "name": "CollectionTokenRoyalties_Payment_Address_Required", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC1155InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC1155InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "idsLength", "type": "uint256" }, { "internalType": "uint256", "name": "valuesLength", "type": "uint256" } ], "name": "ERC1155InvalidArrayLength", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC1155InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC1155InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC1155InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC1155MissingApprovalForAll", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [], "name": "MinterRole_Caller_Does_Not_Have_Minter_Or_Admin_Role", "type": "error" }, { "inputs": [], "name": "MultiTokenCollection_Contract_URI_Required", "type": "error" }, { "inputs": [], "name": "MultiTokenCollection_Token_Already_Exists", "type": "error" }, { "inputs": [], "name": "MultiTokenMintSchedule_Mint_Time_Has_Already_Expired", "type": "error" }, { "inputs": [], "name": "MultiTokenMintSchedule_Token_Minting_Has_Ended", "type": "error" }, { "inputs": [], "name": "MultiTokenMintSchedule_Token_Not_Found", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "inputs": [], "name": "StringsLibrary_Required_String_Is_Empty", "type": "error" }, { "inputs": [], "name": "TokenImmutability_Action_Disallowed", "type": "error" }, { "inputs": [], "name": "TokenImmutability_Restriction_Already_Applied", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "enum TokenImmutability.TokenRestriction", "name": "restrictionAdded", "type": "uint8" } ], "name": "AssignTokenRestriction", "type": "event" }, { "anonymous": false, "inputs": [], "name": "ContractURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "CreateToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferStarted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "tokenUri", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "PermanentURI", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "defaultRoyaltyPaymentAddress", "type": "address" } ], "name": "SetDefaultRoyaltyPaymentAddress", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "mintEndTime", "type": "uint256" } ], "name": "SetMintEndTime", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "paymentAddressOverride", "type": "address" } ], "name": "SetTokenRoyaltyPaymentAddress", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "internalDelegateCalls", "type": "bytes[]" }, { "components": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes", "name": "callData", "type": "bytes" } ], "internalType": "struct CallWithoutValue[]", "name": "externalCalls", "type": "tuple[]" } ], "name": "adminMulticall", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "enum TokenImmutability.TokenRestriction", "name": "restrictionToAdd", "type": "uint8" } ], "name": "assignTokenRestrictions", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "burnBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "tokenURI", "type": "string" }, { "internalType": "uint256", "name": "mintEndTime", "type": "uint256" } ], "name": "createToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "defaultRoyaltyPaymentAddress", "outputs": [ { "internalType": "address payable", "name": "paymentAddress", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "exists", "outputs": [ { "internalType": "bool", "name": "tokenIdWasCreated", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getNFTCollectionType", "outputs": [ { "internalType": "string", "name": "collectionType", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getTokenMintAvailability", "outputs": [ { "internalType": "uint256", "name": "mintEndTime", "type": "uint256" }, { "internalType": "uint256", "name": "quantityAvailableToMint", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "accountHasRole", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address payable", "name": "creator", "type": "address" }, { "internalType": "string", "name": "contractUri", "type": "string" }, { "internalType": "bytes[]", "name": "internalDelegateCalls", "type": "bytes[]" }, { "components": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes", "name": "callData", "type": "bytes" } ], "internalType": "struct CallWithoutValue[]", "name": "externalCalls", "type": "tuple[]" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isAdmin", "outputs": [ { "internalType": "bool", "name": "approved", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isMinter", "outputs": [ { "internalType": "bool", "name": "approved", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "enum TokenImmutability.TokenRestriction", "name": "restriction", "type": "uint8" } ], "name": "isTokenRestricted", "outputs": [ { "internalType": "bool", "name": "isRestricted", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "quantities", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address payable", "name": "paymentAddress", "type": "address" } ], "name": "setDefaultRoyaltyPaymentAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "mintEndTime", "type": "uint256" } ], "name": "setMintEndTime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address payable", "name": "tokenRoyaltyPaymentAddressOverride", "type": "address" } ], "name": "setTokenRoyaltyPaymentAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "tokenURI", "type": "string" } ], "name": "setTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "isSupported", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "tokenURI", "type": "string" } ], "stateMutability": "view", "type": "function" } ]
60a060405234801561001057600080fd5b5060408051808201909152601681527f4d756c74692d546f6b656e20436f6c6c656374696f6e00000000000000000000602082015261004e81610158565b608052507ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0080546001600160401b03919068010000000000000000900460ff16806100a6575080546001600160401b03808416911610155b156100c45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617680100000000000000001781556040805160608101909152602580825261010a9190614bb2602083013961019f565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150506103d7565b600080829050601f8151111561018c578260405163305a27a960e01b81526004016101839190610207565b60405180910390fd5b805161019782610256565b179392505050565b6101a8816101e2565b6103e86101b58282610318565b506040517fa5d4097edda6d87cb9329af83fb3712ef77eeb13738ffe43cc35a4ce305ad96290600090a150565b80516000036102045760405163f73c5b5360e01b815260040160405180910390fd5b50565b60006020808352835180602085015260005b8181101561023557858101830151858201604001528201610219565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015610277576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806102a757607f821691505b60208210810361027757634e487b7160e01b600052602260045260246000fd5b601f821115610313576000816000526020600020601f850160051c810160208610156102f05750805b601f850160051c820191505b8181101561030f578281556001016102fc565b5050505b505050565b81516001600160401b038111156103315761033161027d565b6103458161033f8454610293565b846102c7565b602080601f83116001811461037a57600084156103625750858301515b600019600386901b1c1916600185901b17855561030f565b600085815260208120601f198616915b828110156103a95788860151825594840194600190910190840161038a565b50858210156103c75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080516147c06103f2600039600061163201526147c06000f3fe608060405234801561001057600080fd5b50600436106103095760003560e01c806379ba50971161019c578063bd85b039116100ee578063e8a3d48511610097578063f242432a11610071578063f242432a14610777578063f2fde38b1461078a578063f5298aca1461079d57600080fd5b8063e8a3d485146106f4578063e8bfc93f146106fc578063e985e9c51461070f57600080fd5b8063d547741f116100c8578063d547741f146106d1578063dfea951d146106e4578063e30c3978146106ec57600080fd5b8063bd85b03914610658578063cfbd488514610697578063d5391393146106aa57600080fd5b806392d0ebf611610150578063a22cb4651161012a578063a22cb4651461061f578063aa271e1a14610632578063ba697b111461064557600080fd5b806392d0ebf6146105dc578063938e3d7b14610604578063a217fddf1461061757600080fd5b80637dd4db92116101815780637dd4db92146105ae5780638da5cb5b146105c157806391d14854146105c957600080fd5b806379ba5097146105665780637cb2de2c1461056e57600080fd5b80632d345670116102605780634e1273f4116102095780636b20c454116101e35780636b20c45414610538578063715018a61461054b57806371b3f66d1461055357600080fd5b80634e1273f4146104f25780634f558e79146105125780635b78750a1461052557600080fd5b806330df2e5b1161023a57806330df2e5b146104b957806335bb3e16146104cc57806336568abe146104df57600080fd5b80632d345670146104805780632eb2c2d6146104935780632f2ff15d146104a657600080fd5b8063248a9ca3116102c2578063261707fa1161029c578063261707fa1461041b578063270f43841461042e5780632a55205a1461044157600080fd5b8063248a9ca3146103b357806324d7806c146103f5578063254678c21461040857600080fd5b80630e89341c116102f35780630e89341c14610357578063162094c41461037757806318160ddd1461038c57600080fd5b8062fdd58e1461030e57806301ffc9a714610334575b600080fd5b61032161031c366004613973565b6107b0565b6040519081526020015b60405180910390f35b6103476103423660046139cd565b610806565b604051901515815260200161032b565b61036a6103653660046139ea565b610811565b60405161032b9190613a71565b61038a610385366004613acd565b61081c565b005b7f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154610321565b6103216103c13660046139ea565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b610347610403366004613b19565b6108af565b61038a610416366004613b19565b6108bb565b61038a610429366004613b19565b610988565b61038a61043c366004613b36565b6109b5565b61045461044f366004613b6a565b610b42565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091520161032b565b61038a61048e366004613b19565b610ba5565b61038a6104a1366004613d2b565b610bb0565b61038a6104b4366004613dd9565b610bbd565b61038a6104c7366004613b6a565b610c07565b61038a6104da366004613b19565b610c69565b61038a6104ed366004613dd9565b610c74565b610505610500366004613dfe565b610cef565b60405161032b9190613efc565b6103476105203660046139ea565b610dda565b61038a610533366004613f54565b610df1565b61038a610546366004614001565b611044565b61038a6110fb565b61038a610561366004614077565b61110f565b61038a61119a565b6103ea5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032b565b61038a6105bc366004613dd9565b611233565b610589611361565b6103476105d7366004613dd9565b6113a3565b6105ef6105ea3660046139ea565b61144c565b6040805192835260208301919091520161032b565b61038a6106123660046140e3565b6114d2565b610321600081565b61038a61062d366004614125565b61151d565b610347610640366004613b19565b61152f565b610347610653366004613b36565b61155b565b6103216106663660046139ea565b60009081527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604090205490565b61038a6106a5366004613b19565b6115c1565b6103217f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61038a6106df366004613dd9565b6115e7565b61036a61162b565b61058961165b565b61036a611684565b61038a61070a366004614158565b611717565b61034761071d3660046141ab565b73ffffffffffffffffffffffffffffffffffffffff91821660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45016020908152604080832093909416825291909152205460ff1690565b61038a6107853660046141d9565b6117d4565b61038a610798366004613b19565b6117e1565b61038a6107ab366004614242565b611898565b60008181527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45006020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020545b92915050565b6000610800826118fc565b606061080082611907565b610824611912565b826001610831828261155b565b15610868576040517f291e97c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108a88585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061195592505050565b5050505050565b600061080081836113a3565b6108c3611912565b6103ea5473ffffffffffffffffffffffffffffffffffffffff808316911603610918576040517fcde01bec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103ea80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fe127c1b3411656966d97bf00c0b8a9256e1bdefe767b0288e47be624d599369f90600090a250565b6109b27f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a682610bbd565b50565b6109bd611912565b6109c7828261155b565b156109fe576040517f23dcbcd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001816003811115610a1257610a12614277565b1480610a4257506000816003811115610a2d57610a2d614277565b148015610a425750610a4082600161155b565b155b15610a8857817fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b55657207610a7284610811565b604051610a7f9190613a71565b60405180910390a25b6000816003811115610a9c57610a9c614277565b03610ad85760008281526103e9602052604090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9055610b06565b806003811115610aea57610aea614277565b60008381526103e9602052604090208054600190921b90911790555b817f4a0bd8b653cf425609321008fecd980713fcd5956f26c6a1c1536feeafe9ce4082604051610b3691906142a6565b60405180910390a25050565b60008281526103eb602052604081205473ffffffffffffffffffffffffffffffffffffffff169081610b9a576103ea5473ffffffffffffffffffffffffffffffffffffffff16915081610b9a57610b97611361565b91505b5092600a9091049150565b6109b26000826115e7565b6108a8858585858561195f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610bf7816119a0565b610c0183836119b1565b50505050565b610c0f611912565b816002610c1c828261155b565b15610c53576040517f291e97c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003610c5f574292505b610c018484611aae565b6109b2600082610bbd565b610c7c611b35565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ce0576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cea8282611b3f565b505050565b60608151835114610d3e57815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044015b60405180910390fd5b6000835167ffffffffffffffff811115610d5a57610d5a613b8c565b604051908082528060200260200182016040528015610d83578160200160208202803683370190505b50905060005b8451811015610dd257602080820286010151610dad906020808402870101516107b0565b828281518110610dbf57610dbf6142e7565b6020908102919091010152600101610d89565b509392505050565b60008181526103ec60205260408120541515610800565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e3c5750825b905060008267ffffffffffffffff166001148015610e595750303b155b905081158015610e67575080155b15610e9e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610eff5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610f3e8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c3092505050565b610f478c611c73565b60005b88811015610fca57610fc18a8a83818110610f6757610f676142e7565b9050602002810190610f799190614316565b8f604051602001610f8c9392919061437b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190523090611cc3565b50600101610f4a565b50610fd58787611cd1565b83156110365784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b61104c611b35565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611090575061108e8361071d611b35565b155b156110f05761109d611b35565b6040517fe237d92200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401610d35565b610cea838383611d9f565b611103611e0c565b61110d6000611c73565b565b611117611912565b60005b8381101561118f57611186858583818110611137576111376142e7565b90506020028101906111499190614316565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152503093925050611ea09050565b5060010161111a565b50610c018282611cd1565b60006111a4611b35565b90508073ffffffffffffffffffffffffffffffffffffffff166111c561165b565b73ffffffffffffffffffffffffffffffffffffffff161461122a576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610d35565b6109b281611c73565b61123b611912565b816003611248828261155b565b1561127f576040517f291e97c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526103eb602052604090205473ffffffffffffffffffffffffffffffffffffffff8085169116036112e0576040517fcde01bec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526103eb602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87169081179091559051909186917fbb6e2dfa02303e13fbfe5e00627306d9e551358f8050417f8aeecdce3eda90999190a350505050565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b5473ffffffffffffffffffffffffffffffffffffffff1692915050565b6000821580156113e557506113b6611361565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156113f257506001610800565b60008381527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff165b9392505050565b60008181526103ec6020526040812054906114678242101590565b156114ab57816000036114a6576040517fe56b081700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b915091565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff915091565b6114da611912565b61151982828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c3092505050565b5050565b611519611528611b35565b8383611f23565b60006108007f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6836113a3565b60008082600381111561157057611570614277565b0361158f575060008281526103e96020526040902054600e1115610800565b8160038111156115a1576115a1614277565b60008481526103e96020526040902054600190911b161515905092915050565b6109b27f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6825b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611621816119a0565b610c018383611b3f565b60606116567f000000000000000000000000000000000000000000000000000000000000000061202f565b905090565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00611386565b60606103e88054611694906143b4565b80601f01602080910402602001604051908101604052809291908181526020018280546116c0906143b4565b801561170d5780601f106116e25761010080835404028352916020019161170d565b820191906000526020600020905b8154815290600101906020018083116116f057829003601f168201915b5050505050905090565b61171f611912565b61172884610dda565b1561175f576040517f0edd7caf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405184907f9c0e4c917c5a85a068b952248cbde09f1a91e0c60faa6744178ac4e82029bd5590600090a26117ca8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061195592505050565b610c018482611aae565b6108a8858585858561206e565b6117e9611e0c565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255611852611361565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b6118a0611b35565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156118e457506118e28361071d611b35565b155b156118f15761109d611b35565b610cea8383836120aa565b600061080082612139565b606061080082612144565b61191f60006105d7611b35565b61110d576040517ff6899cee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115198282612265565b73ffffffffffffffffffffffffffffffffffffffff851661199357611982612278565b61198e848484846122d7565b6108a8565b6108a88585858585612335565b6109b2816119ac611b35565b61243b565b60007f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006119de84846113a3565b611aa45760008481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611a40611b35565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610800565b6000915050610800565b611ab88142101590565b15611aef576040517f6144a0ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526103ec6020526040908190208290555182907f53f6a49a6b02c345f0640b86b27aa58a09c7f92188a2ada08b95bfd51bbf82c590610b369084815260200190565b600061165661249a565b60007f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800611b6c84846113a3565b15611aa45760008481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055611bcc611b35565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a46001915050610800565b611c39816124d0565b6103e8611c46828261444f565b506040517fa5d4097edda6d87cb9329af83fb3712ef77eeb13738ffe43cc35a4ce305ad96290600090a150565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556115198261250b565b6060611445838360006125a1565b60005b81811015610cea57611d96838383818110611cf157611cf16142e7565b9050602002810190611d039190614569565b611d11906020810190614316565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250869150859050818110611d5a57611d5a6142e7565b9050602002810190611d6c9190614569565b611d7a906020810190613b19565b73ffffffffffffffffffffffffffffffffffffffff1690612664565b50600101611cd4565b73ffffffffffffffffffffffffffffffffffffffff8316611def576040517f01a8351400000000000000000000000000000000000000000000000000000000815260006004820152602401610d35565b610cea8360008484604051806020016040528060008152506126a8565b611e14611b35565b73ffffffffffffffffffffffffffffffffffffffff16611e32611361565b73ffffffffffffffffffffffffffffffffffffffff161461110d57611e55611b35565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d35565b60606000808473ffffffffffffffffffffffffffffffffffffffff1684604051611eca91906145a7565b600060405180830381855af49150503d8060008114611f05576040519150601f19603f3d011682016040523d82523d6000602084013e611f0a565b606091505b5091509150611f1a858383612712565b95945050505050565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450073ffffffffffffffffffffffffffffffffffffffff8316611f94576040517fced3e10000000000000000000000000000000000000000000000000000000000815260006004820152602401610d35565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260018401602090815260408083209488168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b6060600061203c836127a1565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b73ffffffffffffffffffffffffffffffffffffffff851661209d57612091612278565b61198e848484846127e2565b6108a88585858585612865565b73ffffffffffffffffffffffffffffffffffffffff83166120fa576040517f01a8351400000000000000000000000000000000000000000000000000000000815260006004820152602401610d35565b604080516001808252602082018590528183019081526060820184905260a082019092526000608082018181529192916108a8918791859085906126a8565b600061080082612963565b60008181527f89fc852226e759c7c636cf34d732f0198fc56a54876b2374a52beb7b0c5586016020526040812080546060927f89fc852226e759c7c636cf34d732f0198fc56a54876b2374a52beb7b0c5586009290916121a3906143b4565b80601f01602080910402602001604051908101604052809291908181526020018280546121cf906143b4565b801561221c5780601f106121f15761010080835404028352916020019161221c565b820191906000526020600020905b8154815290600101906020018083116121ff57829003601f168201915b50505050509050600081511161223a576122358461296e565b61225d565b60405161224d90839083906020016145b9565b6040516020818303038152906040525b949350505050565b61226e816124d0565b6115198282612a45565b6000612282611b35565b905061228d8161152f565b1580156122a0575061229e816108af565b155b156109b2576040517f15301d4000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416612327576040517f57f447ce00000000000000000000000000000000000000000000000000000000815260006004820152602401610d35565b610c016000858585856126a8565b600061233f611b35565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156123cf575073ffffffffffffffffffffffffffffffffffffffff80871660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b15612426576040517fe237d92200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808316600483015287166024820152604401610d35565b6124338686868686612ae4565b505050505050565b61244582826113a3565b611519576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610d35565b333081036124cd57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b90565b80516000036109b2576040517ff73c5b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6060814710156125df576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610d35565b6000808573ffffffffffffffffffffffffffffffffffffffff16848660405161260891906145a7565b60006040518083038185875af1925050503d8060008114612645576040519150601f19603f3d011682016040523d82523d6000602084013e61264a565b606091505b509150915061265a868383612712565b9695505050505050565b6060611445838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250612b91565b6126b485858585612caa565b73ffffffffffffffffffffffffffffffffffffffff8416156108a85760006126da611b35565b9050835160010361270457602084810151908401516126fd838989858589612cb6565b5050612433565b612433818787878787612eb1565b6060826127275761272282613042565b611445565b815115801561274b575073ffffffffffffffffffffffffffffffffffffffff84163b155b1561279a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610d35565b5080611445565b600060ff8216601f811115610800576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416612832576040517f57f447ce00000000000000000000000000000000000000000000000000000000815260006004820152602401610d35565b604080516001808252602082018690528183019081526060820185905260808201909252906124336000878484876126a8565b600061286f611b35565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156128ff575073ffffffffffffffffffffffffffffffffffffffff80871660009081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b15612956576040517fe237d92200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808316600483015287166024820152604401610d35565b6124338686868686613084565b600061080082613156565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450280546060917f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500916129bf906143b4565b80601f01602080910402602001604051908101604052809291908181526020018280546129eb906143b4565b8015612a385780601f10612a0d57610100808354040283529160200191612a38565b820191906000526020600020905b815481529060010190602001808311612a1b57829003601f168201915b5050505050915050919050565b60008281527f89fc852226e759c7c636cf34d732f0198fc56a54876b2374a52beb7b0c558601602052604090207f89fc852226e759c7c636cf34d732f0198fc56a54876b2374a52beb7b0c55860090612a9e838261444f565b50827f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b612aca85610811565b604051612ad79190613a71565b60405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff8416612b34576040517f57f447ce00000000000000000000000000000000000000000000000000000000815260006004820152602401610d35565b73ffffffffffffffffffffffffffffffffffffffff8516612b84576040517f01a8351400000000000000000000000000000000000000000000000000000000815260006004820152602401610d35565b6108a885858585856126a8565b606082471015612c23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610d35565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612c4c91906145a7565b60006040518083038185875af1925050503d8060008114612c89576040519150601f19603f3d011682016040523d82523d6000602084013e612c8e565b606091505b5091509150612c9f878383876131ac565b979650505050505050565b610c018484848461324c565b73ffffffffffffffffffffffffffffffffffffffff84163b15612433576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e6190612d2d908990899088908890889060040161465e565b6020604051808303816000875af1925050508015612d86575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612d83918101906146a3565b60015b612e15573d808015612db4576040519150601f19603f3d011682016040523d82523d6000602084013e612db9565b606091505b508051600003612e0d576040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86166004820152602401610d35565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014612ea8576040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86166004820152602401610d35565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff84163b15612433576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c8190612f2890899089908890889088906004016146c0565b6020604051808303816000875af1925050508015612f81575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612f7e918101906146a3565b60015b612faf573d808015612db4576040519150601f19603f3d011682016040523d82523d6000602084013e612db9565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014612ea8576040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86166004820152602401610d35565b8051156130525780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff84166130d4576040517f57f447ce00000000000000000000000000000000000000000000000000000000815260006004820152602401610d35565b73ffffffffffffffffffffffffffffffffffffffff8516613124576040517f01a8351400000000000000000000000000000000000000000000000000000000815260006004820152602401610d35565b60408051600180825260208201869052818301908152606082018590526080820190925290612ea887878484876126a8565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a000000000000000000000000000000000000000000000000000000001480610800575061080082613258565b6060831561324257825160000361323b5773ffffffffffffffffffffffffffffffffffffffff85163b61323b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610d35565b508161225d565b61225d8383613263565b610c01848484846132a7565b60006108008261337e565b8151156132735781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d359190613a71565b73ffffffffffffffffffffffffffffffffffffffff84166133725760006103ec6000846000815181106132dc576132dc6142e7565b602002602001015181526020019081526020016000205490506132ff8142101590565b15613370578060000361333e576040517fe56b081700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6b4238d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b610c0184848484613420565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000148061341157507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b806108005750610800826135aa565b7f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280061344d85858585613641565b73ffffffffffffffffffffffffffffffffffffffff8516613508576000805b84518110156134ec576000848281518110613489576134896142e7565b60200260200101519050808460000160008885815181106134ac576134ac6142e7565b6020026020010151815260200190815260200160002060008282546134d1919061472b565b909155506134e19050818461472b565b92505060010161346c565b5080826001016000828254613501919061472b565b9091555050505b73ffffffffffffffffffffffffffffffffffffffff84166108a8576000805b8451811015613596576000848281518110613544576135446142e7565b6020026020010151905080846000016000888581518110613567576135676142e7565b602090810291909101810151825281019190915260400160002080549190910390559190910190600101613527565b506001820180549190910390555050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061080057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610800565b805182517f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450091146136ab57825182516040517f5b05999100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610d35565b60006136b5611b35565b905060005b84518110156138235760208181028681018201519086019091015173ffffffffffffffffffffffffffffffffffffffff8916156137ba5760008281526020868152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290205481811015613786576040517f03dee4c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b166004820152602481018290526044810183905260648101849052608401610d35565b60008381526020878152604080832073ffffffffffffffffffffffffffffffffffffffff8e16845290915290209082900390555b73ffffffffffffffffffffffffffffffffffffffff8816156138195760008281526020868152604080832073ffffffffffffffffffffffffffffffffffffffff8c1684529091528120805483929061381390849061472b565b90915550505b50506001016136ba565b5083516001036138cb57602084015160009060208501519091508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516138bc929190918252602082015260400190565b60405180910390a45050612433565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051613941929190614765565b60405180910390a4505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146109b257600080fd5b6000806040838503121561398657600080fd5b823561399181613951565b946020939093013593505050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146109b257600080fd5b6000602082840312156139df57600080fd5b81356114458161399f565b6000602082840312156139fc57600080fd5b5035919050565b60005b83811015613a1e578181015183820152602001613a06565b50506000910152565b60008151808452613a3f816020860160208601613a03565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006114456020830184613a27565b60008083601f840112613a9657600080fd5b50813567ffffffffffffffff811115613aae57600080fd5b602083019150836020828501011115613ac657600080fd5b9250929050565b600080600060408486031215613ae257600080fd5b83359250602084013567ffffffffffffffff811115613b0057600080fd5b613b0c86828701613a84565b9497909650939450505050565b600060208284031215613b2b57600080fd5b813561144581613951565b60008060408385031215613b4957600080fd5b82359150602083013560048110613b5f57600080fd5b809150509250929050565b60008060408385031215613b7d57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613c0257613c02613b8c565b604052919050565b600067ffffffffffffffff821115613c2457613c24613b8c565b5060051b60200190565b600082601f830112613c3f57600080fd5b81356020613c54613c4f83613c0a565b613bbb565b8083825260208201915060208460051b870101935086841115613c7657600080fd5b602086015b84811015613c925780358352918301918301613c7b565b509695505050505050565b600082601f830112613cae57600080fd5b813567ffffffffffffffff811115613cc857613cc8613b8c565b613cf960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613bbb565b818152846020838601011115613d0e57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215613d4357600080fd5b8535613d4e81613951565b94506020860135613d5e81613951565b9350604086013567ffffffffffffffff80821115613d7b57600080fd5b613d8789838a01613c2e565b94506060880135915080821115613d9d57600080fd5b613da989838a01613c2e565b93506080880135915080821115613dbf57600080fd5b50613dcc88828901613c9d565b9150509295509295909350565b60008060408385031215613dec57600080fd5b823591506020830135613b5f81613951565b60008060408385031215613e1157600080fd5b823567ffffffffffffffff80821115613e2957600080fd5b818501915085601f830112613e3d57600080fd5b81356020613e4d613c4f83613c0a565b82815260059290921b84018101918181019089841115613e6c57600080fd5b948201945b83861015613e93578535613e8481613951565b82529482019490820190613e71565b96505086013592505080821115613ea957600080fd5b50613eb685828601613c2e565b9150509250929050565b60008151808452602080850194506020840160005b83811015613ef157815187529582019590820190600101613ed5565b509495945050505050565b6020815260006114456020830184613ec0565b60008083601f840112613f2157600080fd5b50813567ffffffffffffffff811115613f3957600080fd5b6020830191508360208260051b8501011115613ac657600080fd5b60008060008060008060006080888a031215613f6f57600080fd5b8735613f7a81613951565b9650602088013567ffffffffffffffff80821115613f9757600080fd5b613fa38b838c01613a84565b909850965060408a0135915080821115613fbc57600080fd5b613fc88b838c01613f0f565b909650945060608a0135915080821115613fe157600080fd5b50613fee8a828b01613f0f565b989b979a50959850939692959293505050565b60008060006060848603121561401657600080fd5b833561402181613951565b9250602084013567ffffffffffffffff8082111561403e57600080fd5b61404a87838801613c2e565b9350604086013591508082111561406057600080fd5b5061406d86828701613c2e565b9150509250925092565b6000806000806040858703121561408d57600080fd5b843567ffffffffffffffff808211156140a557600080fd5b6140b188838901613f0f565b909650945060208701359150808211156140ca57600080fd5b506140d787828801613f0f565b95989497509550505050565b600080602083850312156140f657600080fd5b823567ffffffffffffffff81111561410d57600080fd5b61411985828601613a84565b90969095509350505050565b6000806040838503121561413857600080fd5b823561414381613951565b915060208301358015158114613b5f57600080fd5b6000806000806060858703121561416e57600080fd5b84359350602085013567ffffffffffffffff81111561418c57600080fd5b61419887828801613a84565b9598909750949560400135949350505050565b600080604083850312156141be57600080fd5b82356141c981613951565b91506020830135613b5f81613951565b600080600080600060a086880312156141f157600080fd5b85356141fc81613951565b9450602086013561420c81613951565b93506040860135925060608601359150608086013567ffffffffffffffff81111561423657600080fd5b613dcc88828901613c9d565b60008060006060848603121561425757600080fd5b833561426281613951565b95602085013595506040909401359392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600483106142e1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261434b57600080fd5b83018035915067ffffffffffffffff82111561436657600080fd5b602001915036819003821315613ac657600080fd5b8284823760609190911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169101908152601401919050565b600181811c908216806143c857607f821691505b602082108103614401577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f821115610cea576000816000526020600020601f850160051c810160208610156144305750805b601f850160051c820191505b818110156124335782815560010161443c565b815167ffffffffffffffff81111561446957614469613b8c565b61447d8161447784546143b4565b84614407565b602080601f8311600181146144d0576000841561449a5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612433565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561451d578886015182559484019460019091019084016144fe565b508582101561455957878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261459d57600080fd5b9190910192915050565b6000825161459d818460208701613a03565b60008084546145c7816143b4565b600182811680156145df576001811461461257614641565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450614641565b8860005260208060002060005b858110156146385781548a82015290840190820161461f565b50505082870194505b505050508351614655818360208801613a03565b01949350505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a06080830152612c9f60a0830184613a27565b6000602082840312156146b557600080fd5b81516114458161399f565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a060408301526146f960a0830186613ec0565b828103606084015261470b8186613ec0565b9050828103608084015261471f8185613a27565b98975050505050505050565b80820180821115610800577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6040815260006147786040830185613ec0565b8281036020840152611f1a8185613ec056fea26469706673582212208c3ff525bf502b1a4ec653494e601514f59f61e257da2bc7efeabc9a226dfb8464736f6c634300081900334d756c74692d546f6b656e20436f6c6c656374696f6e20496d706c656d656e746174696f6e