@zoralabs/openzeppelin-contracts-upgradeable
Version:
Secure Smart Contract library for Solidity
576 lines • 56.1 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "ERC777Upgradeable",
"sourceName": "contracts/token/ERC777/ERC777Upgradeable.sol",
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "tokenHolder",
"type": "address"
}
],
"name": "AuthorizedOperator",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"indexed": false,
"internalType": "bytes",
"name": "operatorData",
"type": "bytes"
}
],
"name": "Burned",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"indexed": false,
"internalType": "bytes",
"name": "operatorData",
"type": "bytes"
}
],
"name": "Minted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "tokenHolder",
"type": "address"
}
],
"name": "RevokedOperator",
"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": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"indexed": false,
"internalType": "bytes",
"name": "operatorData",
"type": "bytes"
}
],
"name": "Sent",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "holder",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "authorizeOperator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenHolder",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "burn",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "defaultOperators",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "granularity",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "address",
"name": "tokenHolder",
"type": "address"
}
],
"name": "isOperatorFor",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "operatorData",
"type": "bytes"
}
],
"name": "operatorBurn",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "operatorData",
"type": "bytes"
}
],
"name": "operatorSend",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "revokeOperator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "send",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "holder",
"type": "address"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x608060405234801561001057600080fd5b50612acf806100206000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c8063959b8c3f116100b2578063d95b637111610081578063fad8b32a11610066578063fad8b32a14610363578063fc673c4f1461037f578063fe9d93031461039b57610136565b8063d95b637114610303578063dd62ed3e1461033357610136565b8063959b8c3f1461027d57806395d89b41146102995780639bd9bbc6146102b7578063a9059cbb146102d357610136565b806323b872dd11610109578063556f0dc7116100ee578063556f0dc71461021357806362ad1b831461023157806370a082311461024d57610136565b806323b872dd146101c5578063313ce567146101f557610136565b806306e485381461013b57806306fdde0314610159578063095ea7b31461017757806318160ddd146101a7575b600080fd5b6101436103b7565b6040516101509190611ad0565b60405180910390f35b610161610445565b60405161016e9190611b8b565b60405180910390f35b610191600480360381019061018c9190611c23565b6104d7565b60405161019e9190611c7e565b60405180910390f35b6101af6104fa565b6040516101bc9190611ca8565b60405180910390f35b6101df60048036038101906101da9190611cc3565b610504565b6040516101ec9190611c7e565b60405180910390f35b6101fd610555565b60405161020a9190611d32565b60405180910390f35b61021b61055e565b6040516102289190611ca8565b60405180910390f35b61024b60048036038101906102469190611e82565b610567565b005b61026760048036038101906102629190611f35565b6105cd565b6040516102749190611ca8565b60405180910390f35b61029760048036038101906102929190611f35565b610616565b005b6102a1610876565b6040516102ae9190611b8b565b60405180910390f35b6102d160048036038101906102cc9190611f62565b610908565b005b6102ed60048036038101906102e89190611c23565b610932565b6040516102fa9190611c7e565b60405180910390f35b61031d60048036038101906103189190611fd1565b610972565b60405161032a9190611c7e565b60405180910390f35b61034d60048036038101906103489190611fd1565b610b23565b60405161035a9190611ca8565b60405180910390f35b61037d60048036038101906103789190611f35565b610baa565b005b61039960048036038101906103949190612011565b610e0a565b005b6103b560048036038101906103b091906120b0565b610e6c565b005b6060603780548060200260200160405190810160405280929190818152602001828054801561043b57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116103f1575b5050505050905090565b6060603580546104549061213b565b80601f01602080910402602001604051908101604052809291908181526020018280546104809061213b565b80156104cd5780601f106104a2576101008083540402835291602001916104cd565b820191906000526020600020905b8154815290600101906020018083116104b057829003601f168201915b5050505050905090565b6000806104e2610e92565b90506104ef818585610e9a565b600191505092915050565b6000603454905090565b60008061050f610e92565b905061051c858285611063565b610549858585604051806020016040528060008152506040518060200160405280600081525060006110ef565b60019150509392505050565b60006012905090565b60006001905090565b610578610572610e92565b86610972565b6105b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ae906121de565b60405180910390fd5b6105c6858585858560016110ef565b5050505050565b6000603360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b8073ffffffffffffffffffffffffffffffffffffffff16610635610e92565b73ffffffffffffffffffffffffffffffffffffffff160361068b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068290612270565b60405180910390fd5b603860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561077557603a60006106e9610e92565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055610812565b600160396000610783610e92565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b61081a610e92565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a350565b6060603680546108859061213b565b80601f01602080910402602001604051908101604052809291908181526020018280546108b19061213b565b80156108fe5780601f106108d3576101008083540402835291602001916108fe565b820191906000526020600020905b8154815290600101906020018083116108e157829003601f168201915b5050505050905090565b61092d610913610e92565b8484846040518060200160405280600081525060016110ef565b505050565b600061096861093f610e92565b8484604051806020016040528060008152506040518060200160405280600081525060006110ef565b6001905092915050565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610a8a5750603860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015610a895750603a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b80610b1b5750603960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b6000603b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610bb2610e92565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1690612302565b60405180910390fd5b603860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610d12576001603a6000610c7f610e92565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610da6565b60396000610d1e610e92565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b610dae610e92565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a350565b610e1b610e15610e92565b85610972565b610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e51906121de565b60405180910390fd5b610e668484848461120d565b50505050565b610e8e610e77610e92565b83836040518060200160405280600081525061120d565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0090612394565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f90612426565b60405180910390fd5b80603b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110569190611ca8565b60405180910390a3505050565b600061106f8484610b23565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110e957818110156110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d290612492565b60405180910390fd5b6110e88484848403610e9a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361115e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115590612524565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c4906125b6565b60405180910390fd5b60006111d7610e92565b90506111e7818888888888611461565b6111f58188888888886115c8565b611204818888888888886117e5565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361127c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127390612648565b60405180910390fd5b6000611286610e92565b905061129781866000878787611461565b6112a481866000876119b7565b6000603360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508481101561132b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611322906126da565b60405180910390fd5b848103603360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084603460008282546113839190612729565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a40988787876040516113eb939291906127b2565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516114519190611ca8565b60405180910390a3505050505050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956040518363ffffffff1660e01b81526004016114d292919061281f565b602060405180830381865afa1580156114ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611513919061285d565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146115bf578073ffffffffffffffffffffffffffffffffffffffff166375ab97828888888888886040518763ffffffff1660e01b815260040161158c9695949392919061288a565b600060405180830381600087803b1580156115a657600080fd5b505af11580156115ba573d6000803e3d6000fd5b505050505b50505050505050565b6115d4868686866119b7565b6000603360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561165b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116529061296b565b60405180910390fd5b838103603360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083603360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116f0919061298b565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc8261467798787878760405161176f939291906127b2565b60405180910390a48473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516117d49190611ca8565b60405180910390a350505050505050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6040518363ffffffff1660e01b815260040161185692919061281f565b602060405180830381865afa158015611873573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611897919061285d565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611946578073ffffffffffffffffffffffffffffffffffffffff166223de298989898989896040518763ffffffff1660e01b815260040161190f9695949392919061288a565b600060405180830381600087803b15801561192957600080fd5b505af115801561193d573d6000803e3d6000fd5b505050506119ad565b81156119ac5761196b8673ffffffffffffffffffffffffffffffffffffffff166119bd565b156119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a290612a79565b60405180910390fd5b5b5b5050505050505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a3782611a0c565b9050919050565b611a4781611a2c565b82525050565b6000611a598383611a3e565b60208301905092915050565b6000602082019050919050565b6000611a7d826119e0565b611a8781856119eb565b9350611a92836119fc565b8060005b83811015611ac3578151611aaa8882611a4d565b9750611ab583611a65565b925050600181019050611a96565b5085935050505092915050565b60006020820190508181036000830152611aea8184611a72565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b2c578082015181840152602081019050611b11565b83811115611b3b576000848401525b50505050565b6000601f19601f8301169050919050565b6000611b5d82611af2565b611b678185611afd565b9350611b77818560208601611b0e565b611b8081611b41565b840191505092915050565b60006020820190508181036000830152611ba58184611b52565b905092915050565b6000604051905090565b600080fd5b600080fd5b611bca81611a2c565b8114611bd557600080fd5b50565b600081359050611be781611bc1565b92915050565b6000819050919050565b611c0081611bed565b8114611c0b57600080fd5b50565b600081359050611c1d81611bf7565b92915050565b60008060408385031215611c3a57611c39611bb7565b5b6000611c4885828601611bd8565b9250506020611c5985828601611c0e565b9150509250929050565b60008115159050919050565b611c7881611c63565b82525050565b6000602082019050611c936000830184611c6f565b92915050565b611ca281611bed565b82525050565b6000602082019050611cbd6000830184611c99565b92915050565b600080600060608486031215611cdc57611cdb611bb7565b5b6000611cea86828701611bd8565b9350506020611cfb86828701611bd8565b9250506040611d0c86828701611c0e565b9150509250925092565b600060ff82169050919050565b611d2c81611d16565b82525050565b6000602082019050611d476000830184611d23565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611d8f82611b41565b810181811067ffffffffffffffff82111715611dae57611dad611d57565b5b80604052505050565b6000611dc1611bad565b9050611dcd8282611d86565b919050565b600067ffffffffffffffff821115611ded57611dec611d57565b5b611df682611b41565b9050602081019050919050565b82818337600083830152505050565b6000611e25611e2084611dd2565b611db7565b905082815260208101848484011115611e4157611e40611d52565b5b611e4c848285611e03565b509392505050565b600082601f830112611e6957611e68611d4d565b5b8135611e79848260208601611e12565b91505092915050565b600080600080600060a08688031215611e9e57611e9d611bb7565b5b6000611eac88828901611bd8565b9550506020611ebd88828901611bd8565b9450506040611ece88828901611c0e565b935050606086013567ffffffffffffffff811115611eef57611eee611bbc565b5b611efb88828901611e54565b925050608086013567ffffffffffffffff811115611f1c57611f1b611bbc565b5b611f2888828901611e54565b9150509295509295909350565b600060208284031215611f4b57611f4a611bb7565b5b6000611f5984828501611bd8565b91505092915050565b600080600060608486031215611f7b57611f7a611bb7565b5b6000611f8986828701611bd8565b9350506020611f9a86828701611c0e565b925050604084013567ffffffffffffffff811115611fbb57611fba611bbc565b5b611fc786828701611e54565b9150509250925092565b60008060408385031215611fe857611fe7611bb7565b5b6000611ff685828601611bd8565b925050602061200785828601611bd8565b9150509250929050565b6000806000806080858703121561202b5761202a611bb7565b5b600061203987828801611bd8565b945050602061204a87828801611c0e565b935050604085013567ffffffffffffffff81111561206b5761206a611bbc565b5b61207787828801611e54565b925050606085013567ffffffffffffffff81111561209857612097611bbc565b5b6120a487828801611e54565b91505092959194509250565b600080604083850312156120c7576120c6611bb7565b5b60006120d585828601611c0e565b925050602083013567ffffffffffffffff8111156120f6576120f5611bbc565b5b61210285828601611e54565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061215357607f821691505b6020821081036121665761216561210c565b5b50919050565b7f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60008201527f7220666f7220686f6c6465720000000000000000000000000000000000000000602082015250565b60006121c8602c83611afd565b91506121d38261216c565b604082019050919050565b600060208201905081810360008301526121f7816121bb565b9050919050565b7f4552433737373a20617574686f72697a696e672073656c66206173206f70657260008201527f61746f7200000000000000000000000000000000000000000000000000000000602082015250565b600061225a602483611afd565b9150612265826121fe565b604082019050919050565b600060208201905081810360008301526122898161224d565b9050919050565b7f4552433737373a207265766f6b696e672073656c66206173206f70657261746f60008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006122ec602183611afd565b91506122f782612290565b604082019050919050565b6000602082019050818103600083015261231b816122df565b9050919050565b7f4552433737373a20617070726f76652066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061237e602583611afd565b915061238982612322565b604082019050919050565b600060208201905081810360008301526123ad81612371565b9050919050565b7f4552433737373a20617070726f766520746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612410602383611afd565b915061241b826123b4565b604082019050919050565b6000602082019050818103600083015261243f81612403565b9050919050565b7f4552433737373a20696e73756666696369656e7420616c6c6f77616e63650000600082015250565b600061247c601e83611afd565b915061248782612446565b602082019050919050565b600060208201905081810360008301526124ab8161246f565b9050919050565b7f4552433737373a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061250e602683611afd565b9150612519826124b2565b604082019050919050565b6000602082019050818103600083015261253d81612501565b9050919050565b7f4552433737373a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006125a0602483611afd565b91506125ab82612544565b604082019050919050565b600060208201905081810360008301526125cf81612593565b9050919050565b7f4552433737373a206275726e2066726f6d20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612632602283611afd565b915061263d826125d6565b604082019050919050565b6000602082019050818103600083015261266181612625565b9050919050565b7f4552433737373a206275726e20616d6f756e7420657863656564732062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b60006126c4602383611afd565b91506126cf82612668565b604082019050919050565b600060208201905081810360008301526126f3816126b7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061273482611bed565b915061273f83611bed565b925082821015612752576127516126fa565b5b828203905092915050565b600081519050919050565b600082825260208201905092915050565b60006127848261275d565b61278e8185612768565b935061279e818560208601611b0e565b6127a781611b41565b840191505092915050565b60006060820190506127c76000830186611c99565b81810360208301526127d98185612779565b905081810360408301526127ed8184612779565b9050949350505050565b61280081611a2c565b82525050565b6000819050919050565b61281981612806565b82525050565b600060408201905061283460008301856127f7565b6128416020830184612810565b9392505050565b60008151905061285781611bc1565b92915050565b60006020828403121561287357612872611bb7565b5b600061288184828501612848565b91505092915050565b600060c08201905061289f60008301896127f7565b6128ac60208301886127f7565b6128b960408301876127f7565b6128c66060830186611c99565b81810360808301526128d88185612779565b905081810360a08301526128ec8184612779565b9050979650505050505050565b7f4552433737373a207472616e7366657220616d6f756e7420657863656564732060008201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b6000612955602783611afd565b9150612960826128f9565b604082019050919050565b6000602082019050818103600083015261298481612948565b9050919050565b600061299682611bed565b91506129a183611bed565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156129d6576129d56126fa565b5b828201905092915050565b7f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460008201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60208201527f6b656e73526563697069656e7400000000000000000000000000000000000000604082015250565b6000612a63604d83611afd565b9150612a6e826129e1565b606082019050919050565b60006020820190508181036000830152612a9281612a56565b905091905056fea2646970667358221220f19532f231f6f98ac2a06314e79cbd384ac95b635d3577e54c79e6d366bccf7c64736f6c634300080d0033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101365760003560e01c8063959b8c3f116100b2578063d95b637111610081578063fad8b32a11610066578063fad8b32a14610363578063fc673c4f1461037f578063fe9d93031461039b57610136565b8063d95b637114610303578063dd62ed3e1461033357610136565b8063959b8c3f1461027d57806395d89b41146102995780639bd9bbc6146102b7578063a9059cbb146102d357610136565b806323b872dd11610109578063556f0dc7116100ee578063556f0dc71461021357806362ad1b831461023157806370a082311461024d57610136565b806323b872dd146101c5578063313ce567146101f557610136565b806306e485381461013b57806306fdde0314610159578063095ea7b31461017757806318160ddd146101a7575b600080fd5b6101436103b7565b6040516101509190611ad0565b60405180910390f35b610161610445565b60405161016e9190611b8b565b60405180910390f35b610191600480360381019061018c9190611c23565b6104d7565b60405161019e9190611c7e565b60405180910390f35b6101af6104fa565b6040516101bc9190611ca8565b60405180910390f35b6101df60048036038101906101da9190611cc3565b610504565b6040516101ec9190611c7e565b60405180910390f35b6101fd610555565b60405161020a9190611d32565b60405180910390f35b61021b61055e565b6040516102289190611ca8565b60405180910390f35b61024b60048036038101906102469190611e82565b610567565b005b61026760048036038101906102629190611f35565b6105cd565b6040516102749190611ca8565b60405180910390f35b61029760048036038101906102929190611f35565b610616565b005b6102a1610876565b6040516102ae9190611b8b565b60405180910390f35b6102d160048036038101906102cc9190611f62565b610908565b005b6102ed60048036038101906102e89190611c23565b610932565b6040516102fa9190611c7e565b60405180910390f35b61031d60048036038101906103189190611fd1565b610972565b60405161032a9190611c7e565b60405180910390f35b61034d60048036038101906103489190611fd1565b610b23565b60405161035a9190611ca8565b60405180910390f35b61037d60048036038101906103789190611f35565b610baa565b005b61039960048036038101906103949190612011565b610e0a565b005b6103b560048036038101906103b091906120b0565b610e6c565b005b6060603780548060200260200160405190810160405280929190818152602001828054801561043b57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116103f1575b5050505050905090565b6060603580546104549061213b565b80601f01602080910402602001604051908101604052809291908181526020018280546104809061213b565b80156104cd5780601f106104a2576101008083540402835291602001916104cd565b820191906000526020600020905b8154815290600101906020018083116104b057829003601f168201915b5050505050905090565b6000806104e2610e92565b90506104ef818585610e9a565b600191505092915050565b6000603454905090565b60008061050f610e92565b905061051c858285611063565b610549858585604051806020016040528060008152506040518060200160405280600081525060006110ef565b60019150509392505050565b60006012905090565b60006001905090565b610578610572610e92565b86610972565b6105b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ae906121de565b60405180910390fd5b6105c6858585858560016110ef565b5050505050565b6000603360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b8073ffffffffffffffffffffffffffffffffffffffff16610635610e92565b73ffffffffffffffffffffffffffffffffffffffff160361068b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068290612270565b60405180910390fd5b603860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561077557603a60006106e9610e92565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055610812565b600160396000610783610e92565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b61081a610e92565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a350565b6060603680546108859061213b565b80601f01602080910402602001604051908101604052809291908181526020018280546108b19061213b565b80156108fe5780601f106108d3576101008083540402835291602001916108fe565b820191906000526020600020905b8154815290600101906020018083116108e157829003601f168201915b5050505050905090565b61092d610913610e92565b8484846040518060200160405280600081525060016110ef565b505050565b600061096861093f610e92565b8484604051806020016040528060008152506040518060200160405280600081525060006110ef565b6001905092915050565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610a8a5750603860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015610a895750603a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b80610b1b5750603960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b6000603b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610bb2610e92565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1690612302565b60405180910390fd5b603860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610d12576001603a6000610c7f610e92565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610da6565b60396000610d1e610e92565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b610dae610e92565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a350565b610e1b610e15610e92565b85610972565b610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e51906121de565b60405180910390fd5b610e668484848461120d565b50505050565b610e8e610e77610e92565b83836040518060200160405280600081525061120d565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0090612394565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f90612426565b60405180910390fd5b80603b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110569190611ca8565b60405180910390a3505050565b600061106f8484610b23565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110e957818110156110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d290612492565b60405180910390fd5b6110e88484848403610e9a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361115e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115590612524565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c4906125b6565b60405180910390fd5b60006111d7610e92565b90506111e7818888888888611461565b6111f58188888888886115c8565b611204818888888888886117e5565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361127c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127390612648565b60405180910390fd5b6000611286610e92565b905061129781866000878787611461565b6112a481866000876119b7565b6000603360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508481101561132b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611322906126da565b60405180910390fd5b848103603360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084603460008282546113839190612729565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a40988787876040516113eb939291906127b2565b60405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516114519190611ca8565b60405180910390a3505050505050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956040518363ffffffff1660e01b81526004016114d292919061281f565b602060405180830381865afa1580156114ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611513919061285d565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146115bf578073ffffffffffffffffffffffffffffffffffffffff166375ab97828888888888886040518763ffffffff1660e01b815260040161158c9695949392919061288a565b600060405180830381600087803b1580156115a657600080fd5b505af11580156115ba573d6000803e3d6000fd5b505050505b50505050505050565b6115d4868686866119b7565b6000603360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561165b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116529061296b565b60405180910390fd5b838103603360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083603360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116f0919061298b565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc8261467798787878760405161176f939291906127b2565b60405180910390a48473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516117d49190611ca8565b60405180910390a350505050505050565b6000731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6040518363ffffffff1660e01b815260040161185692919061281f565b602060405180830381865afa158015611873573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611897919061285d565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611946578073ffffffffffffffffffffffffffffffffffffffff166223de298989898989896040518763ffffffff1660e01b815260040161190f9695949392919061288a565b600060405180830381600087803b15801561192957600080fd5b505af115801561193d573d6000803e3d6000fd5b505050506119ad565b81156119ac5761196b8673ffffffffffffffffffffffffffffffffffffffff166119bd565b156119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a290612a79565b60405180910390fd5b5b5b5050505050505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a3782611a0c565b9050919050565b611a4781611a2c565b82525050565b6000611a598383611a3e565b60208301905092915050565b6000602082019050919050565b6000611a7d826119e0565b611a8781856119eb565b9350611a92836119fc565b8060005b83811015611ac3578151611aaa8882611a4d565b9750611ab583611a65565b925050600181019050611a96565b5085935050505092915050565b60006020820190508181036000830152611aea8184611a72565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b2c578082015181840152602081019050611b11565b83811115611b3b576000848401525b50505050565b6000601f19601f8301169050919050565b6000611b5d82611af2565b611b678185611afd565b9350611b77818560208601611b0e565b611b8081611b41565b840191505092915050565b60006020820190508181036000830152611ba58184611b52565b905092915050565b6000604051905090565b600080fd5b600080fd5b611bca81611a2c565b8114611bd557600080fd5b50565b600081359050611be781611bc1565b92915050565b6000819050919050565b611c0081611bed565b8114611c0b57600080fd5b50565b600081359050611c1d81611bf7565b92915050565b60008060408385031215611c3a57611c39611bb7565b5b6000611c4885828601611bd8565b9250506020611c5985828601611c0e565b9150509250929050565b60008115159050919050565b611c7881611c63565b82525050565b6000602082019050611c936000830184611c6f565b92915050565b611ca281611bed565b82525050565b6000602082019050611cbd6000830184611c99565b92915050565b600080600060608486031215611cdc57611cdb611bb7565b5b6000611cea86828701611bd8565b9350506020611cfb86828701611bd8565b9250506040611d0c86828701611c0e565b9150509250925092565b600060ff82169050919050565b611d2c81611d16565b82525050565b6000602082019050611d476000830184611d23565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611d8f82611b41565b810181811067ffffffffffffffff82111715611dae57611dad611d57565b5b80604052505050565b6000611dc1611bad565b9050611dcd8282611d86565b919050565b600067ffffffffffffffff821115611ded57611dec611d57565b5b611df682611b41565b9050602081019050919050565b82818337600083830152505050565b6000611e25611e2084611dd2565b611db7565b905082815260208101848484011115611e4157611e40611d52565b5b611e4c848285611e03565b509392505050565b600082601f830112611e6957611e68611d4d565b5b8135611e79848260208601611e12565b91505092915050565b600080600080600060a08688031215611e9e57611e9d611bb7565b5b6000611eac88828901611bd8565b9550506020611ebd88828901611bd8565b9450506040611ece88828901611c0e565b935050606086013567ffffffffffffffff811115611eef57611eee611bbc565b5b611efb88828901611e54565b925050608086013567ffffffffffffffff811115611f1c5761