{
  "_format": "hh-sol-artifact-1",
  "contractName": "ArtistV2",
  "sourceName": "contracts/ArtistV2.sol",
  "abi": [
    {
      "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": false,
          "internalType": "enum ArtistV2.TimeType",
          "name": "timeType",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "editionId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "newTime",
          "type": "uint32"
        }
      ],
      "name": "AuctionTimeSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "editionId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "fundingRecipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "quantity",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "royaltyBPS",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "startTime",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "endTime",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "presaleQuantity",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "signerAddress",
          "type": "address"
        }
      ],
      "name": "EditionCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "editionId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "numSold",
          "type": "uint32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "buyer",
          "type": "address"
        }
      ],
      "name": "EditionPurchased",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "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"
    },
    {
      "inputs": [],
      "name": "PRESALE_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "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": "_editionId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "buyEdition",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "contractURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "_fundingRecipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_price",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_quantity",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_royaltyBPS",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_startTime",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_endTime",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_presaleQuantity",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "_signerAddress",
          "type": "address"
        }
      ],
      "name": "createEdition",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "depositedForEdition",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "editions",
      "outputs": [
        {
          "internalType": "address payable",
          "name": "fundingRecipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "numSold",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "quantity",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "royaltyBPS",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "startTime",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "endTime",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "presaleQuantity",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "signerAddress",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_editionId",
          "type": "uint256"
        }
      ],
      "name": "getOwnersOfEdition",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_editionId",
          "type": "uint256"
        }
      ],
      "name": "getTokenIdsOfEdition",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_artistId",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_symbol",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_baseURI",
          "type": "string"
        }
      ],
      "name": "initialize",
      "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": [],
      "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": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_salePrice",
          "type": "uint256"
        }
      ],
      "name": "royaltyInfo",
      "outputs": [
        {
          "internalType": "address",
          "name": "fundingRecipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "royaltyAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "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": "uint256",
          "name": "_editionId",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_endTime",
          "type": "uint32"
        }
      ],
      "name": "setEndTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_editionId",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_startTime",
          "type": "uint32"
        }
      ],
      "name": "setStartTime",
      "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": "",
          "type": "uint256"
        }
      ],
      "name": "tokenToEdition",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "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"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_editionId",
          "type": "uint256"
        }
      ],
      "name": "withdrawFunds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "withdrawnForEdition",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506131a2806100206000396000f3fe6080604052600436106101e35760003560e01c806374e7918911610102578063c87b56dd11610095578063e8a3d48511610064578063e8a3d485146106b1578063e985e9c5146106c6578063f2fde38b1461070f578063fbab9e041461072f57600080fd5b8063c87b56dd14610603578063d3bb052814610623578063d4ae752214610650578063e1a3d5731461068457600080fd5b8063abccf3dd116100d1578063abccf3dd14610590578063abfc83a0146105a3578063b88d4fde146105c3578063bb314ca1146105e357600080fd5b806374e79189146105105780638da5cb5b1461053d57806395d89b411461055b578063a22cb4651461057057600080fd5b8063279c806e1161017a5780636352211e116101495780636352211e1461049b57806370a08231146104bb578063715018a6146104db57806373aaf879146104f057600080fd5b8063279c806e146103295780632a55205a1461040f57806342842e0e1461044e578063602787ed1461046e57600080fd5b806313dd2960116101b657806313dd296014610299578063155dd5ee146102c657806318160ddd146102e657806323b872dd1461030957600080fd5b806301ffc9a7146101e857806306fdde031461021d578063081812fc1461023f578063095ea7b314610277575b600080fd5b3480156101f457600080fd5b506102086102033660046127d7565b61074f565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023261077a565b6040516102149190612853565b34801561024b57600080fd5b5061025f61025a366004612866565b61080c565b6040516001600160a01b039091168152602001610214565b34801561028357600080fd5b50610297610292366004612894565b610833565b005b3480156102a557600080fd5b506102b96102b4366004612866565b61094d565b60405161021491906128c0565b3480156102d257600080fd5b506102976102e1366004612866565b610a2e565b3480156102f257600080fd5b506102fb610a8e565b604051908152602001610214565b34801561031557600080fd5b5061029761032436600461290d565b610aaa565b34801561033557600080fd5b506103b1610344366004612866565b60cc6020526000908152604090208054600182015460028301546003909301546001600160a01b0392831693919263ffffffff808416936401000000008104821693600160401b8204831693600160601b8304841693600160801b8404811693600160a01b900416911689565b604080516001600160a01b039a8b168152602081019990995263ffffffff978816908901529486166060880152928516608087015290841660a0860152831660c085015290911660e083015290911661010082015261012001610214565b34801561041b57600080fd5b5061042f61042a36600461294e565b610adb565b604080516001600160a01b039093168352602083019190915201610214565b34801561045a57600080fd5b5061029761046936600461290d565b610bd4565b34801561047a57600080fd5b506102fb610489366004612866565b60cd6020526000908152604090205481565b3480156104a757600080fd5b5061025f6104b6366004612866565b610bef565b3480156104c757600080fd5b506102fb6104d6366004612970565b610c4f565b3480156104e757600080fd5b50610297610cd5565b3480156104fc57600080fd5b5061029761050b3660046129a6565b610ce9565b34801561051c57600080fd5b5061053061052b366004612866565b610fe6565b6040516102149190612a3c565b34801561054957600080fd5b506097546001600160a01b031661025f565b34801561056757600080fd5b506102326110a9565b34801561057c57600080fd5b5061029761058b366004612a74565b6110b8565b61029761059e366004612ab2565b6110c3565b3480156105af57600080fd5b506102976105be366004612bda565b61146b565b3480156105cf57600080fd5b506102976105de366004612c7f565b6115f0565b3480156105ef57600080fd5b506102976105fe366004612cff565b611628565b34801561060f57600080fd5b5061023261061e366004612866565b6116a3565b34801561062f57600080fd5b506102fb61063e366004612866565b60cf6020526000908152604090205481565b34801561065c57600080fd5b506102fb7fb0b05fba96c122a3db5d352971bb77a4e982b43f6b3a779beb0dcce9d261d04581565b34801561069057600080fd5b506102fb61069f366004612866565b60ce6020526000908152604090205481565b3480156106bd57600080fd5b5061023261176e565b3480156106d257600080fd5b506102086106e1366004612d2b565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b34801561071b57600080fd5b5061029761072a366004612970565b611796565b34801561073b57600080fd5b5061029761074a366004612cff565b61180f565b600063152a902d60e11b6001600160e01b03198316148061077457506107748261187d565b92915050565b60606065805461078990612d59565b80601f01602080910402602001604051908101604052809291908181526020018280546107b590612d59565b80156108025780601f106107d757610100808354040283529160200191610802565b820191906000526020600020905b8154815290600101906020018083116107e557829003601f168201915b5050505050905090565b6000610817826118cd565b506000908152606960205260409020546001600160a01b031690565b600061083e82610bef565b9050806001600160a01b0316836001600160a01b0316036108b05760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806108cc57506108cc81336106e1565b61093e5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016108a7565b610948838361192c565b505050565b600081815260cc60205260408120600201546060919063ffffffff1667ffffffffffffffff81111561098157610981612b2e565b6040519080825280602002602001820160405280156109aa578160200160208202803683370190505b509050600060015b60ca54811015610a2557600081815260cd6020526040902054859003610a13576109db81610bef565b8383815181106109ed576109ed612d93565b6001600160a01b039092166020928302919091019091015281610a0f81612dbf565b9250505b80610a1d81612dbf565b9150506109b2565b50909392505050565b600081815260cf602090815260408083205460ce909252822054610a529190612dd8565b600083815260ce602090815260408083205460cf83528184205560cc909152902054909150610a8a906001600160a01b03168261199a565b5050565b60006001610a9b60ca5490565b610aa59190612dd8565b905090565b610ab43382611aa7565b610ad05760405162461bcd60e51b81526004016108a790612def565b610948838383611b26565b600082815260cd602090815260408083205480845260cc835281842082516101208101845281546001600160a01b03908116808352600184015496830196909652600283015463ffffffff80821696840196909652640100000000810486166060840152600160401b810486166080840152600160601b8104861660a0840152600160801b8104861660c0840152600160a01b900490941660e08201526003909101549092166101008301528392909190610b9e5751925060009150610bcd9050565b6080810151815163ffffffff90911690612710610bbb8389612e3d565b610bc59190612e72565b945094505050505b9250929050565b610948838383604051806020016040528060008152506115f0565b6000818152606760205260408120546001600160a01b0316806107745760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108a7565b60006001600160a01b038216610cb95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016108a7565b506001600160a01b031660009081526068602052604090205490565b610cdd611cc2565b610ce76000611d1c565b565b610cf1611cc2565b610cfc866001612e86565b63ffffffff168263ffffffff1610610d565760405162461bcd60e51b815260206004820152601860248201527f50726573616c65207175616e7469747920746f6f20626967000000000000000060448201526064016108a7565b63ffffffff821615610db8576001600160a01b038116610db85760405162461bcd60e51b815260206004820152601a60248201527f5369676e657220616464726573732063616e6e6f74206265203000000000000060448201526064016108a7565b604051806101200160405280896001600160a01b03168152602001888152602001600063ffffffff1681526020018763ffffffff1681526020018663ffffffff1681526020018563ffffffff1681526020018463ffffffff1681526020018363ffffffff168152602001826001600160a01b031681525060cc6000610e3c60cb5490565b81526020808201929092526040908101600020835181546001600160a01b03199081166001600160a01b03928316178355938501516001830155918401516002820180546060870151608088015160a089015160c08a015160e08b015163ffffffff97881667ffffffffffffffff199096169590951764010000000094881694909402939093176fffffffffffffffff00000000000000001916600160401b9287169290920263ffffffff60601b191691909117600160601b918616919091021767ffffffffffffffff60801b1916600160801b9185169190910263ffffffff60a01b191617600160a01b93909116929092029190911790556101009093015160039093018054909216921691909117905560cb54604080516001600160a01b03808c168252602082018b905263ffffffff808b16938301939093528289166060830152828816608083015282871660a083015291851660c082015290831660e08201527fb56f9ba6a8af17a142f8ad372c6fc283e81d8c6193b86afe7f6ca901acd698f3906101000160405180910390a2610fdc60cb80546001019055565b5050505050505050565b600081815260cc60205260408120600201546060919063ffffffff1667ffffffffffffffff81111561101a5761101a612b2e565b604051908082528060200260200182016040528015611043578160200160208202803683370190505b509050600060015b60ca54811015610a2557600081815260cd6020526040902054859003611097578083838151811061107e5761107e612d93565b60209081029190910101528161109381612dbf565b9250505b806110a181612dbf565b91505061104b565b60606066805461078990612d59565b610a8a338383611d6e565b600083815260cc60205260409020600181015460029091015463ffffffff640100000000820481169181811691600160601b8204811691600160801b8104821691600160a01b90910416846111535760405162461bcd60e51b815260206004820152601660248201527511591a5d1a5bdb88191bd95cc81b9bdd08195e1a5cdd60521b60448201526064016108a7565b8463ffffffff168463ffffffff16106111b85760405162461bcd60e51b815260206004820152602160248201527f546869732065646974696f6e20697320616c726561647920736f6c64206f75746044820152601760f91b60648201526084016108a7565b8534101561121a5760405162461bcd60e51b815260206004820152602960248201527f4d7573742073656e6420656e6f75676820746f207075726368617365207468656044820152681032b234ba34b7b71760b91b60648201526084016108a7565b428363ffffffff16111561131a5760008163ffffffff1611801561124957508063ffffffff168463ffffffff16105b6112ad5760405162461bcd60e51b815260206004820152602f60248201527f4e6f2070726573616c6520617661696c61626c652026206f70656e206175637460448201526e1a5bdb881b9bdd081cdd185c9d1959608a1b60648201526084016108a7565b600089815260cc60205260409020600301546001600160a01b03166112d389898c611e3c565b6001600160a01b03161461131a5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21039b4b3b732b960911b60448201526064016108a7565b428263ffffffff16116113635760405162461bcd60e51b8152602060048201526011602482015270105d58dd1a5bdb881a185cc8195b991959607a1b60448201526064016108a7565b600089815260ce602052604081208054349290611381908490612eae565b9091555050600089815260cc60205260408120600201805463ffffffff16916113a983612ec6565b91906101000a81548163ffffffff021916908363ffffffff160217905550506113da336113d560ca5490565b611f68565b8860cd60006113e860ca5490565b81526020810191909152604001600020553361140360ca5490565b60008b815260cc602090815260409182902060020154915163ffffffff90921682528c917fe38cb07a52e5d88a83de7c9d29c2841118103e462d20f8c526b35872f9977785910160405180910390a461146060ca80546001019055565b505050505050505050565b600054610100900460ff161580801561148b5750600054600160ff909116105b806114a55750303b1580156114a5575060005460ff166001145b6115085760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108a7565b6000805460ff19166001179055801561152b576000805461ff0019166101001790555b61153584846120aa565b61153d6120db565b61154686611796565b816115508661210a565b604051602001611561929190612ee9565b60405160208183030381529060405260c99080519060200190611585929190612728565b5061159460ca80546001019055565b6115a260cb80546001019055565b80156115e8576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6115fa3383611aa7565b6116165760405162461bcd60e51b81526004016108a790612def565b6116228484848461220b565b50505050565b611630611cc2565b600082815260cc602052604090819020600201805463ffffffff60801b1916600160801b63ffffffff85169081029190911790915590517f494264d1227744d2d86690c5355813b007a13955626b261c2e02901a73f6f90c90611697906001908690612f3a565b60405180910390a25050565b6000818152606760205260409020546060906001600160a01b03166117225760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108a7565b600082815260cd602052604090205460c99061173d9061210a565b6117468461210a565b60405160200161175893929190612fff565b6040516020818303038152906040529050919050565b606060c96040516020016117829190613045565b604051602081830303815290604052905090565b61179e611cc2565b6001600160a01b0381166118035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a7565b61180c81611d1c565b50565b611817611cc2565b600082815260cc6020526040808220600201805463ffffffff60601b1916600160601b63ffffffff861690810291909117909155905190917f494264d1227744d2d86690c5355813b007a13955626b261c2e02901a73f6f90c9161169791908690612f3a565b60006001600160e01b031982166380ac58cd60e01b14806118ae57506001600160e01b03198216635b5e139f60e01b145b8061077457506301ffc9a760e01b6001600160e01b0319831614610774565b6000818152606760205260409020546001600160a01b031661180c5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108a7565b600081815260696020526040902080546001600160a01b0319166001600160a01b038416908117909155819061196182610bef565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b804710156119ea5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e742062616c616e636520666f722073656e6400000060448201526064016108a7565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611a37576040519150601f19603f3d011682016040523d82523d6000602084013e611a3c565b606091505b50509050806109485760405162461bcd60e51b815260206004820152603160248201527f556e61626c6520746f2073656e642076616c75653a20726563697069656e74206044820152701b585e481a185d99481c995d995c9d1959607a1b60648201526084016108a7565b600080611ab383610bef565b9050806001600160a01b0316846001600160a01b03161480611afa57506001600160a01b038082166000908152606a602090815260408083209388168352929052205460ff165b80611b1e5750836001600160a01b0316611b138461080c565b6001600160a01b0316145b949350505050565b826001600160a01b0316611b3982610bef565b6001600160a01b031614611b9d5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016108a7565b6001600160a01b038216611bff5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108a7565b611c0a60008261192c565b6001600160a01b0383166000908152606860205260408120805460019290611c33908490612dd8565b90915550506001600160a01b0382166000908152606860205260408120805460019290611c61908490612eae565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6097546001600160a01b03163314610ce75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a7565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603611dcf5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108a7565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6000807fc49a8e302e3e5d6753b2bb3dbc3c28deba5e16e2572a92aef568063c963e346546604051602001611e7b929190918252602082015260400190565b60408051808303601f1901815282825280516020918201207fb0b05fba96c122a3db5d352971bb77a4e982b43f6b3a779beb0dcce9d261d04582850152308484015233606085015260808085018890528351808603909101815260a085019093528251929091019190912061190160f01b60c084015260c283019190915260e2820152610102016040516020818303038152906040528051906020012090506000611f5e86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869392505061223e9050565b9695505050505050565b6001600160a01b038216611fbe5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108a7565b6000818152606760205260409020546001600160a01b0316156120235760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108a7565b6001600160a01b038216600090815260686020526040812080546001929061204c908490612eae565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600054610100900460ff166120d15760405162461bcd60e51b81526004016108a79061306b565b610a8a8282612262565b600054610100900460ff166121025760405162461bcd60e51b81526004016108a79061306b565b610ce76122b0565b6060816000036121315750506040805180820190915260018152600360fc1b602082015290565b8160005b811561215b578061214581612dbf565b91506121549050600a83612e72565b9150612135565b60008167ffffffffffffffff81111561217657612176612b2e565b6040519080825280601f01601f1916602001820160405280156121a0576020820181803683370190505b5090505b8415611b1e576121b5600183612dd8565b91506121c2600a866130b6565b6121cd906030612eae565b60f81b8183815181106121e2576121e2612d93565b60200101906001600160f81b031916908160001a905350612204600a86612e72565b94506121a4565b612216848484611b26565b612222848484846122e0565b6116225760405162461bcd60e51b81526004016108a7906130ca565b600080600061224d85856123e1565b9150915061225a8161244c565b509392505050565b600054610100900460ff166122895760405162461bcd60e51b81526004016108a79061306b565b815161229c906065906020850190612728565b508051610948906066906020840190612728565b600054610100900460ff166122d75760405162461bcd60e51b81526004016108a79061306b565b610ce733611d1c565b60006001600160a01b0384163b156123d657604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061232490339089908890889060040161311c565b6020604051808303816000875af192505050801561235f575060408051601f3d908101601f1916820190925261235c9181019061314f565b60015b6123bc573d80801561238d576040519150601f19603f3d011682016040523d82523d6000602084013e612392565b606091505b5080516000036123b45760405162461bcd60e51b81526004016108a7906130ca565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611b1e565b506001949350505050565b60008082516041036124175760208301516040840151606085015160001a61240b87828585612602565b94509450505050610bcd565b825160400361244057602083015160408401516124358683836126ef565b935093505050610bcd565b50600090506002610bcd565b600081600481111561246057612460612f24565b036124685750565b600181600481111561247c5761247c612f24565b036124c95760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016108a7565b60028160048111156124dd576124dd612f24565b0361252a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016108a7565b600381600481111561253e5761253e612f24565b036125965760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016108a7565b60048160048111156125aa576125aa612f24565b0361180c5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016108a7565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561263957506000905060036126e6565b8460ff16601b1415801561265157508460ff16601c14155b1561266257506000905060046126e6565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156126b6573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166126df576000600192509250506126e6565b9150600090505b94509492505050565b6000806001600160ff1b0383168161270c60ff86901c601b612eae565b905061271a87828885612602565b935093505050935093915050565b82805461273490612d59565b90600052602060002090601f016020900481019282612756576000855561279c565b82601f1061276f57805160ff191683800117855561279c565b8280016001018555821561279c579182015b8281111561279c578251825591602001919060010190612781565b506127a89291506127ac565b5090565b5b808211156127a857600081556001016127ad565b6001600160e01b03198116811461180c57600080fd5b6000602082840312156127e957600080fd5b81356127f4816127c1565b9392505050565b60005b838110156128165781810151838201526020016127fe565b838111156116225750506000910152565b6000815180845261283f8160208601602086016127fb565b601f01601f19169290920160200192915050565b6020815260006127f46020830184612827565b60006020828403121561287857600080fd5b5035919050565b6001600160a01b038116811461180c57600080fd5b600080604083850312156128a757600080fd5b82356128b28161287f565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b818110156129015783516001600160a01b0316835292840192918401916001016128dc565b50909695505050505050565b60008060006060848603121561292257600080fd5b833561292d8161287f565b9250602084013561293d8161287f565b929592945050506040919091013590565b6000806040838503121561296157600080fd5b50508035926020909101359150565b60006020828403121561298257600080fd5b81356127f48161287f565b803563ffffffff811681146129a157600080fd5b919050565b600080600080600080600080610100898b0312156129c357600080fd5b88356129ce8161287f565b9750602089013596506129e360408a0161298d565b95506129f160608a0161298d565b94506129ff60808a0161298d565b9350612a0d60a08a0161298d565b9250612a1b60c08a0161298d565b915060e0890135612a2b8161287f565b809150509295985092959890939650565b6020808252825182820181905260009190848201906040850190845b8181101561290157835183529284019291840191600101612a58565b60008060408385031215612a8757600080fd5b8235612a928161287f565b915060208301358015158114612aa757600080fd5b809150509250929050565b600080600060408486031215612ac757600080fd5b83359250602084013567ffffffffffffffff80821115612ae657600080fd5b818601915086601f830112612afa57600080fd5b813581811115612b0957600080fd5b876020828501011115612b1b57600080fd5b6020830194508093505050509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612b5f57612b5f612b2e565b604051601f8501601f19908116603f01168101908282118183101715612b8757612b87612b2e565b81604052809350858152868686011115612ba057600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112612bcb57600080fd5b6127f483833560208501612b44565b600080600080600060a08688031215612bf257600080fd5b8535612bfd8161287f565b945060208601359350604086013567ffffffffffffffff80821115612c2157600080fd5b612c2d89838a01612bba565b94506060880135915080821115612c4357600080fd5b612c4f89838a01612bba565b93506080880135915080821115612c6557600080fd5b50612c7288828901612bba565b9150509295509295909350565b60008060008060808587031215612c9557600080fd5b8435612ca08161287f565b93506020850135612cb08161287f565b925060408501359150606085013567ffffffffffffffff811115612cd357600080fd5b8501601f81018713612ce457600080fd5b612cf387823560208401612b44565b91505092959194509250565b60008060408385031215612d1257600080fd5b82359150612d226020840161298d565b90509250929050565b60008060408385031215612d3e57600080fd5b8235612d498161287f565b91506020830135612aa78161287f565b600181811c90821680612d6d57607f821691505b602082108103612d8d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612dd157612dd1612da9565b5060010190565b600082821015612dea57612dea612da9565b500390565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b6000816000190483118215151615612e5757612e57612da9565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612e8157612e81612e5c565b500490565b600063ffffffff808316818516808303821115612ea557612ea5612da9565b01949350505050565b60008219821115612ec157612ec1612da9565b500190565b600063ffffffff808316818103612edf57612edf612da9565b6001019392505050565b60008351612efb8184602088016127fb565b835190830190612f0f8183602088016127fb565b602f60f81b9101908152600101949350505050565b634e487b7160e01b600052602160045260246000fd5b6040810160028410612f5c57634e487b7160e01b600052602160045260246000fd5b9281526020015290565b8054600090600181811c9080831680612f8057607f831692505b60208084108203612fa157634e487b7160e01b600052602260045260246000fd5b818015612fb55760018114612fc657612ff3565b60ff19861689528489019650612ff3565b60008881526020902060005b86811015612feb5781548b820152908501908301612fd2565b505084890196505b50505050505092915050565b600061300b8286612f66565b845161301b8183602089016127fb565b602f60f81b910190815283516130388160018401602088016127fb565b0160010195945050505050565b60006130518284612f66565b691cdd1bdc99599c9bdb9d60b21b8152600a019392505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000826130c5576130c5612e5c565b500690565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611f5e90830184612827565b60006020828403121561316157600080fd5b81516127f4816127c156fea26469706673582212206e0f6c3171437367122d5bd46629e4b754dcebde268603958b3f5340ed658af964736f6c634300080e0033",
  "deployedBytecode": "0x6080604052600436106101e35760003560e01c806374e7918911610102578063c87b56dd11610095578063e8a3d48511610064578063e8a3d485146106b1578063e985e9c5146106c6578063f2fde38b1461070f578063fbab9e041461072f57600080fd5b8063c87b56dd14610603578063d3bb052814610623578063d4ae752214610650578063e1a3d5731461068457600080fd5b8063abccf3dd116100d1578063abccf3dd14610590578063abfc83a0146105a3578063b88d4fde146105c3578063bb314ca1146105e357600080fd5b806374e79189146105105780638da5cb5b1461053d57806395d89b411461055b578063a22cb4651461057057600080fd5b8063279c806e1161017a5780636352211e116101495780636352211e1461049b57806370a08231146104bb578063715018a6146104db57806373aaf879146104f057600080fd5b8063279c806e146103295780632a55205a1461040f57806342842e0e1461044e578063602787ed1461046e57600080fd5b806313dd2960116101b657806313dd296014610299578063155dd5ee146102c657806318160ddd146102e657806323b872dd1461030957600080fd5b806301ffc9a7146101e857806306fdde031461021d578063081812fc1461023f578063095ea7b314610277575b600080fd5b3480156101f457600080fd5b506102086102033660046127d7565b61074f565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023261077a565b6040516102149190612853565b34801561024b57600080fd5b5061025f61025a366004612866565b61080c565b6040516001600160a01b039091168152602001610214565b34801561028357600080fd5b50610297610292366004612894565b610833565b005b3480156102a557600080fd5b506102b96102b4366004612866565b61094d565b60405161021491906128c0565b3480156102d257600080fd5b506102976102e1366004612866565b610a2e565b3480156102f257600080fd5b506102fb610a8e565b604051908152602001610214565b34801561031557600080fd5b5061029761032436600461290d565b610aaa565b34801561033557600080fd5b506103b1610344366004612866565b60cc6020526000908152604090208054600182015460028301546003909301546001600160a01b0392831693919263ffffffff808416936401000000008104821693600160401b8204831693600160601b8304841693600160801b8404811693600160a01b900416911689565b604080516001600160a01b039a8b168152602081019990995263ffffffff978816908901529486166060880152928516608087015290841660a0860152831660c085015290911660e083015290911661010082015261012001610214565b34801561041b57600080fd5b5061042f61042a36600461294e565b610adb565b604080516001600160a01b039093168352602083019190915201610214565b34801561045a57600080fd5b5061029761046936600461290d565b610bd4565b34801561047a57600080fd5b506102fb610489366004612866565b60cd6020526000908152604090205481565b3480156104a757600080fd5b5061025f6104b6366004612866565b610bef565b3480156104c757600080fd5b506102fb6104d6366004612970565b610c4f565b3480156104e757600080fd5b50610297610cd5565b3480156104fc57600080fd5b5061029761050b3660046129a6565b610ce9565b34801561051c57600080fd5b5061053061052b366004612866565b610fe6565b6040516102149190612a3c565b34801561054957600080fd5b506097546001600160a01b031661025f565b34801561056757600080fd5b506102326110a9565b34801561057c57600080fd5b5061029761058b366004612a74565b6110b8565b61029761059e366004612ab2565b6110c3565b3480156105af57600080fd5b506102976105be366004612bda565b61146b565b3480156105cf57600080fd5b506102976105de366004612c7f565b6115f0565b3480156105ef57600080fd5b506102976105fe366004612cff565b611628565b34801561060f57600080fd5b5061023261061e366004612866565b6116a3565b34801561062f57600080fd5b506102fb61063e366004612866565b60cf6020526000908152604090205481565b34801561065c57600080fd5b506102fb7fb0b05fba96c122a3db5d352971bb77a4e982b43f6b3a779beb0dcce9d261d04581565b34801561069057600080fd5b506102fb61069f366004612866565b60ce6020526000908152604090205481565b3480156106bd57600080fd5b5061023261176e565b3480156106d257600080fd5b506102086106e1366004612d2b565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b34801561071b57600080fd5b5061029761072a366004612970565b611796565b34801561073b57600080fd5b5061029761074a366004612cff565b61180f565b600063152a902d60e11b6001600160e01b03198316148061077457506107748261187d565b92915050565b60606065805461078990612d59565b80601f01602080910402602001604051908101604052809291908181526020018280546107b590612d59565b80156108025780601f106107d757610100808354040283529160200191610802565b820191906000526020600020905b8154815290600101906020018083116107e557829003601f168201915b5050505050905090565b6000610817826118cd565b506000908152606960205260409020546001600160a01b031690565b600061083e82610bef565b9050806001600160a01b0316836001600160a01b0316036108b05760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806108cc57506108cc81336106e1565b61093e5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016108a7565b610948838361192c565b505050565b600081815260cc60205260408120600201546060919063ffffffff1667ffffffffffffffff81111561098157610981612b2e565b6040519080825280602002602001820160405280156109aa578160200160208202803683370190505b509050600060015b60ca54811015610a2557600081815260cd6020526040902054859003610a13576109db81610bef565b8383815181106109ed576109ed612d93565b6001600160a01b039092166020928302919091019091015281610a0f81612dbf565b9250505b80610a1d81612dbf565b9150506109b2565b50909392505050565b600081815260cf602090815260408083205460ce909252822054610a529190612dd8565b600083815260ce602090815260408083205460cf83528184205560cc909152902054909150610a8a906001600160a01b03168261199a565b5050565b60006001610a9b60ca5490565b610aa59190612dd8565b905090565b610ab43382611aa7565b610ad05760405162461bcd60e51b81526004016108a790612def565b610948838383611b26565b600082815260cd602090815260408083205480845260cc835281842082516101208101845281546001600160a01b03908116808352600184015496830196909652600283015463ffffffff80821696840196909652640100000000810486166060840152600160401b810486166080840152600160601b8104861660a0840152600160801b8104861660c0840152600160a01b900490941660e08201526003909101549092166101008301528392909190610b9e5751925060009150610bcd9050565b6080810151815163ffffffff90911690612710610bbb8389612e3d565b610bc59190612e72565b945094505050505b9250929050565b610948838383604051806020016040528060008152506115f0565b6000818152606760205260408120546001600160a01b0316806107745760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108a7565b60006001600160a01b038216610cb95760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016108a7565b506001600160a01b031660009081526068602052604090205490565b610cdd611cc2565b610ce76000611d1c565b565b610cf1611cc2565b610cfc866001612e86565b63ffffffff168263ffffffff1610610d565760405162461bcd60e51b815260206004820152601860248201527f50726573616c65207175616e7469747920746f6f20626967000000000000000060448201526064016108a7565b63ffffffff821615610db8576001600160a01b038116610db85760405162461bcd60e51b815260206004820152601a60248201527f5369676e657220616464726573732063616e6e6f74206265203000000000000060448201526064016108a7565b604051806101200160405280896001600160a01b03168152602001888152602001600063ffffffff1681526020018763ffffffff1681526020018663ffffffff1681526020018563ffffffff1681526020018463ffffffff1681526020018363ffffffff168152602001826001600160a01b031681525060cc6000610e3c60cb5490565b81526020808201929092526040908101600020835181546001600160a01b03199081166001600160a01b03928316178355938501516001830155918401516002820180546060870151608088015160a089015160c08a015160e08b015163ffffffff97881667ffffffffffffffff199096169590951764010000000094881694909402939093176fffffffffffffffff00000000000000001916600160401b9287169290920263ffffffff60601b191691909117600160601b918616919091021767ffffffffffffffff60801b1916600160801b9185169190910263ffffffff60a01b191617600160a01b93909116929092029190911790556101009093015160039093018054909216921691909117905560cb54604080516001600160a01b03808c168252602082018b905263ffffffff808b16938301939093528289166060830152828816608083015282871660a083015291851660c082015290831660e08201527fb56f9ba6a8af17a142f8ad372c6fc283e81d8c6193b86afe7f6ca901acd698f3906101000160405180910390a2610fdc60cb80546001019055565b5050505050505050565b600081815260cc60205260408120600201546060919063ffffffff1667ffffffffffffffff81111561101a5761101a612b2e565b604051908082528060200260200182016040528015611043578160200160208202803683370190505b509050600060015b60ca54811015610a2557600081815260cd6020526040902054859003611097578083838151811061107e5761107e612d93565b60209081029190910101528161109381612dbf565b9250505b806110a181612dbf565b91505061104b565b60606066805461078990612d59565b610a8a338383611d6e565b600083815260cc60205260409020600181015460029091015463ffffffff640100000000820481169181811691600160601b8204811691600160801b8104821691600160a01b90910416846111535760405162461bcd60e51b815260206004820152601660248201527511591a5d1a5bdb88191bd95cc81b9bdd08195e1a5cdd60521b60448201526064016108a7565b8463ffffffff168463ffffffff16106111b85760405162461bcd60e51b815260206004820152602160248201527f546869732065646974696f6e20697320616c726561647920736f6c64206f75746044820152601760f91b60648201526084016108a7565b8534101561121a5760405162461bcd60e51b815260206004820152602960248201527f4d7573742073656e6420656e6f75676820746f207075726368617365207468656044820152681032b234ba34b7b71760b91b60648201526084016108a7565b428363ffffffff16111561131a5760008163ffffffff1611801561124957508063ffffffff168463ffffffff16105b6112ad5760405162461bcd60e51b815260206004820152602f60248201527f4e6f2070726573616c6520617661696c61626c652026206f70656e206175637460448201526e1a5bdb881b9bdd081cdd185c9d1959608a1b60648201526084016108a7565b600089815260cc60205260409020600301546001600160a01b03166112d389898c611e3c565b6001600160a01b03161461131a5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21039b4b3b732b960911b60448201526064016108a7565b428263ffffffff16116113635760405162461bcd60e51b8152602060048201526011602482015270105d58dd1a5bdb881a185cc8195b991959607a1b60448201526064016108a7565b600089815260ce602052604081208054349290611381908490612eae565b9091555050600089815260cc60205260408120600201805463ffffffff16916113a983612ec6565b91906101000a81548163ffffffff021916908363ffffffff160217905550506113da336113d560ca5490565b611f68565b8860cd60006113e860ca5490565b81526020810191909152604001600020553361140360ca5490565b60008b815260cc602090815260409182902060020154915163ffffffff90921682528c917fe38cb07a52e5d88a83de7c9d29c2841118103e462d20f8c526b35872f9977785910160405180910390a461146060ca80546001019055565b505050505050505050565b600054610100900460ff161580801561148b5750600054600160ff909116105b806114a55750303b1580156114a5575060005460ff166001145b6115085760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108a7565b6000805460ff19166001179055801561152b576000805461ff0019166101001790555b61153584846120aa565b61153d6120db565b61154686611796565b816115508661210a565b604051602001611561929190612ee9565b60405160208183030381529060405260c99080519060200190611585929190612728565b5061159460ca80546001019055565b6115a260cb80546001019055565b80156115e8576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6115fa3383611aa7565b6116165760405162461bcd60e51b81526004016108a790612def565b6116228484848461220b565b50505050565b611630611cc2565b600082815260cc602052604090819020600201805463ffffffff60801b1916600160801b63ffffffff85169081029190911790915590517f494264d1227744d2d86690c5355813b007a13955626b261c2e02901a73f6f90c90611697906001908690612f3a565b60405180910390a25050565b6000818152606760205260409020546060906001600160a01b03166117225760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108a7565b600082815260cd602052604090205460c99061173d9061210a565b6117468461210a565b60405160200161175893929190612fff565b6040516020818303038152906040529050919050565b606060c96040516020016117829190613045565b604051602081830303815290604052905090565b61179e611cc2565b6001600160a01b0381166118035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a7565b61180c81611d1c565b50565b611817611cc2565b600082815260cc6020526040808220600201805463ffffffff60601b1916600160601b63ffffffff861690810291909117909155905190917f494264d1227744d2d86690c5355813b007a13955626b261c2e02901a73f6f90c9161169791908690612f3a565b60006001600160e01b031982166380ac58cd60e01b14806118ae57506001600160e01b03198216635b5e139f60e01b145b8061077457506301ffc9a760e01b6001600160e01b0319831614610774565b6000818152606760205260409020546001600160a01b031661180c5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108a7565b600081815260696020526040902080546001600160a01b0319166001600160a01b038416908117909155819061196182610bef565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b804710156119ea5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e742062616c616e636520666f722073656e6400000060448201526064016108a7565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611a37576040519150601f19603f3d011682016040523d82523d6000602084013e611a3c565b606091505b50509050806109485760405162461bcd60e51b815260206004820152603160248201527f556e61626c6520746f2073656e642076616c75653a20726563697069656e74206044820152701b585e481a185d99481c995d995c9d1959607a1b60648201526084016108a7565b600080611ab383610bef565b9050806001600160a01b0316846001600160a01b03161480611afa57506001600160a01b038082166000908152606a602090815260408083209388168352929052205460ff165b80611b1e5750836001600160a01b0316611b138461080c565b6001600160a01b0316145b949350505050565b826001600160a01b0316611b3982610bef565b6001600160a01b031614611b9d5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016108a7565b6001600160a01b038216611bff5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108a7565b611c0a60008261192c565b6001600160a01b0383166000908152606860205260408120805460019290611c33908490612dd8565b90915550506001600160a01b0382166000908152606860205260408120805460019290611c61908490612eae565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6097546001600160a01b03163314610ce75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a7565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603611dcf5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108a7565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6000807fc49a8e302e3e5d6753b2bb3dbc3c28deba5e16e2572a92aef568063c963e346546604051602001611e7b929190918252602082015260400190565b60408051808303601f1901815282825280516020918201207fb0b05fba96c122a3db5d352971bb77a4e982b43f6b3a779beb0dcce9d261d04582850152308484015233606085015260808085018890528351808603909101815260a085019093528251929091019190912061190160f01b60c084015260c283019190915260e2820152610102016040516020818303038152906040528051906020012090506000611f5e86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869392505061223e9050565b9695505050505050565b6001600160a01b038216611fbe5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108a7565b6000818152606760205260409020546001600160a01b0316156120235760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108a7565b6001600160a01b038216600090815260686020526040812080546001929061204c908490612eae565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600054610100900460ff166120d15760405162461bcd60e51b81526004016108a79061306b565b610a8a8282612262565b600054610100900460ff166121025760405162461bcd60e51b81526004016108a79061306b565b610ce76122b0565b6060816000036121315750506040805180820190915260018152600360fc1b602082015290565b8160005b811561215b578061214581612dbf565b91506121549050600a83612e72565b9150612135565b60008167ffffffffffffffff81111561217657612176612b2e565b6040519080825280601f01601f1916602001820160405280156121a0576020820181803683370190505b5090505b8415611b1e576121b5600183612dd8565b91506121c2600a866130b6565b6121cd906030612eae565b60f81b8183815181106121e2576121e2612d93565b60200101906001600160f81b031916908160001a905350612204600a86612e72565b94506121a4565b612216848484611b26565b612222848484846122e0565b6116225760405162461bcd60e51b81526004016108a7906130ca565b600080600061224d85856123e1565b9150915061225a8161244c565b509392505050565b600054610100900460ff166122895760405162461bcd60e51b81526004016108a79061306b565b815161229c906065906020850190612728565b508051610948906066906020840190612728565b600054610100900460ff166122d75760405162461bcd60e51b81526004016108a79061306b565b610ce733611d1c565b60006001600160a01b0384163b156123d657604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061232490339089908890889060040161311c565b6020604051808303816000875af192505050801561235f575060408051601f3d908101601f1916820190925261235c9181019061314f565b60015b6123bc573d80801561238d576040519150601f19603f3d011682016040523d82523d6000602084013e612392565b606091505b5080516000036123b45760405162461bcd60e51b81526004016108a7906130ca565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611b1e565b506001949350505050565b60008082516041036124175760208301516040840151606085015160001a61240b87828585612602565b94509450505050610bcd565b825160400361244057602083015160408401516124358683836126ef565b935093505050610bcd565b50600090506002610bcd565b600081600481111561246057612460612f24565b036124685750565b600181600481111561247c5761247c612f24565b036124c95760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016108a7565b60028160048111156124dd576124dd612f24565b0361252a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016108a7565b600381600481111561253e5761253e612f24565b036125965760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016108a7565b60048160048111156125aa576125aa612f24565b0361180c5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016108a7565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561263957506000905060036126e6565b8460ff16601b1415801561265157508460ff16601c14155b1561266257506000905060046126e6565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156126b6573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166126df576000600192509250506126e6565b9150600090505b94509492505050565b6000806001600160ff1b0383168161270c60ff86901c601b612eae565b905061271a87828885612602565b935093505050935093915050565b82805461273490612d59565b90600052602060002090601f016020900481019282612756576000855561279c565b82601f1061276f57805160ff191683800117855561279c565b8280016001018555821561279c579182015b8281111561279c578251825591602001919060010190612781565b506127a89291506127ac565b5090565b5b808211156127a857600081556001016127ad565b6001600160e01b03198116811461180c57600080fd5b6000602082840312156127e957600080fd5b81356127f4816127c1565b9392505050565b60005b838110156128165781810151838201526020016127fe565b838111156116225750506000910152565b6000815180845261283f8160208601602086016127fb565b601f01601f19169290920160200192915050565b6020815260006127f46020830184612827565b60006020828403121561287857600080fd5b5035919050565b6001600160a01b038116811461180c57600080fd5b600080604083850312156128a757600080fd5b82356128b28161287f565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b818110156129015783516001600160a01b0316835292840192918401916001016128dc565b50909695505050505050565b60008060006060848603121561292257600080fd5b833561292d8161287f565b9250602084013561293d8161287f565b929592945050506040919091013590565b6000806040838503121561296157600080fd5b50508035926020909101359150565b60006020828403121561298257600080fd5b81356127f48161287f565b803563ffffffff811681146129a157600080fd5b919050565b600080600080600080600080610100898b0312156129c357600080fd5b88356129ce8161287f565b9750602089013596506129e360408a0161298d565b95506129f160608a0161298d565b94506129ff60808a0161298d565b9350612a0d60a08a0161298d565b9250612a1b60c08a0161298d565b915060e0890135612a2b8161287f565b809150509295985092959890939650565b6020808252825182820181905260009190848201906040850190845b8181101561290157835183529284019291840191600101612a58565b60008060408385031215612a8757600080fd5b8235612a928161287f565b915060208301358015158114612aa757600080fd5b809150509250929050565b600080600060408486031215612ac757600080fd5b83359250602084013567ffffffffffffffff80821115612ae657600080fd5b818601915086601f830112612afa57600080fd5b813581811115612b0957600080fd5b876020828501011115612b1b57600080fd5b6020830194508093505050509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612b5f57612b5f612b2e565b604051601f8501601f19908116603f01168101908282118183101715612b8757612b87612b2e565b81604052809350858152868686011115612ba057600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112612bcb57600080fd5b6127f483833560208501612b44565b600080600080600060a08688031215612bf257600080fd5b8535612bfd8161287f565b945060208601359350604086013567ffffffffffffffff80821115612c2157600080fd5b612c2d89838a01612bba565b94506060880135915080821115612c4357600080fd5b612c4f89838a01612bba565b93506080880135915080821115612c6557600080fd5b50612c7288828901612bba565b9150509295509295909350565b60008060008060808587031215612c9557600080fd5b8435612ca08161287f565b93506020850135612cb08161287f565b925060408501359150606085013567ffffffffffffffff811115612cd357600080fd5b8501601f81018713612ce457600080fd5b612cf387823560208401612b44565b91505092959194509250565b60008060408385031215612d1257600080fd5b82359150612d226020840161298d565b90509250929050565b60008060408385031215612d3e57600080fd5b8235612d498161287f565b91506020830135612aa78161287f565b600181811c90821680612d6d57607f821691505b602082108103612d8d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612dd157612dd1612da9565b5060010190565b600082821015612dea57612dea612da9565b500390565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b6000816000190483118215151615612e5757612e57612da9565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612e8157612e81612e5c565b500490565b600063ffffffff808316818516808303821115612ea557612ea5612da9565b01949350505050565b60008219821115612ec157612ec1612da9565b500190565b600063ffffffff808316818103612edf57612edf612da9565b6001019392505050565b60008351612efb8184602088016127fb565b835190830190612f0f8183602088016127fb565b602f60f81b9101908152600101949350505050565b634e487b7160e01b600052602160045260246000fd5b6040810160028410612f5c57634e487b7160e01b600052602160045260246000fd5b9281526020015290565b8054600090600181811c9080831680612f8057607f831692505b60208084108203612fa157634e487b7160e01b600052602260045260246000fd5b818015612fb55760018114612fc657612ff3565b60ff19861689528489019650612ff3565b60008881526020902060005b86811015612feb5781548b820152908501908301612fd2565b505084890196505b50505050505092915050565b600061300b8286612f66565b845161301b8183602089016127fb565b602f60f81b910190815283516130388160018401602088016127fb565b0160010195945050505050565b60006130518284612f66565b691cdd1bdc99599c9bdb9d60b21b8152600a019392505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000826130c5576130c5612e5c565b500690565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611f5e90830184612827565b60006020828403121561316157600080fd5b81516127f4816127c156fea26469706673582212206e0f6c3171437367122d5bd46629e4b754dcebde268603958b3f5340ed658af964736f6c634300080e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
