{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC777PresetFixedSupplyUpgradeable",
  "sourceName": "contracts/token/ERC777/presets/ERC777PresetFixedSupplyUpgradeable.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": 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": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "internalType": "address[]",
          "name": "defaultOperators",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "initialSupply",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "0x608060405234801561001057600080fd5b50611fcd806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063768f950a116100ad578063d95b637111610071578063d95b637114610233578063dd62ed3e14610246578063fad8b32a1461027f578063fc673c4f14610292578063fe9d9303146102a557610121565b8063768f950a146101df578063959b8c3f146101f257806395d89b41146102055780639bd9bbc61461020d578063a9059cbb1461022057610121565b806323b872dd116100f457806323b872dd1461018e578063313ce567146101a1578063556f0dc7146101b057806362ad1b83146101b757806370a08231146101cc57610121565b806306e485381461012657806306fdde0314610144578063095ea7b31461015957806318160ddd1461017c575b600080fd5b61012e6102b8565b60405161013b9190611d2d565b60405180910390f35b61014c61031a565b60405161013b9190611d7a565b61016c610167366004611a31565b6103a3565b604051901515815260200161013b565b6034545b60405190815260200161013b565b61016c61019c366004611961565b6103bb565b6040516012815260200161013b565b6001610180565b6101ca6101c53660046119a1565b610584565b005b6101806101da3660046118f1565b6105c0565b6101ca6101ed366004611b30565b6105df565b6101ca6102003660046118f1565b61065d565b61014c61077b565b6101ca61021b366004611a5c565b61078a565b61016c61022e366004611a31565b6107ad565b61016c610241366004611929565b610860565b610180610254366004611929565b6001600160a01b039182166000908152603b6020908152604080832093909416825291909152205490565b6101ca61028d3660046118f1565b610902565b6101ca6102a0366004611ab3565b610a1e565b6101ca6102b3366004611c43565b610a56565b6060603780548060200260200160405190810160405280929190818152602001828054801561031057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116102f2575b5050505050905090565b60606035805461032990611f00565b80601f016020809104026020016040519081016040528092919081815260200182805461035590611f00565b80156103105780601f1061037757610100808354040283529160200191610310565b820191906000526020600020905b81548152906001019060200180831161038557509395945050505050565b6000336103b1818585610a75565b5060019392505050565b60006001600160a01b0383166103ec5760405162461bcd60e51b81526004016103e390611ddb565b60405180910390fd5b6001600160a01b0384166104515760405162461bcd60e51b815260206004820152602660248201527f4552433737373a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016103e3565b6000339050610482818686866040518060200160405280600081525060405180602001604052806000815250610b9c565b6104ae818686866040518060200160405280600081525060405180602001604052806000815250610cd3565b6001600160a01b038086166000908152603b6020908152604080832093851683529290522054838110156105365760405162461bcd60e51b815260206004820152602960248201527f4552433737373a207472616e7366657220616d6f756e74206578636565647320604482015268616c6c6f77616e636560b81b60648201526084016103e3565b61054a86836105458785611ee9565b610a75565b6105788287878760405180602001604052806000815250604051806020016040528060008152506000610e39565b50600195945050505050565b61058e3386610860565b6105aa5760405162461bcd60e51b81526004016103e390611e1f565b6105b98585858585600161100d565b5050505050565b6001600160a01b0381166000908152603360205260409020545b919050565b600054610100900460ff16806105f8575060005460ff16155b6106145760405162461bcd60e51b81526004016103e390611d8d565b600054610100900460ff16158015610636576000805461ffff19166101011790555b61064386868686866110f0565b8015610655576000805461ff00191690555b505050505050565b336001600160a01b03821614156106c25760405162461bcd60e51b8152602060048201526024808201527f4552433737373a20617574686f72697a696e672073656c66206173206f70657260448201526330ba37b960e11b60648201526084016103e3565b6001600160a01b03811660009081526038602052604090205460ff161561071357336000908152603a602090815260408083206001600160a01b03851684529091529020805460ff19169055610742565b3360009081526039602090815260408083206001600160a01b03851684529091529020805460ff191660011790555b60405133906001600160a01b038316907ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f990600090a350565b60606036805461032990611f00565b6107a83384848460405180602001604052806000815250600161100d565b505050565b60006001600160a01b0383166107d55760405162461bcd60e51b81526004016103e390611ddb565b6000339050610806818286866040518060200160405280600081525060405180602001604052806000815250610b9c565b610832818286866040518060200160405280600081525060405180602001604052806000815250610cd3565b6103b18182868660405180602001604052806000815250604051806020016040528060008152506000610e39565b6000816001600160a01b0316836001600160a01b031614806108cb57506001600160a01b03831660009081526038602052604090205460ff1680156108cb57506001600160a01b038083166000908152603a602090815260408083209387168352929052205460ff16155b806108fb57506001600160a01b0380831660009081526039602090815260408083209387168352929052205460ff165b9392505050565b6001600160a01b0381163314156109655760405162461bcd60e51b815260206004820152602160248201527f4552433737373a207265766f6b696e672073656c66206173206f70657261746f6044820152603960f91b60648201526084016103e3565b6001600160a01b03811660009081526038602052604090205460ff16156109b957336000908152603a602090815260408083206001600160a01b03851684529091529020805460ff191660011790556109e5565b3360009081526039602090815260408083206001600160a01b03851684529091529020805460ff191690555b60405133906001600160a01b038316907f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa190600090a350565b610a283385610860565b610a445760405162461bcd60e51b81526004016103e390611e1f565b610a5084848484611167565b50505050565b610a7133838360405180602001604052806000815250611167565b5050565b6001600160a01b038316610ad95760405162461bcd60e51b815260206004820152602560248201527f4552433737373a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103e3565b6001600160a01b038216610b3b5760405162461bcd60e51b815260206004820152602360248201527f4552433737373a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103e3565b6001600160a01b038381166000818152603b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca9060440160206040518083038186803b158015610c1857600080fd5b505afa158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c50919061190d565b90506001600160a01b03811615610cca57604051633ad5cbc160e11b81526001600160a01b038216906375ab978290610c97908a908a908a908a908a908a90600401611cd3565b600060405180830381600087803b158015610cb157600080fd5b505af1158015610cc5573d6000803e3d6000fd5b505050505b50505050505050565b6001600160a01b03851660009081526033602052604090205483811015610d4c5760405162461bcd60e51b815260206004820152602760248201527f4552433737373a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b60648201526084016103e3565b6001600160a01b03808716600090815260336020526040808220878503905591871681529081208054869290610d83908490611ed1565b92505081905550846001600160a01b0316866001600160a01b0316886001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987878787604051610ddb93929190611e6b565b60405180910390a4846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610e2891815260200190565b60405180910390a350505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca9060440160206040518083038186803b158015610eb557600080fd5b505afa158015610ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eed919061190d565b90506001600160a01b03811615610f69576040516223de2960e01b81526001600160a01b038216906223de2990610f32908b908b908b908b908b908b90600401611cd3565b600060405180830381600087803b158015610f4c57600080fd5b505af1158015610f60573d6000803e3d6000fd5b50505050611003565b8115611003576001600160a01b0386163b156110035760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a4016103e3565b5050505050505050565b6001600160a01b03861661106e5760405162461bcd60e51b815260206004820152602260248201527f4552433737373a2073656e642066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016103e3565b6001600160a01b0385166110c45760405162461bcd60e51b815260206004820181905260248201527f4552433737373a2073656e6420746f20746865207a65726f206164647265737360448201526064016103e3565b336110d3818888888888610b9c565b6110e1818888888888610cd3565b610cca81888888888888610e39565b600054610100900460ff1680611109575060005460ff16155b6111255760405162461bcd60e51b81526004016103e390611d8d565b600054610100900460ff16158015611147576000805461ffff19166101011790555b61114f61131c565b61115a868686611388565b61064386868686866115cb565b6001600160a01b0384166111c85760405162461bcd60e51b815260206004820152602260248201527f4552433737373a206275726e2066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016103e3565b336111d881866000878787610b9c565b6001600160a01b0385166000908152603360205260409020548481101561124d5760405162461bcd60e51b815260206004820152602360248201527f4552433737373a206275726e20616d6f756e7420657863656564732062616c616044820152626e636560e81b60648201526084016103e3565b6001600160a01b038616600090815260336020526040812086830390556034805487929061127c908490611ee9565b92505081905550856001600160a01b0316826001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a40988787876040516112ca93929190611e6b565b60405180910390a36040518581526000906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a3505050505050565b600054610100900460ff1680611335575060005460ff16155b6113515760405162461bcd60e51b81526004016103e390611d8d565b600054610100900460ff16158015611373576000805461ffff19166101011790555b8015611385576000805461ff00191690555b50565b600054610100900460ff16806113a1575060005460ff16155b6113bd5760405162461bcd60e51b81526004016103e390611d8d565b600054610100900460ff161580156113df576000805461ffff19166101011790555b83516113f290603590602087019061178d565b50825161140690603690602086019061178d565b50815161141a906037906020850190611811565b5060005b82518110156114915760016038600085848151811061144d57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061148981611f3b565b91505061141e565b506040516329965a1d60e01b815230600482018190527fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce217705460248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad24906329965a1d90606401600060405180830381600087803b15801561150b57600080fd5b505af115801561151f573d6000803e3d6000fd5b50506040516329965a1d60e01b815230600482018190527faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a60248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad2492506329965a1d9150606401600060405180830381600087803b15801561159c57600080fd5b505af11580156115b0573d6000803e3d6000fd5b505050508015610a50576000805461ff001916905550505050565b600054610100900460ff16806115e4575060005460ff16155b6116005760405162461bcd60e51b81526004016103e390611d8d565b600054610100900460ff16158015611622576000805461ffff19166101011790555b61064382846040518060200160405280600081525060405180602001604052806000815250610a508484848460016001600160a01b0385166116a65760405162461bcd60e51b815260206004820181905260248201527f4552433737373a206d696e7420746f20746865207a65726f206164647265737360448201526064016103e3565b600033905084603460008282546116bd9190611ed1565b90915550506001600160a01b038616600090815260336020526040812080548792906116ea908490611ed1565b9091555061170090508160008888888888610e39565b856001600160a01b0316816001600160a01b03167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d87878760405161174793929190611e6b565b60405180910390a36040518581526001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161130c565b82805461179990611f00565b90600052602060002090601f0160209004810192826117bb5760008555611801565b82601f106117d457805160ff1916838001178555611801565b82800160010185558215611801579182015b828111156118015782518255916020019190600101906117e6565b5061180d929150611866565b5090565b828054828255906000526020600020908101928215611801579160200282015b8281111561180157825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611831565b5b8082111561180d5760008155600101611867565b80356105da81611f82565b600082601f830112611896578081fd5b813567ffffffffffffffff8111156118b0576118b0611f6c565b6118c3601f8201601f1916602001611ea0565b8181528460208386010111156118d7578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611902578081fd5b81356108fb81611f82565b60006020828403121561191e578081fd5b81516108fb81611f82565b6000806040838503121561193b578081fd5b823561194681611f82565b9150602083013561195681611f82565b809150509250929050565b600080600060608486031215611975578081fd5b833561198081611f82565b9250602084013561199081611f82565b929592945050506040919091013590565b600080600080600060a086880312156119b8578081fd5b85356119c381611f82565b945060208601356119d381611f82565b935060408601359250606086013567ffffffffffffffff808211156119f6578283fd5b611a0289838a01611886565b93506080880135915080821115611a17578283fd5b50611a2488828901611886565b9150509295509295909350565b60008060408385031215611a43578182fd5b8235611a4e81611f82565b946020939093013593505050565b600080600060608486031215611a70578283fd5b8335611a7b81611f82565b925060208401359150604084013567ffffffffffffffff811115611a9d578182fd5b611aa986828701611886565b9150509250925092565b60008060008060808587031215611ac8578384fd5b8435611ad381611f82565b935060208501359250604085013567ffffffffffffffff80821115611af6578384fd5b611b0288838901611886565b93506060870135915080821115611b17578283fd5b50611b2487828801611886565b91505092959194509250565b600080600080600060a08688031215611b47578081fd5b853567ffffffffffffffff80821115611b5e578283fd5b611b6a89838a01611886565b9650602091508188013581811115611b80578384fd5b611b8c8a828b01611886565b965050604088013581811115611ba0578384fd5b8801601f81018a13611bb0578384fd5b803582811115611bc257611bc2611f6c565b8060051b9250611bd3848401611ea0565b8181528481019083860185850187018e1015611bed578788fd5b8795505b83861015611c1b5780359450611c0685611f82565b84835260019590950194918601918601611bf1565b50975050505060608801359350611c379150506080870161187b565b90509295509295909350565b60008060408385031215611c55578182fd5b82359150602083013567ffffffffffffffff811115611c72578182fd5b611c7e85828601611886565b9150509250929050565b60008151808452815b81811015611cad57602081850181015186830182015201611c91565b81811115611cbe5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c060808201819052600090611d0e90830185611c88565b82810360a0840152611d208185611c88565b9998505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611d6e5783516001600160a01b031683529284019291840191600101611d49565b50909695505050505050565b6000602082526108fb6020830184611c88565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526024908201527f4552433737373a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602c908201527f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60408201526b39103337b9103437b63232b960a11b606082015260800190565b600084825260606020830152611e846060830185611c88565b8281036040840152611e968185611c88565b9695505050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715611ec957611ec9611f6c565b604052919050565b60008219821115611ee457611ee4611f56565b500190565b600082821015611efb57611efb611f56565b500390565b600181811c90821680611f1457607f821691505b60208210811415611f3557634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611f4f57611f4f611f56565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461138557600080fdfea2646970667358221220072c56c9e34682a4ef2fc1fa94237b76f1021e5609ae87561452c11f1d8c7c0a64736f6c63430008030033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101215760003560e01c8063768f950a116100ad578063d95b637111610071578063d95b637114610233578063dd62ed3e14610246578063fad8b32a1461027f578063fc673c4f14610292578063fe9d9303146102a557610121565b8063768f950a146101df578063959b8c3f146101f257806395d89b41146102055780639bd9bbc61461020d578063a9059cbb1461022057610121565b806323b872dd116100f457806323b872dd1461018e578063313ce567146101a1578063556f0dc7146101b057806362ad1b83146101b757806370a08231146101cc57610121565b806306e485381461012657806306fdde0314610144578063095ea7b31461015957806318160ddd1461017c575b600080fd5b61012e6102b8565b60405161013b9190611d2d565b60405180910390f35b61014c61031a565b60405161013b9190611d7a565b61016c610167366004611a31565b6103a3565b604051901515815260200161013b565b6034545b60405190815260200161013b565b61016c61019c366004611961565b6103bb565b6040516012815260200161013b565b6001610180565b6101ca6101c53660046119a1565b610584565b005b6101806101da3660046118f1565b6105c0565b6101ca6101ed366004611b30565b6105df565b6101ca6102003660046118f1565b61065d565b61014c61077b565b6101ca61021b366004611a5c565b61078a565b61016c61022e366004611a31565b6107ad565b61016c610241366004611929565b610860565b610180610254366004611929565b6001600160a01b039182166000908152603b6020908152604080832093909416825291909152205490565b6101ca61028d3660046118f1565b610902565b6101ca6102a0366004611ab3565b610a1e565b6101ca6102b3366004611c43565b610a56565b6060603780548060200260200160405190810160405280929190818152602001828054801561031057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116102f2575b5050505050905090565b60606035805461032990611f00565b80601f016020809104026020016040519081016040528092919081815260200182805461035590611f00565b80156103105780601f1061037757610100808354040283529160200191610310565b820191906000526020600020905b81548152906001019060200180831161038557509395945050505050565b6000336103b1818585610a75565b5060019392505050565b60006001600160a01b0383166103ec5760405162461bcd60e51b81526004016103e390611ddb565b60405180910390fd5b6001600160a01b0384166104515760405162461bcd60e51b815260206004820152602660248201527f4552433737373a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016103e3565b6000339050610482818686866040518060200160405280600081525060405180602001604052806000815250610b9c565b6104ae818686866040518060200160405280600081525060405180602001604052806000815250610cd3565b6001600160a01b038086166000908152603b6020908152604080832093851683529290522054838110156105365760405162461bcd60e51b815260206004820152602960248201527f4552433737373a207472616e7366657220616d6f756e74206578636565647320604482015268616c6c6f77616e636560b81b60648201526084016103e3565b61054a86836105458785611ee9565b610a75565b6105788287878760405180602001604052806000815250604051806020016040528060008152506000610e39565b50600195945050505050565b61058e3386610860565b6105aa5760405162461bcd60e51b81526004016103e390611e1f565b6105b98585858585600161100d565b5050505050565b6001600160a01b0381166000908152603360205260409020545b919050565b600054610100900460ff16806105f8575060005460ff16155b6106145760405162461bcd60e51b81526004016103e390611d8d565b600054610100900460ff16158015610636576000805461ffff19166101011790555b61064386868686866110f0565b8015610655576000805461ff00191690555b505050505050565b336001600160a01b03821614156106c25760405162461bcd60e51b8152602060048201526024808201527f4552433737373a20617574686f72697a696e672073656c66206173206f70657260448201526330ba37b960e11b60648201526084016103e3565b6001600160a01b03811660009081526038602052604090205460ff161561071357336000908152603a602090815260408083206001600160a01b03851684529091529020805460ff19169055610742565b3360009081526039602090815260408083206001600160a01b03851684529091529020805460ff191660011790555b60405133906001600160a01b038316907ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f990600090a350565b60606036805461032990611f00565b6107a83384848460405180602001604052806000815250600161100d565b505050565b60006001600160a01b0383166107d55760405162461bcd60e51b81526004016103e390611ddb565b6000339050610806818286866040518060200160405280600081525060405180602001604052806000815250610b9c565b610832818286866040518060200160405280600081525060405180602001604052806000815250610cd3565b6103b18182868660405180602001604052806000815250604051806020016040528060008152506000610e39565b6000816001600160a01b0316836001600160a01b031614806108cb57506001600160a01b03831660009081526038602052604090205460ff1680156108cb57506001600160a01b038083166000908152603a602090815260408083209387168352929052205460ff16155b806108fb57506001600160a01b0380831660009081526039602090815260408083209387168352929052205460ff165b9392505050565b6001600160a01b0381163314156109655760405162461bcd60e51b815260206004820152602160248201527f4552433737373a207265766f6b696e672073656c66206173206f70657261746f6044820152603960f91b60648201526084016103e3565b6001600160a01b03811660009081526038602052604090205460ff16156109b957336000908152603a602090815260408083206001600160a01b03851684529091529020805460ff191660011790556109e5565b3360009081526039602090815260408083206001600160a01b03851684529091529020805460ff191690555b60405133906001600160a01b038316907f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa190600090a350565b610a283385610860565b610a445760405162461bcd60e51b81526004016103e390611e1f565b610a5084848484611167565b50505050565b610a7133838360405180602001604052806000815250611167565b5050565b6001600160a01b038316610ad95760405162461bcd60e51b815260206004820152602560248201527f4552433737373a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103e3565b6001600160a01b038216610b3b5760405162461bcd60e51b815260206004820152602360248201527f4552433737373a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103e3565b6001600160a01b038381166000818152603b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca9060440160206040518083038186803b158015610c1857600080fd5b505afa158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c50919061190d565b90506001600160a01b03811615610cca57604051633ad5cbc160e11b81526001600160a01b038216906375ab978290610c97908a908a908a908a908a908a90600401611cd3565b600060405180830381600087803b158015610cb157600080fd5b505af1158015610cc5573d6000803e3d6000fd5b505050505b50505050505050565b6001600160a01b03851660009081526033602052604090205483811015610d4c5760405162461bcd60e51b815260206004820152602760248201527f4552433737373a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b60648201526084016103e3565b6001600160a01b03808716600090815260336020526040808220878503905591871681529081208054869290610d83908490611ed1565b92505081905550846001600160a01b0316866001600160a01b0316886001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987878787604051610ddb93929190611e6b565b60405180910390a4846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610e2891815260200190565b60405180910390a350505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca9060440160206040518083038186803b158015610eb557600080fd5b505afa158015610ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eed919061190d565b90506001600160a01b03811615610f69576040516223de2960e01b81526001600160a01b038216906223de2990610f32908b908b908b908b908b908b90600401611cd3565b600060405180830381600087803b158015610f4c57600080fd5b505af1158015610f60573d6000803e3d6000fd5b50505050611003565b8115611003576001600160a01b0386163b156110035760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a4016103e3565b5050505050505050565b6001600160a01b03861661106e5760405162461bcd60e51b815260206004820152602260248201527f4552433737373a2073656e642066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016103e3565b6001600160a01b0385166110c45760405162461bcd60e51b815260206004820181905260248201527f4552433737373a2073656e6420746f20746865207a65726f206164647265737360448201526064016103e3565b336110d3818888888888610b9c565b6110e1818888888888610cd3565b610cca81888888888888610e39565b600054610100900460ff1680611109575060005460ff16155b6111255760405162461bcd60e51b81526004016103e390611d8d565b600054610100900460ff16158015611147576000805461ffff19166101011790555b61114f61131c565b61115a868686611388565b61064386868686866115cb565b6001600160a01b0384166111c85760405162461bcd60e51b815260206004820152602260248201527f4552433737373a206275726e2066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016103e3565b336111d881866000878787610b9c565b6001600160a01b0385166000908152603360205260409020548481101561124d5760405162461bcd60e51b815260206004820152602360248201527f4552433737373a206275726e20616d6f756e7420657863656564732062616c616044820152626e636560e81b60648201526084016103e3565b6001600160a01b038616600090815260336020526040812086830390556034805487929061127c908490611ee9565b92505081905550856001600160a01b0316826001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a40988787876040516112ca93929190611e6b565b60405180910390a36040518581526000906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a3505050505050565b600054610100900460ff1680611335575060005460ff16155b6113515760405162461bcd60e51b81526004016103e390611d8d565b600054610100900460ff16158015611373576000805461ffff19166101011790555b8015611385576000805461ff00191690555b50565b600054610100900460ff16806113a1575060005460ff16155b6113bd5760405162461bcd60e51b81526004016103e390611d8d565b600054610100900460ff161580156113df576000805461ffff19166101011790555b83516113f290603590602087019061178d565b50825161140690603690602086019061178d565b50815161141a906037906020850190611811565b5060005b82518110156114915760016038600085848151811061144d57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061148981611f3b565b91505061141e565b506040516329965a1d60e01b815230600482018190527fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce217705460248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad24906329965a1d90606401600060405180830381600087803b15801561150b57600080fd5b505af115801561151f573d6000803e3d6000fd5b50506040516329965a1d60e01b815230600482018190527faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a60248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad2492506329965a1d9150606401600060405180830381600087803b15801561159c57600080fd5b505af11580156115b0573d6000803e3d6000fd5b505050508015610a50576000805461ff001916905550505050565b600054610100900460ff16806115e4575060005460ff16155b6116005760405162461bcd60e51b81526004016103e390611d8d565b600054610100900460ff16158015611622576000805461ffff19166101011790555b61064382846040518060200160405280600081525060405180602001604052806000815250610a508484848460016001600160a01b0385166116a65760405162461bcd60e51b815260206004820181905260248201527f4552433737373a206d696e7420746f20746865207a65726f206164647265737360448201526064016103e3565b600033905084603460008282546116bd9190611ed1565b90915550506001600160a01b038616600090815260336020526040812080548792906116ea908490611ed1565b9091555061170090508160008888888888610e39565b856001600160a01b0316816001600160a01b03167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d87878760405161174793929190611e6b565b60405180910390a36040518581526001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161130c565b82805461179990611f00565b90600052602060002090601f0160209004810192826117bb5760008555611801565b82601f106117d457805160ff1916838001178555611801565b82800160010185558215611801579182015b828111156118015782518255916020019190600101906117e6565b5061180d929150611866565b5090565b828054828255906000526020600020908101928215611801579160200282015b8281111561180157825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611831565b5b8082111561180d5760008155600101611867565b80356105da81611f82565b600082601f830112611896578081fd5b813567ffffffffffffffff8111156118b0576118b0611f6c565b6118c3601f8201601f1916602001611ea0565b8181528460208386010111156118d7578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611902578081fd5b81356108fb81611f82565b60006020828403121561191e578081fd5b81516108fb81611f82565b6000806040838503121561193b578081fd5b823561194681611f82565b9150602083013561195681611f82565b809150509250929050565b600080600060608486031215611975578081fd5b833561198081611f82565b9250602084013561199081611f82565b929592945050506040919091013590565b600080600080600060a086880312156119b8578081fd5b85356119c381611f82565b945060208601356119d381611f82565b935060408601359250606086013567ffffffffffffffff808211156119f6578283fd5b611a0289838a01611886565b93506080880135915080821115611a17578283fd5b50611a2488828901611886565b9150509295509295909350565b60008060408385031215611a43578182fd5b8235611a4e81611f82565b946020939093013593505050565b600080600060608486031215611a70578283fd5b8335611a7b81611f82565b925060208401359150604084013567ffffffffffffffff811115611a9d578182fd5b611aa986828701611886565b9150509250925092565b60008060008060808587031215611ac8578384fd5b8435611ad381611f82565b935060208501359250604085013567ffffffffffffffff80821115611af6578384fd5b611b0288838901611886565b93506060870135915080821115611b17578283fd5b50611b2487828801611886565b91505092959194509250565b600080600080600060a08688031215611b47578081fd5b853567ffffffffffffffff80821115611b5e578283fd5b611b6a89838a01611886565b9650602091508188013581811115611b80578384fd5b611b8c8a828b01611886565b965050604088013581811115611ba0578384fd5b8801601f81018a13611bb0578384fd5b803582811115611bc257611bc2611f6c565b8060051b9250611bd3848401611ea0565b8181528481019083860185850187018e1015611bed578788fd5b8795505b83861015611c1b5780359450611c0685611f82565b84835260019590950194918601918601611bf1565b50975050505060608801359350611c379150506080870161187b565b90509295509295909350565b60008060408385031215611c55578182fd5b82359150602083013567ffffffffffffffff811115611c72578182fd5b611c7e85828601611886565b9150509250929050565b60008151808452815b81811015611cad57602081850181015186830182015201611c91565b81811115611cbe5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c060808201819052600090611d0e90830185611c88565b82810360a0840152611d208185611c88565b9998505050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611d6e5783516001600160a01b031683529284019291840191600101611d49565b50909695505050505050565b6000602082526108fb6020830184611c88565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526024908201527f4552433737373a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602c908201527f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60408201526b39103337b9103437b63232b960a11b606082015260800190565b600084825260606020830152611e846060830185611c88565b8281036040840152611e968185611c88565b9695505050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715611ec957611ec9611f6c565b604052919050565b60008219821115611ee457611ee4611f56565b500190565b600082821015611efb57611efb611f56565b500390565b600181811c90821680611f1457607f821691505b60208210811415611f3557634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611f4f57611f4f611f56565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461138557600080fdfea2646970667358221220072c56c9e34682a4ef2fc1fa94237b76f1021e5609ae87561452c11f1d8c7c0a64736f6c63430008030033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
