0 txs
0 calls
constructor
constructor()
functions
balanceOf
viewfunction balanceOf(address account, uint256 id) view returns (uint256)
balanceOfBatch
viewfunction balanceOfBatch(address[] accounts, uint256[] ids) view returns (uint256[])
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
exists
viewfunction exists(uint256 id) view returns (bool)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isApprovedForAll
viewfunction isApprovedForAll(address account, address operator) view returns (bool)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
SPENDER_ROLE
viewfunction SPENDER_ROLE() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
tokenConfigs
viewfunction tokenConfigs(uint256 tokenId) view returns (uint256 costPerMint, uint256 collateralPrice, address collateralAddress, bool redeemable)
totalSupply
viewfunction totalSupply() view returns (uint256)
totalSupply
viewfunction totalSupply(uint256 id) view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
uri
viewfunction uri(uint256) view returns (string)
usdcSpursTokenId
viewfunction usdcSpursTokenId() view returns (uint256)
acceptOwnership
nonpayablefunction acceptOwnership()
adminSetTokenConfig
nonpayablefunction adminSetTokenConfig(uint256 tokenId, tuple config)
adminSetURI
nonpayablefunction adminSetURI(string newuri)
adminUpdateUSDCSpursTokenId
nonpayablefunction adminUpdateUSDCSpursTokenId(uint256 newTokenId)
adminWithdraw
nonpayablefunction adminWithdraw(address recipient, uint256 amount, uint256 tokenId)
burn
nonpayablefunction burn(address account, uint256 id, uint256 value)
burnBatch
nonpayablefunction burnBatch(address account, uint256[] ids, uint256[] values)
buySpurs
payablefunction buySpurs(address account, uint256 amount, uint256 tokenId) payable
buySpurs
nonpayablefunction buySpurs(address account, uint256 amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _admin, string _tokenUri, address _usdcAddress)
redeemSpurs
nonpayablefunction redeemSpurs(address account, uint256 amount, uint256 tokenId)
renounceOwnership
nonpayablefunction renounceOwnership()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
safeBatchTransferFrom
nonpayablefunction safeBatchTransferFrom(address from, address to, uint256[] ids, uint256[] values, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes data)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AdminWithdrawal
event AdminWithdrawal(address indexed recipient, uint256 amount, uint256 indexed tokenId)
ApprovalForAll
event ApprovalForAll(address indexed account, address indexed operator, bool approved)
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
TransferBatch
event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values)
TransferSingle
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value)
Upgraded
event Upgraded(address indexed implementation)
URI
event URI(string value, uint256 indexed id)
USDCSpursTokenIdUpdated
event USDCSpursTokenIdUpdated(uint256 indexed oldId, uint256 indexed newId)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
ERC1155InsufficientBalance
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId)
ERC1155InvalidApprover
error ERC1155InvalidApprover(address approver)
ERC1155InvalidArrayLength
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength)
ERC1155InvalidOperator
error ERC1155InvalidOperator(address operator)
ERC1155InvalidReceiver
error ERC1155InvalidReceiver(address receiver)
ERC1155InvalidSender
error ERC1155InvalidSender(address sender)
ERC1155MissingApprovalForAll
error ERC1155MissingApprovalForAll(address operator, address owner)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InsufficientBalance
error InsufficientBalance(uint256 required, uint256 available)
InvalidInitialization
error InvalidInitialization()
InvalidTokenId
error InvalidTokenId()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
Spurs1155_AdminUpdateUSDCSpursTokenId_InvalidTokenId
error Spurs1155_AdminUpdateUSDCSpursTokenId_InvalidTokenId()
Spurs1155_Insufficient_ETH_In_Contract
error Spurs1155_Insufficient_ETH_In_Contract(uint256 required, uint256 available)
Spurs1155_Insufficient_Spurs_Balance
error Spurs1155_Insufficient_Spurs_Balance(uint256 required, uint256 available)
Spurs1155_Not_Enough_ETH_Sent
error Spurs1155_Not_Enough_ETH_Sent(uint256 required, uint256 sent)
Spurs1155_Token_Not_Redeemable
error Spurs1155_Token_Not_Redeemable(uint256 tokenId)
Spurs1155_Unauthorized_Caller
error Spurs1155_Unauthorized_Caller(address caller, address account)
TransferFailed
error TransferFailed()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroCollateralPrice
error ZeroCollateralPrice()
creation bytecode
0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff16815250348015610042575f5ffd5b5061005161005660201b60201c565b6101b6565b5f61006561015460201b60201c565b9050805f0160089054906101000a900460ff16156100af576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146101515767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051610148919061019d565b60405180910390a15b50565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b5f67ffffffffffffffff82169050919050565b6101978161017b565b82525050565b5f6020820190506101b05f83018461018e565b92915050565b60805161553d6101dc5f395f8181611d0d01528181611d620152611f21015261553d5ff3fe608060405260043610610227575f3560e01c80638da5cb5b11610122578063d547741f116100aa578063f2fde38b1161006e578063f2fde38b146107f9578063f5298aca14610821578063f8a146dd14610849578063fac7c53014610871578063fcec962e146108995761022e565b8063d547741f14610719578063de3db04714610741578063e30c39781461076b578063e985e9c514610795578063f242432a146107d15761022e565b8063a7fd40bf116100f1578063a7fd40bf14610624578063ad3cb1cc1461064c578063bd85b03914610676578063c01bd0e9146106b2578063d3241a7c146106f15761022e565b80638da5cb5b1461056c57806391d1485414610596578063a217fddf146105d2578063a22cb465146105fc5761022e565b80634f1ef286116101b05780636fd0c6a7116101745780636fd0c6a7146104d2578063715018a6146104ee57806372c16a241461050457806379ba50971461052e5780637bb7c0d8146105445761022e565b80634f1ef286146104005780634f558e791461041c57806352d1902d146104585780635552bc8b146104825780636b20c454146104aa5761022e565b8063248a9ca3116101f7578063248a9ca3146103105780632eb2c2d61461034c5780632f2ff15d1461037457806336568abe1461039c5780634e1273f4146103c45761022e565b8062fdd58e1461023257806301ffc9a71461026e5780630e89341c146102aa57806318160ddd146102e65761022e565b3661022e57005b5f5ffd5b34801561023d575f5ffd5b5061025860048036038101906102539190613fb3565b6108c1565b6040516102659190614000565b60405180910390f35b348015610279575f5ffd5b50610294600480360381019061028f919061406e565b610924565b6040516102a191906140b3565b60405180910390f35b3480156102b5575f5ffd5b506102d060048036038101906102cb91906140cc565b610935565b6040516102dd9190614167565b60405180910390f35b3480156102f1575f5ffd5b506102fa6109d5565b6040516103079190614000565b60405180910390f35b34801561031b575f5ffd5b50610336600480360381019061033191906141ba565b6109ec565b60405161034391906141f4565b60405180910390f35b348015610357575f5ffd5b50610372600480360381019061036d91906143fd565b610a16565b005b34801561037f575f5ffd5b5061039a600480360381019061039591906144c8565b610abd565b005b3480156103a7575f5ffd5b506103c260048036038101906103bd91906144c8565b610adf565b005b3480156103cf575f5ffd5b506103ea60048036038101906103e591906145c6565b610b5a565b6040516103f791906146f3565b60405180910390f35b61041a60048036038101906104159190614713565b610c64565b005b348015610427575f5ffd5b50610442600480360381019061043d91906140cc565b610c83565b60405161044f91906140b3565b60405180910390f35b348015610463575f5ffd5b5061046c610c96565b60405161047991906141f4565b60405180910390f35b34801561048d575f5ffd5b506104a860048036038101906104a3919061476d565b610cc7565b005b3480156104b5575f5ffd5b506104d060048036038101906104cb91906147bd565b610e41565b005b6104ec60048036038101906104e7919061476d565b610eed565b005b3480156104f9575f5ffd5b50610502611016565b005b34801561050f575f5ffd5b50610518611029565b60405161052591906141f4565b60405180910390f35b348015610539575f5ffd5b5061054261104d565b005b34801561054f575f5ffd5b5061056a600480360381019061056591906148e3565b6110db565b005b348015610577575f5ffd5b50610580611260565b60405161058d919061495e565b60405180910390f35b3480156105a1575f5ffd5b506105bc60048036038101906105b791906144c8565b611295565b6040516105c991906140b3565b60405180910390f35b3480156105dd575f5ffd5b506105e6611306565b6040516105f391906141f4565b60405180910390f35b348015610607575f5ffd5b50610622600480360381019061061d91906149a1565b61130c565b005b34801561062f575f5ffd5b5061064a600480360381019061064591906149df565b611322565b005b348015610657575f5ffd5b5061066061133b565b60405161066d9190614167565b60405180910390f35b348015610681575f5ffd5b5061069c600480360381019061069791906140cc565b611374565b6040516106a99190614000565b60405180910390f35b3480156106bd575f5ffd5b506106d860048036038101906106d391906140cc565b61139b565b6040516106e89493929190614a26565b60405180910390f35b3480156106fc575f5ffd5b5061071760048036038101906107129190613fb3565b6113f2565b005b348015610724575f5ffd5b5061073f600480360381019061073a91906144c8565b611403565b005b34801561074c575f5ffd5b50610755611425565b6040516107629190614000565b60405180910390f35b348015610776575f5ffd5b5061077f61142b565b60405161078c919061495e565b60405180910390f35b3480156107a0575f5ffd5b506107bb60048036038101906107b69190614a69565b611460565b6040516107c891906140b3565b60405180910390f35b3480156107dc575f5ffd5b506107f760048036038101906107f29190614aa7565b6114fc565b005b348015610804575f5ffd5b5061081f600480360381019061081a9190614b3a565b6115a3565b005b34801561082c575f5ffd5b506108476004803603810190610842919061476d565b61165c565b005b348015610854575f5ffd5b5061086f600480360381019061086a91906140cc565b611708565b005b34801561087c575f5ffd5b5061089760048036038101906108929190614bde565b61178d565b005b3480156108a4575f5ffd5b506108bf60048036038101906108ba9190614c57565b6117b3565b005b5f5f6108cb611890565b9050805f015f8481526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205491505092915050565b5f61092e826118b7565b9050919050565b60605f610940611890565b905080600201805461095190614cd4565b80601f016020809104026020016040519081016040528092919081815260200182805461097d90614cd4565b80156109c85780601f1061099f576101008083540402835291602001916109c8565b820191905f5260205f20905b8154815290600101906020018083116109ab57829003601f168201915b5050505050915050919050565b5f5f6109df611998565b9050806001015491505090565b5f5f6109f66119bf565b9050805f015f8481526020019081526020015f2060010154915050919050565b5f610a1f6119e6565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015610a645750610a628682611460565b155b15610aa85780866040517fe237d922000000000000000000000000000000000000000000000000000000008152600401610a9f929190614d04565b60405180910390fd5b610ab586868686866119ed565b505050505050565b610ac6826109ec565b610acf81611ae1565b610ad98383611af5565b50505050565b610ae76119e6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b4b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b558282611bed565b505050565b60608151835114610ba657815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401610b9d929190614d2b565b60405180910390fd5b5f835167ffffffffffffffff811115610bc257610bc1614211565b5b604051908082528060200260200182016040528015610bf05781602001602082028036833780820191505090505b5090505f5f90505b8451811015610c5957610c2f610c178287611ce590919063ffffffff16565b610c2a8387611cf890919063ffffffff16565b6108c1565b828281518110610c4257610c41614d52565b5b602002602001018181525050806001019050610bf8565b508091505092915050565b610c6c611d0b565b610c7582611df1565b610c7f8282611e01565b5050565b5f5f610c8e83611374565b119050919050565b5f610c9f611f1f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b610cd18333611fa6565b5f610ce5825f61205190919063ffffffff16565b9050610d117f7434c6f201a551bfd17336985361933e0c4935b520dac8a49d937b325f7d5c0a33611295565b158015610d2057508060600151155b15610d6257816040517ff5083b0b000000000000000000000000000000000000000000000000000000008152600401610d599190614000565b60405180910390fd5b5f610d6d85846108c1565b905083811015610db65783816040517f7b1b50f3000000000000000000000000000000000000000000000000000000008152600401610dad929190614d2b565b60405180910390fd5b610dc1858486612141565b5f826020015185610dd29190614dac565b9050610e033382856040015173ffffffffffffffffffffffffffffffffffffffff166121e39092919063ffffffff16565b610e39576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b610e496119e6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015610e925750610e9083610e8b6119e6565b611460565b155b15610edd57610e9f6119e6565b836040517fe237d922000000000000000000000000000000000000000000000000000000008152600401610ed4929190614d04565b60405180910390fd5b610ee883838361244f565b505050565b5f610f01825f61205190919063ffffffff16565b90505f816020015184610f149190614dac565b9050610f458134846040015173ffffffffffffffffffffffffffffffffffffffff166124df9092919063ffffffff16565b610f7b576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f9585848660405180602001604052805f8152506127ed565b5f73ffffffffffffffffffffffffffffffffffffffff16826040015173ffffffffffffffffffffffffffffffffffffffff160361100f575f8134610fd99190614ded565b90505f81111561100d5761100c813373ffffffffffffffffffffffffffffffffffffffff1661288290919063ffffffff16565b5b505b5050505050565b61101e612948565b6110275f6129cf565b565b7f7434c6f201a551bfd17336985361933e0c4935b520dac8a49d937b325f7d5c0a81565b5f6110566119e6565b90508073ffffffffffffffffffffffffffffffffffffffff1661107761142b565b73ffffffffffffffffffffffffffffffffffffffff16146110cf57806040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016110c6919061495e565b60405180910390fd5b6110d8816129cf565b50565b5f6110e4612a0c565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f5f8267ffffffffffffffff1614801561112c5750825b90505f60018367ffffffffffffffff1614801561115f57505f3073ffffffffffffffffffffffffffffffffffffffff163b145b90508115801561116d575080155b156111a4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083156111f1576001855f0160086101000a81548160ff0219169083151502179055505b6111fc888888612a33565b8315611256575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2600160405161124d9190614e75565b60405180910390a15b5050505050505050565b5f5f61126a612b37565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b5f5f61129f6119bf565b9050805f015f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1691505092915050565b5f5f1b81565b61131e6113176119e6565b8383612b5e565b5050565b5f5f1b61132e81611ae1565b61133782612cd5565b5050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b5f5f61137e611998565b9050805f015f8481526020019081526020015f2054915050919050565b5f602052805f5260405f205f91509050805f015490806001015490806002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160149054906101000a900460ff16905084565b6113ff8282600154610eed565b5050565b61140c826109ec565b61141581611ae1565b61141f8383611bed565b50505050565b60015481565b5f5f611435612cf6565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b5f5f61146a611890565b9050806001015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1691505092915050565b5f6115056119e6565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561154a57506115488682611460565b155b1561158e5780866040517fe237d922000000000000000000000000000000000000000000000000000000008152600401611585929190614d04565b60405180910390fd5b61159b8686868686612d1d565b505050505050565b6115ab612948565b5f6115b4612cf6565b905081815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff16611616611260565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b6116646119e6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156116ad57506116ab836116a66119e6565b611460565b155b156116f8576116ba6119e6565b836040517fe237d9220000000000000000000000000000000000000000000000000000000081526004016116ef929190614d04565b60405180910390fd5b611703838383612141565b505050565b5f5f1b61171481611ae1565b5f820361174d576040517f557f95e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60015490508260018190555082817fe1de34f959090deb9acf246cc6377ee9798f3baef95fd47d214444c4181a55ed60405160405180910390a3505050565b5f5f1b61179981611ae1565b6117ae83835f612e239092919063ffffffff16565b505050565b5f5f1b6117bf81611ae1565b5f6117d3835f61205190919063ffffffff16565b9050828573ffffffffffffffffffffffffffffffffffffffff167f766b63950f3939375480c9204d7b6bfb28296ac63930596ff0a547026e1d89368660405161181c9190614000565b60405180910390a36118538585836040015173ffffffffffffffffffffffffffffffffffffffff166121e39092919063ffffffff16565b611889576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b5f7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500905090565b5f7fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061198157507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611991575061199082612ebd565b5b9050919050565b5f7f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800905090565b5f7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800905090565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a5d575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401611a54919061495e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611acd575f6040517f01a83514000000000000000000000000000000000000000000000000000000008152600401611ac4919061495e565b60405180910390fd5b611ada8585858585612f36565b5050505050565b611af281611aed6119e6565b612fe2565b50565b5f5f611aff6119bf565b9050611b0b8484611295565b611be2576001815f015f8681526020019081526020015f205f015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611b7e6119e6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050611be7565b5f9150505b92915050565b5f5f611bf76119bf565b9050611c038484611295565b15611cda575f815f015f8681526020019081526020015f205f015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611c766119e6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a46001915050611cdf565b5f9150505b92915050565b5f60208202602084010151905092915050565b5f60208202602084010151905092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480611db857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611d9f613033565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611def576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f5f1b611dfd81611ae1565b5050565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e6957506040513d601f19601f82011682018060405250810190611e669190614ea2565b60015b611eaa57816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401611ea1919061495e565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b8114611f1057806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401611f0791906141f4565b60405180910390fd5b611f1a8383613086565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611fa4576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561200957506120077f7434c6f201a551bfd17336985361933e0c4935b520dac8a49d937b325f7d5c0a82611295565b155b1561204d5780826040517f4e1f58a0000000000000000000000000000000000000000000000000000000008152600401612044929190614d04565b60405180910390fd5b5050565b612059613ed9565b5f835f8481526020019081526020015f206040518060800160405290815f820154815260200160018201548152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160149054906101000a900460ff16151515158152505090505f816020015103612137576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121b1575f6040517f01a835140000000000000000000000000000000000000000000000000000000081526004016121a8919061495e565b60405180910390fd5b5f5f6121bd84846130f8565b915091506121dc855f848460405180602001604052805f815250612f36565b5050505050565b5f5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612290578147101561225e5781476040517fcf479181000000000000000000000000000000000000000000000000000000008152600401612255929190614d2b565b60405180910390fd5b612287828473ffffffffffffffffffffffffffffffffffffffff1661288290919063ffffffff16565b60019050612448565b5f849050828173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016122ce919061495e565b602060405180830381865afa1580156122e9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061230d9190614ee1565b10156123c957828173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161234d919061495e565b602060405180830381865afa158015612368573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061238c9190614ee1565b6040517fcf4791810000000000000000000000000000000000000000000000000000000081526004016123c0929190614d2b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040518363ffffffff1660e01b8152600401612404929190614f5e565b6020604051808303815f875af1158015612420573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124449190614f99565b9150505b9392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124bf575f6040517f01a835140000000000000000000000000000000000000000000000000000000081526004016124b6919061495e565b60405180910390fd5b6124da835f848460405180602001604052805f815250612f36565b505050565b5f5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612563578282101561255a5782826040517fcf479181000000000000000000000000000000000000000000000000000000008152600401612551929190614d2b565b60405180910390fd5b600190506127e6565b5f82146125a95782826040517fcf4791810000000000000000000000000000000000000000000000000000000081526004016125a0929190614d2b565b60405180910390fd5b5f849050838173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016125e7919061495e565b602060405180830381865afa158015612602573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126269190614ee1565b10806126aa5750838173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401612669929190614d04565b602060405180830381865afa158015612684573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a89190614ee1565b105b1561276557838173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016126e9919061495e565b602060405180830381865afa158015612704573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127289190614ee1565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815260040161275c929190614d2b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b81526004016127a293929190614fc4565b6020604051808303815f875af11580156127be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127e29190614f99565b9150505b9392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361285d575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401612854919061495e565b60405180910390fd5b5f5f61286985856130f8565b9150915061287a5f87848487612f36565b505050505050565b804710156128c95747816040517fcf4791810000000000000000000000000000000000000000000000000000000081526004016128c0929190614d2b565b60405180910390fd5b5f5f8373ffffffffffffffffffffffffffffffffffffffff16836040516128ef90615026565b5f6040518083038185875af1925050503d805f8114612929576040519150601f19603f3d011682016040523d82523d5f602084013e61292e565b606091505b5091509150816129425761294181613128565b5b50505050565b6129506119e6565b73ffffffffffffffffffffffffffffffffffffffff1661296e611260565b73ffffffffffffffffffffffffffffffffffffffff16146129cd576129916119e6565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016129c4919061495e565b60405180910390fd5b565b5f6129d8612cf6565b9050805f015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055612a088261316c565b5050565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b612a3b61323d565b612a448361327d565b612a4d82613291565b612a556132a5565b612a615f5f1b84611af5565b50600180819055506040518060800160405280606481526020016109c481526020018273ffffffffffffffffffffffffffffffffffffffff1681526020015f15158152505f5f60015481526020019081526020015f205f820151815f0155602082015181600101556040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160146101000a81548160ff021916908315150217905550905050505050565b5f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b5f612b67611890565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bd9575f6040517fced3e100000000000000000000000000000000000000000000000000000000008152600401612bd0919061495e565b60405180910390fd5b81816001015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3184604051612cc791906140b3565b60405180910390a350505050565b5f612cde611890565b905081816002019081612cf191906151d1565b505050565b5f7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00905090565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612d8d575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401612d84919061495e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612dfd575f6040517f01a83514000000000000000000000000000000000000000000000000000000008152600401612df4919061495e565b60405180910390fd5b5f5f612e0985856130f8565b91509150612e1a8787848487612f36565b50505050505050565b612e2c816132af565b80835f8481526020019081526020015f205f820151815f0155602082015181600101556040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160020160146101000a81548160ff021916908315150217905550905050505050565b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612f2f5750612f2e826132ef565b5b9050919050565b612f4285858585613358565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612fdb575f612f7e6119e6565b90506001845103612fca575f612f9d5f86611cf890919063ffffffff16565b90505f612fb35f86611cf890919063ffffffff16565b9050612fc383898985858961336a565b5050612fd9565b612fd8818787878787613519565b5b505b5050505050565b612fec8282611295565b61302f5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016130269291906152a0565b60405180910390fd5b5050565b5f61305f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6136c8565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61308f826136d1565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f815111156130eb576130e5828261379a565b506130f4565b6130f361381a565b5b5050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b5f8151111561313a5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613175612b37565b90505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b613245613856565b61327b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b61328561323d565b61328e81613874565b50565b61329961323d565b6132a2816138f8565b50565b6132ad61323d565b565b5f8160200151036132ec576040517f23f05c9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6133648484848461390c565b50505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b1115613511578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016133ca959493929190615319565b6020604051808303815f875af192505050801561340557506040513d601f19601f820116820180604052508101906134029190615385565b60015b613486573d805f8114613433576040519150601f19603f3d011682016040523d82523d5f602084013e613438565b606091505b505f81510361347e57846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401613475919061495e565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461350f57846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401613506919061495e565b60405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b11156136c0578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016135799594939291906153b0565b6020604051808303815f875af19250505080156135b457506040513d601f19601f820116820180604052508101906135b19190615385565b60015b613635573d805f81146135e2576040519150601f19603f3d011682016040523d82523d5f602084013e6135e7565b606091505b505f81510361362d57846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401613624919061495e565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146136be57846040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016136b5919061495e565b60405180910390fd5b505b505050505050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361372c57806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401613723919061495e565b60405180910390fd5b806137587f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6136c8565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f5f8473ffffffffffffffffffffffffffffffffffffffff16846040516137c39190615446565b5f60405180830381855af49150503d805f81146137fb576040519150601f19603f3d011682016040523d82523d5f602084013e613800565b606091505b5091509150613810858383613aa7565b9250505092915050565b5f341115613854576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f61385f612a0c565b5f0160089054906101000a900460ff16905090565b61387c61323d565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036138ec575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016138e3919061495e565b60405180910390fd5b6138f5816129cf565b50565b61390061323d565b61390981612cd5565b50565b5f613915611998565b905061392385858585613b34565b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036139ef575f5f90505f5f90505b84518110156139d2575f61397c8286611cf890919063ffffffff16565b905080845f015f613996858a611cf890919063ffffffff16565b81526020019081526020015f205f8282546139b1919061545c565b9250508190555080836139c4919061545c565b92505080600101905061395f565b5080826001015f8282546139e6919061545c565b92505081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603613aa0575f5f90505f5f90505b8451811015613a8c575f613a488286611cf890919063ffffffff16565b905080845f015f613a62858a611cf890919063ffffffff16565b81526020019081526020015f205f8282540392505081905550808301925050806001019050613a2b565b5080826001015f8282540392505081905550505b5050505050565b606082613abc57613ab782613128565b613b2c565b5f8251148015613ae257505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15613b2457836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401613b1b919061495e565b60405180910390fd5b819050613b2d565b5b9392505050565b5f613b3d611890565b90508151835114613b8957825182516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401613b80929190614d2b565b60405180910390fd5b5f613b926119e6565b90505f5f90505b8451811015613d97575f613bb68287611cf890919063ffffffff16565b90505f613bcc8387611cf890919063ffffffff16565b90505f73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614613cf3575f855f015f8481526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613c9d57898183856040517f03dee4c5000000000000000000000000000000000000000000000000000000008152600401613c94949392919061548f565b60405180910390fd5b818103865f015f8581526020019081526020015f205f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614613d8a5780855f015f8481526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613d82919061545c565b925050819055505b5050806001019050613b99565b506001845103613e52575f613db55f86611cf890919063ffffffff16565b90505f613dcb5f86611cf890919063ffffffff16565b90508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051613e43929190614d2b565b60405180910390a45050613ed1565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051613ec89291906154d2565b60405180910390a45b505050505050565b60405180608001604052805f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f151581525090565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613f4f82613f26565b9050919050565b613f5f81613f45565b8114613f69575f5ffd5b50565b5f81359050613f7a81613f56565b92915050565b5f819050919050565b613f9281613f80565b8114613f9c575f5ffd5b50565b5f81359050613fad81613f89565b92915050565b5f5f60408385031215613fc957613fc8613f1e565b5b5f613fd685828601613f6c565b9250506020613fe785828601613f9f565b9150509250929050565b613ffa81613f80565b82525050565b5f6020820190506140135f830184613ff1565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61404d81614019565b8114614057575f5ffd5b50565b5f8135905061406881614044565b92915050565b5f6020828403121561408357614082613f1e565b5b5f6140908482850161405a565b91505092915050565b5f8115159050919050565b6140ad81614099565b82525050565b5f6020820190506140c65f8301846140a4565b92915050565b5f602082840312156140e1576140e0613f1e565b5b5f6140ee84828501613f9f565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f614139826140f7565b6141438185614101565b9350614153818560208601614111565b61415c8161411f565b840191505092915050565b5f6020820190508181035f83015261417f818461412f565b905092915050565b5f819050919050565b61419981614187565b81146141a3575f5ffd5b50565b5f813590506141b481614190565b92915050565b5f602082840312156141cf576141ce613f1e565b5b5f6141dc848285016141a6565b91505092915050565b6141ee81614187565b82525050565b5f6020820190506142075f8301846141e5565b92915050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6142478261411f565b810181811067ffffffffffffffff8211171561426657614265614211565b5b80604052505050565b5f614278613f15565b9050614284828261423e565b919050565b5f67ffffffffffffffff8211156142a3576142a2614211565b5b602082029050602081019050919050565b5f5ffd5b5f6142ca6142c584614289565b61426f565b905080838252602082019050602084028301858111156142ed576142ec6142b4565b5b835b8181101561431657806143028882613f9f565b8452602084019350506020810190506142ef565b5050509392505050565b5f82601f8301126143345761433361420d565b5b81356143448482602086016142b8565b91505092915050565b5f5ffd5b5f67ffffffffffffffff82111561436b5761436a614211565b5b6143748261411f565b9050602081019050919050565b828183375f83830152505050565b5f6143a161439c84614351565b61426f565b9050828152602081018484840111156143bd576143bc61434d565b5b6143c8848285614381565b509392505050565b5f82601f8301126143e4576143e361420d565b5b81356143f484826020860161438f565b91505092915050565b5f5f5f5f5f60a0868803121561441657614415613f1e565b5b5f61442388828901613f6c565b955050602061443488828901613f6c565b945050604086013567ffffffffffffffff81111561445557614454613f22565b5b61446188828901614320565b935050606086013567ffffffffffffffff81111561448257614481613f22565b5b61448e88828901614320565b925050608086013567ffffffffffffffff8111156144af576144ae613f22565b5b6144bb888289016143d0565b9150509295509295909350565b5f5f604083850312156144de576144dd613f1e565b5b5f6144eb858286016141a6565b92505060206144fc85828601613f6c565b9150509250929050565b5f67ffffffffffffffff8211156145205761451f614211565b5b602082029050602081019050919050565b5f61454361453e84614506565b61426f565b90508083825260208201905060208402830185811115614566576145656142b4565b5b835b8181101561458f578061457b8882613f6c565b845260208401935050602081019050614568565b5050509392505050565b5f82601f8301126145ad576145ac61420d565b5b81356145bd848260208601614531565b91505092915050565b5f5f604083850312156145dc576145db613f1e565b5b5f83013567ffffffffffffffff8111156145f9576145f8613f22565b5b61460585828601614599565b925050602083013567ffffffffffffffff81111561462657614625613f22565b5b61463285828601614320565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61466e81613f80565b82525050565b5f61467f8383614665565b60208301905092915050565b5f602082019050919050565b5f6146a18261463c565b6146ab8185614646565b93506146b683614656565b805f5b838110156146e65781516146cd8882614674565b97506146d88361468b565b9250506001810190506146b9565b5085935050505092915050565b5f6020820190508181035f83015261470b8184614697565b905092915050565b5f5f6040838503121561472957614728613f1e565b5b5f61473685828601613f6c565b925050602083013567ffffffffffffffff81111561475757614756613f22565b5b614763858286016143d0565b9150509250929050565b5f5f5f6060848603121561478457614783613f1e565b5b5f61479186828701613f6c565b93505060206147a286828701613f9f565b92505060406147b386828701613f9f565b9150509250925092565b5f5f5f606084860312156147d4576147d3613f1e565b5b5f6147e186828701613f6c565b935050602084013567ffffffffffffffff81111561480257614801613f22565b5b61480e86828701614320565b925050604084013567ffffffffffffffff81111561482f5761482e613f22565b5b61483b86828701614320565b9150509250925092565b5f67ffffffffffffffff82111561485f5761485e614211565b5b6148688261411f565b9050602081019050919050565b5f61488761488284614845565b61426f565b9050828152602081018484840111156148a3576148a261434d565b5b6148ae848285614381565b509392505050565b5f82601f8301126148ca576148c961420d565b5b81356148da848260208601614875565b91505092915050565b5f5f5f606084860312156148fa576148f9613f1e565b5b5f61490786828701613f6c565b935050602084013567ffffffffffffffff81111561492857614927613f22565b5b614934868287016148b6565b925050604061494586828701613f6c565b9150509250925092565b61495881613f45565b82525050565b5f6020820190506149715f83018461494f565b92915050565b61498081614099565b811461498a575f5ffd5b50565b5f8135905061499b81614977565b92915050565b5f5f604083850312156149b7576149b6613f1e565b5b5f6149c485828601613f6c565b92505060206149d58582860161498d565b9150509250929050565b5f602082840312156149f4576149f3613f1e565b5b5f82013567ffffffffffffffff811115614a1157614a10613f22565b5b614a1d848285016148b6565b91505092915050565b5f608082019050614a395f830187613ff1565b614a466020830186613ff1565b614a53604083018561494f565b614a6060608301846140a4565b95945050505050565b5f5f60408385031215614a7f57614a7e613f1e565b5b5f614a8c85828601613f6c565b9250506020614a9d85828601613f6c565b9150509250929050565b5f5f5f5f5f60a08688031215614ac057614abf613f1e565b5b5f614acd88828901613f6c565b9550506020614ade88828901613f6c565b9450506040614aef88828901613f9f565b9350506060614b0088828901613f9f565b925050608086013567ffffffffffffffff811115614b2157614b20613f22565b5b614b2d888289016143d0565b9150509295509295909350565b5f60208284031215614b4f57614b4e613f1e565b5b5f614b5c84828501613f6c565b91505092915050565b5f5ffd5b5f60808284031215614b7e57614b7d614b65565b5b614b88608061426f565b90505f614b9784828501613f9f565b5f830152506020614baa84828501613f9f565b6020830152506040614bbe84828501613f6c565b6040830152506060614bd28482850161498d565b60608301525092915050565b5f5f60a08385031215614bf457614bf3613f1e565b5b5f614c0185828601613f9f565b9250506020614c1285828601614b69565b9150509250929050565b5f614c2682613f26565b9050919050565b614c3681614c1c565b8114614c40575f5ffd5b50565b5f81359050614c5181614c2d565b92915050565b5f5f5f60608486031215614c6e57614c6d613f1e565b5b5f614c7b86828701614c43565b9350506020614c8c86828701613f9f565b9250506040614c9d86828701613f9f565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614ceb57607f821691505b602082108103614cfe57614cfd614ca7565b5b50919050565b5f604082019050614d175f83018561494f565b614d24602083018461494f565b9392505050565b5f604082019050614d3e5f830185613ff1565b614d4b6020830184613ff1565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614db682613f80565b9150614dc183613f80565b9250828202614dcf81613f80565b91508282048414831517614de657614de5614d7f565b5b5092915050565b5f614df782613f80565b9150614e0283613f80565b9250828203905081811115614e1a57614e19614d7f565b5b92915050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f819050919050565b5f614e5f614e5a614e5584614e20565b614e3c565b614e29565b9050919050565b614e6f81614e45565b82525050565b5f602082019050614e885f830184614e66565b92915050565b5f81519050614e9c81614190565b92915050565b5f60208284031215614eb757614eb6613f1e565b5b5f614ec484828501614e8e565b91505092915050565b5f81519050614edb81613f89565b92915050565b5f60208284031215614ef657614ef5613f1e565b5b5f614f0384828501614ecd565b91505092915050565b5f614f26614f21614f1c84613f26565b614e3c565b613f26565b9050919050565b5f614f3782614f0c565b9050919050565b5f614f4882614f2d565b9050919050565b614f5881614f3e565b82525050565b5f604082019050614f715f830185614f4f565b614f7e6020830184613ff1565b9392505050565b5f81519050614f9381614977565b92915050565b5f60208284031215614fae57614fad613f1e565b5b5f614fbb84828501614f85565b91505092915050565b5f606082019050614fd75f83018661494f565b614fe4602083018561494f565b614ff16040830184613ff1565b949350505050565b5f81905092915050565b50565b5f6150115f83614ff9565b915061501c82615003565b5f82019050919050565b5f61503082615006565b9150819050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026150967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261505b565b6150a0868361505b565b95508019841693508086168417925050509392505050565b5f6150d26150cd6150c884613f80565b614e3c565b613f80565b9050919050565b5f819050919050565b6150eb836150b8565b6150ff6150f7826150d9565b848454615067565b825550505050565b5f5f905090565b615116615107565b6151218184846150e2565b505050565b5b81811015615144576151395f8261510e565b600181019050615127565b5050565b601f8211156151895761515a8161503a565b6151638461504c565b81016020851015615172578190505b61518661517e8561504c565b830182615126565b50505b505050565b5f82821c905092915050565b5f6151a95f198460080261518e565b1980831691505092915050565b5f6151c1838361519a565b9150826002028217905092915050565b6151da826140f7565b67ffffffffffffffff8111156151f3576151f2614211565b5b6151fd8254614cd4565b615208828285615148565b5f60209050601f831160018114615239575f8415615227578287015190505b61523185826151b6565b865550615298565b601f1984166152478661503a565b5f5b8281101561526e57848901518255600182019150602085019450602081019050615249565b8683101561528b5784890151615287601f89168261519a565b8355505b6001600288020188555050505b505050505050565b5f6040820190506152b35f83018561494f565b6152c060208301846141e5565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f6152eb826152c7565b6152f581856152d1565b9350615305818560208601614111565b61530e8161411f565b840191505092915050565b5f60a08201905061532c5f83018861494f565b615339602083018761494f565b6153466040830186613ff1565b6153536060830185613ff1565b818103608083015261536581846152e1565b90509695505050505050565b5f8151905061537f81614044565b92915050565b5f6020828403121561539a57615399613f1e565b5b5f6153a784828501615371565b91505092915050565b5f60a0820190506153c35f83018861494f565b6153d0602083018761494f565b81810360408301526153e28186614697565b905081810360608301526153f68185614697565b9050818103608083015261540a81846152e1565b90509695505050505050565b5f615420826152c7565b61542a8185614ff9565b935061543a818560208601614111565b80840191505092915050565b5f6154518284615416565b915081905092915050565b5f61546682613f80565b915061547183613f80565b925082820190508082111561548957615488614d7f565b5b92915050565b5f6080820190506154a25f83018761494f565b6154af6020830186613ff1565b6154bc6040830185613ff1565b6154c96060830184613ff1565b95945050505050565b5f6040820190508181035f8301526154ea8185614697565b905081810360208301526154fe8184614697565b9050939250505056fea2646970667358221220fafb9b7e342e08ebd55f8df41033176a7330c9a88aa304421168f2eaec0d4f6664736f6c634300081c0033