Address Details
contract
token

0xE74AbF23E1Fdf7ACbec2F3a30a772eF77f1601E1

Token
Poof CELO (pCELO)
Creator
0x25f72e–df3745 at 0x8034b2–15287c
Balance
0.000000000000000144 CELO ( )
Locked CELO Balance
0.00 CELO
Voting CELO Balance
0.00 CELO
Pending Unlocked Gold
0.00 CELO
Tokens
Fetching tokens...
Transactions
2,787 Transactions
Transfers
3,970 Transfers
Gas Used
1,950,112,563
Last Balance Update
27951072
This contract has been verified via Sourcify. View contract in Sourcify repository
Contract name:
PoofMintableLendable




Optimization enabled
true
Compiler version
v0.8.3+commit.8d00100c




Optimization runs
200
EVM Version
istanbul




Verified at
2021-10-20T03:22:23.853271Z

Contract source code

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";

import "./PoofLendable.sol";
import "./../interfaces/IVerifier.sol";
import "./../interfaces/IWERC20.sol";

contract PoofMintableLendable is PoofLendable, ERC20 {
  using SafeERC20 for IERC20;
  using SafeMath for uint256;

  constructor(
    string memory _tokenName,
    string memory _tokenSymbol,
    IWERC20 _debtToken,
    IVerifier[5] memory _verifiers,
    bytes32 _accountRoot
  ) ERC20(_tokenName, _tokenSymbol) PoofLendable(_debtToken, _verifiers, _accountRoot) {}

  function burn(bytes[3] memory _proofs, DepositArgs memory _args) external {
    burn(_proofs, _args, new bytes(0), TreeUpdateArgs(0, 0, 0, 0));
  }

  function burn(
    bytes[3] memory _proofs,
    DepositArgs memory _args,
    bytes memory _treeUpdateProof,
    TreeUpdateArgs memory _treeUpdateArgs
  ) public {
    beforeDeposit(_proofs, _args, _treeUpdateProof, _treeUpdateArgs);
    require(_args.amount == 0, "Cannot use amount for burning");
    _burn(msg.sender, _args.debt);
  }

  function mint(bytes[3] memory _proofs, WithdrawArgs memory _args) external {
    mint(_proofs, _args, new bytes(0), TreeUpdateArgs(0, 0, 0, 0));
  }

  function mint(
    bytes[3] memory _proofs,
    WithdrawArgs memory _args,
    bytes memory _treeUpdateProof,
    TreeUpdateArgs memory _treeUpdateArgs
  ) public {
    beforeWithdraw(_proofs, _args, _treeUpdateProof, _treeUpdateArgs);
    require(_args.amount == _args.extData.fee, "Amount can only be used for fee");
    if (_args.amount > 0) {
      uint256 underlyingFeeAmount = debtToken.debtToUnderlying(_args.extData.fee);
      debtToken.unwrap(_args.amount);
      if (underlyingFeeAmount > 0) {
        underlyingToken.safeTransfer(_args.extData.relayer, underlyingFeeAmount);
      }
    }
    if (_args.debt > 0) {
      _mint(_args.extData.recipient, _args.debt);
    }
  }

  function underlyingBalanceOf(address owner) external view returns (uint256) {
    uint256 balanceOf = balanceOf(owner);
    return debtToken.debtToUnderlying(balanceOf);
  }
}

        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"string","name":"_tokenName","internalType":"string"},{"type":"string","name":"_tokenSymbol","internalType":"string"},{"type":"address","name":"_debtToken","internalType":"contract IWERC20"},{"type":"address[5]","name":"_verifiers","internalType":"contract IVerifier[5]"},{"type":"bytes32","name":"_accountRoot","internalType":"bytes32"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"NewAccount","inputs":[{"type":"bytes32","name":"commitment","internalType":"bytes32","indexed":false},{"type":"bytes32","name":"nullifier","internalType":"bytes32","indexed":false},{"type":"bytes","name":"encryptedAccount","internalType":"bytes","indexed":false},{"type":"uint256","name":"index","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"ACCOUNT_ROOT_HISTORY_SIZE","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"accountCount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"accountNullifiers","inputs":[{"type":"bytes32","name":"","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"accountRoots","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burn","inputs":[{"type":"bytes[3]","name":"_proofs","internalType":"bytes[3]"},{"type":"tuple","name":"_args","internalType":"struct PoofBase.DepositArgs","components":[{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"uint256","name":"debt","internalType":"uint256"},{"type":"uint256","name":"unitPerUnderlying","internalType":"uint256"},{"type":"bytes32","name":"extDataHash","internalType":"bytes32"},{"type":"tuple","name":"extData","internalType":"struct PoofBase.DepositExtData","components":[{"type":"bytes","name":"encryptedAccount","internalType":"bytes"}]},{"type":"tuple","name":"account","internalType":"struct PoofBase.AccountUpdate","components":[{"type":"bytes32","name":"inputRoot","internalType":"bytes32"},{"type":"bytes32","name":"inputNullifierHash","internalType":"bytes32"},{"type":"bytes32","name":"inputAccountHash","internalType":"bytes32"},{"type":"bytes32","name":"outputRoot","internalType":"bytes32"},{"type":"uint256","name":"outputPathIndices","internalType":"uint256"},{"type":"bytes32","name":"outputCommitment","internalType":"bytes32"},{"type":"bytes32","name":"outputAccountHash","internalType":"bytes32"}]}]},{"type":"bytes","name":"_treeUpdateProof","internalType":"bytes"},{"type":"tuple","name":"_treeUpdateArgs","internalType":"struct PoofBase.TreeUpdateArgs","components":[{"type":"bytes32","name":"oldRoot","internalType":"bytes32"},{"type":"bytes32","name":"newRoot","internalType":"bytes32"},{"type":"bytes32","name":"leaf","internalType":"bytes32"},{"type":"uint256","name":"pathIndices","internalType":"uint256"}]}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burn","inputs":[{"type":"bytes[3]","name":"_proofs","internalType":"bytes[3]"},{"type":"tuple","name":"_args","internalType":"struct PoofBase.DepositArgs","components":[{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"uint256","name":"debt","internalType":"uint256"},{"type":"uint256","name":"unitPerUnderlying","internalType":"uint256"},{"type":"bytes32","name":"extDataHash","internalType":"bytes32"},{"type":"tuple","name":"extData","internalType":"struct PoofBase.DepositExtData","components":[{"type":"bytes","name":"encryptedAccount","internalType":"bytes"}]},{"type":"tuple","name":"account","internalType":"struct PoofBase.AccountUpdate","components":[{"type":"bytes32","name":"inputRoot","internalType":"bytes32"},{"type":"bytes32","name":"inputNullifierHash","internalType":"bytes32"},{"type":"bytes32","name":"inputAccountHash","internalType":"bytes32"},{"type":"bytes32","name":"outputRoot","internalType":"bytes32"},{"type":"uint256","name":"outputPathIndices","internalType":"uint256"},{"type":"bytes32","name":"outputCommitment","internalType":"bytes32"},{"type":"bytes32","name":"outputAccountHash","internalType":"bytes32"}]}]}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IWERC20"}],"name":"debtToken","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deposit","inputs":[{"type":"bytes[3]","name":"_proofs","internalType":"bytes[3]"},{"type":"tuple","name":"_args","internalType":"struct PoofBase.DepositArgs","components":[{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"uint256","name":"debt","internalType":"uint256"},{"type":"uint256","name":"unitPerUnderlying","internalType":"uint256"},{"type":"bytes32","name":"extDataHash","internalType":"bytes32"},{"type":"tuple","name":"extData","internalType":"struct PoofBase.DepositExtData","components":[{"type":"bytes","name":"encryptedAccount","internalType":"bytes"}]},{"type":"tuple","name":"account","internalType":"struct PoofBase.AccountUpdate","components":[{"type":"bytes32","name":"inputRoot","internalType":"bytes32"},{"type":"bytes32","name":"inputNullifierHash","internalType":"bytes32"},{"type":"bytes32","name":"inputAccountHash","internalType":"bytes32"},{"type":"bytes32","name":"outputRoot","internalType":"bytes32"},{"type":"uint256","name":"outputPathIndices","internalType":"uint256"},{"type":"bytes32","name":"outputCommitment","internalType":"bytes32"},{"type":"bytes32","name":"outputAccountHash","internalType":"bytes32"}]}]},{"type":"bytes","name":"_treeUpdateProof","internalType":"bytes"},{"type":"tuple","name":"_treeUpdateArgs","internalType":"struct PoofBase.TreeUpdateArgs","components":[{"type":"bytes32","name":"oldRoot","internalType":"bytes32"},{"type":"bytes32","name":"newRoot","internalType":"bytes32"},{"type":"bytes32","name":"leaf","internalType":"bytes32"},{"type":"uint256","name":"pathIndices","internalType":"uint256"}]}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deposit","inputs":[{"type":"bytes[3]","name":"_proofs","internalType":"bytes[3]"},{"type":"tuple","name":"_args","internalType":"struct PoofBase.DepositArgs","components":[{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"uint256","name":"debt","internalType":"uint256"},{"type":"uint256","name":"unitPerUnderlying","internalType":"uint256"},{"type":"bytes32","name":"extDataHash","internalType":"bytes32"},{"type":"tuple","name":"extData","internalType":"struct PoofBase.DepositExtData","components":[{"type":"bytes","name":"encryptedAccount","internalType":"bytes"}]},{"type":"tuple","name":"account","internalType":"struct PoofBase.AccountUpdate","components":[{"type":"bytes32","name":"inputRoot","internalType":"bytes32"},{"type":"bytes32","name":"inputNullifierHash","internalType":"bytes32"},{"type":"bytes32","name":"inputAccountHash","internalType":"bytes32"},{"type":"bytes32","name":"outputRoot","internalType":"bytes32"},{"type":"uint256","name":"outputPathIndices","internalType":"uint256"},{"type":"bytes32","name":"outputCommitment","internalType":"bytes32"},{"type":"bytes32","name":"outputAccountHash","internalType":"bytes32"}]}]}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IVerifier"}],"name":"depositVerifier","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"getLastAccountRoot","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IVerifier"}],"name":"inputRootVerifier","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isKnownAccountRoot","inputs":[{"type":"bytes32","name":"_root","internalType":"bytes32"},{"type":"uint256","name":"_index","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"mint","inputs":[{"type":"bytes[3]","name":"_proofs","internalType":"bytes[3]"},{"type":"tuple","name":"_args","internalType":"struct PoofBase.WithdrawArgs","components":[{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"uint256","name":"debt","internalType":"uint256"},{"type":"uint256","name":"unitPerUnderlying","internalType":"uint256"},{"type":"bytes32","name":"extDataHash","internalType":"bytes32"},{"type":"tuple","name":"extData","internalType":"struct PoofBase.WithdrawExtData","components":[{"type":"uint256","name":"fee","internalType":"uint256"},{"type":"address","name":"recipient","internalType":"address"},{"type":"address","name":"relayer","internalType":"address"},{"type":"bytes","name":"encryptedAccount","internalType":"bytes"}]},{"type":"tuple","name":"account","internalType":"struct PoofBase.AccountUpdate","components":[{"type":"bytes32","name":"inputRoot","internalType":"bytes32"},{"type":"bytes32","name":"inputNullifierHash","internalType":"bytes32"},{"type":"bytes32","name":"inputAccountHash","internalType":"bytes32"},{"type":"bytes32","name":"outputRoot","internalType":"bytes32"},{"type":"uint256","name":"outputPathIndices","internalType":"uint256"},{"type":"bytes32","name":"outputCommitment","internalType":"bytes32"},{"type":"bytes32","name":"outputAccountHash","internalType":"bytes32"}]}]},{"type":"bytes","name":"_treeUpdateProof","internalType":"bytes"},{"type":"tuple","name":"_treeUpdateArgs","internalType":"struct PoofBase.TreeUpdateArgs","components":[{"type":"bytes32","name":"oldRoot","internalType":"bytes32"},{"type":"bytes32","name":"newRoot","internalType":"bytes32"},{"type":"bytes32","name":"leaf","internalType":"bytes32"},{"type":"uint256","name":"pathIndices","internalType":"uint256"}]}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"mint","inputs":[{"type":"bytes[3]","name":"_proofs","internalType":"bytes[3]"},{"type":"tuple","name":"_args","internalType":"struct PoofBase.WithdrawArgs","components":[{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"uint256","name":"debt","internalType":"uint256"},{"type":"uint256","name":"unitPerUnderlying","internalType":"uint256"},{"type":"bytes32","name":"extDataHash","internalType":"bytes32"},{"type":"tuple","name":"extData","internalType":"struct PoofBase.WithdrawExtData","components":[{"type":"uint256","name":"fee","internalType":"uint256"},{"type":"address","name":"recipient","internalType":"address"},{"type":"address","name":"relayer","internalType":"address"},{"type":"bytes","name":"encryptedAccount","internalType":"bytes"}]},{"type":"tuple","name":"account","internalType":"struct PoofBase.AccountUpdate","components":[{"type":"bytes32","name":"inputRoot","internalType":"bytes32"},{"type":"bytes32","name":"inputNullifierHash","internalType":"bytes32"},{"type":"bytes32","name":"inputAccountHash","internalType":"bytes32"},{"type":"bytes32","name":"outputRoot","internalType":"bytes32"},{"type":"uint256","name":"outputPathIndices","internalType":"uint256"},{"type":"bytes32","name":"outputCommitment","internalType":"bytes32"},{"type":"bytes32","name":"outputAccountHash","internalType":"bytes32"}]}]}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IVerifier"}],"name":"outputRootVerifier","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IERC20"}],"name":"token","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IVerifier"}],"name":"treeUpdateVerifier","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"underlyingBalanceOf","inputs":[{"type":"address","name":"owner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IERC20"}],"name":"underlyingToken","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"unitPerUnderlying","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdraw","inputs":[{"type":"bytes[3]","name":"_proofs","internalType":"bytes[3]"},{"type":"tuple","name":"_args","internalType":"struct PoofBase.WithdrawArgs","components":[{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"uint256","name":"debt","internalType":"uint256"},{"type":"uint256","name":"unitPerUnderlying","internalType":"uint256"},{"type":"bytes32","name":"extDataHash","internalType":"bytes32"},{"type":"tuple","name":"extData","internalType":"struct PoofBase.WithdrawExtData","components":[{"type":"uint256","name":"fee","internalType":"uint256"},{"type":"address","name":"recipient","internalType":"address"},{"type":"address","name":"relayer","internalType":"address"},{"type":"bytes","name":"encryptedAccount","internalType":"bytes"}]},{"type":"tuple","name":"account","internalType":"struct PoofBase.AccountUpdate","components":[{"type":"bytes32","name":"inputRoot","internalType":"bytes32"},{"type":"bytes32","name":"inputNullifierHash","internalType":"bytes32"},{"type":"bytes32","name":"inputAccountHash","internalType":"bytes32"},{"type":"bytes32","name":"outputRoot","internalType":"bytes32"},{"type":"uint256","name":"outputPathIndices","internalType":"uint256"},{"type":"bytes32","name":"outputCommitment","internalType":"bytes32"},{"type":"bytes32","name":"outputAccountHash","internalType":"bytes32"}]}]},{"type":"bytes","name":"_treeUpdateProof","internalType":"bytes"},{"type":"tuple","name":"_treeUpdateArgs","internalType":"struct PoofBase.TreeUpdateArgs","components":[{"type":"bytes32","name":"oldRoot","internalType":"bytes32"},{"type":"bytes32","name":"newRoot","internalType":"bytes32"},{"type":"bytes32","name":"leaf","internalType":"bytes32"},{"type":"uint256","name":"pathIndices","internalType":"uint256"}]}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdraw","inputs":[{"type":"bytes[3]","name":"_proofs","internalType":"bytes[3]"},{"type":"tuple","name":"_args","internalType":"struct PoofBase.WithdrawArgs","components":[{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"uint256","name":"debt","internalType":"uint256"},{"type":"uint256","name":"unitPerUnderlying","internalType":"uint256"},{"type":"bytes32","name":"extDataHash","internalType":"bytes32"},{"type":"tuple","name":"extData","internalType":"struct PoofBase.WithdrawExtData","components":[{"type":"uint256","name":"fee","internalType":"uint256"},{"type":"address","name":"recipient","internalType":"address"},{"type":"address","name":"relayer","internalType":"address"},{"type":"bytes","name":"encryptedAccount","internalType":"bytes"}]},{"type":"tuple","name":"account","internalType":"struct PoofBase.AccountUpdate","components":[{"type":"bytes32","name":"inputRoot","internalType":"bytes32"},{"type":"bytes32","name":"inputNullifierHash","internalType":"bytes32"},{"type":"bytes32","name":"inputAccountHash","internalType":"bytes32"},{"type":"bytes32","name":"outputRoot","internalType":"bytes32"},{"type":"uint256","name":"outputPathIndices","internalType":"uint256"},{"type":"bytes32","name":"outputCommitment","internalType":"bytes32"},{"type":"bytes32","name":"outputAccountHash","internalType":"bytes32"}]}]}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IVerifier"}],"name":"withdrawVerifier","inputs":[]}]
              

Contract Creation Code

0x60806040523480156200001157600080fd5b5060405162003584380380620035848339810160408190526200003491620002f7565b60078190558151600080546001600160a01b03199081166001600160a01b039384161790915560208085015160018054841691851691909117905560408086015160028054851691861691909117905560608601516003805485169186169190911790556080860151600480548516918616919091178155606b80549094169488169485179093558051632495a59960e01b8152905189948994899489948994632495a599938281019392829003018186803b158015620000f457600080fd5b505afa15801562000109573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012f9190620002d1565b606c80546001600160a01b039283166001600160a01b031991821617909155606d80549590921694169390931790925550508151620001769060719060208501906200019a565b5080516200018c9060729060208401906200019a565b505050505050505062000481565b828054620001a89062000415565b90600052602060002090601f016020900481019282620001cc576000855562000217565b82601f10620001e757805160ff191683800117855562000217565b8280016001018555821562000217579182015b8281111562000217578251825591602001919060010190620001fa565b506200022592915062000229565b5090565b5b808211156200022557600081556001016200022a565b600082601f83011262000251578081fd5b81516001600160401b038111156200026d576200026d62000452565b602062000283601f8301601f19168201620003e2565b828152858284870101111562000297578384fd5b835b83811015620002b657858101830151828201840152820162000299565b83811115620002c757848385840101525b5095945050505050565b600060208284031215620002e3578081fd5b8151620002f08162000468565b9392505050565b6000806000806000610120868803121562000310578081fd5b85516001600160401b038082111562000327578283fd5b6200033589838a0162000240565b96506020915081880151818111156200034c578384fd5b6200035a8a828b0162000240565b9650505060408701516200036e8162000468565b9350607f870188136200037f578182fd5b6200038b60a0620003e2565b80606089016101008a018b811115620003a2578586fd5b855b6005811015620003ce578251620003bb8162000468565b85529385019391850191600101620003a4565b5051989b979a509598509695945050505050565b604051601f8201601f191681016001600160401b03811182821017156200040d576200040d62000452565b604052919050565b600181811c908216806200042a57607f821691505b602082108114156200044c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146200047e57600080fd5b50565b6130f380620004916000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c8063703c64d011610125578063c14a0b62116100ad578063dd62ed3e1161007c578063dd62ed3e14610468578063e4af29fc146104a1578063f15d0b3a146104aa578063f8d89898146104bd578063fc0c546a146104d057610211565b8063c14a0b6214610427578063c6a4b0531461043a578063cab9ecc21461044d578063d1a0c3001461046057610211565b8063935a8b84116100f4578063935a8b84146103d357806395d89b41146103e657806397f098d7146103ee578063a457c2d714610401578063a9059cbb1461041457610211565b8063703c64d01461038757806370a082311461039a57806371f43e3c146103ad578063864eb164146103c057610211565b80632495a599116101a85780633950935111610177578063395093511461032357806342a660b0146103365780634a20de581461035957806352ef8e961461036c578063538d2f801461037457610211565b80632495a599146102db57806326120c88146102ee5780632c58ae4e14610301578063313ce5671461031457610211565b80631311b6e8116101e45780631311b6e81461027f57806318160ddd1461029557806320d43b3b1461029d57806323b872dd146102c857610211565b806306fdde0314610216578063095ea7b3146102345780630af8d2401461025757806311beac241461026c575b600080fd5b61021e6104e3565b60405161022b9190612ed9565b60405180910390f35b610247610242366004612bca565b610575565b604051901515815260200161022b565b61026a610265366004612d41565b61058b565b005b61026a61027a366004612c54565b6107dc565b61028761084b565b60405190815260200161022b565b607054610287565b6002546102b0906001600160a01b031681565b6040516001600160a01b03909116815260200161022b565b6102476102d6366004612b8f565b610883565b606c546102b0906001600160a01b031681565b6000546102b0906001600160a01b031681565b61026a61030f366004612d41565b61092f565b6040516012815260200161022b565b610247610331366004612bca565b610aca565b610247610344366004612dba565b60056020526000908152604090205460ff1681565b6004546102b0906001600160a01b031681565b610287606481565b61026a610382366004612bf3565b610b06565b61026a610395366004612c54565b610b3f565b6102876103a8366004612b43565b610d10565b61026a6103bb366004612cea565b610d2f565b6001546102b0906001600160a01b031681565b6102876103e1366004612b43565b610d64565b61021e610ded565b6102476103fc366004612dd2565b610dfc565b61024761040f366004612bca565b610e3e565b610247610422366004612bca565b610ed7565b61026a610435366004612bf3565b610ee4565b610287610448366004612dba565b610f19565b61026a61045b366004612cea565b610f30565b610287610f65565b610287610476366004612b5d565b6001600160a01b039182166000908152606f6020908152604080832093909416825291909152205490565b61028760065481565b6003546102b0906001600160a01b031681565b606d546102b0906001600160a01b031681565b606b546102b0906001600160a01b031681565b6060607180546104f29061301b565b80601f016020809104026020016040519081016040528092919081815260200182805461051e9061301b565b801561056b5780601f106105405761010080835404028352916020019161056b565b820191906000526020600020905b81548152906001019060200180831161054e57829003601f168201915b5050505050905090565b6000610582338484610fe7565b50600192915050565b6105978484848461110b565b608083015151835110156105fc5760405162461bcd60e51b815260206004820152602160248201527f4665652063616e6e6f742062652067726561746572207468616e20616d6f756e6044820152601d60fa1b60648201526084015b60405180910390fd5b606d5460808401515184516000926001600160a01b0316916304626a6491610623916116c8565b6040518263ffffffff1660e01b815260040161064191815260200190565b60206040518083038186803b15801561065957600080fd5b505afa15801561066d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106919190612df3565b606d546080860151516040516301189a9960e21b81529293506000926001600160a01b03909216916304626a64916106cf9160040190815260200190565b60206040518083038186803b1580156106e757600080fd5b505afa1580156106fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071f9190612df3565b606d548651604051636f074d1f60e11b815260048101919091529192506001600160a01b03169063de0e9a3e90602401600060405180830381600087803b15801561076957600080fd5b505af115801561077d573d6000803e3d6000fd5b5050505060008211156107ac57608085015160200151606c546107ac916001600160a01b0390911690846116d4565b80156107d457608085015160400151606c546107d4916001600160a01b0390911690836116d4565b505050505050565b6107e88484848461173c565b8251156108375760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f742075736520616d6f756e7420666f72206275726e696e6700000060448201526064016105f3565b610845338460200151611b91565b50505050565b60006007606460065461085e9190613071565b6064811061087c57634e487b7160e01b600052603260045260246000fd5b0154905090565b6000610890848484611cdf565b6001600160a01b0384166000908152606f60209081526040808320338452909152902054828110156109155760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016105f3565b6109228533858403610fe7565b60019150505b9392505050565b61093b8484848461110b565b6080830151518351146109905760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e742063616e206f6e6c79206265207573656420666f72206665650060448201526064016105f3565b825115610aaa57606d546080840151516040516301189a9960e21b815260048101919091526000916001600160a01b0316906304626a649060240160206040518083038186803b1580156109e357600080fd5b505afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190612df3565b606d548551604051636f074d1f60e11b815260048101919091529192506001600160a01b03169063de0e9a3e90602401600060405180830381600087803b158015610a6557600080fd5b505af1158015610a79573d6000803e3d6000fd5b505050506000811115610aa857608084015160400151606c54610aa8916001600160a01b0390911690836116d4565b505b602083015115610845576108458360800151602001518460200151611ead565b336000818152606f602090815260408083206001600160a01b03871684529091528120549091610582918590610b01908690612fc0565b610fe7565b60408051600080825260a08201835260208201818152928201819052606082018190526080820152610b3b91849184916107dc565b5050565b610b4b8484848461173c565b606d5483516040516301189a9960e21b815260048101919091526000916001600160a01b0316906304626a649060240160206040518083038186803b158015610b9357600080fd5b505afa158015610ba7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb9190612df3565b606c54909150610be6906001600160a01b0316333084611f8d565b606c54606d5460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b390604401602060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6e9190612d9a565b610cab5760405162461bcd60e51b815260206004820152600e60248201526d105c1c1c9bdd994819985a5b195960921b60448201526064016105f3565b606d54604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb090602401600060405180830381600087803b158015610cf157600080fd5b505af1158015610d05573d6000803e3d6000fd5b505050505050505050565b6001600160a01b0381166000908152606e60205260409020545b919050565b60408051600080825260a08201835260208201818152928201819052606082018190526080820152610b3b918491849161092f565b600080610d7083610d10565b606d546040516301189a9960e21b8152600481018390529192506001600160a01b0316906304626a649060240160206040518083038186803b158015610db557600080fd5b505afa158015610dc9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109289190612df3565b6060607280546104f29061301b565b600082158015906109285750826007610e16606485613071565b60648110610e3457634e487b7160e01b600052603260045260246000fd5b0154149392505050565b336000908152606f602090815260408083206001600160a01b038616845290915281205482811015610ec05760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105f3565b610ecd3385858403610fe7565b5060019392505050565b6000610582338484611cdf565b60408051600080825260a08201835260208201818152928201819052606082018190526080820152610b3b9184918491610b3f565b60078160648110610f2957600080fd5b0154905081565b60408051600080825260a08201835260208201818152928201819052606082018190526080820152610b3b918491849161058b565b606d546040516307be638960e51b8152600160048201526000916001600160a01b03169063f7cc71209060240160206040518083038186803b158015610faa57600080fd5b505afa158015610fbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe29190612df3565b905090565b6001600160a01b0383166110495760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105f3565b6001600160a01b0382166110aa5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105f3565b6001600160a01b038381166000818152606f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61111a8360a001518383611fc5565b61115583608001516040516020016111329190612f48565b60405160208183030381529060405280516020909101206001600160f81b031690565b8360600151146111a75760405162461bcd60e51b815260206004820152601c60248201527f496e636f72726563742065787465726e616c206461746120686173680000000060448201526064016105f3565b8251600160f81b116111fb5760405162461bcd60e51b815260206004820152601960248201527f416d6f756e742076616c7565206f7574206f662072616e67650000000000000060448201526064016105f3565b600160f81b8360200151106112525760405162461bcd60e51b815260206004820152601760248201527f446562742076616c7565206f7574206f662072616e676500000000000000000060448201526064016105f3565b608083015151835110156112a85760405162461bcd60e51b815260206004820152601c60248201527f416d6f756e742073686f756c64206265203e3d207468616e206665650000000060448201526064016105f3565b6112b0610f65565b836040015110156112d35760405162461bcd60e51b81526004016105f390612eec565b60015484516040805160c08082018352875182526020888101519083015287830151828401526060808901519083015260a0808901805190940151608084015292510151918101919091526001600160a01b0390921691631e8e1e13919061133a906120f0565b6040518363ffffffff1660e01b8152600401611357929190612e83565b60206040518083038186803b15801561136f57600080fd5b505afa158015611383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a79190612d9a565b6113f35760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207769746864726177616c2070726f6f66000000000000000060448201526064016105f3565b6002546020808601516040805160608101825260a0880180515182528051850151948201949094529251810151908301526001600160a01b0390921691631e8e1e139161143f9061218f565b6040518363ffffffff1660e01b815260040161145c929190612e83565b60206040518083038186803b15801561147457600080fd5b505afa158015611488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ac9190612d9a565b6114f35760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21034b7383aba103937b7ba10383937b7b360411b60448201526064016105f3565b600354604080860151815160a08082018452878101805151835280516060908101516020850152815160809081015196850196909652815190920151918301919091525160c00151928101929092526001600160a01b0390921691631e8e1e139161155d90612224565b6040518363ffffffff1660e01b815260040161157a929190612e83565b60206040518083038186803b15801561159257600080fd5b505afa1580156115a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ca9190612d9a565b6116125760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b21037baba383aba103937b7ba10383937b7b360391b60448201526064016105f3565b61164161161d61084b565b60a0850151511461163257816020015161163c565b8360a00151606001515b6122ba565b60a0808401805160209081015160009081526005825260409020805460ff191660019081179091559151928301519201516080860151606001516006547fbd4a5ca11c6f082fd6d00dc9d1dced6ab22490039bc36154bfa748bf2bf7435594936116aa91612fd8565b6040516116ba9493929190612e53565b60405180910390a150505050565b60006109288284612fd8565b6040516001600160a01b03831660248201526044810182905261173790849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612300565b505050565b61174b8360a001518383611fc5565b61176383608001516040516020016111329190612f2d565b8360600151146117b55760405162461bcd60e51b815260206004820152601c60248201527f496e636f72726563742065787465726e616c206461746120686173680000000060448201526064016105f3565b6117bd610f65565b836040015110156117e05760405162461bcd60e51b81526004016105f390612eec565b60005484516040805160c08082018352875182526020888101519083015287830151828401526060808901519083015260a0808901805190940151608084015292510151918101919091526001600160a01b0390921691631e8e1e139190611847906120f0565b6040518363ffffffff1660e01b8152600401611864929190612e83565b60206040518083038186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b49190612d9a565b6118f85760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103232b837b9b4ba10383937b7b360591b60448201526064016105f3565b6002546020808601516040805160608101825260a0880180515182528051850151948201949094529251810151908301526001600160a01b0390921691631e8e1e13916119449061218f565b6040518363ffffffff1660e01b8152600401611961929190612e83565b60206040518083038186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b19190612d9a565b6119f85760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21034b7383aba103937b7ba10383937b7b360411b60448201526064016105f3565b600354604080860151815160a08082018452878101805151835280516060908101516020850152815160809081015196850196909652815190920151918301919091525160c00151928101929092526001600160a01b0390921691631e8e1e1391611a6290612224565b6040518363ffffffff1660e01b8152600401611a7f929190612e83565b60206040518083038186803b158015611a9757600080fd5b505afa158015611aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acf9190612d9a565b611b175760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b21037baba383aba103937b7ba10383937b7b360391b60448201526064016105f3565b60a08301516020908101516000908152600590915260409020805460ff19166001179055611b4661161d61084b565b7fbd4a5ca11c6f082fd6d00dc9d1dced6ab22490039bc36154bfa748bf2bf743558360a0015160a001518460a001516020015185608001516000015160016006546116aa9190612fd8565b6001600160a01b038216611bf15760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105f3565b6001600160a01b0382166000908152606e602052604090205481811015611c655760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105f3565b6001600160a01b0383166000908152606e60205260408120838303905560708054849290611c94908490612fd8565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3611737565b6001600160a01b038316611d435760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105f3565b6001600160a01b038216611da55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105f3565b6001600160a01b0383166000908152606e602052604090205481811015611e1d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105f3565b6001600160a01b038085166000908152606e6020526040808220858503905591851681529081208054849290611e54908490612fc0565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ea091815260200190565b60405180910390a3610845565b6001600160a01b038216611f035760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105f3565b8060706000828254611f159190612fc0565b90915550506001600160a01b0382166000908152606e602052604081208054839290611f42908490612fc0565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610b3b565b6040516001600160a01b03808516602483015283166044820152606481018290526108459085906323b872dd60e01b90608401611700565b60208084015160009081526005909152604090205460ff16156120235760405162461bcd60e51b81526020600482015260166024820152754f75746461746564206163636f756e7420737461746560501b60448201526064016105f3565b61202b61084b565b83511461209b5761204483600001518460800151610dfc565b6120875760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081858d8dbdd5b9d081c9bdbdd60621b60448201526064016105f3565b61209682828560a001516123d2565b611737565b6006548360800151146117375760405162461bcd60e51b815260206004820152601e60248201527f496e636f7272656374206163636f756e7420696e7365727420696e646578000060448201526064016105f3565b60408051600680825260e08201909252606091600091906020820160c080368337019050509050600660005b818110156121865784816006811061214457634e487b7160e01b600052603260045260246000fd5b602002015183828151811061216957634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061217e81613056565b91505061211c565b50909392505050565b6040805160038082526080820190925260609160009190602082018480368337019050509050600360005b81811015612186578481600381106121e257634e487b7160e01b600052603260045260246000fd5b602002015183828151811061220757634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061221c81613056565b9150506121ba565b60408051600580825260c08201909252606091600091906020820160a080368337019050509050600560005b818110156121865784816005811061227857634e487b7160e01b600052603260045260246000fd5b602002015183828151811061229d57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806122b281613056565b915050612250565b80600760646006600081546122ce90613056565b91829055506122dd9190613071565b606481106122fb57634e487b7160e01b600052603260045260246000fd5b015550565b6000612355826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166126289092919063ffffffff16565b80519091501561173757808060200190518101906123739190612d9a565b6117375760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105f3565b60008351116124235760405162461bcd60e51b815260206004820152601c60248201527f4f75746461746564206163636f756e74206d65726b6c6520726f6f740000000060448201526064016105f3565b61242b61084b565b82511461247a5760405162461bcd60e51b815260206004820181905260248201527f4f75746461746564207472656520757064617465206d65726b6c6520726f6f7460448201526064016105f3565b808260400151146124cd5760405162461bcd60e51b815260206004820152601d60248201527f496e636f727265637420636f6d6d69746d656e7420696e73657274656400000060448201526064016105f3565b6006548260600151146125225760405162461bcd60e51b815260206004820152601e60248201527f496e636f7272656374206163636f756e7420696e7365727420696e646578000060448201526064016105f3565b6004546040805160808101825284518152602080860151908201528482015191810191909152606080850151908201526001600160a01b0390911690631e8e1e1390859061256f9061263f565b6040518363ffffffff1660e01b815260040161258c929190612e83565b60206040518083038186803b1580156125a457600080fd5b505afa1580156125b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125dc9190612d9a565b6117375760405162461bcd60e51b815260206004820152601960248201527f496e76616c69642074726565207570646174652070726f6f660000000000000060448201526064016105f3565b606061263784846000856126d5565b949350505050565b60408051600480825260a082019092526060916000919060208201608080368337019050509050600460005b818110156121865784816004811061269357634e487b7160e01b600052603260045260246000fd5b60200201518382815181106126b857634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806126cd81613056565b91505061266b565b6060824710156127365760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016105f3565b843b6127845760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105f3565b600080866001600160a01b031685876040516127a09190612e37565b60006040518083038185875af1925050503d80600081146127dd576040519150601f19603f3d011682016040523d82523d6000602084013e6127e2565b606091505b50915091506127f28282866127fd565b979650505050505050565b6060831561280c575081610928565b82511561281c5782518084602001fd5b8160405162461bcd60e51b81526004016105f39190612ed9565b80356001600160a01b0381168114610d2a57600080fd5b600082601f83011261285d578081fd5b6128676060612f8f565b8083835b60038110156128965761288187833588016128a1565b8452602093840193919091019060010161286b565b509095945050505050565b600082601f8301126128b1578081fd5b813567ffffffffffffffff8111156128cb576128cb6130a7565b6128de601f8201601f1916602001612f8f565b8181528460208386010111156128f2578283fd5b816020850160208301379081016020019190915292915050565b600060e0828403121561291d578081fd5b61292760e0612f8f565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015292915050565b60006101808284031215612981578081fd5b61298b60c0612f8f565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff808211156129ca57600080fd5b90830190602082860312156129de57600080fd5b6129e86020612f8f565b8235828111156129f757600080fd5b612a03878286016128a1565b825250608084015250612a1b90508360a0840161290c565b60a082015292915050565b600060808284031215612a37578081fd5b612a416080612f8f565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b60006101808284031215612a7d578081fd5b612a8760c0612f8f565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff80821115612ac657600080fd5b9083019060808286031215612ada57600080fd5b612ae46080612f8f565b82358152612af460208401612836565b6020820152612b0560408401612836565b6040820152606083013582811115612b1c57600080fd5b612b28878286016128a1565b606083015250608084015250612a1b90508360a0840161290c565b600060208284031215612b54578081fd5b61092882612836565b60008060408385031215612b6f578081fd5b612b7883612836565b9150612b8660208401612836565b90509250929050565b600080600060608486031215612ba3578081fd5b612bac84612836565b9250612bba60208501612836565b9150604084013590509250925092565b60008060408385031215612bdc578182fd5b612be583612836565b946020939093013593505050565b60008060408385031215612c05578182fd5b823567ffffffffffffffff80821115612c1c578384fd5b612c288683870161284d565b93506020850135915080821115612c3d578283fd5b50612c4a8582860161296f565b9150509250929050565b60008060008060e08587031215612c69578182fd5b843567ffffffffffffffff80821115612c80578384fd5b612c8c8883890161284d565b95506020870135915080821115612ca1578384fd5b612cad8883890161296f565b94506040870135915080821115612cc2578384fd5b50612ccf878288016128a1565b925050612cdf8660608701612a26565b905092959194509250565b60008060408385031215612cfc578182fd5b823567ffffffffffffffff80821115612d13578384fd5b612d1f8683870161284d565b93506020850135915080821115612d34578283fd5b50612c4a85828601612a6b565b60008060008060e08587031215612d56578182fd5b843567ffffffffffffffff80821115612d6d578384fd5b612d798883890161284d565b95506020870135915080821115612d8e578384fd5b612cad88838901612a6b565b600060208284031215612dab578081fd5b81518015158114610928578182fd5b600060208284031215612dcb578081fd5b5035919050565b60008060408385031215612de4578182fd5b50508035926020909101359150565b600060208284031215612e04578081fd5b5051919050565b60008151808452612e23816020860160208601612fef565b601f01601f19169290920160200192915050565b60008251612e49818460208701612fef565b9190910192915050565b600085825284602083015260806040830152612e726080830185612e0b565b905082606083015295945050505050565b600060408252612e966040830185612e0b565b828103602084810191909152845180835285820192820190845b81811015612ecc57845183529383019391830191600101612eb0565b5090979650505050505050565b6000602082526109286020830184612e0b565b60208082526021908201527f556e6465726c79696e672070657220756e6974206973206f76657273746174656040820152601960fa1b606082015260800190565b60006020825282516020808401526126376040840182612e0b565b60006020825282516020830152602083015160018060a01b0380821660408501528060408601511660608501525050606083015160808084015261263760a0840182612e0b565b604051601f8201601f1916810167ffffffffffffffff81118282101715612fb857612fb86130a7565b604052919050565b60008219821115612fd357612fd3613091565b500190565b600082821015612fea57612fea613091565b500390565b60005b8381101561300a578181015183820152602001612ff2565b838111156108455750506000910152565b600181811c9082168061302f57607f821691505b6020821081141561305057634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561306a5761306a613091565b5060010190565b60008261308c57634e487b7160e01b81526012600452602481fd5b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220dfa50c91bbaf9f8fdf7e55e42cb7077b525e8285a172989ac7350c82286db0fa64736f6c6343000803003300000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000d3d7831d502ab85319e1f0a18109aa9abebc2603000000000000000000000000f687b69a93e23f7404f1d9c5c793a1feb5c406d600000000000000000000000055e6bd7ef032f3d8b2664b21e6eadf2b47a9bf100000000000000000000000003d9df0cfbbeb05e66da9a5bde06a30e401923300000000000000000000000000a8fd85c672534d1a0dc5b801ce48d2e40829366200000000000000000000000057f24249a33c3f1c26329da53632281290a8c3a92b0f6fc0179fa65b6f73627c0e1e84c7374d2eaec44c9a48f2571393ea77bcbb0000000000000000000000000000000000000000000000000000000000000009506f6f662043454c4f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057043454c4f000000000000000000000000000000000000000000000000000000

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106102115760003560e01c8063703c64d011610125578063c14a0b62116100ad578063dd62ed3e1161007c578063dd62ed3e14610468578063e4af29fc146104a1578063f15d0b3a146104aa578063f8d89898146104bd578063fc0c546a146104d057610211565b8063c14a0b6214610427578063c6a4b0531461043a578063cab9ecc21461044d578063d1a0c3001461046057610211565b8063935a8b84116100f4578063935a8b84146103d357806395d89b41146103e657806397f098d7146103ee578063a457c2d714610401578063a9059cbb1461041457610211565b8063703c64d01461038757806370a082311461039a57806371f43e3c146103ad578063864eb164146103c057610211565b80632495a599116101a85780633950935111610177578063395093511461032357806342a660b0146103365780634a20de581461035957806352ef8e961461036c578063538d2f801461037457610211565b80632495a599146102db57806326120c88146102ee5780632c58ae4e14610301578063313ce5671461031457610211565b80631311b6e8116101e45780631311b6e81461027f57806318160ddd1461029557806320d43b3b1461029d57806323b872dd146102c857610211565b806306fdde0314610216578063095ea7b3146102345780630af8d2401461025757806311beac241461026c575b600080fd5b61021e6104e3565b60405161022b9190612ed9565b60405180910390f35b610247610242366004612bca565b610575565b604051901515815260200161022b565b61026a610265366004612d41565b61058b565b005b61026a61027a366004612c54565b6107dc565b61028761084b565b60405190815260200161022b565b607054610287565b6002546102b0906001600160a01b031681565b6040516001600160a01b03909116815260200161022b565b6102476102d6366004612b8f565b610883565b606c546102b0906001600160a01b031681565b6000546102b0906001600160a01b031681565b61026a61030f366004612d41565b61092f565b6040516012815260200161022b565b610247610331366004612bca565b610aca565b610247610344366004612dba565b60056020526000908152604090205460ff1681565b6004546102b0906001600160a01b031681565b610287606481565b61026a610382366004612bf3565b610b06565b61026a610395366004612c54565b610b3f565b6102876103a8366004612b43565b610d10565b61026a6103bb366004612cea565b610d2f565b6001546102b0906001600160a01b031681565b6102876103e1366004612b43565b610d64565b61021e610ded565b6102476103fc366004612dd2565b610dfc565b61024761040f366004612bca565b610e3e565b610247610422366004612bca565b610ed7565b61026a610435366004612bf3565b610ee4565b610287610448366004612dba565b610f19565b61026a61045b366004612cea565b610f30565b610287610f65565b610287610476366004612b5d565b6001600160a01b039182166000908152606f6020908152604080832093909416825291909152205490565b61028760065481565b6003546102b0906001600160a01b031681565b606d546102b0906001600160a01b031681565b606b546102b0906001600160a01b031681565b6060607180546104f29061301b565b80601f016020809104026020016040519081016040528092919081815260200182805461051e9061301b565b801561056b5780601f106105405761010080835404028352916020019161056b565b820191906000526020600020905b81548152906001019060200180831161054e57829003601f168201915b5050505050905090565b6000610582338484610fe7565b50600192915050565b6105978484848461110b565b608083015151835110156105fc5760405162461bcd60e51b815260206004820152602160248201527f4665652063616e6e6f742062652067726561746572207468616e20616d6f756e6044820152601d60fa1b60648201526084015b60405180910390fd5b606d5460808401515184516000926001600160a01b0316916304626a6491610623916116c8565b6040518263ffffffff1660e01b815260040161064191815260200190565b60206040518083038186803b15801561065957600080fd5b505afa15801561066d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106919190612df3565b606d546080860151516040516301189a9960e21b81529293506000926001600160a01b03909216916304626a64916106cf9160040190815260200190565b60206040518083038186803b1580156106e757600080fd5b505afa1580156106fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071f9190612df3565b606d548651604051636f074d1f60e11b815260048101919091529192506001600160a01b03169063de0e9a3e90602401600060405180830381600087803b15801561076957600080fd5b505af115801561077d573d6000803e3d6000fd5b5050505060008211156107ac57608085015160200151606c546107ac916001600160a01b0390911690846116d4565b80156107d457608085015160400151606c546107d4916001600160a01b0390911690836116d4565b505050505050565b6107e88484848461173c565b8251156108375760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f742075736520616d6f756e7420666f72206275726e696e6700000060448201526064016105f3565b610845338460200151611b91565b50505050565b60006007606460065461085e9190613071565b6064811061087c57634e487b7160e01b600052603260045260246000fd5b0154905090565b6000610890848484611cdf565b6001600160a01b0384166000908152606f60209081526040808320338452909152902054828110156109155760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016105f3565b6109228533858403610fe7565b60019150505b9392505050565b61093b8484848461110b565b6080830151518351146109905760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e742063616e206f6e6c79206265207573656420666f72206665650060448201526064016105f3565b825115610aaa57606d546080840151516040516301189a9960e21b815260048101919091526000916001600160a01b0316906304626a649060240160206040518083038186803b1580156109e357600080fd5b505afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190612df3565b606d548551604051636f074d1f60e11b815260048101919091529192506001600160a01b03169063de0e9a3e90602401600060405180830381600087803b158015610a6557600080fd5b505af1158015610a79573d6000803e3d6000fd5b505050506000811115610aa857608084015160400151606c54610aa8916001600160a01b0390911690836116d4565b505b602083015115610845576108458360800151602001518460200151611ead565b336000818152606f602090815260408083206001600160a01b03871684529091528120549091610582918590610b01908690612fc0565b610fe7565b60408051600080825260a08201835260208201818152928201819052606082018190526080820152610b3b91849184916107dc565b5050565b610b4b8484848461173c565b606d5483516040516301189a9960e21b815260048101919091526000916001600160a01b0316906304626a649060240160206040518083038186803b158015610b9357600080fd5b505afa158015610ba7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb9190612df3565b606c54909150610be6906001600160a01b0316333084611f8d565b606c54606d5460405163095ea7b360e01b81526001600160a01b0391821660048201526024810184905291169063095ea7b390604401602060405180830381600087803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6e9190612d9a565b610cab5760405162461bcd60e51b815260206004820152600e60248201526d105c1c1c9bdd994819985a5b195960921b60448201526064016105f3565b606d54604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb090602401600060405180830381600087803b158015610cf157600080fd5b505af1158015610d05573d6000803e3d6000fd5b505050505050505050565b6001600160a01b0381166000908152606e60205260409020545b919050565b60408051600080825260a08201835260208201818152928201819052606082018190526080820152610b3b918491849161092f565b600080610d7083610d10565b606d546040516301189a9960e21b8152600481018390529192506001600160a01b0316906304626a649060240160206040518083038186803b158015610db557600080fd5b505afa158015610dc9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109289190612df3565b6060607280546104f29061301b565b600082158015906109285750826007610e16606485613071565b60648110610e3457634e487b7160e01b600052603260045260246000fd5b0154149392505050565b336000908152606f602090815260408083206001600160a01b038616845290915281205482811015610ec05760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105f3565b610ecd3385858403610fe7565b5060019392505050565b6000610582338484611cdf565b60408051600080825260a08201835260208201818152928201819052606082018190526080820152610b3b9184918491610b3f565b60078160648110610f2957600080fd5b0154905081565b60408051600080825260a08201835260208201818152928201819052606082018190526080820152610b3b918491849161058b565b606d546040516307be638960e51b8152600160048201526000916001600160a01b03169063f7cc71209060240160206040518083038186803b158015610faa57600080fd5b505afa158015610fbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe29190612df3565b905090565b6001600160a01b0383166110495760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105f3565b6001600160a01b0382166110aa5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105f3565b6001600160a01b038381166000818152606f602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b61111a8360a001518383611fc5565b61115583608001516040516020016111329190612f48565b60405160208183030381529060405280516020909101206001600160f81b031690565b8360600151146111a75760405162461bcd60e51b815260206004820152601c60248201527f496e636f72726563742065787465726e616c206461746120686173680000000060448201526064016105f3565b8251600160f81b116111fb5760405162461bcd60e51b815260206004820152601960248201527f416d6f756e742076616c7565206f7574206f662072616e67650000000000000060448201526064016105f3565b600160f81b8360200151106112525760405162461bcd60e51b815260206004820152601760248201527f446562742076616c7565206f7574206f662072616e676500000000000000000060448201526064016105f3565b608083015151835110156112a85760405162461bcd60e51b815260206004820152601c60248201527f416d6f756e742073686f756c64206265203e3d207468616e206665650000000060448201526064016105f3565b6112b0610f65565b836040015110156112d35760405162461bcd60e51b81526004016105f390612eec565b60015484516040805160c08082018352875182526020888101519083015287830151828401526060808901519083015260a0808901805190940151608084015292510151918101919091526001600160a01b0390921691631e8e1e13919061133a906120f0565b6040518363ffffffff1660e01b8152600401611357929190612e83565b60206040518083038186803b15801561136f57600080fd5b505afa158015611383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a79190612d9a565b6113f35760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207769746864726177616c2070726f6f66000000000000000060448201526064016105f3565b6002546020808601516040805160608101825260a0880180515182528051850151948201949094529251810151908301526001600160a01b0390921691631e8e1e139161143f9061218f565b6040518363ffffffff1660e01b815260040161145c929190612e83565b60206040518083038186803b15801561147457600080fd5b505afa158015611488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ac9190612d9a565b6114f35760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21034b7383aba103937b7ba10383937b7b360411b60448201526064016105f3565b600354604080860151815160a08082018452878101805151835280516060908101516020850152815160809081015196850196909652815190920151918301919091525160c00151928101929092526001600160a01b0390921691631e8e1e139161155d90612224565b6040518363ffffffff1660e01b815260040161157a929190612e83565b60206040518083038186803b15801561159257600080fd5b505afa1580156115a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ca9190612d9a565b6116125760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b21037baba383aba103937b7ba10383937b7b360391b60448201526064016105f3565b61164161161d61084b565b60a0850151511461163257816020015161163c565b8360a00151606001515b6122ba565b60a0808401805160209081015160009081526005825260409020805460ff191660019081179091559151928301519201516080860151606001516006547fbd4a5ca11c6f082fd6d00dc9d1dced6ab22490039bc36154bfa748bf2bf7435594936116aa91612fd8565b6040516116ba9493929190612e53565b60405180910390a150505050565b60006109288284612fd8565b6040516001600160a01b03831660248201526044810182905261173790849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612300565b505050565b61174b8360a001518383611fc5565b61176383608001516040516020016111329190612f2d565b8360600151146117b55760405162461bcd60e51b815260206004820152601c60248201527f496e636f72726563742065787465726e616c206461746120686173680000000060448201526064016105f3565b6117bd610f65565b836040015110156117e05760405162461bcd60e51b81526004016105f390612eec565b60005484516040805160c08082018352875182526020888101519083015287830151828401526060808901519083015260a0808901805190940151608084015292510151918101919091526001600160a01b0390921691631e8e1e139190611847906120f0565b6040518363ffffffff1660e01b8152600401611864929190612e83565b60206040518083038186803b15801561187c57600080fd5b505afa158015611890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b49190612d9a565b6118f85760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103232b837b9b4ba10383937b7b360591b60448201526064016105f3565b6002546020808601516040805160608101825260a0880180515182528051850151948201949094529251810151908301526001600160a01b0390921691631e8e1e13916119449061218f565b6040518363ffffffff1660e01b8152600401611961929190612e83565b60206040518083038186803b15801561197957600080fd5b505afa15801561198d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b19190612d9a565b6119f85760405162461bcd60e51b815260206004820152601860248201527724b73b30b634b21034b7383aba103937b7ba10383937b7b360411b60448201526064016105f3565b600354604080860151815160a08082018452878101805151835280516060908101516020850152815160809081015196850196909652815190920151918301919091525160c00151928101929092526001600160a01b0390921691631e8e1e1391611a6290612224565b6040518363ffffffff1660e01b8152600401611a7f929190612e83565b60206040518083038186803b158015611a9757600080fd5b505afa158015611aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acf9190612d9a565b611b175760405162461bcd60e51b815260206004820152601960248201527824b73b30b634b21037baba383aba103937b7ba10383937b7b360391b60448201526064016105f3565b60a08301516020908101516000908152600590915260409020805460ff19166001179055611b4661161d61084b565b7fbd4a5ca11c6f082fd6d00dc9d1dced6ab22490039bc36154bfa748bf2bf743558360a0015160a001518460a001516020015185608001516000015160016006546116aa9190612fd8565b6001600160a01b038216611bf15760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016105f3565b6001600160a01b0382166000908152606e602052604090205481811015611c655760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016105f3565b6001600160a01b0383166000908152606e60205260408120838303905560708054849290611c94908490612fd8565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3611737565b6001600160a01b038316611d435760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105f3565b6001600160a01b038216611da55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105f3565b6001600160a01b0383166000908152606e602052604090205481811015611e1d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105f3565b6001600160a01b038085166000908152606e6020526040808220858503905591851681529081208054849290611e54908490612fc0565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ea091815260200190565b60405180910390a3610845565b6001600160a01b038216611f035760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105f3565b8060706000828254611f159190612fc0565b90915550506001600160a01b0382166000908152606e602052604081208054839290611f42908490612fc0565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610b3b565b6040516001600160a01b03808516602483015283166044820152606481018290526108459085906323b872dd60e01b90608401611700565b60208084015160009081526005909152604090205460ff16156120235760405162461bcd60e51b81526020600482015260166024820152754f75746461746564206163636f756e7420737461746560501b60448201526064016105f3565b61202b61084b565b83511461209b5761204483600001518460800151610dfc565b6120875760405162461bcd60e51b8152602060048201526014602482015273125b9d985b1a59081858d8dbdd5b9d081c9bdbdd60621b60448201526064016105f3565b61209682828560a001516123d2565b611737565b6006548360800151146117375760405162461bcd60e51b815260206004820152601e60248201527f496e636f7272656374206163636f756e7420696e7365727420696e646578000060448201526064016105f3565b60408051600680825260e08201909252606091600091906020820160c080368337019050509050600660005b818110156121865784816006811061214457634e487b7160e01b600052603260045260246000fd5b602002015183828151811061216957634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061217e81613056565b91505061211c565b50909392505050565b6040805160038082526080820190925260609160009190602082018480368337019050509050600360005b81811015612186578481600381106121e257634e487b7160e01b600052603260045260246000fd5b602002015183828151811061220757634e487b7160e01b600052603260045260246000fd5b60209081029190910101528061221c81613056565b9150506121ba565b60408051600580825260c08201909252606091600091906020820160a080368337019050509050600560005b818110156121865784816005811061227857634e487b7160e01b600052603260045260246000fd5b602002015183828151811061229d57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806122b281613056565b915050612250565b80600760646006600081546122ce90613056565b91829055506122dd9190613071565b606481106122fb57634e487b7160e01b600052603260045260246000fd5b015550565b6000612355826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166126289092919063ffffffff16565b80519091501561173757808060200190518101906123739190612d9a565b6117375760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105f3565b60008351116124235760405162461bcd60e51b815260206004820152601c60248201527f4f75746461746564206163636f756e74206d65726b6c6520726f6f740000000060448201526064016105f3565b61242b61084b565b82511461247a5760405162461bcd60e51b815260206004820181905260248201527f4f75746461746564207472656520757064617465206d65726b6c6520726f6f7460448201526064016105f3565b808260400151146124cd5760405162461bcd60e51b815260206004820152601d60248201527f496e636f727265637420636f6d6d69746d656e7420696e73657274656400000060448201526064016105f3565b6006548260600151146125225760405162461bcd60e51b815260206004820152601e60248201527f496e636f7272656374206163636f756e7420696e7365727420696e646578000060448201526064016105f3565b6004546040805160808101825284518152602080860151908201528482015191810191909152606080850151908201526001600160a01b0390911690631e8e1e1390859061256f9061263f565b6040518363ffffffff1660e01b815260040161258c929190612e83565b60206040518083038186803b1580156125a457600080fd5b505afa1580156125b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125dc9190612d9a565b6117375760405162461bcd60e51b815260206004820152601960248201527f496e76616c69642074726565207570646174652070726f6f660000000000000060448201526064016105f3565b606061263784846000856126d5565b949350505050565b60408051600480825260a082019092526060916000919060208201608080368337019050509050600460005b818110156121865784816004811061269357634e487b7160e01b600052603260045260246000fd5b60200201518382815181106126b857634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806126cd81613056565b91505061266b565b6060824710156127365760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016105f3565b843b6127845760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105f3565b600080866001600160a01b031685876040516127a09190612e37565b60006040518083038185875af1925050503d80600081146127dd576040519150601f19603f3d011682016040523d82523d6000602084013e6127e2565b606091505b50915091506127f28282866127fd565b979650505050505050565b6060831561280c575081610928565b82511561281c5782518084602001fd5b8160405162461bcd60e51b81526004016105f39190612ed9565b80356001600160a01b0381168114610d2a57600080fd5b600082601f83011261285d578081fd5b6128676060612f8f565b8083835b60038110156128965761288187833588016128a1565b8452602093840193919091019060010161286b565b509095945050505050565b600082601f8301126128b1578081fd5b813567ffffffffffffffff8111156128cb576128cb6130a7565b6128de601f8201601f1916602001612f8f565b8181528460208386010111156128f2578283fd5b816020850160208301379081016020019190915292915050565b600060e0828403121561291d578081fd5b61292760e0612f8f565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015292915050565b60006101808284031215612981578081fd5b61298b60c0612f8f565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff808211156129ca57600080fd5b90830190602082860312156129de57600080fd5b6129e86020612f8f565b8235828111156129f757600080fd5b612a03878286016128a1565b825250608084015250612a1b90508360a0840161290c565b60a082015292915050565b600060808284031215612a37578081fd5b612a416080612f8f565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b60006101808284031215612a7d578081fd5b612a8760c0612f8f565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff80821115612ac657600080fd5b9083019060808286031215612ada57600080fd5b612ae46080612f8f565b82358152612af460208401612836565b6020820152612b0560408401612836565b6040820152606083013582811115612b1c57600080fd5b612b28878286016128a1565b606083015250608084015250612a1b90508360a0840161290c565b600060208284031215612b54578081fd5b61092882612836565b60008060408385031215612b6f578081fd5b612b7883612836565b9150612b8660208401612836565b90509250929050565b600080600060608486031215612ba3578081fd5b612bac84612836565b9250612bba60208501612836565b9150604084013590509250925092565b60008060408385031215612bdc578182fd5b612be583612836565b946020939093013593505050565b60008060408385031215612c05578182fd5b823567ffffffffffffffff80821115612c1c578384fd5b612c288683870161284d565b93506020850135915080821115612c3d578283fd5b50612c4a8582860161296f565b9150509250929050565b60008060008060e08587031215612c69578182fd5b843567ffffffffffffffff80821115612c80578384fd5b612c8c8883890161284d565b95506020870135915080821115612ca1578384fd5b612cad8883890161296f565b94506040870135915080821115612cc2578384fd5b50612ccf878288016128a1565b925050612cdf8660608701612a26565b905092959194509250565b60008060408385031215612cfc578182fd5b823567ffffffffffffffff80821115612d13578384fd5b612d1f8683870161284d565b93506020850135915080821115612d34578283fd5b50612c4a85828601612a6b565b60008060008060e08587031215612d56578182fd5b843567ffffffffffffffff80821115612d6d578384fd5b612d798883890161284d565b95506020870135915080821115612d8e578384fd5b612cad88838901612a6b565b600060208284031215612dab578081fd5b81518015158114610928578182fd5b600060208284031215612dcb578081fd5b5035919050565b60008060408385031215612de4578182fd5b50508035926020909101359150565b600060208284031215612e04578081fd5b5051919050565b60008151808452612e23816020860160208601612fef565b601f01601f19169290920160200192915050565b60008251612e49818460208701612fef565b9190910192915050565b600085825284602083015260806040830152612e726080830185612e0b565b905082606083015295945050505050565b600060408252612e966040830185612e0b565b828103602084810191909152845180835285820192820190845b81811015612ecc57845183529383019391830191600101612eb0565b5090979650505050505050565b6000602082526109286020830184612e0b565b60208082526021908201527f556e6465726c79696e672070657220756e6974206973206f76657273746174656040820152601960fa1b606082015260800190565b60006020825282516020808401526126376040840182612e0b565b60006020825282516020830152602083015160018060a01b0380821660408501528060408601511660608501525050606083015160808084015261263760a0840182612e0b565b604051601f8201601f1916810167ffffffffffffffff81118282101715612fb857612fb86130a7565b604052919050565b60008219821115612fd357612fd3613091565b500190565b600082821015612fea57612fea613091565b500390565b60005b8381101561300a578181015183820152602001612ff2565b838111156108455750506000910152565b600181811c9082168061302f57607f821691505b6020821081141561305057634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561306a5761306a613091565b5060010190565b60008261308c57634e487b7160e01b81526012600452602481fd5b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220dfa50c91bbaf9f8fdf7e55e42cb7077b525e8285a172989ac7350c82286db0fa64736f6c63430008030033