{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC721CWithImmutableMinterRoyaltiesInitializable",
  "sourceName": "contracts/examples/erc721c/ERC721CWithImmutableMinterRoyalties.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "CreatorTokenBase__InvalidTransferValidatorContract",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CreatorTokenBase__SetTransferValidatorFirst",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC721OpenZeppelinInitializable__AlreadyInitializedERC721",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ImmutableMinterRoyaltiesInitializable__MinterRoyaltyFeeAlreadyInitialized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ImmutableMinterRoyalties__MinterCannotBeZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ImmutableMinterRoyalties__MinterHasAlreadyBeenAssignedToTokenId",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ImmutableMinterRoyalties__RoyaltyFeeWillExceedSalePrice",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InitializableOwnable__OwnerAlreadyInitialized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ShouldNotMintToBurnAddress",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldValidator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newValidator",
          "type": "address"
        }
      ],
      "name": "TransferValidatorUpdated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_OPERATOR_WHITELIST_ID",
      "outputs": [
        {
          "internalType": "uint120",
          "name": "",
          "type": "uint120"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_TRANSFER_SECURITY_LEVEL",
      "outputs": [
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_TRANSFER_VALIDATOR",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "FEE_DENOMINATOR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPermittedContractReceivers",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getSecurityPolicy",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum TransferSecurityLevels",
              "name": "transferSecurityLevel",
              "type": "uint8"
            },
            {
              "internalType": "uint120",
              "name": "operatorWhitelistId",
              "type": "uint120"
            },
            {
              "internalType": "uint120",
              "name": "permittedContractReceiversId",
              "type": "uint120"
            }
          ],
          "internalType": "struct CollectionSecurityPolicy",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTransferValidator",
      "outputs": [
        {
          "internalType": "contract ICreatorTokenTransferValidator",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getWhitelistedOperators",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        }
      ],
      "name": "initializeERC721",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "royaltyFeeNumerator_",
          "type": "uint256"
        }
      ],
      "name": "initializeMinterRoyaltyFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner_",
          "type": "address"
        }
      ],
      "name": "initializeOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "isContractReceiverPermitted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isOperatorWhitelisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "isTransferAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "royaltyFeeNumerator",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "salePrice",
          "type": "uint256"
        }
      ],
      "name": "royaltyInfo",
      "outputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "royaltyAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeMint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "level",
          "type": "uint8"
        },
        {
          "internalType": "uint120",
          "name": "operatorWhitelistId",
          "type": "uint120"
        },
        {
          "internalType": "uint120",
          "name": "permittedContractReceiversAllowlistId",
          "type": "uint120"
        }
      ],
      "name": "setToCustomSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "validator",
          "type": "address"
        },
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "level",
          "type": "uint8"
        },
        {
          "internalType": "uint120",
          "name": "operatorWhitelistId",
          "type": "uint120"
        },
        {
          "internalType": "uint120",
          "name": "permittedContractReceiversAllowlistId",
          "type": "uint120"
        }
      ],
      "name": "setToCustomValidatorAndSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setToDefaultSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "transferValidator_",
          "type": "address"
        }
      ],
      "name": "setTransferValidator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506040805160208082018352600080835283519182019093529182529062000039336200006d565b81516200004e906001906020850190620000bd565b50805162000064906002906020840190620000bd565b505050620001a0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620000cb9062000163565b90600052602060002090601f016020900481019282620000ef57600085556200013a565b82601f106200010a57805160ff19168380011785556200013a565b828001600101855582156200013a579182015b828111156200013a5782518255916020019190600101906200011d565b50620001489291506200014c565b5090565b5b808211156200014857600081556001016200014d565b600181811c908216806200017857607f821691505b602082108114156200019a57634e487b7160e01b600052602260045260246000fd5b50919050565b612fcd80620001b06000396000f3fe608060405234801561001057600080fd5b50600436106102ad5760003560e01c80636c3b86991161017b578063a9fc664e116100d8578063d147c97a1161008c578063e985e9c511610071578063e985e9c51461059d578063f2fde38b146105d9578063fd762d92146105ec57600080fd5b8063d147c97a14610581578063d73792a91461059457600080fd5b8063be537f43116100bd578063be537f4314610551578063c87b56dd14610566578063d007af5c1461057957600080fd5b8063a9fc664e1461052b578063b88d4fde1461053e57600080fd5b80638da5cb5b1161012f5780639d645a44116101145780639d645a44146104f2578063a144819414610505578063a22cb4651461051857600080fd5b80638da5cb5b146104d957806395d89b41146104ea57600080fd5b8063715018a611610160578063715018a6146104b657806381ddcc1f146104be5780638c5f36bb146104c657600080fd5b80636c3b86991461048d57806370a082311461049557600080fd5b80632a55205a1161022957806342966c68116101dd5780635d4c1d46116101c25780635d4c1d461461043f57806361347162146104675780636352211e1461047a57600080fd5b806342966c6814610417578063495c8bf91461042a57600080fd5b8063364a0a6b1161020e578063364a0a6b146103de57806340c10f19146103f157806342842e0e1461040457600080fd5b80632a55205a146103995780632e8da829146103cb57600080fd5b8063095ea7b3116102805780631b25b077116102655780631b25b0771461035e5780631c33b3281461037157806323b872dd1461038657600080fd5b8063095ea7b314610333578063098144d41461034857600080fd5b806301463546146102b257806301ffc9a7146102e857806306fdde031461030b578063081812fc14610320575b600080fd5b6102cb71721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b6102fb6102f63660046127bb565b6105ff565b60405190151581526020016102df565b610313610610565b6040516102df9190612830565b6102cb61032e366004612843565b6106a2565b610346610341366004612871565b6106c9565b005b60095461010090046001600160a01b03166102cb565b6102fb61036c36600461289d565b61081e565b610379600181565b6040516102df919061290a565b610346610394366004612918565b6108c2565b6103ac6103a7366004612959565b610949565b604080516001600160a01b0390931683526020830191909152016102df565b6102fb6103d936600461297b565b61098e565b6103466103ec366004612843565b610ac9565b6103466103ff366004612871565b610b27565b610346610412366004612918565b610b35565b610346610425366004612843565b610b50565b610432610b59565b6040516102df9190612998565b610447600181565b6040516effffffffffffffffffffffffffffff90911681526020016102df565b610346610475366004612a0f565b610c99565b6102cb610488366004612843565b610e30565b610346610e95565b6104a86104a336600461297b565b610f8d565b6040519081526020016102df565b610346611027565b600a546104a8565b6103466104d436600461297b565b61103b565b6000546001600160a01b03166102cb565b6103136110ae565b6102fb61050036600461297b565b6110bd565b610346610513366004612871565b6111a5565b610346610526366004612a5d565b6111af565b61034661053936600461297b565b6111ba565b61034661054c366004612b35565b611329565b6105596113b1565b6040516102df9190612bb5565b610313610574366004612843565b611484565b6104326114f7565b61034661058f366004612c19565b6115d0565b6104a861271081565b6102fb6105ab366004612c7d565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b6103466105e736600461297b565b61162c565b6103466105fa366004612cab565b6116b0565b600061060a826117d4565b92915050565b60606007805461061f90612d07565b80601f016020809104026020016040519081016040528092919081815260200182805461064b90612d07565b80156106985780601f1061066d57610100808354040283529160200191610698565b820191906000526020600020905b81548152906001019060200180831161067b57829003601f168201915b5050505050905090565b60006106ad82611812565b506000908152600560205260409020546001600160a01b031690565b60006106d482610e30565b9050806001600160a01b0316836001600160a01b031614156107635760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b038216148061079d57506001600160a01b038116600090815260066020908152604080832033845290915290205460ff165b61080f5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161075a565b6108198383611876565b505050565b60095460009061010090046001600160a01b0316156108b75760095460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301526101009092049091169063285fb8c89060640160006040518083038186803b15801561089257600080fd5b505afa9250505080156108a3575060015b6108af575060006108bb565b5060016108bb565b5060015b9392505050565b6108cc33826118e4565b61093e5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f76656400000000000000000000000000000000000000606482015260840161075a565b610819838383611963565b6000828152600b602052604081205481906001600160a01b031661271061096f600a5490565b6109799086612d58565b6109839190612d77565b915091509250929050565b60095460009061010090046001600160a01b031615610ac157600954604051635caaa2a960e11b81523060048201526101009091046001600160a01b03169063d72dde5e90829063b95545529060240160606040518083038186803b1580156109f657600080fd5b505afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e9190612d99565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b158015610a8957600080fd5b505afa158015610a9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060a9190612e0b565b506000919050565b610ad1611b71565b600c5460ff1615610b0e576040517fc59f717b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c805460ff19166001179055610b2481611b79565b50565b610b318282611bba565b5050565b61081983838360405180602001604052806000815250611329565b610b2481611bce565b60095460609061010090046001600160a01b031615610c8657600954604051635caaa2a960e11b81523060048201526101009091046001600160a01b031690633fe5df9990829063b95545529060240160606040518083038186803b158015610bc157600080fd5b505afa158015610bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf99190612d99565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b158015610c4557600080fd5b505afa158015610c59573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c819190810190612e28565b905090565b5060408051600081526020810190915290565b610ca1611b71565b60095461010090046001600160a01b031680610ce9576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c090610d179030908890600401612eda565b600060405180830381600087803b158015610d3157600080fd5b505af1158015610d45573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b158015610da157600080fd5b505af1158015610db5573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b158015610e1257600080fd5b505af1158015610e26573d6000803e3d6000fd5b5050505050505050565b6000818152600360205260408120546001600160a01b03168061060a5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e2049440000000000000000604482015260640161075a565b610e9d611b71565b610eb871721c310194ccfc01e523fc93c9cccfa2a0ac6111ba565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c090610ef0903090600190600401612eda565b600060405180830381600087803b158015610f0a57600080fd5b505af1158015610f1e573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b158015610f7357600080fd5b505af1158015610f87573d6000803e3d6000fd5b50505050565b60006001600160a01b03821661100b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e65720000000000000000000000000000000000000000000000606482015260840161075a565b506001600160a01b031660009081526004602052604090205490565b61102f611bf5565b6110396000611c4f565b565b6000546001600160a01b031615158061106e575060005474010000000000000000000000000000000000000000900460ff165b156110a5576040517f69fe088700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b2481611c4f565b60606008805461061f90612d07565b60095460009061010090046001600160a01b031615610ac157600954604051635caaa2a960e11b81523060048201526101009091046001600160a01b031690639445f53090829063b95545529060240160606040518083038186803b15801561112557600080fd5b505afa158015611139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115d9190612d99565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b0385166024820152604401610a71565b610b318282611c9f565b610b31338383611cb9565b6111c2611b71565b60006001600160a01b0382163b15611250576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b15801561121457600080fd5b505afa925050508015611244575060408051601f3d908101601f1916820190925261124191810190612e0b565b60015b61124d57611250565b90505b6001600160a01b03821615801590611266575080155b1561129d576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600954604080516001600160a01b036101009093048316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a150600980546001600160a01b03909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b61133333836118e4565b6113a55760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f76656400000000000000000000000000000000000000606482015260840161075a565b610f8784848484611d88565b604080516060810182526000808252602082018190529181019190915260095461010090046001600160a01b03161561146357600954604051635caaa2a960e11b81523060048201526101009091046001600160a01b03169063b95545529060240160606040518083038186803b15801561142b57600080fd5b505afa15801561143f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c819190612d99565b50604080516060810182526000808252602082018190529181019190915290565b606061148f82611812565b60006114a660408051602081019091526000815290565b905060008151116114c657604051806020016040528060008152506108bb565b806114d084611e11565b6040516020016114e1929190612ef7565b6040516020818303038152906040529392505050565b60095460609061010090046001600160a01b031615610c8657600954604051635caaa2a960e11b81523060048201526101009091046001600160a01b0316906317e94a6c90829063b95545529060240160606040518083038186803b15801561155f57600080fd5b505afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190612d99565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff9091166004820152602401610c2d565b6115d8611b71565b60095460ff1615611615576040517fc7a92d9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009805460ff19166001179055610b318282611ebb565b611634611bf5565b6001600160a01b0381166110a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161075a565b6116b8611b71565b6116c1846111ba565b604051630368065360e61b81526001600160a01b0385169063da0194c0906116ef9030908790600401612eda565b600060405180830381600087803b15801561170957600080fd5b505af115801561171d573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b15801561177957600080fd5b505af115801561178d573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d7443149150604401610df8565b60006001600160e01b031982167f2a55205a00000000000000000000000000000000000000000000000000000000148061060a575061060a82611ee2565b6000818152600360205260409020546001600160a01b0316610b245760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e2049440000000000000000604482015260640161075a565b600081815260056020526040902080546001600160a01b0319166001600160a01b03841690811790915581906118ab82610e30565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806118f083610e30565b9050806001600160a01b0316846001600160a01b0316148061193757506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b8061195b5750836001600160a01b0316611950846106a2565b6001600160a01b0316145b949350505050565b826001600160a01b031661197682610e30565b6001600160a01b0316146119da5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161075a565b6001600160a01b038216611a555760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161075a565b611a628383836001611f20565b826001600160a01b0316611a7582610e30565b6001600160a01b031614611ad95760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161075a565b600081815260056020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260048552838620805460001901905590871680865283862080546001019055868652600390945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a46108198383836001611f4e565b611039611bf5565b612710811115611bb5576040517f9946debe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a55565b611bc48282611f75565b610b318282612032565b611bd7816121d5565b6000908152600b6020526040902080546001600160a01b0319169055565b6000546001600160a01b031633146110395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161075a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610b31828260405180602001604052806000815250612282565b816001600160a01b0316836001600160a01b03161415611d1b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161075a565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611d93848484611963565b611d9f8484848461230b565b610f875760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161075a565b60606000611e1e8361246e565b600101905060008167ffffffffffffffff811115611e3e57611e3e612a96565b6040519080825280601f01601f191660200182016040528015611e68576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611eae57611eb3565b611e72565b509392505050565b8151611ece90600790602085019061270c565b50805161081990600890602084019061270c565b60006001600160e01b031982167f86455d2800000000000000000000000000000000000000000000000000000000148061060a575061060a82612550565b60005b81811015611f4757611f3f8585611f3a8487612f26565b6125d2565b600101611f23565b5050505050565b60005b81811015611f4757611f6d8585611f688487612f26565b61262e565b600101611f51565b6001600160a01b038216611fb5576040517fa921732400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600b60205260409020546001600160a01b031615612004576040517f3343309b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600b6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382166120885760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161075a565b6000818152600360205260409020546001600160a01b0316156120ed5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161075a565b6120fb600083836001611f20565b6000818152600360205260409020546001600160a01b0316156121605760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161075a565b6001600160a01b038216600081815260046020908152604080832080546001019055848352600390915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4610b31600083836001611f4e565b60006121e082610e30565b90506121f0816000846001611f20565b6121f982610e30565b600083815260056020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526004845282852080546000190190558785526003909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4610b31816000846001611f4e565b61228c8383611bba565b612299600084848461230b565b6108195760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161075a565b60006001600160a01b0384163b1561246357604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061234f903390899088908890600401612f3e565b602060405180830381600087803b15801561236957600080fd5b505af1925050508015612399575060408051601f3d908101601f1916820190925261239691810190612f7a565b60015b612449573d8080156123c7576040519150601f19603f3d011682016040523d82523d6000602084013e6123cc565b606091505b5080516124415760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161075a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061195b565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106124b7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106124e3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061250157662386f26fc10000830492506010015b6305f5e1008310612519576305f5e100830492506008015b612710831061252d57612710830492506004015b6064831061253f576064830492506002015b600a831061060a5760010192915050565b60006001600160e01b031982167f80ac58cd0000000000000000000000000000000000000000000000000000000014806125b357506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061060a57506301ffc9a760e01b6001600160e01b031983161461060a565b6001600160a01b0383811615908316158180156125ec5750805b1561260a57604051635cbd944160e01b815260040160405180910390fd5b8115612616575b611f47565b801561262157612611565b611f47338686863461267c565b6001600160a01b0383811615908316158180156126485750805b1561266657604051635cbd944160e01b815260040160405180910390fd5b811561267157612611565b801561261157612611565b60095461010090046001600160a01b031615611f475760095460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301526101009092049091169063285fb8c89060640160006040518083038186803b1580156126ed57600080fd5b505afa158015612701573d6000803e3d6000fd5b505050505050505050565b82805461271890612d07565b90600052602060002090601f01602090048101928261273a5760008555612780565b82601f1061275357805160ff1916838001178555612780565b82800160010185558215612780579182015b82811115612780578251825591602001919060010190612765565b5061278c929150612790565b5090565b5b8082111561278c5760008155600101612791565b6001600160e01b031981168114610b2457600080fd5b6000602082840312156127cd57600080fd5b81356108bb816127a5565b60005b838110156127f35781810151838201526020016127db565b83811115610f875750506000910152565b6000815180845261281c8160208601602086016127d8565b601f01601f19169290920160200192915050565b6020815260006108bb6020830184612804565b60006020828403121561285557600080fd5b5035919050565b6001600160a01b0381168114610b2457600080fd5b6000806040838503121561288457600080fd5b823561288f8161285c565b946020939093013593505050565b6000806000606084860312156128b257600080fd5b83356128bd8161285c565b925060208401356128cd8161285c565b915060408401356128dd8161285c565b809150509250925092565b6007811061290657634e487b7160e01b600052602160045260246000fd5b9052565b6020810161060a82846128e8565b60008060006060848603121561292d57600080fd5b83356129388161285c565b925060208401356129488161285c565b929592945050506040919091013590565b6000806040838503121561296c57600080fd5b50508035926020909101359150565b60006020828403121561298d57600080fd5b81356108bb8161285c565b6020808252825182820181905260009190848201906040850190845b818110156129d95783516001600160a01b0316835292840192918401916001016129b4565b50909695505050505050565b60078110610b2457600080fd5b6effffffffffffffffffffffffffffff81168114610b2457600080fd5b600080600060608486031215612a2457600080fd5b8335612a2f816129e5565b92506020840135612a3f816129f2565b915060408401356128dd816129f2565b8015158114610b2457600080fd5b60008060408385031215612a7057600080fd5b8235612a7b8161285c565b91506020830135612a8b81612a4f565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612ad557612ad5612a96565b604052919050565b600067ffffffffffffffff831115612af757612af7612a96565b612b0a601f8401601f1916602001612aac565b9050828152838383011115612b1e57600080fd5b828260208301376000602084830101529392505050565b60008060008060808587031215612b4b57600080fd5b8435612b568161285c565b93506020850135612b668161285c565b925060408501359150606085013567ffffffffffffffff811115612b8957600080fd5b8501601f81018713612b9a57600080fd5b612ba987823560208401612add565b91505092959194509250565b6000606082019050612bc88284516128e8565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b600082601f830112612c0a57600080fd5b6108bb83833560208501612add565b60008060408385031215612c2c57600080fd5b823567ffffffffffffffff80821115612c4457600080fd5b612c5086838701612bf9565b93506020850135915080821115612c6657600080fd5b50612c7385828601612bf9565b9150509250929050565b60008060408385031215612c9057600080fd5b8235612c9b8161285c565b91506020830135612a8b8161285c565b60008060008060808587031215612cc157600080fd5b8435612ccc8161285c565b93506020850135612cdc816129e5565b92506040850135612cec816129f2565b91506060850135612cfc816129f2565b939692955090935050565b600181811c90821680612d1b57607f821691505b60208210811415612d3c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612d7257612d72612d42565b500290565b600082612d9457634e487b7160e01b600052601260045260246000fd5b500490565b600060608284031215612dab57600080fd5b6040516060810181811067ffffffffffffffff82111715612dce57612dce612a96565b6040528251612ddc816129e5565b81526020830151612dec816129f2565b60208201526040830151612dff816129f2565b60408201529392505050565b600060208284031215612e1d57600080fd5b81516108bb81612a4f565b60006020808385031215612e3b57600080fd5b825167ffffffffffffffff80821115612e5357600080fd5b818501915085601f830112612e6757600080fd5b815181811115612e7957612e79612a96565b8060051b9150612e8a848301612aac565b8181529183018401918481019088841115612ea457600080fd5b938501935b83851015612ece5784519250612ebe8361285c565b8282529385019390850190612ea9565b98975050505050505050565b6001600160a01b0383168152604081016108bb60208301846128e8565b60008351612f098184602088016127d8565b835190830190612f1d8183602088016127d8565b01949350505050565b60008219821115612f3957612f39612d42565b500190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612f706080830184612804565b9695505050505050565b600060208284031215612f8c57600080fd5b81516108bb816127a556fea2646970667358221220ae23229e863d636074e04fd2fa86ac859832287ae5cedc9ad649384a2596d31f64736f6c63430008090033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102ad5760003560e01c80636c3b86991161017b578063a9fc664e116100d8578063d147c97a1161008c578063e985e9c511610071578063e985e9c51461059d578063f2fde38b146105d9578063fd762d92146105ec57600080fd5b8063d147c97a14610581578063d73792a91461059457600080fd5b8063be537f43116100bd578063be537f4314610551578063c87b56dd14610566578063d007af5c1461057957600080fd5b8063a9fc664e1461052b578063b88d4fde1461053e57600080fd5b80638da5cb5b1161012f5780639d645a44116101145780639d645a44146104f2578063a144819414610505578063a22cb4651461051857600080fd5b80638da5cb5b146104d957806395d89b41146104ea57600080fd5b8063715018a611610160578063715018a6146104b657806381ddcc1f146104be5780638c5f36bb146104c657600080fd5b80636c3b86991461048d57806370a082311461049557600080fd5b80632a55205a1161022957806342966c68116101dd5780635d4c1d46116101c25780635d4c1d461461043f57806361347162146104675780636352211e1461047a57600080fd5b806342966c6814610417578063495c8bf91461042a57600080fd5b8063364a0a6b1161020e578063364a0a6b146103de57806340c10f19146103f157806342842e0e1461040457600080fd5b80632a55205a146103995780632e8da829146103cb57600080fd5b8063095ea7b3116102805780631b25b077116102655780631b25b0771461035e5780631c33b3281461037157806323b872dd1461038657600080fd5b8063095ea7b314610333578063098144d41461034857600080fd5b806301463546146102b257806301ffc9a7146102e857806306fdde031461030b578063081812fc14610320575b600080fd5b6102cb71721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b6102fb6102f63660046127bb565b6105ff565b60405190151581526020016102df565b610313610610565b6040516102df9190612830565b6102cb61032e366004612843565b6106a2565b610346610341366004612871565b6106c9565b005b60095461010090046001600160a01b03166102cb565b6102fb61036c36600461289d565b61081e565b610379600181565b6040516102df919061290a565b610346610394366004612918565b6108c2565b6103ac6103a7366004612959565b610949565b604080516001600160a01b0390931683526020830191909152016102df565b6102fb6103d936600461297b565b61098e565b6103466103ec366004612843565b610ac9565b6103466103ff366004612871565b610b27565b610346610412366004612918565b610b35565b610346610425366004612843565b610b50565b610432610b59565b6040516102df9190612998565b610447600181565b6040516effffffffffffffffffffffffffffff90911681526020016102df565b610346610475366004612a0f565b610c99565b6102cb610488366004612843565b610e30565b610346610e95565b6104a86104a336600461297b565b610f8d565b6040519081526020016102df565b610346611027565b600a546104a8565b6103466104d436600461297b565b61103b565b6000546001600160a01b03166102cb565b6103136110ae565b6102fb61050036600461297b565b6110bd565b610346610513366004612871565b6111a5565b610346610526366004612a5d565b6111af565b61034661053936600461297b565b6111ba565b61034661054c366004612b35565b611329565b6105596113b1565b6040516102df9190612bb5565b610313610574366004612843565b611484565b6104326114f7565b61034661058f366004612c19565b6115d0565b6104a861271081565b6102fb6105ab366004612c7d565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b6103466105e736600461297b565b61162c565b6103466105fa366004612cab565b6116b0565b600061060a826117d4565b92915050565b60606007805461061f90612d07565b80601f016020809104026020016040519081016040528092919081815260200182805461064b90612d07565b80156106985780601f1061066d57610100808354040283529160200191610698565b820191906000526020600020905b81548152906001019060200180831161067b57829003601f168201915b5050505050905090565b60006106ad82611812565b506000908152600560205260409020546001600160a01b031690565b60006106d482610e30565b9050806001600160a01b0316836001600160a01b031614156107635760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b038216148061079d57506001600160a01b038116600090815260066020908152604080832033845290915290205460ff165b61080f5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161075a565b6108198383611876565b505050565b60095460009061010090046001600160a01b0316156108b75760095460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301526101009092049091169063285fb8c89060640160006040518083038186803b15801561089257600080fd5b505afa9250505080156108a3575060015b6108af575060006108bb565b5060016108bb565b5060015b9392505050565b6108cc33826118e4565b61093e5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f76656400000000000000000000000000000000000000606482015260840161075a565b610819838383611963565b6000828152600b602052604081205481906001600160a01b031661271061096f600a5490565b6109799086612d58565b6109839190612d77565b915091509250929050565b60095460009061010090046001600160a01b031615610ac157600954604051635caaa2a960e11b81523060048201526101009091046001600160a01b03169063d72dde5e90829063b95545529060240160606040518083038186803b1580156109f657600080fd5b505afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e9190612d99565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b158015610a8957600080fd5b505afa158015610a9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060a9190612e0b565b506000919050565b610ad1611b71565b600c5460ff1615610b0e576040517fc59f717b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c805460ff19166001179055610b2481611b79565b50565b610b318282611bba565b5050565b61081983838360405180602001604052806000815250611329565b610b2481611bce565b60095460609061010090046001600160a01b031615610c8657600954604051635caaa2a960e11b81523060048201526101009091046001600160a01b031690633fe5df9990829063b95545529060240160606040518083038186803b158015610bc157600080fd5b505afa158015610bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf99190612d99565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b158015610c4557600080fd5b505afa158015610c59573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c819190810190612e28565b905090565b5060408051600081526020810190915290565b610ca1611b71565b60095461010090046001600160a01b031680610ce9576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c090610d179030908890600401612eda565b600060405180830381600087803b158015610d3157600080fd5b505af1158015610d45573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b158015610da157600080fd5b505af1158015610db5573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b158015610e1257600080fd5b505af1158015610e26573d6000803e3d6000fd5b5050505050505050565b6000818152600360205260408120546001600160a01b03168061060a5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e2049440000000000000000604482015260640161075a565b610e9d611b71565b610eb871721c310194ccfc01e523fc93c9cccfa2a0ac6111ba565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c090610ef0903090600190600401612eda565b600060405180830381600087803b158015610f0a57600080fd5b505af1158015610f1e573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b158015610f7357600080fd5b505af1158015610f87573d6000803e3d6000fd5b50505050565b60006001600160a01b03821661100b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e65720000000000000000000000000000000000000000000000606482015260840161075a565b506001600160a01b031660009081526004602052604090205490565b61102f611bf5565b6110396000611c4f565b565b6000546001600160a01b031615158061106e575060005474010000000000000000000000000000000000000000900460ff165b156110a5576040517f69fe088700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b2481611c4f565b60606008805461061f90612d07565b60095460009061010090046001600160a01b031615610ac157600954604051635caaa2a960e11b81523060048201526101009091046001600160a01b031690639445f53090829063b95545529060240160606040518083038186803b15801561112557600080fd5b505afa158015611139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115d9190612d99565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b0385166024820152604401610a71565b610b318282611c9f565b610b31338383611cb9565b6111c2611b71565b60006001600160a01b0382163b15611250576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b15801561121457600080fd5b505afa925050508015611244575060408051601f3d908101601f1916820190925261124191810190612e0b565b60015b61124d57611250565b90505b6001600160a01b03821615801590611266575080155b1561129d576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600954604080516001600160a01b036101009093048316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a150600980546001600160a01b03909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b61133333836118e4565b6113a55760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f76656400000000000000000000000000000000000000606482015260840161075a565b610f8784848484611d88565b604080516060810182526000808252602082018190529181019190915260095461010090046001600160a01b03161561146357600954604051635caaa2a960e11b81523060048201526101009091046001600160a01b03169063b95545529060240160606040518083038186803b15801561142b57600080fd5b505afa15801561143f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c819190612d99565b50604080516060810182526000808252602082018190529181019190915290565b606061148f82611812565b60006114a660408051602081019091526000815290565b905060008151116114c657604051806020016040528060008152506108bb565b806114d084611e11565b6040516020016114e1929190612ef7565b6040516020818303038152906040529392505050565b60095460609061010090046001600160a01b031615610c8657600954604051635caaa2a960e11b81523060048201526101009091046001600160a01b0316906317e94a6c90829063b95545529060240160606040518083038186803b15801561155f57600080fd5b505afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190612d99565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff9091166004820152602401610c2d565b6115d8611b71565b60095460ff1615611615576040517fc7a92d9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6009805460ff19166001179055610b318282611ebb565b611634611bf5565b6001600160a01b0381166110a55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161075a565b6116b8611b71565b6116c1846111ba565b604051630368065360e61b81526001600160a01b0385169063da0194c0906116ef9030908790600401612eda565b600060405180830381600087803b15801561170957600080fd5b505af115801561171d573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b15801561177957600080fd5b505af115801561178d573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d7443149150604401610df8565b60006001600160e01b031982167f2a55205a00000000000000000000000000000000000000000000000000000000148061060a575061060a82611ee2565b6000818152600360205260409020546001600160a01b0316610b245760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e2049440000000000000000604482015260640161075a565b600081815260056020526040902080546001600160a01b0319166001600160a01b03841690811790915581906118ab82610e30565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806118f083610e30565b9050806001600160a01b0316846001600160a01b0316148061193757506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b8061195b5750836001600160a01b0316611950846106a2565b6001600160a01b0316145b949350505050565b826001600160a01b031661197682610e30565b6001600160a01b0316146119da5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161075a565b6001600160a01b038216611a555760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161075a565b611a628383836001611f20565b826001600160a01b0316611a7582610e30565b6001600160a01b031614611ad95760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b606482015260840161075a565b600081815260056020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260048552838620805460001901905590871680865283862080546001019055868652600390945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a46108198383836001611f4e565b611039611bf5565b612710811115611bb5576040517f9946debe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a55565b611bc48282611f75565b610b318282612032565b611bd7816121d5565b6000908152600b6020526040902080546001600160a01b0319169055565b6000546001600160a01b031633146110395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161075a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610b31828260405180602001604052806000815250612282565b816001600160a01b0316836001600160a01b03161415611d1b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161075a565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611d93848484611963565b611d9f8484848461230b565b610f875760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161075a565b60606000611e1e8361246e565b600101905060008167ffffffffffffffff811115611e3e57611e3e612a96565b6040519080825280601f01601f191660200182016040528015611e68576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611eae57611eb3565b611e72565b509392505050565b8151611ece90600790602085019061270c565b50805161081990600890602084019061270c565b60006001600160e01b031982167f86455d2800000000000000000000000000000000000000000000000000000000148061060a575061060a82612550565b60005b81811015611f4757611f3f8585611f3a8487612f26565b6125d2565b600101611f23565b5050505050565b60005b81811015611f4757611f6d8585611f688487612f26565b61262e565b600101611f51565b6001600160a01b038216611fb5576040517fa921732400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600b60205260409020546001600160a01b031615612004576040517f3343309b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600b6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382166120885760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161075a565b6000818152600360205260409020546001600160a01b0316156120ed5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161075a565b6120fb600083836001611f20565b6000818152600360205260409020546001600160a01b0316156121605760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161075a565b6001600160a01b038216600081815260046020908152604080832080546001019055848352600390915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4610b31600083836001611f4e565b60006121e082610e30565b90506121f0816000846001611f20565b6121f982610e30565b600083815260056020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526004845282852080546000190190558785526003909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4610b31816000846001611f4e565b61228c8383611bba565b612299600084848461230b565b6108195760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161075a565b60006001600160a01b0384163b1561246357604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061234f903390899088908890600401612f3e565b602060405180830381600087803b15801561236957600080fd5b505af1925050508015612399575060408051601f3d908101601f1916820190925261239691810190612f7a565b60015b612449573d8080156123c7576040519150601f19603f3d011682016040523d82523d6000602084013e6123cc565b606091505b5080516124415760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e7465720000000000000000000000000000606482015260840161075a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061195b565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106124b7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106124e3576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061250157662386f26fc10000830492506010015b6305f5e1008310612519576305f5e100830492506008015b612710831061252d57612710830492506004015b6064831061253f576064830492506002015b600a831061060a5760010192915050565b60006001600160e01b031982167f80ac58cd0000000000000000000000000000000000000000000000000000000014806125b357506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061060a57506301ffc9a760e01b6001600160e01b031983161461060a565b6001600160a01b0383811615908316158180156125ec5750805b1561260a57604051635cbd944160e01b815260040160405180910390fd5b8115612616575b611f47565b801561262157612611565b611f47338686863461267c565b6001600160a01b0383811615908316158180156126485750805b1561266657604051635cbd944160e01b815260040160405180910390fd5b811561267157612611565b801561261157612611565b60095461010090046001600160a01b031615611f475760095460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301526101009092049091169063285fb8c89060640160006040518083038186803b1580156126ed57600080fd5b505afa158015612701573d6000803e3d6000fd5b505050505050505050565b82805461271890612d07565b90600052602060002090601f01602090048101928261273a5760008555612780565b82601f1061275357805160ff1916838001178555612780565b82800160010185558215612780579182015b82811115612780578251825591602001919060010190612765565b5061278c929150612790565b5090565b5b8082111561278c5760008155600101612791565b6001600160e01b031981168114610b2457600080fd5b6000602082840312156127cd57600080fd5b81356108bb816127a5565b60005b838110156127f35781810151838201526020016127db565b83811115610f875750506000910152565b6000815180845261281c8160208601602086016127d8565b601f01601f19169290920160200192915050565b6020815260006108bb6020830184612804565b60006020828403121561285557600080fd5b5035919050565b6001600160a01b0381168114610b2457600080fd5b6000806040838503121561288457600080fd5b823561288f8161285c565b946020939093013593505050565b6000806000606084860312156128b257600080fd5b83356128bd8161285c565b925060208401356128cd8161285c565b915060408401356128dd8161285c565b809150509250925092565b6007811061290657634e487b7160e01b600052602160045260246000fd5b9052565b6020810161060a82846128e8565b60008060006060848603121561292d57600080fd5b83356129388161285c565b925060208401356129488161285c565b929592945050506040919091013590565b6000806040838503121561296c57600080fd5b50508035926020909101359150565b60006020828403121561298d57600080fd5b81356108bb8161285c565b6020808252825182820181905260009190848201906040850190845b818110156129d95783516001600160a01b0316835292840192918401916001016129b4565b50909695505050505050565b60078110610b2457600080fd5b6effffffffffffffffffffffffffffff81168114610b2457600080fd5b600080600060608486031215612a2457600080fd5b8335612a2f816129e5565b92506020840135612a3f816129f2565b915060408401356128dd816129f2565b8015158114610b2457600080fd5b60008060408385031215612a7057600080fd5b8235612a7b8161285c565b91506020830135612a8b81612a4f565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612ad557612ad5612a96565b604052919050565b600067ffffffffffffffff831115612af757612af7612a96565b612b0a601f8401601f1916602001612aac565b9050828152838383011115612b1e57600080fd5b828260208301376000602084830101529392505050565b60008060008060808587031215612b4b57600080fd5b8435612b568161285c565b93506020850135612b668161285c565b925060408501359150606085013567ffffffffffffffff811115612b8957600080fd5b8501601f81018713612b9a57600080fd5b612ba987823560208401612add565b91505092959194509250565b6000606082019050612bc88284516128e8565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b600082601f830112612c0a57600080fd5b6108bb83833560208501612add565b60008060408385031215612c2c57600080fd5b823567ffffffffffffffff80821115612c4457600080fd5b612c5086838701612bf9565b93506020850135915080821115612c6657600080fd5b50612c7385828601612bf9565b9150509250929050565b60008060408385031215612c9057600080fd5b8235612c9b8161285c565b91506020830135612a8b8161285c565b60008060008060808587031215612cc157600080fd5b8435612ccc8161285c565b93506020850135612cdc816129e5565b92506040850135612cec816129f2565b91506060850135612cfc816129f2565b939692955090935050565b600181811c90821680612d1b57607f821691505b60208210811415612d3c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612d7257612d72612d42565b500290565b600082612d9457634e487b7160e01b600052601260045260246000fd5b500490565b600060608284031215612dab57600080fd5b6040516060810181811067ffffffffffffffff82111715612dce57612dce612a96565b6040528251612ddc816129e5565b81526020830151612dec816129f2565b60208201526040830151612dff816129f2565b60408201529392505050565b600060208284031215612e1d57600080fd5b81516108bb81612a4f565b60006020808385031215612e3b57600080fd5b825167ffffffffffffffff80821115612e5357600080fd5b818501915085601f830112612e6757600080fd5b815181811115612e7957612e79612a96565b8060051b9150612e8a848301612aac565b8181529183018401918481019088841115612ea457600080fd5b938501935b83851015612ece5784519250612ebe8361285c565b8282529385019390850190612ea9565b98975050505050505050565b6001600160a01b0383168152604081016108bb60208301846128e8565b60008351612f098184602088016127d8565b835190830190612f1d8183602088016127d8565b01949350505050565b60008219821115612f3957612f39612d42565b500190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612f706080830184612804565b9695505050505050565b600060208284031215612f8c57600080fd5b81516108bb816127a556fea2646970667358221220ae23229e863d636074e04fd2fa86ac859832287ae5cedc9ad649384a2596d31f64736f6c63430008090033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
