{
  "_format": "hh-sol-artifact-1",
  "contractName": "ControlledToken",
  "sourceName": "contracts/token/ControlledToken.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": false,
          "internalType": "string",
          "name": "_name",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "_symbol",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "_decimals",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "contract TokenControllerInterface",
          "name": "_controller",
          "type": "address"
        }
      ],
      "name": "Initialized",
      "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": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "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": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "controller",
      "outputs": [
        {
          "internalType": "contract TokenControllerInterface",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "controllerBurn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "controllerBurnFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "controllerMint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_symbol",
          "type": "string"
        },
        {
          "internalType": "uint8",
          "name": "_decimals",
          "type": "uint8"
        },
        {
          "internalType": "contract TokenControllerInterface",
          "name": "_controller",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "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": "sender",
          "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": "0x608060405234801561001057600080fd5b50611e8c806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806370a08231116100ad578063a9059cbb11610071578063a9059cbb14610395578063d505accf146103c1578063dd62ed3e14610412578063de7ea79d14610440578063f77c47911461057e57610121565b806370a08231146102e95780637ecebe001461030f57806390596dd11461033557806395d89b4114610361578063a457c2d71461036957610121565b8063313ce567116100f4578063313ce567146102335780633644e5151461025157806339509351146102595780635d7b075814610285578063631b5dfb146102b357610121565b806306fdde0314610126578063095ea7b3146101a357806318160ddd146101e357806323b872dd146101fd575b600080fd5b61012e6105a2565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610168578181015183820152602001610150565b50505050905090810190601f1680156101955780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101cf600480360360408110156101b957600080fd5b506001600160a01b038135169060200135610638565b604080519115158252519081900360200190f35b6101eb610655565b60408051918252519081900360200190f35b6101cf6004803603606081101561021357600080fd5b506001600160a01b0381358116916020810135909116906040013561065b565b61023b6106e2565b6040805160ff9092168252519081900360200190f35b6101eb6106eb565b6101cf6004803603604081101561026f57600080fd5b506001600160a01b0381351690602001356106fa565b6102b16004803603604081101561029b57600080fd5b506001600160a01b038135169060200135610748565b005b6102b1600480360360608110156102c957600080fd5b506001600160a01b038135811691602081013590911690604001356107c5565b6101eb600480360360208110156102ff57600080fd5b50356001600160a01b031661089b565b6101eb6004803603602081101561032557600080fd5b50356001600160a01b03166108b6565b6102b16004803603604081101561034b57600080fd5b506001600160a01b0381351690602001356108dd565b61012e610956565b6101cf6004803603604081101561037f57600080fd5b506001600160a01b0381351690602001356109b7565b6101cf600480360360408110156103ab57600080fd5b506001600160a01b038135169060200135610a1f565b6102b1600480360360e08110156103d757600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610a33565b6101eb6004803603604081101561042857600080fd5b506001600160a01b0381358116916020013516610bd6565b6102b16004803603608081101561045657600080fd5b81019060208101813564010000000081111561047157600080fd5b82018360208201111561048357600080fd5b803590602001918460018302840111640100000000831117156104a557600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156104f857600080fd5b82018360208201111561050a57600080fd5b8035906020019184600183028401116401000000008311171561052c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050813560ff16925050602001356001600160a01b0316610c01565b610586610e74565b604080516001600160a01b039092168252519081900360200190f35b60368054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561062e5780601f106106035761010080835404028352916020019161062e565b820191906000526020600020905b81548152906001019060200180831161061157829003601f168201915b5050505050905090565b600061064c610645610e83565b8484610e87565b50600192915050565b60355490565b6000610668848484610f73565b6106d884610674610e83565b6106d385604051806060016040528060288152602001611d5c602891396001600160a01b038a166000908152603460205260408120906106b2610e83565b6001600160a01b0316815260208101919091526040016000205491906110d0565b610e87565b5060019392505050565b60385460ff1690565b60006106f5611167565b905090565b600061064c610707610e83565b846106d38560346000610718610e83565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906111a2565b60cc546001600160a01b031661075c610e83565b6001600160a01b0316146107b7576040805162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c657200604482015290519081900360640190fd5b6107c18282611203565b5050565b60cc546001600160a01b03166107d9610e83565b6001600160a01b031614610834576040805162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c657200604482015290519081900360640190fd5b816001600160a01b0316836001600160a01b03161461088c57600061087d82604051806060016040528060218152602001611d84602191396108768688610bd6565b91906110d0565b905061088a838583610e87565b505b61089682826112f5565b505050565b6001600160a01b031660009081526033602052604090205490565b6001600160a01b03811660009081526099602052604081206108d7906113f1565b92915050565b60cc546001600160a01b03166108f1610e83565b6001600160a01b03161461094c576040805162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c657200604482015290519081900360640190fd5b6107c182826112f5565b60378054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561062e5780601f106106035761010080835404028352916020019161062e565b600061064c6109c4610e83565b846106d385604051806060016040528060258152602001611e3260259139603460006109ee610e83565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906110d0565b600061064c610a2c610e83565b8484610f73565b83421115610a88576040805162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b6000609a54888888610abd609960008e6001600160a01b03166001600160a01b031681526020019081526020016000206113f1565b8960405160200180878152602001866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012090506000610b26826113f5565b90506000610b3682878787611441565b9050896001600160a01b0316816001600160a01b031614610b9e576040805162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b6001600160a01b038a166000908152609960205260409020610bbf906115bf565b610bca8a8a8a610e87565b50505050505050505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b600054610100900460ff1680610c1a5750610c1a6115c8565b80610c28575060005460ff16155b610c635760405162461bcd60e51b815260040180806020018281038252602e815260200180611d0c602e913960400191505060405180910390fd5b600054610100900460ff16158015610c8e576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038216610cd35760405162461bcd60e51b8152600401808060200182810382526023815260200180611e0f6023913960400191505060405180910390fd5b610cdd85856115d9565b610d1b6040518060400160405280601c81526020017f506f6f6c546f67657468657220436f6e74726f6c6c6564546f6b656e0000000081525061168e565b60cc80546001600160a01b0319166001600160a01b038416179055610d3f83611764565b7f41bc1176d7b9b7bc036f385a7e5b08b0662a7afa0844af8a599ad431150227e1858585856040518080602001806020018560ff168152602001846001600160a01b03168152602001838103835287818151815260200191508051906020019080838360005b83811015610dbd578181015183820152602001610da5565b50505050905090810190601f168015610dea5780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b83811015610e1d578181015183820152602001610e05565b50505050905090810190601f168015610e4a5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a18015610e6d576000805461ff00191690555b5050505050565b60cc546001600160a01b031681565b3390565b6001600160a01b038316610ecc5760405162461bcd60e51b8152600401808060200182810382526024815260200180611deb6024913960400191505060405180910390fd5b6001600160a01b038216610f115760405162461bcd60e51b8152600401808060200182810382526022815260200180611ca26022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610fb85760405162461bcd60e51b8152600401808060200182810382526025815260200180611dc66025913960400191505060405180910390fd5b6001600160a01b038216610ffd5760405162461bcd60e51b8152600401808060200182810382526023815260200180611c5d6023913960400191505060405180910390fd5b61100883838361177a565b61104581604051806060016040528060268152602001611cc4602691396001600160a01b03861660009081526033602052604090205491906110d0565b6001600160a01b03808516600090815260336020526040808220939093559084168152205461107490826111a2565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561115f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561112457818101518382015260200161110c565b50505050905090810190601f1680156111515780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006106f57f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6111956117f4565b61119d6117fa565b611800565b6000828201838110156111fc576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b03821661125e576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61126a6000838361177a565b60355461127790826111a2565b6035556001600160a01b03821660009081526033602052604090205461129d90826111a2565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b03821661133a5760405162461bcd60e51b8152600401808060200182810382526021815260200180611da56021913960400191505060405180910390fd5b6113468260008361177a565b61138381604051806060016040528060228152602001611c80602291396001600160a01b03851660009081526033602052604090205491906110d0565b6001600160a01b0383166000908152603360205260409020556035546113a99082611862565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b5490565b60006113ff611167565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156114a25760405162461bcd60e51b8152600401808060200182810382526022815260200180611cea6022913960400191505060405180910390fd5b8360ff16601b14806114b757508360ff16601c145b6114f25760405162461bcd60e51b8152600401808060200182810382526022815260200180611d3a6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561154e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166115b6576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b80546001019055565b60006115d3306118bf565b15905090565b600054610100900460ff16806115f257506115f26115c8565b80611600575060005460ff16155b61163b5760405162461bcd60e51b815260040180806020018281038252602e815260200180611d0c602e913960400191505060405180910390fd5b600054610100900460ff16158015611666576000805460ff1961ff0019909116610100171660011790555b61166e6118c5565b6116788383611967565b8015610896576000805461ff0019169055505050565b600054610100900460ff16806116a757506116a76115c8565b806116b5575060005460ff16155b6116f05760405162461bcd60e51b815260040180806020018281038252602e815260200180611d0c602e913960400191505060405180910390fd5b600054610100900460ff1615801561171b576000805460ff1961ff0019909116610100171660011790555b6117236118c5565b61174682604051806040016040528060018152602001603160f81b815250611a3f565b61174f82611aff565b80156107c1576000805461ff00191690555050565b6038805460ff191660ff92909216919091179055565b60cc5460408051637cbab1c760e01b81526001600160a01b03868116600483015285811660248301526044820185905291519190921691637cbab1c791606480830192600092919082900301818387803b1580156117d757600080fd5b505af11580156117eb573d6000803e3d6000fd5b50505050505050565b60655490565b60665490565b600083838361180d611bc5565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b6000828211156118b9576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600054610100900460ff16806118de57506118de6115c8565b806118ec575060005460ff16155b6119275760405162461bcd60e51b815260040180806020018281038252602e815260200180611d0c602e913960400191505060405180910390fd5b600054610100900460ff16158015611952576000805460ff1961ff0019909116610100171660011790555b8015611964576000805461ff00191690555b50565b600054610100900460ff168061198057506119806115c8565b8061198e575060005460ff16155b6119c95760405162461bcd60e51b815260040180806020018281038252602e815260200180611d0c602e913960400191505060405180910390fd5b600054610100900460ff161580156119f4576000805460ff1961ff0019909116610100171660011790555b8251611a07906036906020860190611bc9565b508151611a1b906037906020850190611bc9565b506038805460ff191660121790558015610896576000805461ff0019169055505050565b600054610100900460ff1680611a585750611a586115c8565b80611a66575060005460ff16155b611aa15760405162461bcd60e51b815260040180806020018281038252602e815260200180611d0c602e913960400191505060405180910390fd5b600054610100900460ff16158015611acc576000805460ff1961ff0019909116610100171660011790555b82516020808501919091208351918401919091206065919091556066558015610896576000805461ff0019169055505050565b600054610100900460ff1680611b185750611b186115c8565b80611b26575060005460ff16155b611b615760405162461bcd60e51b815260040180806020018281038252602e815260200180611d0c602e913960400191505060405180910390fd5b600054610100900460ff16158015611b8c576000805460ff1961ff0019909116610100171660011790555b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9609a5580156107c1576000805461ff00191690555050565b4690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611c0a57805160ff1916838001178555611c37565b82800160010185558215611c37579182015b82811115611c37578251825591602001919060010190611c1c565b50611c43929150611c47565b5090565b5b80821115611c435760008155600101611c4856fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e74726f6c6c6564546f6b656e2f657863656564732d616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373436f6e74726f6c6c6564546f6b656e2f636f6e74726f6c6c65722d6e6f742d7a65726f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d4c3e2aa538767119b3c10619b4d96ae68b6504b82292d8648426183c0aebbb664736f6c634300060c0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101215760003560e01c806370a08231116100ad578063a9059cbb11610071578063a9059cbb14610395578063d505accf146103c1578063dd62ed3e14610412578063de7ea79d14610440578063f77c47911461057e57610121565b806370a08231146102e95780637ecebe001461030f57806390596dd11461033557806395d89b4114610361578063a457c2d71461036957610121565b8063313ce567116100f4578063313ce567146102335780633644e5151461025157806339509351146102595780635d7b075814610285578063631b5dfb146102b357610121565b806306fdde0314610126578063095ea7b3146101a357806318160ddd146101e357806323b872dd146101fd575b600080fd5b61012e6105a2565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610168578181015183820152602001610150565b50505050905090810190601f1680156101955780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101cf600480360360408110156101b957600080fd5b506001600160a01b038135169060200135610638565b604080519115158252519081900360200190f35b6101eb610655565b60408051918252519081900360200190f35b6101cf6004803603606081101561021357600080fd5b506001600160a01b0381358116916020810135909116906040013561065b565b61023b6106e2565b6040805160ff9092168252519081900360200190f35b6101eb6106eb565b6101cf6004803603604081101561026f57600080fd5b506001600160a01b0381351690602001356106fa565b6102b16004803603604081101561029b57600080fd5b506001600160a01b038135169060200135610748565b005b6102b1600480360360608110156102c957600080fd5b506001600160a01b038135811691602081013590911690604001356107c5565b6101eb600480360360208110156102ff57600080fd5b50356001600160a01b031661089b565b6101eb6004803603602081101561032557600080fd5b50356001600160a01b03166108b6565b6102b16004803603604081101561034b57600080fd5b506001600160a01b0381351690602001356108dd565b61012e610956565b6101cf6004803603604081101561037f57600080fd5b506001600160a01b0381351690602001356109b7565b6101cf600480360360408110156103ab57600080fd5b506001600160a01b038135169060200135610a1f565b6102b1600480360360e08110156103d757600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610a33565b6101eb6004803603604081101561042857600080fd5b506001600160a01b0381358116916020013516610bd6565b6102b16004803603608081101561045657600080fd5b81019060208101813564010000000081111561047157600080fd5b82018360208201111561048357600080fd5b803590602001918460018302840111640100000000831117156104a557600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156104f857600080fd5b82018360208201111561050a57600080fd5b8035906020019184600183028401116401000000008311171561052c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050813560ff16925050602001356001600160a01b0316610c01565b610586610e74565b604080516001600160a01b039092168252519081900360200190f35b60368054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561062e5780601f106106035761010080835404028352916020019161062e565b820191906000526020600020905b81548152906001019060200180831161061157829003601f168201915b5050505050905090565b600061064c610645610e83565b8484610e87565b50600192915050565b60355490565b6000610668848484610f73565b6106d884610674610e83565b6106d385604051806060016040528060288152602001611d5c602891396001600160a01b038a166000908152603460205260408120906106b2610e83565b6001600160a01b0316815260208101919091526040016000205491906110d0565b610e87565b5060019392505050565b60385460ff1690565b60006106f5611167565b905090565b600061064c610707610e83565b846106d38560346000610718610e83565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906111a2565b60cc546001600160a01b031661075c610e83565b6001600160a01b0316146107b7576040805162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c657200604482015290519081900360640190fd5b6107c18282611203565b5050565b60cc546001600160a01b03166107d9610e83565b6001600160a01b031614610834576040805162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c657200604482015290519081900360640190fd5b816001600160a01b0316836001600160a01b03161461088c57600061087d82604051806060016040528060218152602001611d84602191396108768688610bd6565b91906110d0565b905061088a838583610e87565b505b61089682826112f5565b505050565b6001600160a01b031660009081526033602052604090205490565b6001600160a01b03811660009081526099602052604081206108d7906113f1565b92915050565b60cc546001600160a01b03166108f1610e83565b6001600160a01b03161461094c576040805162461bcd60e51b815260206004820152601f60248201527f436f6e74726f6c6c6564546f6b656e2f6f6e6c792d636f6e74726f6c6c657200604482015290519081900360640190fd5b6107c182826112f5565b60378054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561062e5780601f106106035761010080835404028352916020019161062e565b600061064c6109c4610e83565b846106d385604051806060016040528060258152602001611e3260259139603460006109ee610e83565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906110d0565b600061064c610a2c610e83565b8484610f73565b83421115610a88576040805162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b6000609a54888888610abd609960008e6001600160a01b03166001600160a01b031681526020019081526020016000206113f1565b8960405160200180878152602001866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012090506000610b26826113f5565b90506000610b3682878787611441565b9050896001600160a01b0316816001600160a01b031614610b9e576040805162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b6001600160a01b038a166000908152609960205260409020610bbf906115bf565b610bca8a8a8a610e87565b50505050505050505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b600054610100900460ff1680610c1a5750610c1a6115c8565b80610c28575060005460ff16155b610c635760405162461bcd60e51b815260040180806020018281038252602e815260200180611d0c602e913960400191505060405180910390fd5b600054610100900460ff16158015610c8e576000805460ff1961ff0019909116610100171660011790555b6001600160a01b038216610cd35760405162461bcd60e51b8152600401808060200182810382526023815260200180611e0f6023913960400191505060405180910390fd5b610cdd85856115d9565b610d1b6040518060400160405280601c81526020017f506f6f6c546f67657468657220436f6e74726f6c6c6564546f6b656e0000000081525061168e565b60cc80546001600160a01b0319166001600160a01b038416179055610d3f83611764565b7f41bc1176d7b9b7bc036f385a7e5b08b0662a7afa0844af8a599ad431150227e1858585856040518080602001806020018560ff168152602001846001600160a01b03168152602001838103835287818151815260200191508051906020019080838360005b83811015610dbd578181015183820152602001610da5565b50505050905090810190601f168015610dea5780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b83811015610e1d578181015183820152602001610e05565b50505050905090810190601f168015610e4a5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a18015610e6d576000805461ff00191690555b5050505050565b60cc546001600160a01b031681565b3390565b6001600160a01b038316610ecc5760405162461bcd60e51b8152600401808060200182810382526024815260200180611deb6024913960400191505060405180910390fd5b6001600160a01b038216610f115760405162461bcd60e51b8152600401808060200182810382526022815260200180611ca26022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610fb85760405162461bcd60e51b8152600401808060200182810382526025815260200180611dc66025913960400191505060405180910390fd5b6001600160a01b038216610ffd5760405162461bcd60e51b8152600401808060200182810382526023815260200180611c5d6023913960400191505060405180910390fd5b61100883838361177a565b61104581604051806060016040528060268152602001611cc4602691396001600160a01b03861660009081526033602052604090205491906110d0565b6001600160a01b03808516600090815260336020526040808220939093559084168152205461107490826111a2565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561115f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561112457818101518382015260200161110c565b50505050905090810190601f1680156111515780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006106f57f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6111956117f4565b61119d6117fa565b611800565b6000828201838110156111fc576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b03821661125e576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61126a6000838361177a565b60355461127790826111a2565b6035556001600160a01b03821660009081526033602052604090205461129d90826111a2565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b03821661133a5760405162461bcd60e51b8152600401808060200182810382526021815260200180611da56021913960400191505060405180910390fd5b6113468260008361177a565b61138381604051806060016040528060228152602001611c80602291396001600160a01b03851660009081526033602052604090205491906110d0565b6001600160a01b0383166000908152603360205260409020556035546113a99082611862565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b5490565b60006113ff611167565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156114a25760405162461bcd60e51b8152600401808060200182810382526022815260200180611cea6022913960400191505060405180910390fd5b8360ff16601b14806114b757508360ff16601c145b6114f25760405162461bcd60e51b8152600401808060200182810382526022815260200180611d3a6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561154e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166115b6576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b80546001019055565b60006115d3306118bf565b15905090565b600054610100900460ff16806115f257506115f26115c8565b80611600575060005460ff16155b61163b5760405162461bcd60e51b815260040180806020018281038252602e815260200180611d0c602e913960400191505060405180910390fd5b600054610100900460ff16158015611666576000805460ff1961ff0019909116610100171660011790555b61166e6118c5565b6116788383611967565b8015610896576000805461ff0019169055505050565b600054610100900460ff16806116a757506116a76115c8565b806116b5575060005460ff16155b6116f05760405162461bcd60e51b815260040180806020018281038252602e815260200180611d0c602e913960400191505060405180910390fd5b600054610100900460ff1615801561171b576000805460ff1961ff0019909116610100171660011790555b6117236118c5565b61174682604051806040016040528060018152602001603160f81b815250611a3f565b61174f82611aff565b80156107c1576000805461ff00191690555050565b6038805460ff191660ff92909216919091179055565b60cc5460408051637cbab1c760e01b81526001600160a01b03868116600483015285811660248301526044820185905291519190921691637cbab1c791606480830192600092919082900301818387803b1580156117d757600080fd5b505af11580156117eb573d6000803e3d6000fd5b50505050505050565b60655490565b60665490565b600083838361180d611bc5565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b6000828211156118b9576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b3b151590565b600054610100900460ff16806118de57506118de6115c8565b806118ec575060005460ff16155b6119275760405162461bcd60e51b815260040180806020018281038252602e815260200180611d0c602e913960400191505060405180910390fd5b600054610100900460ff16158015611952576000805460ff1961ff0019909116610100171660011790555b8015611964576000805461ff00191690555b50565b600054610100900460ff168061198057506119806115c8565b8061198e575060005460ff16155b6119c95760405162461bcd60e51b815260040180806020018281038252602e815260200180611d0c602e913960400191505060405180910390fd5b600054610100900460ff161580156119f4576000805460ff1961ff0019909116610100171660011790555b8251611a07906036906020860190611bc9565b508151611a1b906037906020850190611bc9565b506038805460ff191660121790558015610896576000805461ff0019169055505050565b600054610100900460ff1680611a585750611a586115c8565b80611a66575060005460ff16155b611aa15760405162461bcd60e51b815260040180806020018281038252602e815260200180611d0c602e913960400191505060405180910390fd5b600054610100900460ff16158015611acc576000805460ff1961ff0019909116610100171660011790555b82516020808501919091208351918401919091206065919091556066558015610896576000805461ff0019169055505050565b600054610100900460ff1680611b185750611b186115c8565b80611b26575060005460ff16155b611b615760405162461bcd60e51b815260040180806020018281038252602e815260200180611d0c602e913960400191505060405180910390fd5b600054610100900460ff16158015611b8c576000805460ff1961ff0019909116610100171660011790555b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9609a5580156107c1576000805461ff00191690555050565b4690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611c0a57805160ff1916838001178555611c37565b82800160010185558215611c37579182015b82811115611c37578251825591602001919060010190611c1c565b50611c43929150611c47565b5090565b5b80821115611c435760008155600101611c4856fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c756545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e74726f6c6c6564546f6b656e2f657863656564732d616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373436f6e74726f6c6c6564546f6b656e2f636f6e74726f6c6c65722d6e6f742d7a65726f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d4c3e2aa538767119b3c10619b4d96ae68b6504b82292d8648426183c0aebbb664736f6c634300060c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
