{
  "_format": "hh-sol-artifact-1",
  "contractName": "RelayerRewardsPool",
  "sourceName": "contracts/RelayerRewardsPool.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AccessControlBadConfirmation",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "neededRole",
          "type": "bytes32"
        }
      ],
      "name": "AccessControlUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AddressEmptyCode",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "ERC1967InvalidImplementation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC1967NonPayable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedInnerCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "parameter",
          "type": "string"
        }
      ],
      "name": "InvalidParameter",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        }
      ],
      "name": "NoRewardsToClaim",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "preferredRelayer",
          "type": "address"
        }
      ],
      "name": "NotPreferredRelayer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ReentrancyGuardReentrantCall",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "RelayerAlreadyRegistered",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "RelayerNotRegistered",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        }
      ],
      "name": "RewardsAlreadyClaimed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        }
      ],
      "name": "RoundNotEnded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UUPSUnauthorizedCallContext",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "slot",
          "type": "bytes32"
        }
      ],
      "name": "UUPSUnsupportedProxiableUUID",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "UnauthorizedUnregister",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        }
      ],
      "name": "UserActionAlreadyReduced",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        }
      ],
      "name": "UserGovernanceVoteAlreadyReduced",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldAddress",
          "type": "address"
        }
      ],
      "name": "B3TRAddressUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newWeight",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldWeight",
          "type": "uint256"
        }
      ],
      "name": "ClaimWeightUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newBlocks",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldBlocks",
          "type": "uint256"
        }
      ],
      "name": "EarlyAccessBlocksUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldAddress",
          "type": "address"
        }
      ],
      "name": "EmissionsAddressUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "actionsReduced",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newTotalActions",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newTotalWeightedActions",
          "type": "uint256"
        }
      ],
      "name": "ExpectedActionsReduced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newFee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldFee",
          "type": "uint256"
        }
      ],
      "name": "FeeCapUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "PreferredRelayerSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "voter",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "actionCount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "weight",
          "type": "uint256"
        }
      ],
      "name": "RelayerActionRegistered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newDenominator",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldDenominator",
          "type": "uint256"
        }
      ],
      "name": "RelayerFeeDenominatorUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newFee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldFee",
          "type": "uint256"
        }
      ],
      "name": "RelayerFeePercentageUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "RelayerRegistered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "RelayerRewardsClaimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "RelayerUnregistered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalRewards",
          "type": "uint256"
        }
      ],
      "name": "RewardsDeposited",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalAutoVoteUsers",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalActions",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalWeightedActions",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "numRelayers",
          "type": "uint256"
        }
      ],
      "name": "TotalAutoVotingActionsSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newWeight",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldWeight",
          "type": "uint256"
        }
      ],
      "name": "VoteWeightUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldAddress",
          "type": "address"
        }
      ],
      "name": "XAllocationVotingAddressUpdated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "POOL_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UPGRADER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UPGRADE_INTERFACE_VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "totalReward",
          "type": "uint256"
        }
      ],
      "name": "calculateRelayerFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "claimRewards",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        }
      ],
      "name": "claimableRewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        }
      ],
      "name": "completedWeightedActions",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getB3trAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getClaimWeight",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getEarlyAccessBlocks",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getEmissionsAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getFeeCap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        }
      ],
      "name": "getMissedAutoVotingUsersCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getPreferredRelayer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getRegisteredRelayers",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getRelayerFeeDenominator",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getRelayerFeePercentage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        }
      ],
      "name": "getTotalRewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getVoteWeight",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getXAllocationVotingAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "admin",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "upgrader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "b3trAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "emissionsAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "xAllocationVotingAddress",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initializeV2",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initializeV3",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        }
      ],
      "name": "isClaimEarlyAccessActive",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "isRegisteredRelayer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        }
      ],
      "name": "isRewardClaimable",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        }
      ],
      "name": "isVoteEarlyAccessActive",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "userCount",
          "type": "uint256"
        }
      ],
      "name": "reduceExpectedActionsForRound",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "reduceUserAllocationVote",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "proposalId",
          "type": "uint256"
        }
      ],
      "name": "reduceUserGovernanceVote",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "registerRelayer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "voter",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        },
        {
          "internalType": "enum RelayerAction",
          "name": "action",
          "type": "uint8"
        }
      ],
      "name": "registerRelayerAction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "callerConfirmation",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "b3trAddress",
          "type": "address"
        }
      ],
      "name": "setB3TRAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newWeight",
          "type": "uint256"
        }
      ],
      "name": "setClaimWeight",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "blocks",
          "type": "uint256"
        }
      ],
      "name": "setEarlyAccessBlocks",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "emissionsAddress",
          "type": "address"
        }
      ],
      "name": "setEmissionsAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newFeeCap",
          "type": "uint256"
        }
      ],
      "name": "setFeeCap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "setPreferredRelayer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newDenominator",
          "type": "uint256"
        }
      ],
      "name": "setRelayerFeeDenominator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newFeePercentage",
          "type": "uint256"
        }
      ],
      "name": "setRelayerFeePercentage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalAutoVotingUsers",
          "type": "uint256"
        }
      ],
      "name": "setTotalActionsForRound",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "allocationUsers",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "governanceUsers",
          "type": "uint256"
        },
        {
          "internalType": "uint256[]",
          "name": "activeProposalIds",
          "type": "uint256[]"
        }
      ],
      "name": "setTotalActionsForRoundWithGovernance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newWeight",
          "type": "uint256"
        }
      ],
      "name": "setVoteWeight",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "xAllocationVotingAddress",
          "type": "address"
        }
      ],
      "name": "setXAllocationVotingAddress",
      "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": [
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        }
      ],
      "name": "totalActions",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        }
      ],
      "name": "totalRelayerActions",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        }
      ],
      "name": "totalRelayerWeightedActions",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        }
      ],
      "name": "totalWeightedActions",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "relayer",
          "type": "address"
        }
      ],
      "name": "unregisterRelayer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "voter",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "validateClaimDuringEarlyAccess",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "roundId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "voter",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "validateVoteDuringEarlyAccess",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161409a6200010460003960008181613390015281816133b90152613501015261409a6000f3fe6080604052600436106102bd5760003560e01c806301ffc9a7146102c25780631459457a146102f757806314d9230714610319578063189ca3161461033957806318b9baa1146103595780631bc3a67314610379578063241f9e2b1461039b578063248a9ca3146103c957806324a697a3146103e957806325d3155e146104095780632f2ff15d1461041e578063338111e71461043e57806336568abe1461045e57806336a7c1341461047e57806338e454b1146104935780633bb18a76146104a85780633d009cee146104c857806347b0b33e146104e857806348c2bd78146105085780634f1ef286146105285780634f6981ee1461053b57806352d1902d1461055b57806354fd4d5014610570578063552164ee146105a357806356f1612f146105c357806357181609146105e35780635ae1cd14146106035780635cd8a76b146106235780635f72790a1461063857806362f2947814610658578063650e8a761461066d578063675d0f8d1461068d5780636bb07c73146106ad5780636c7b69cb146106cd5780636cf88e73146106ed5780637f5e98bd1461070d578063855302011461072257806389a96d35146107425780638d2340a01461076257806391d14854146107775780639858b78a14610797578063a217fddf146107b7578063ac4aa16b146107cc578063ad3cb1cc146107ee578063af54c53a1461081f578063b7fe075a1461083f578063b8f6dba714610854578063be9412df14610876578063bfaabf311461088b578063d428cffc146108ab578063d547741f146108c0578063d5684392146108e0578063d94290e514610900578063dc404a0e14610920578063df171b0c14610940578063e2bbb15814610960578063e5ed920b14610980578063e78168b5146109a0578063e7dfe672146109c0578063f5e57b39146109e0578063f71fdc1614610a00578063f72c0d8b14610a20575b600080fd5b3480156102ce57600080fd5b506102e26102dd3660046138ea565b610a42565b60405190151581526020015b60405180910390f35b34801561030357600080fd5b50610317610312366004613930565b610a79565b005b34801561032557600080fd5b50610317610334366004613995565b610e76565b34801561034557600080fd5b506103176103543660046139b0565b61108f565b34801561036557600080fd5b506103176103743660046139c9565b61116b565b34801561038557600080fd5b5061038e611281565b6040516102ee91906139fe565b3480156103a757600080fd5b506103bb6103b6366004613a12565b61129f565b6040519081526020016102ee565b3480156103d557600080fd5b506103bb6103e43660046139b0565b6112d4565b3480156103f557600080fd5b506103176104043660046139b0565b6112f4565b34801561041557600080fd5b5061038e611384565b34801561042a57600080fd5b50610317610439366004613a3c565b6113a2565b34801561044a57600080fd5b506103bb610459366004613a12565b6113c4565b34801561046a57600080fd5b50610317610479366004613a3c565b6114f0565b34801561048a57600080fd5b506103bb611528565b34801561049f57600080fd5b5061031761153d565b3480156104b457600080fd5b506103176104c3366004613995565b6115de565b3480156104d457600080fd5b506102e26104e33660046139b0565b6116d8565b3480156104f457600080fd5b50610317610503366004613995565b611792565b34801561051457600080fd5b506102e26105233660046139b0565b61187b565b610317610536366004613aae565b611918565b34801561054757600080fd5b506103bb6105563660046139b0565b611937565b34801561056757600080fd5b506103bb6119b5565b34801561057c57600080fd5b506040805180820190915260018152603360f81b60208201525b6040516102ee9190613b77565b3480156105af57600080fd5b506103bb6105be3660046139b0565b6119d2565b3480156105cf57600080fd5b506103176105de366004613995565b6119f2565b3480156105ef57600080fd5b506103176105fe366004613995565b611adb565b34801561060f57600080fd5b5061031761061e366004613baa565b611bcd565b34801561062f57600080fd5b50610317611d2e565b34801561064457600080fd5b50610317610653366004613be6565b611d3a565b34801561066457600080fd5b506103bb611d9e565b34801561067957600080fd5b5061038e610688366004613995565b611db3565b34801561069957600080fd5b506103176106a83660046139b0565b611de4565b3480156106b957600080fd5b506103176106c83660046139b0565b611ed6565b3480156106d957600080fd5b506103176106e8366004613a3c565b611fb0565b3480156106f957600080fd5b50610317610708366004613c08565b612232565b34801561071957600080fd5b506103bb6123fe565b34801561072e57600080fd5b506103bb61073d3660046139b0565b612413565b34801561074e57600080fd5b5061031761075d3660046139b0565b612433565b34801561076e57600080fd5b5061038e612527565b34801561078357600080fd5b506102e2610792366004613a3c565b612542565b3480156107a357600080fd5b506103bb6107b2366004613a12565b612578565b3480156107c357600080fd5b506103bb600081565b3480156107d857600080fd5b506107e16125ad565b6040516102ee9190613c5b565b3480156107fa57600080fd5b50610596604051806040016040528060058152602001640352e302e360dc1b81525081565b34801561082b57600080fd5b5061031761083a366004613995565b612619565b34801561084b57600080fd5b506103bb6126d2565b34801561086057600080fd5b506103bb600080516020613f6583398151915281565b34801561088257600080fd5b506103bb6126e7565b34801561089757600080fd5b506103176108a6366004613ca8565b6126fc565b3480156108b757600080fd5b506103bb612864565b3480156108cc57600080fd5b506103176108db366004613a3c565b612879565b3480156108ec57600080fd5b506102e26108fb366004613995565b612895565b34801561090c57600080fd5b5061031761091b3660046139b0565b6128c5565b34801561092c57600080fd5b506103bb61093b3660046139b0565b612994565b34801561094c57600080fd5b506103bb61095b3660046139b0565b6129de565b34801561096c57600080fd5b5061031761097b366004613be6565b6129fe565b34801561098c57600080fd5b5061031761099b366004613baa565b612b97565b3480156109ac57600080fd5b506103bb6109bb3660046139b0565b612ce7565b3480156109cc57600080fd5b506103176109db366004613be6565b612d07565b3480156109ec57600080fd5b506102e26109fb3660046139b0565b612dc8565b348015610a0c57600080fd5b50610317610a1b366004613a3c565b612e0c565b348015610a2c57600080fd5b506103bb600080516020613fa583398151915281565b60006001600160e01b03198216637965db0b60e01b1480610a7357506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000610a83612ef6565b805490915060ff600160401b82041615906001600160401b0316600081158015610aaa5750825b90506000826001600160401b03166001148015610ac65750303b155b905081158015610ad4575080155b15610af25760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b03191660011785558315610b1b57845460ff60401b1916600160401b1785555b6001600160a01b038a16610b8f5760405162461bcd60e51b815260206004820152603060248201527f52656c6179657252657761726473506f6f6c3a2061646d696e2063616e6e6f7460448201526f206265207a65726f206164647265737360801b60648201526084015b60405180910390fd5b6001600160a01b038916610c015760405162461bcd60e51b815260206004820152603360248201527f52656c6179657252657761726473506f6f6c3a2075706772616465722063616e6044820152726e6f74206265207a65726f206164647265737360681b6064820152608401610b86565b6001600160a01b038816610c6f5760405162461bcd60e51b815260206004820152602f60248201527f52656c6179657252657761726473506f6f6c3a20623374722063616e6e6f742060448201526e6265207a65726f206164647265737360881b6064820152608401610b86565b6001600160a01b038716610ce25760405162461bcd60e51b815260206004820152603460248201527f52656c6179657252657761726473506f6f6c3a20656d697373696f6e732063616044820152736e6e6f74206265207a65726f206164647265737360601b6064820152608401610b86565b6001600160a01b038616610d5d5760405162461bcd60e51b815260206004820152603c60248201527f52656c6179657252657761726473506f6f6c3a2078416c6c6f636174696f6e5660448201527b6f74696e672063616e6e6f74206265207a65726f206164647265737360201b6064820152608401610b86565b610d65612f1a565b610d6d612f24565b610d75612f1a565b610d8060008b612f34565b50610d99600080516020613fa58339815191528a612f34565b50610db2600080516020613f658339815191528b612f34565b506000610dbd612fd5565b80546001600160a01b03808c166001600160a01b0319928316178355600180840180548d8416908516179055600284018054928c1692909316919091179091556003600b830155600c820155600a60108201556064601182015568056bc75e2d63100000601282015562069780600f90910155508315610e6a57845460ff60401b19168555604051600080516020613f8583398151915290610e6190600190613d6a565b60405180910390a15b50505050505050505050565b6001600160a01b0381163314801590610ea45750610ea2600080516020613f6583398151915233612542565b155b8015610eb85750610eb6600033612542565b155b15610eda573381604051630147b5b160e31b8152600401610b86929190613d7e565b6000610ee4612fd5565b6001600160a01b0383166000908152600d8201602052604090205490915060ff16610f24578160405163138cb58960e31b8152600401610b8691906139fe565b6001600160a01b0382166000908152600d820160205260408120805460ff191690555b600e82015481101561105657826001600160a01b031682600e018281548110610f7257610f72613d98565b6000918252602090912001546001600160a01b03160361104457600e82018054610f9e90600190613dc4565b81548110610fae57610fae613d98565b600091825260209091200154600e830180546001600160a01b039092169183908110610fdc57610fdc613d98565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600e0180548061101d5761101d613dd7565b600082815260209020810160001990810180546001600160a01b0319169055019055611056565b8061104e81613ded565b915050610f47565b506040516001600160a01b038316907f490a66cc56c789979052c7052fc0c10a6c4627d8e6165caec80db97a4c38352190600090a25050565b600080516020613f658339815191526110a88133612542565b806110b957506110b9600033612542565b6110d55760405162461bcd60e51b8152600401610b8690613e06565b81600003611113576040516305519d6f60e51b815260206004820152600a6024820152691d9bdd1955d95a59da1d60b21b6044820152606401610b86565b600061111d612fd5565b600b8101805490859055604051919250907fc6d810f6c3aa465110416db0d540c72fcfe818503d1580fd90df38a482f81af89061115d9086908490613e63565b60405180910390a150505050565b600080516020613f658339815191526111848133612542565b806111955750611195600033612542565b6111b15760405162461bcd60e51b8152600401610b8690613e06565b60006111bb612fd5565b600086815260168201602090815260408083206001600160a01b0389168452825280832087845290915290205490915060ff1615611225576040516313aa2f7760e11b81526001600160a01b03851660048201526024810186905260448101849052606401610b86565b600085815260168201602090815260408083206001600160a01b038816845282528083208684529091529020805460ff19166001908117909155600b82015461126f918791612ff9565b61127a8186866131a4565b5050505050565b60008061128c612fd5565b600201546001600160a01b031692915050565b6000806112aa612fd5565b6000938452600401602090815260408085206001600160a01b039690961685529490525050205490565b6000806112df6132dc565b60009384526020525050604090206001015490565b600080516020613f6583398151915261130d8133612542565b8061131e575061131e600033612542565b61133a5760405162461bcd60e51b8152600401610b8690613e06565b6000611344612fd5565b600f8101805490859055604051919250907f9f49ab705704ba5579e12282116057bb42856ad21fc913b1786bf1effc722b8d9061115d9086908490613e63565b60008061138f612fd5565b600101546001600160a01b031692915050565b6113ab826112d4565b6113b481613300565b6113be8383612f34565b50505050565b6000806113cf612fd5565b604051631e804e7760e11b8152600481018590529091503090633d009cee90602401602060405180830381865afa15801561140e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114329190613e71565b611440576000915050610a73565b600083815260088201602090815260408083206001600160a01b038816845290915290205460ff1615611477576000915050610a73565b600083815260058201602090815260408083206001600160a01b038816845282528083205486845260078501835281842054600386019093529220548215806114be575081155b156114d0576000945050505050610a73565b816114db8483613e93565b6114e59190613eaa565b979650505050505050565b6001600160a01b03811633146115195760405163334bd91960e11b815260040160405180910390fd5b611523828261330d565b505050565b600080611533612fd5565b6012015492915050565b60036000611549612ef6565b8054909150600160401b900460ff1680611570575080546001600160401b03808416911610155b1561158e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617600160401b1760ff60401b19168155604051600080516020613f85833981519152906115d2908490613d6a565b60405180910390a15050565b600080516020613f658339815191526115f78133612542565b806116085750611608600033612542565b6116245760405162461bcd60e51b8152600401610b8690613e06565b6001600160a01b038216611676576040516305519d6f60e51b815260206004820152601860248201527778416c6c6f636174696f6e566f74696e674164647265737360401b6044820152606401610b86565b6000611680612fd5565b6002810180546001600160a01b038681166001600160a01b03198316811790935560405193945016918291907f897acaec25783ce4cf8ff29c16715e089a40d285e2e5d6fcf567af00f471425990600090a350505050565b6000806116e3612fd5565b600181015460405163e52ef17f60e01b8152600481018690529192506001600160a01b03169063e52ef17f90602401602060405180830381865afa92505050801561174b575060408051601f3d908101601f1916820190925261174891810190613e71565b60015b6117585750600092915050565b80611767575060009392505050565b506000928352600781016020908152604080852054600a909301909152909220549190911015919050565b600080516020613f658339815191526117ab8133612542565b806117bc57506117bc600033612542565b6117d85760405162461bcd60e51b8152600401610b8690613e06565b6001600160a01b03821661181d576040516305519d6f60e51b815260206004820152600b60248201526a623374724164647265737360a81b6044820152606401610b86565b6000611827612fd5565b80546001600160a01b038581166001600160a01b03198316811784556040519394509116918291907fb3061a8192d243178b0fd92d1809bc86c3fa3b177c046cf74974c45c32cd25e090600090a350505050565b600080611886612fd5565b60028101546040516368377f6d60e11b8152600481018690529192506000916001600160a01b039091169063d06efeda906024015b602060405180830381865afa1580156118d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fc9190613ecc565b905081600f01548161190e9190613ee5565b4310949350505050565b611920613385565b6119298261342a565b6119338282613442565b5050565b600080611942612fd5565b6000848152600782016020908152604080832054600a8501909252909120549192509081811061197757506000949350505050565b60006119838284613dc4565b9050600084600c015485600b015461199b9190613ee5565b905060006119a98284613eaa565b98975050505050505050565b60006119bf6134f6565b50600080516020613fc583398151915290565b6000806119dd612fd5565b60009384526003016020525050604090205490565b6001600160a01b038116611a19576040516305519d6f60e51b8152600401610b8690613ef8565b6000611a23612fd5565b6001600160a01b0383166000908152600d8201602052604090205490915060ff1615611a645781604051634df9fbcf60e01b8152600401610b8691906139fe565b6001600160a01b0382166000818152600d830160209081526040808320805460ff19166001908117909155600e860180549182018155845291832090910180546001600160a01b03191684179055517fc3b80e866c8bfbccbded69771f510856bb44660d40a0b760d9f0781728543e4e9190a25050565b600080516020613f65833981519152611af48133612542565b80611b055750611b05600033612542565b611b215760405162461bcd60e51b8152600401610b8690613e06565b6001600160a01b038216611b6b576040516305519d6f60e51b815260206004820152601060248201526f656d697373696f6e734164647265737360801b6044820152606401610b86565b6000611b75612fd5565b6001810180546001600160a01b038681166001600160a01b03198316811790935560405193945016918291907fee0bb99897b3f409686cb6e56601a38cea38e9e00d9b28752b3be7b28ea8b0ad90600090a350505050565b6000611bd7612fd5565b9050611be284612dc8565b611bec5750505050565b826001600160a01b0316826001600160a01b031603611c865760405162461bcd60e51b815260206004820152605c602482015260008051602061400583398151915260448201527f75736572732063616e6e6f7420636c61696d20666f72207468656d73656c766560648201527b1cc8191d5c9a5b99c819585c9b1e481858d8d95cdcc81c195c9a5bd960221b608482015260a401610b86565b6001600160a01b0382166000908152600d8201602052604090205460ff16611d245760405162461bcd60e51b8152602060048201526057602482015260008051602061404583398151915260448201527f74206120726567697374657265642072656c6179657220647572696e6720636c606482015276185a5b4819585c9b1e481858d8d95cdcc81c195c9a5bd9604a1b608482015260a401610b86565b6113be838361353f565b60026000611549612ef6565b600080516020613f65833981519152611d538133612542565b80611d645750611d64600033612542565b611d805760405162461bcd60e51b8152600401610b8690613e06565b604080516000808252602082019092526115239185918591906126fc565b600080611da9612fd5565b600f015492915050565b600080611dbe612fd5565b6001600160a01b0393841660009081526013909101602052604090205490921692915050565b600080516020613f65833981519152611dfd8133612542565b80611e0e5750611e0e600033612542565b611e2a5760405162461bcd60e51b8152600401610b8690613e06565b600082118015611e3b575060328211155b611e8c5760405162461bcd60e51b815260206004820152602e602482015260008051602061402583398151915260448201526d3e203020616e64203c3d2035302560901b6064820152608401610b86565b6000611e96612fd5565b60108101805490859055604051919250907f27af4d4dc613005fec6b04e77e25da6e4959b86d30ed1919104596e9211198ee9061115d9086908490613e63565b600080516020613f65833981519152611eef8133612542565b80611f005750611f00600033612542565b611f1c5760405162461bcd60e51b8152600401610b8690613e06565b60008211611f665760405162461bcd60e51b8152602060048201526023602482015260008051602061402583398151915260448201526203e20360ec1b6064820152608401610b86565b6000611f70612fd5565b60128101805490859055604051919250907f3fbd83025056799b6fe5bc1a011ec202bfc22364cb9adb116bb3c71cf47990a69061115d9086908490613e63565b611fb86135d2565b6000611fc2612fd5565b600181015460405163e52ef17f60e01b8152600481018690529192506001600160a01b03169063e52ef17f90602401602060405180830381865afa15801561200e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120329190613e71565b6120525760405163652d87c560e01b815260048101849052602401610b86565b600083815260088201602090815260408083206001600160a01b038616845290915290205460ff161561209c57818360405163ae19b57760e01b8152600401610b86929190613f19565b60405163338111e760e01b8152600090309063338111e7906120c49086908890600401613f19565b602060405180830381865afa1580156120e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121059190613ecc565b90508060000361212c578284604051634c8463db60e01b8152600401610b86929190613f19565b600084815260088301602090815260408083206001600160a01b038088168552925291829020805460ff191660011790558354915163a9059cbb60e01b815291169063a9059cbb906121849086908590600401613f19565b6020604051808303816000875af11580156121a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c79190613e71565b6121e4576040516312171d8360e31b815260040160405180910390fd5b83836001600160a01b03167f930b7d519086654efd667eab36b878a04585f80f21637ea555a4317bdc5319738360405161222091815260200190565b60405180910390a35050611933613608565b600080516020613f6583398151915261224b8133612542565b8061225c575061225c600033612542565b6122785760405162461bcd60e51b8152600401610b8690613e06565b6001600160a01b03851661229f576040516305519d6f60e51b8152600401610b8690613ef8565b60006122a9612fd5565b90506000808460018111156122c0576122c0613f32565b146122cf5781600c01546122d5565b81600b01545b600086815260048401602090815260408083206001600160a01b038c168452909152812080549293509061230883613ded565b90915550506000858152600983016020526040812080549161232983613ded565b9091555050600085815260058301602090815260408083206001600160a01b038b16845290915281208054839290612362908490613ee5565b90915550506000858152600a8301602052604081208054839290612387908490613ee5565b9091555050600085815260048301602090815260408083206001600160a01b038b811680865291909352928190205490518893928a1692917f8ba2985939970b62349519dc163ea364f1724ad045a94aa004922836e951700d916123ed91908790613e63565b60405180910390a450505050505050565b600080612409612fd5565b6011015492915050565b60008061241e612fd5565b60009384526006016020525050604090205490565b600080516020613f6583398151915261244c8133612542565b8061245d575061245d600033612542565b6124795760405162461bcd60e51b8152600401610b8690613e06565b600082116124dd5760405162461bcd60e51b815260206004820152602b60248201527f52656c6179657252657761726473506f6f6c3a2044656e6f6d696e61746f722060448201526a06d757374206265203e20360ac1b6064820152608401610b86565b60006124e7612fd5565b60118101805490859055604051919250907f9e1a0a1bebf6adfae16d1d3786df0b65ff4af6055dbefbc87da9529a239b9bf79061115d9086908490613e63565b600080612532612fd5565b546001600160a01b031692915050565b60008061254d6132dc565b6000948552602090815260408086206001600160a01b03959095168652939052505090205460ff1690565b600080612583612fd5565b6000938452600501602090815260408085206001600160a01b039690961685529490525050205490565b606060006125b9612fd5565b600e810180546040805160208084028201810190925282815293945083018282801561260e57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116125f0575b505050505091505090565b6000612623612fd5565b90506001600160a01b0382161580159061265857506001600160a01b0382166000908152600d8201602052604090205460ff16155b15612678578160405163138cb58960e31b8152600401610b8691906139fe565b33600081815260138301602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f559697bf1386234c571f4d273988a5c0ddee76b32311191c33a667e4936f9ad691a35050565b6000806126dd612fd5565b6010015492915050565b6000806126f2612fd5565b600c015492915050565b600080516020613f658339815191526127158133612542565b806127265750612726600033612542565b6127425760405162461bcd60e51b8152600401610b8690613e06565b600061274c612fd5565b9050600084845161275d9190613e93565b9050600061276c876002613e93565b90506127788282613ee5565b6000898152600685016020526040902055600b8301546127989083613e93565b83600c015484600b01546127ac9190613ee5565b6127b69089613e93565b6127c09190613ee5565b600089815260078501602090815260408083209390935560148601815291902086516127ee9288019061388a565b5060008881526006840160209081526040808320546007870183529281902054600e87015482518c81529384019490945290820152606081019190915288907f0cfbd04f27dfdd7116e3d63de583a7cc8a337032164396bb6d7cac1deffbe4159060800160405180910390a25050505050505050565b60008061286f612fd5565b600b015492915050565b612882826112d4565b61288b81613300565b6113be838361330d565b6000806128a0612fd5565b6001600160a01b039093166000908152600d9093016020525050604090205460ff1690565b600080516020613f658339815191526128de8133612542565b806128ef57506128ef600033612542565b61290b5760405162461bcd60e51b8152600401610b8690613e06565b8160000361294a576040516305519d6f60e51b815260206004820152600b60248201526a18db185a5b55d95a59da1d60aa1b6044820152606401610b86565b6000612954612fd5565b600c8101805490859055604051919250907fac463d979acc1ce3fe80c999b5375a1630b37589687e2a327a1d659787696c6e9061115d9086908490613e63565b60008061299f612fd5565b60108101546011820154919250906000816129ba8488613e93565b6129c49190613eaa565b90506129d4818560120154613619565b9695505050505050565b6000806129e9612fd5565b6000938452600a016020525050604090205490565b600080516020613f65833981519152612a178133612542565b80612a285750612a28600033612542565b612a445760405162461bcd60e51b8152600401610b8690613e06565b82600003612a7e576040516305519d6f60e51b8152602060048201526006602482015265185b5bdd5b9d60d21b6044820152606401610b86565b6000612a88612fd5565b80546040516323b872dd60e01b8152336004820152306024820152604481018790529192506001600160a01b0316906323b872dd906064016020604051808303816000875af1158015612adf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b039190613e71565b612b20576040516312171d8360e31b815260040160405180910390fd5b600083815260038201602052604081208054869290612b40908490613ee5565b909155505060008381526003820160205260409081902054905184917fc47834cdb0191cfa2b90f6ae336198ff404f06226170200c57ab15ade0510ae691612b89918891613e63565b60405180910390a250505050565b6000612ba1612fd5565b9050612bac8461187b565b612bb65750505050565b826001600160a01b0316826001600160a01b031603612c4f5760405162461bcd60e51b815260206004820152605b602482015260008051602061400583398151915260448201527f75736572732063616e6e6f7420766f746520666f72207468656d73656c76657360648201527a08191d5c9a5b99c819585c9b1e481858d8d95cdcc81c195c9a5bd9602a1b608482015260a401610b86565b6001600160a01b0382166000908152600d8201602052604090205460ff16611d245760405162461bcd60e51b8152602060048201526051602482015260008051602061404583398151915260448201527f74206120726567697374657265642072656c6179657220647572696e672065616064820152701c9b1e481858d8d95cdcc81c195c9a5bd9607a1b608482015260a401610b86565b600080612cf2612fd5565b60009384526007016020525050604090205490565b600080516020613f65833981519152612d208133612542565b80612d315750612d31600033612542565b612d4d5760405162461bcd60e51b8152600401610b8690613e06565b81600003612d8a576040516305519d6f60e51b81526020600482015260096024820152681d5cd95c90dbdd5b9d60ba1b6044820152606401610b86565b6000612d94612fd5565b90506113be84612da5856002613e93565b83600c015484600b0154612db99190613ee5565b612dc39087613e93565b612ff9565b600080612dd3612fd5565b600281015460405163d3a368bd60e01b8152600481018690529192506000916001600160a01b039091169063d3a368bd906024016118bb565b600080516020613f65833981519152612e258133612542565b80612e365750612e36600033612542565b612e525760405162461bcd60e51b8152600401610b8690613e06565b6000612e5c612fd5565b600085815260158201602090815260408083206001600160a01b038816845290915290205490915060ff1615612ea95782846040516343cc46e160e11b8152600401610b86929190613f19565b600084815260158201602090815260408083206001600160a01b03871684529091529020805460ff19166001908117909155600b820154612eeb918691612ff9565b6113be8185856131a4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b612f22613631565b565b612f2c613631565b612f22613656565b600080612f3f6132dc565b9050612f4b8484612542565b612fcb576000848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055612f813390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610a73565b6000915050610a73565b7f33676f94b2c7694b38dc9f1f29c59bfbb522294615c1bff34717ad1fa892600090565b6000613003612fd5565b600085815260068201602052604090205490915083111561307a5760405162461bcd60e51b815260206004820152603d6024820152600080516020613fe583398151915260448201527f65206d6f726520616374696f6e73207468616e20617661696c61626c650000006064820152608401610b86565b60008481526007820160205260409020548211156130fd5760405162461bcd60e51b81526020600482015260466024820152600080516020613fe583398151915260448201527f65206d6f726520776569676874656420616374696f6e73207468616e20617661606482015265696c61626c6560d01b608482015260a401610b86565b60008481526006820160205260408120805485929061311d908490613dc4565b9091555050600084815260078201602052604081208054849290613142908490613dc4565b90915550506000848152600682016020908152604080832054600785018352928190205481518781529283019390935281019190915284907fdc97cd873d9883808c7cbb3b9fdd91ec6437deb4377e651606aff5aaa7be083790606001612b89565b600082815260178401602090815260408083206001600160a01b038516845290915290205460ff16156131d657505050565b600082815260158401602090815260408083206001600160a01b038516845290915290205460ff1661320757505050565b60008281526014840160205260408120905b815481101561329957600084815260168601602090815260408083206001600160a01b03871684529091528120835490919084908490811061325d5761325d613d98565b6000918252602080832090910154835282019290925260400190205460ff16613287575050505050565b8061329181613ded565b915050613219565b50600083815260178501602090815260408083206001600160a01b03861684529091529020805460ff19166001908117909155600c8501546113be918591612ff9565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680090565b61330a813361365e565b50565b6000806133186132dc565b90506133248484612542565b15612fcb576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610a73565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061340c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316613400600080516020613fc5833981519152546001600160a01b031690565b6001600160a01b031614155b15612f225760405163703e46dd60e11b815260040160405180910390fd5b600080516020613fa583398151915261193381613300565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561349c575060408051601f3d908101601f1916820190925261349991810190613ecc565b60015b6134bb5781604051634c9c8ce360e01b8152600401610b8691906139fe565b600080516020613fc583398151915281146134ec57604051632a87526960e21b815260048101829052602401610b86565b6115238383613689565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612f225760405163703e46dd60e11b815260040160405180910390fd5b6000613549612fd5565b6001600160a01b03808516600090815260138301602052604090205491925016801580159061359257506001600160a01b0381166000908152600d8301602052604090205460ff165b80156135b05750806001600160a01b0316836001600160a01b031614155b156113be578281604051636188505f60e11b8152600401610b86929190613d7e565b60006135dc6136df565b80549091506001190161360257604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60006136126136df565b6001905550565b6000818310613628578161362a565b825b9392505050565b613639613703565b612f2257604051631afcd79f60e31b815260040160405180910390fd5b613608613631565b6136688282612542565b61193357808260405163e2517d3f60e01b8152600401610b86929190613f19565b6136928261371d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156136d7576115238282613779565b6119336137ef565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b600061370d612ef6565b54600160401b900460ff16919050565b806001600160a01b03163b60000361374a5780604051634c9c8ce360e01b8152600401610b8691906139fe565b600080516020613fc583398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516137969190613f48565b600060405180830381855af49150503d80600081146137d1576040519150601f19603f3d011682016040523d82523d6000602084013e6137d6565b606091505b50915091506137e685838361380e565b95945050505050565b3415612f225760405163b398979f60e01b815260040160405180910390fd5b6060826138235761381e82613861565b61362a565b815115801561383a57506001600160a01b0384163b155b1561385a5783604051639996b31560e01b8152600401610b8691906139fe565b5092915050565b8051156138715780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b8280548282559060005260206000209081019282156138c5579160200282015b828111156138c55782518255916020019190600101906138aa565b506138d19291506138d5565b5090565b5b808211156138d157600081556001016138d6565b6000602082840312156138fc57600080fd5b81356001600160e01b03198116811461362a57600080fd5b80356001600160a01b038116811461392b57600080fd5b919050565b600080600080600060a0868803121561394857600080fd5b61395186613914565b945061395f60208701613914565b935061396d60408701613914565b925061397b60608701613914565b915061398960808701613914565b90509295509295909350565b6000602082840312156139a757600080fd5b61362a82613914565b6000602082840312156139c257600080fd5b5035919050565b6000806000606084860312156139de57600080fd5b833592506139ee60208501613914565b9150604084013590509250925092565b6001600160a01b0391909116815260200190565b60008060408385031215613a2557600080fd5b613a2e83613914565b946020939093013593505050565b60008060408385031215613a4f57600080fd5b82359150613a5f60208401613914565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613aa657613aa6613a68565b604052919050565b60008060408385031215613ac157600080fd5b613aca83613914565b91506020838101356001600160401b0380821115613ae757600080fd5b818601915086601f830112613afb57600080fd5b813581811115613b0d57613b0d613a68565b613b1f601f8201601f19168501613a7e565b91508082528784828501011115613b3557600080fd5b80848401858401376000848284010152508093505050509250929050565b60005b83811015613b6e578181015183820152602001613b56565b50506000910152565b6020815260008251806020840152613b96816040850160208701613b53565b601f01601f19169190910160400192915050565b600080600060608486031215613bbf57600080fd5b83359250613bcf60208501613914565b9150613bdd60408501613914565b90509250925092565b60008060408385031215613bf957600080fd5b50508035926020909101359150565b60008060008060808587031215613c1e57600080fd5b613c2785613914565b9350613c3560208601613914565b925060408501359150606085013560028110613c5057600080fd5b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015613c9c5783516001600160a01b031683529284019291840191600101613c77565b50909695505050505050565b60008060008060808587031215613cbe57600080fd5b8435935060208086013593506040860135925060608601356001600160401b0380821115613ceb57600080fd5b818801915088601f830112613cff57600080fd5b813581811115613d1157613d11613a68565b8060051b9150613d22848301613a7e565b818152918301840191848101908b841115613d3c57600080fd5b938501935b83851015613d5a57843582529385019390850190613d41565b989b979a50959850505050505050565b6001600160401b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610a7357610a73613dae565b634e487b7160e01b600052603160045260246000fd5b600060018201613dff57613dff613dae565b5060010190565b6020808252603d908201527f52656c6179657252657761726473506f6f6c3a2063616c6c6572206d7573742060408201527f686176652061646d696e206f7220706f6f6c2061646d696e20726f6c65000000606082015260800190565b918252602082015260400190565b600060208284031215613e8357600080fd5b8151801515811461362a57600080fd5b8082028115828204841417610a7357610a73613dae565b600082613ec757634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613ede57600080fd5b5051919050565b80820180821115610a7357610a73613dae565b6020808252600790820152663932b630bcb2b960c91b604082015260600190565b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052602160045260246000fd5b60008251613f5a818460208701613b53565b919091019291505056fe24e583e35a20f9ecfc1572e7cb66bcc18ad3cd1650ec40dbf6ad2290e553a9fac7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc52656c6179657252657761726473506f6f6c3a2063616e6e6f7420726564756352656c6179657252657761726473506f6f6c3a206175746f2d766f74696e672052656c6179657252657761726473506f6f6c3a20466565206d7573742062652052656c6179657252657761726473506f6f6c3a2063616c6c6572206973206e6fa2646970667358221220575ddfb5fb16554e6e74e2c09bb9c4089141ad5184a6fedbde00707441f1d44b64736f6c63430008140033",
  "deployedBytecode": "0x6080604052600436106102bd5760003560e01c806301ffc9a7146102c25780631459457a146102f757806314d9230714610319578063189ca3161461033957806318b9baa1146103595780631bc3a67314610379578063241f9e2b1461039b578063248a9ca3146103c957806324a697a3146103e957806325d3155e146104095780632f2ff15d1461041e578063338111e71461043e57806336568abe1461045e57806336a7c1341461047e57806338e454b1146104935780633bb18a76146104a85780633d009cee146104c857806347b0b33e146104e857806348c2bd78146105085780634f1ef286146105285780634f6981ee1461053b57806352d1902d1461055b57806354fd4d5014610570578063552164ee146105a357806356f1612f146105c357806357181609146105e35780635ae1cd14146106035780635cd8a76b146106235780635f72790a1461063857806362f2947814610658578063650e8a761461066d578063675d0f8d1461068d5780636bb07c73146106ad5780636c7b69cb146106cd5780636cf88e73146106ed5780637f5e98bd1461070d578063855302011461072257806389a96d35146107425780638d2340a01461076257806391d14854146107775780639858b78a14610797578063a217fddf146107b7578063ac4aa16b146107cc578063ad3cb1cc146107ee578063af54c53a1461081f578063b7fe075a1461083f578063b8f6dba714610854578063be9412df14610876578063bfaabf311461088b578063d428cffc146108ab578063d547741f146108c0578063d5684392146108e0578063d94290e514610900578063dc404a0e14610920578063df171b0c14610940578063e2bbb15814610960578063e5ed920b14610980578063e78168b5146109a0578063e7dfe672146109c0578063f5e57b39146109e0578063f71fdc1614610a00578063f72c0d8b14610a20575b600080fd5b3480156102ce57600080fd5b506102e26102dd3660046138ea565b610a42565b60405190151581526020015b60405180910390f35b34801561030357600080fd5b50610317610312366004613930565b610a79565b005b34801561032557600080fd5b50610317610334366004613995565b610e76565b34801561034557600080fd5b506103176103543660046139b0565b61108f565b34801561036557600080fd5b506103176103743660046139c9565b61116b565b34801561038557600080fd5b5061038e611281565b6040516102ee91906139fe565b3480156103a757600080fd5b506103bb6103b6366004613a12565b61129f565b6040519081526020016102ee565b3480156103d557600080fd5b506103bb6103e43660046139b0565b6112d4565b3480156103f557600080fd5b506103176104043660046139b0565b6112f4565b34801561041557600080fd5b5061038e611384565b34801561042a57600080fd5b50610317610439366004613a3c565b6113a2565b34801561044a57600080fd5b506103bb610459366004613a12565b6113c4565b34801561046a57600080fd5b50610317610479366004613a3c565b6114f0565b34801561048a57600080fd5b506103bb611528565b34801561049f57600080fd5b5061031761153d565b3480156104b457600080fd5b506103176104c3366004613995565b6115de565b3480156104d457600080fd5b506102e26104e33660046139b0565b6116d8565b3480156104f457600080fd5b50610317610503366004613995565b611792565b34801561051457600080fd5b506102e26105233660046139b0565b61187b565b610317610536366004613aae565b611918565b34801561054757600080fd5b506103bb6105563660046139b0565b611937565b34801561056757600080fd5b506103bb6119b5565b34801561057c57600080fd5b506040805180820190915260018152603360f81b60208201525b6040516102ee9190613b77565b3480156105af57600080fd5b506103bb6105be3660046139b0565b6119d2565b3480156105cf57600080fd5b506103176105de366004613995565b6119f2565b3480156105ef57600080fd5b506103176105fe366004613995565b611adb565b34801561060f57600080fd5b5061031761061e366004613baa565b611bcd565b34801561062f57600080fd5b50610317611d2e565b34801561064457600080fd5b50610317610653366004613be6565b611d3a565b34801561066457600080fd5b506103bb611d9e565b34801561067957600080fd5b5061038e610688366004613995565b611db3565b34801561069957600080fd5b506103176106a83660046139b0565b611de4565b3480156106b957600080fd5b506103176106c83660046139b0565b611ed6565b3480156106d957600080fd5b506103176106e8366004613a3c565b611fb0565b3480156106f957600080fd5b50610317610708366004613c08565b612232565b34801561071957600080fd5b506103bb6123fe565b34801561072e57600080fd5b506103bb61073d3660046139b0565b612413565b34801561074e57600080fd5b5061031761075d3660046139b0565b612433565b34801561076e57600080fd5b5061038e612527565b34801561078357600080fd5b506102e2610792366004613a3c565b612542565b3480156107a357600080fd5b506103bb6107b2366004613a12565b612578565b3480156107c357600080fd5b506103bb600081565b3480156107d857600080fd5b506107e16125ad565b6040516102ee9190613c5b565b3480156107fa57600080fd5b50610596604051806040016040528060058152602001640352e302e360dc1b81525081565b34801561082b57600080fd5b5061031761083a366004613995565b612619565b34801561084b57600080fd5b506103bb6126d2565b34801561086057600080fd5b506103bb600080516020613f6583398151915281565b34801561088257600080fd5b506103bb6126e7565b34801561089757600080fd5b506103176108a6366004613ca8565b6126fc565b3480156108b757600080fd5b506103bb612864565b3480156108cc57600080fd5b506103176108db366004613a3c565b612879565b3480156108ec57600080fd5b506102e26108fb366004613995565b612895565b34801561090c57600080fd5b5061031761091b3660046139b0565b6128c5565b34801561092c57600080fd5b506103bb61093b3660046139b0565b612994565b34801561094c57600080fd5b506103bb61095b3660046139b0565b6129de565b34801561096c57600080fd5b5061031761097b366004613be6565b6129fe565b34801561098c57600080fd5b5061031761099b366004613baa565b612b97565b3480156109ac57600080fd5b506103bb6109bb3660046139b0565b612ce7565b3480156109cc57600080fd5b506103176109db366004613be6565b612d07565b3480156109ec57600080fd5b506102e26109fb3660046139b0565b612dc8565b348015610a0c57600080fd5b50610317610a1b366004613a3c565b612e0c565b348015610a2c57600080fd5b506103bb600080516020613fa583398151915281565b60006001600160e01b03198216637965db0b60e01b1480610a7357506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000610a83612ef6565b805490915060ff600160401b82041615906001600160401b0316600081158015610aaa5750825b90506000826001600160401b03166001148015610ac65750303b155b905081158015610ad4575080155b15610af25760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b03191660011785558315610b1b57845460ff60401b1916600160401b1785555b6001600160a01b038a16610b8f5760405162461bcd60e51b815260206004820152603060248201527f52656c6179657252657761726473506f6f6c3a2061646d696e2063616e6e6f7460448201526f206265207a65726f206164647265737360801b60648201526084015b60405180910390fd5b6001600160a01b038916610c015760405162461bcd60e51b815260206004820152603360248201527f52656c6179657252657761726473506f6f6c3a2075706772616465722063616e6044820152726e6f74206265207a65726f206164647265737360681b6064820152608401610b86565b6001600160a01b038816610c6f5760405162461bcd60e51b815260206004820152602f60248201527f52656c6179657252657761726473506f6f6c3a20623374722063616e6e6f742060448201526e6265207a65726f206164647265737360881b6064820152608401610b86565b6001600160a01b038716610ce25760405162461bcd60e51b815260206004820152603460248201527f52656c6179657252657761726473506f6f6c3a20656d697373696f6e732063616044820152736e6e6f74206265207a65726f206164647265737360601b6064820152608401610b86565b6001600160a01b038616610d5d5760405162461bcd60e51b815260206004820152603c60248201527f52656c6179657252657761726473506f6f6c3a2078416c6c6f636174696f6e5660448201527b6f74696e672063616e6e6f74206265207a65726f206164647265737360201b6064820152608401610b86565b610d65612f1a565b610d6d612f24565b610d75612f1a565b610d8060008b612f34565b50610d99600080516020613fa58339815191528a612f34565b50610db2600080516020613f658339815191528b612f34565b506000610dbd612fd5565b80546001600160a01b03808c166001600160a01b0319928316178355600180840180548d8416908516179055600284018054928c1692909316919091179091556003600b830155600c820155600a60108201556064601182015568056bc75e2d63100000601282015562069780600f90910155508315610e6a57845460ff60401b19168555604051600080516020613f8583398151915290610e6190600190613d6a565b60405180910390a15b50505050505050505050565b6001600160a01b0381163314801590610ea45750610ea2600080516020613f6583398151915233612542565b155b8015610eb85750610eb6600033612542565b155b15610eda573381604051630147b5b160e31b8152600401610b86929190613d7e565b6000610ee4612fd5565b6001600160a01b0383166000908152600d8201602052604090205490915060ff16610f24578160405163138cb58960e31b8152600401610b8691906139fe565b6001600160a01b0382166000908152600d820160205260408120805460ff191690555b600e82015481101561105657826001600160a01b031682600e018281548110610f7257610f72613d98565b6000918252602090912001546001600160a01b03160361104457600e82018054610f9e90600190613dc4565b81548110610fae57610fae613d98565b600091825260209091200154600e830180546001600160a01b039092169183908110610fdc57610fdc613d98565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600e0180548061101d5761101d613dd7565b600082815260209020810160001990810180546001600160a01b0319169055019055611056565b8061104e81613ded565b915050610f47565b506040516001600160a01b038316907f490a66cc56c789979052c7052fc0c10a6c4627d8e6165caec80db97a4c38352190600090a25050565b600080516020613f658339815191526110a88133612542565b806110b957506110b9600033612542565b6110d55760405162461bcd60e51b8152600401610b8690613e06565b81600003611113576040516305519d6f60e51b815260206004820152600a6024820152691d9bdd1955d95a59da1d60b21b6044820152606401610b86565b600061111d612fd5565b600b8101805490859055604051919250907fc6d810f6c3aa465110416db0d540c72fcfe818503d1580fd90df38a482f81af89061115d9086908490613e63565b60405180910390a150505050565b600080516020613f658339815191526111848133612542565b806111955750611195600033612542565b6111b15760405162461bcd60e51b8152600401610b8690613e06565b60006111bb612fd5565b600086815260168201602090815260408083206001600160a01b0389168452825280832087845290915290205490915060ff1615611225576040516313aa2f7760e11b81526001600160a01b03851660048201526024810186905260448101849052606401610b86565b600085815260168201602090815260408083206001600160a01b038816845282528083208684529091529020805460ff19166001908117909155600b82015461126f918791612ff9565b61127a8186866131a4565b5050505050565b60008061128c612fd5565b600201546001600160a01b031692915050565b6000806112aa612fd5565b6000938452600401602090815260408085206001600160a01b039690961685529490525050205490565b6000806112df6132dc565b60009384526020525050604090206001015490565b600080516020613f6583398151915261130d8133612542565b8061131e575061131e600033612542565b61133a5760405162461bcd60e51b8152600401610b8690613e06565b6000611344612fd5565b600f8101805490859055604051919250907f9f49ab705704ba5579e12282116057bb42856ad21fc913b1786bf1effc722b8d9061115d9086908490613e63565b60008061138f612fd5565b600101546001600160a01b031692915050565b6113ab826112d4565b6113b481613300565b6113be8383612f34565b50505050565b6000806113cf612fd5565b604051631e804e7760e11b8152600481018590529091503090633d009cee90602401602060405180830381865afa15801561140e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114329190613e71565b611440576000915050610a73565b600083815260088201602090815260408083206001600160a01b038816845290915290205460ff1615611477576000915050610a73565b600083815260058201602090815260408083206001600160a01b038816845282528083205486845260078501835281842054600386019093529220548215806114be575081155b156114d0576000945050505050610a73565b816114db8483613e93565b6114e59190613eaa565b979650505050505050565b6001600160a01b03811633146115195760405163334bd91960e11b815260040160405180910390fd5b611523828261330d565b505050565b600080611533612fd5565b6012015492915050565b60036000611549612ef6565b8054909150600160401b900460ff1680611570575080546001600160401b03808416911610155b1561158e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617600160401b1760ff60401b19168155604051600080516020613f85833981519152906115d2908490613d6a565b60405180910390a15050565b600080516020613f658339815191526115f78133612542565b806116085750611608600033612542565b6116245760405162461bcd60e51b8152600401610b8690613e06565b6001600160a01b038216611676576040516305519d6f60e51b815260206004820152601860248201527778416c6c6f636174696f6e566f74696e674164647265737360401b6044820152606401610b86565b6000611680612fd5565b6002810180546001600160a01b038681166001600160a01b03198316811790935560405193945016918291907f897acaec25783ce4cf8ff29c16715e089a40d285e2e5d6fcf567af00f471425990600090a350505050565b6000806116e3612fd5565b600181015460405163e52ef17f60e01b8152600481018690529192506001600160a01b03169063e52ef17f90602401602060405180830381865afa92505050801561174b575060408051601f3d908101601f1916820190925261174891810190613e71565b60015b6117585750600092915050565b80611767575060009392505050565b506000928352600781016020908152604080852054600a909301909152909220549190911015919050565b600080516020613f658339815191526117ab8133612542565b806117bc57506117bc600033612542565b6117d85760405162461bcd60e51b8152600401610b8690613e06565b6001600160a01b03821661181d576040516305519d6f60e51b815260206004820152600b60248201526a623374724164647265737360a81b6044820152606401610b86565b6000611827612fd5565b80546001600160a01b038581166001600160a01b03198316811784556040519394509116918291907fb3061a8192d243178b0fd92d1809bc86c3fa3b177c046cf74974c45c32cd25e090600090a350505050565b600080611886612fd5565b60028101546040516368377f6d60e11b8152600481018690529192506000916001600160a01b039091169063d06efeda906024015b602060405180830381865afa1580156118d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fc9190613ecc565b905081600f01548161190e9190613ee5565b4310949350505050565b611920613385565b6119298261342a565b6119338282613442565b5050565b600080611942612fd5565b6000848152600782016020908152604080832054600a8501909252909120549192509081811061197757506000949350505050565b60006119838284613dc4565b9050600084600c015485600b015461199b9190613ee5565b905060006119a98284613eaa565b98975050505050505050565b60006119bf6134f6565b50600080516020613fc583398151915290565b6000806119dd612fd5565b60009384526003016020525050604090205490565b6001600160a01b038116611a19576040516305519d6f60e51b8152600401610b8690613ef8565b6000611a23612fd5565b6001600160a01b0383166000908152600d8201602052604090205490915060ff1615611a645781604051634df9fbcf60e01b8152600401610b8691906139fe565b6001600160a01b0382166000818152600d830160209081526040808320805460ff19166001908117909155600e860180549182018155845291832090910180546001600160a01b03191684179055517fc3b80e866c8bfbccbded69771f510856bb44660d40a0b760d9f0781728543e4e9190a25050565b600080516020613f65833981519152611af48133612542565b80611b055750611b05600033612542565b611b215760405162461bcd60e51b8152600401610b8690613e06565b6001600160a01b038216611b6b576040516305519d6f60e51b815260206004820152601060248201526f656d697373696f6e734164647265737360801b6044820152606401610b86565b6000611b75612fd5565b6001810180546001600160a01b038681166001600160a01b03198316811790935560405193945016918291907fee0bb99897b3f409686cb6e56601a38cea38e9e00d9b28752b3be7b28ea8b0ad90600090a350505050565b6000611bd7612fd5565b9050611be284612dc8565b611bec5750505050565b826001600160a01b0316826001600160a01b031603611c865760405162461bcd60e51b815260206004820152605c602482015260008051602061400583398151915260448201527f75736572732063616e6e6f7420636c61696d20666f72207468656d73656c766560648201527b1cc8191d5c9a5b99c819585c9b1e481858d8d95cdcc81c195c9a5bd960221b608482015260a401610b86565b6001600160a01b0382166000908152600d8201602052604090205460ff16611d245760405162461bcd60e51b8152602060048201526057602482015260008051602061404583398151915260448201527f74206120726567697374657265642072656c6179657220647572696e6720636c606482015276185a5b4819585c9b1e481858d8d95cdcc81c195c9a5bd9604a1b608482015260a401610b86565b6113be838361353f565b60026000611549612ef6565b600080516020613f65833981519152611d538133612542565b80611d645750611d64600033612542565b611d805760405162461bcd60e51b8152600401610b8690613e06565b604080516000808252602082019092526115239185918591906126fc565b600080611da9612fd5565b600f015492915050565b600080611dbe612fd5565b6001600160a01b0393841660009081526013909101602052604090205490921692915050565b600080516020613f65833981519152611dfd8133612542565b80611e0e5750611e0e600033612542565b611e2a5760405162461bcd60e51b8152600401610b8690613e06565b600082118015611e3b575060328211155b611e8c5760405162461bcd60e51b815260206004820152602e602482015260008051602061402583398151915260448201526d3e203020616e64203c3d2035302560901b6064820152608401610b86565b6000611e96612fd5565b60108101805490859055604051919250907f27af4d4dc613005fec6b04e77e25da6e4959b86d30ed1919104596e9211198ee9061115d9086908490613e63565b600080516020613f65833981519152611eef8133612542565b80611f005750611f00600033612542565b611f1c5760405162461bcd60e51b8152600401610b8690613e06565b60008211611f665760405162461bcd60e51b8152602060048201526023602482015260008051602061402583398151915260448201526203e20360ec1b6064820152608401610b86565b6000611f70612fd5565b60128101805490859055604051919250907f3fbd83025056799b6fe5bc1a011ec202bfc22364cb9adb116bb3c71cf47990a69061115d9086908490613e63565b611fb86135d2565b6000611fc2612fd5565b600181015460405163e52ef17f60e01b8152600481018690529192506001600160a01b03169063e52ef17f90602401602060405180830381865afa15801561200e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120329190613e71565b6120525760405163652d87c560e01b815260048101849052602401610b86565b600083815260088201602090815260408083206001600160a01b038616845290915290205460ff161561209c57818360405163ae19b57760e01b8152600401610b86929190613f19565b60405163338111e760e01b8152600090309063338111e7906120c49086908890600401613f19565b602060405180830381865afa1580156120e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121059190613ecc565b90508060000361212c578284604051634c8463db60e01b8152600401610b86929190613f19565b600084815260088301602090815260408083206001600160a01b038088168552925291829020805460ff191660011790558354915163a9059cbb60e01b815291169063a9059cbb906121849086908590600401613f19565b6020604051808303816000875af11580156121a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c79190613e71565b6121e4576040516312171d8360e31b815260040160405180910390fd5b83836001600160a01b03167f930b7d519086654efd667eab36b878a04585f80f21637ea555a4317bdc5319738360405161222091815260200190565b60405180910390a35050611933613608565b600080516020613f6583398151915261224b8133612542565b8061225c575061225c600033612542565b6122785760405162461bcd60e51b8152600401610b8690613e06565b6001600160a01b03851661229f576040516305519d6f60e51b8152600401610b8690613ef8565b60006122a9612fd5565b90506000808460018111156122c0576122c0613f32565b146122cf5781600c01546122d5565b81600b01545b600086815260048401602090815260408083206001600160a01b038c168452909152812080549293509061230883613ded565b90915550506000858152600983016020526040812080549161232983613ded565b9091555050600085815260058301602090815260408083206001600160a01b038b16845290915281208054839290612362908490613ee5565b90915550506000858152600a8301602052604081208054839290612387908490613ee5565b9091555050600085815260048301602090815260408083206001600160a01b038b811680865291909352928190205490518893928a1692917f8ba2985939970b62349519dc163ea364f1724ad045a94aa004922836e951700d916123ed91908790613e63565b60405180910390a450505050505050565b600080612409612fd5565b6011015492915050565b60008061241e612fd5565b60009384526006016020525050604090205490565b600080516020613f6583398151915261244c8133612542565b8061245d575061245d600033612542565b6124795760405162461bcd60e51b8152600401610b8690613e06565b600082116124dd5760405162461bcd60e51b815260206004820152602b60248201527f52656c6179657252657761726473506f6f6c3a2044656e6f6d696e61746f722060448201526a06d757374206265203e20360ac1b6064820152608401610b86565b60006124e7612fd5565b60118101805490859055604051919250907f9e1a0a1bebf6adfae16d1d3786df0b65ff4af6055dbefbc87da9529a239b9bf79061115d9086908490613e63565b600080612532612fd5565b546001600160a01b031692915050565b60008061254d6132dc565b6000948552602090815260408086206001600160a01b03959095168652939052505090205460ff1690565b600080612583612fd5565b6000938452600501602090815260408085206001600160a01b039690961685529490525050205490565b606060006125b9612fd5565b600e810180546040805160208084028201810190925282815293945083018282801561260e57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116125f0575b505050505091505090565b6000612623612fd5565b90506001600160a01b0382161580159061265857506001600160a01b0382166000908152600d8201602052604090205460ff16155b15612678578160405163138cb58960e31b8152600401610b8691906139fe565b33600081815260138301602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519092917f559697bf1386234c571f4d273988a5c0ddee76b32311191c33a667e4936f9ad691a35050565b6000806126dd612fd5565b6010015492915050565b6000806126f2612fd5565b600c015492915050565b600080516020613f658339815191526127158133612542565b806127265750612726600033612542565b6127425760405162461bcd60e51b8152600401610b8690613e06565b600061274c612fd5565b9050600084845161275d9190613e93565b9050600061276c876002613e93565b90506127788282613ee5565b6000898152600685016020526040902055600b8301546127989083613e93565b83600c015484600b01546127ac9190613ee5565b6127b69089613e93565b6127c09190613ee5565b600089815260078501602090815260408083209390935560148601815291902086516127ee9288019061388a565b5060008881526006840160209081526040808320546007870183529281902054600e87015482518c81529384019490945290820152606081019190915288907f0cfbd04f27dfdd7116e3d63de583a7cc8a337032164396bb6d7cac1deffbe4159060800160405180910390a25050505050505050565b60008061286f612fd5565b600b015492915050565b612882826112d4565b61288b81613300565b6113be838361330d565b6000806128a0612fd5565b6001600160a01b039093166000908152600d9093016020525050604090205460ff1690565b600080516020613f658339815191526128de8133612542565b806128ef57506128ef600033612542565b61290b5760405162461bcd60e51b8152600401610b8690613e06565b8160000361294a576040516305519d6f60e51b815260206004820152600b60248201526a18db185a5b55d95a59da1d60aa1b6044820152606401610b86565b6000612954612fd5565b600c8101805490859055604051919250907fac463d979acc1ce3fe80c999b5375a1630b37589687e2a327a1d659787696c6e9061115d9086908490613e63565b60008061299f612fd5565b60108101546011820154919250906000816129ba8488613e93565b6129c49190613eaa565b90506129d4818560120154613619565b9695505050505050565b6000806129e9612fd5565b6000938452600a016020525050604090205490565b600080516020613f65833981519152612a178133612542565b80612a285750612a28600033612542565b612a445760405162461bcd60e51b8152600401610b8690613e06565b82600003612a7e576040516305519d6f60e51b8152602060048201526006602482015265185b5bdd5b9d60d21b6044820152606401610b86565b6000612a88612fd5565b80546040516323b872dd60e01b8152336004820152306024820152604481018790529192506001600160a01b0316906323b872dd906064016020604051808303816000875af1158015612adf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b039190613e71565b612b20576040516312171d8360e31b815260040160405180910390fd5b600083815260038201602052604081208054869290612b40908490613ee5565b909155505060008381526003820160205260409081902054905184917fc47834cdb0191cfa2b90f6ae336198ff404f06226170200c57ab15ade0510ae691612b89918891613e63565b60405180910390a250505050565b6000612ba1612fd5565b9050612bac8461187b565b612bb65750505050565b826001600160a01b0316826001600160a01b031603612c4f5760405162461bcd60e51b815260206004820152605b602482015260008051602061400583398151915260448201527f75736572732063616e6e6f7420766f746520666f72207468656d73656c76657360648201527a08191d5c9a5b99c819585c9b1e481858d8d95cdcc81c195c9a5bd9602a1b608482015260a401610b86565b6001600160a01b0382166000908152600d8201602052604090205460ff16611d245760405162461bcd60e51b8152602060048201526051602482015260008051602061404583398151915260448201527f74206120726567697374657265642072656c6179657220647572696e672065616064820152701c9b1e481858d8d95cdcc81c195c9a5bd9607a1b608482015260a401610b86565b600080612cf2612fd5565b60009384526007016020525050604090205490565b600080516020613f65833981519152612d208133612542565b80612d315750612d31600033612542565b612d4d5760405162461bcd60e51b8152600401610b8690613e06565b81600003612d8a576040516305519d6f60e51b81526020600482015260096024820152681d5cd95c90dbdd5b9d60ba1b6044820152606401610b86565b6000612d94612fd5565b90506113be84612da5856002613e93565b83600c015484600b0154612db99190613ee5565b612dc39087613e93565b612ff9565b600080612dd3612fd5565b600281015460405163d3a368bd60e01b8152600481018690529192506000916001600160a01b039091169063d3a368bd906024016118bb565b600080516020613f65833981519152612e258133612542565b80612e365750612e36600033612542565b612e525760405162461bcd60e51b8152600401610b8690613e06565b6000612e5c612fd5565b600085815260158201602090815260408083206001600160a01b038816845290915290205490915060ff1615612ea95782846040516343cc46e160e11b8152600401610b86929190613f19565b600084815260158201602090815260408083206001600160a01b03871684529091529020805460ff19166001908117909155600b820154612eeb918691612ff9565b6113be8185856131a4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b612f22613631565b565b612f2c613631565b612f22613656565b600080612f3f6132dc565b9050612f4b8484612542565b612fcb576000848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055612f813390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610a73565b6000915050610a73565b7f33676f94b2c7694b38dc9f1f29c59bfbb522294615c1bff34717ad1fa892600090565b6000613003612fd5565b600085815260068201602052604090205490915083111561307a5760405162461bcd60e51b815260206004820152603d6024820152600080516020613fe583398151915260448201527f65206d6f726520616374696f6e73207468616e20617661696c61626c650000006064820152608401610b86565b60008481526007820160205260409020548211156130fd5760405162461bcd60e51b81526020600482015260466024820152600080516020613fe583398151915260448201527f65206d6f726520776569676874656420616374696f6e73207468616e20617661606482015265696c61626c6560d01b608482015260a401610b86565b60008481526006820160205260408120805485929061311d908490613dc4565b9091555050600084815260078201602052604081208054849290613142908490613dc4565b90915550506000848152600682016020908152604080832054600785018352928190205481518781529283019390935281019190915284907fdc97cd873d9883808c7cbb3b9fdd91ec6437deb4377e651606aff5aaa7be083790606001612b89565b600082815260178401602090815260408083206001600160a01b038516845290915290205460ff16156131d657505050565b600082815260158401602090815260408083206001600160a01b038516845290915290205460ff1661320757505050565b60008281526014840160205260408120905b815481101561329957600084815260168601602090815260408083206001600160a01b03871684529091528120835490919084908490811061325d5761325d613d98565b6000918252602080832090910154835282019290925260400190205460ff16613287575050505050565b8061329181613ded565b915050613219565b50600083815260178501602090815260408083206001600160a01b03861684529091529020805460ff19166001908117909155600c8501546113be918591612ff9565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680090565b61330a813361365e565b50565b6000806133186132dc565b90506133248484612542565b15612fcb576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610a73565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061340c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316613400600080516020613fc5833981519152546001600160a01b031690565b6001600160a01b031614155b15612f225760405163703e46dd60e11b815260040160405180910390fd5b600080516020613fa583398151915261193381613300565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561349c575060408051601f3d908101601f1916820190925261349991810190613ecc565b60015b6134bb5781604051634c9c8ce360e01b8152600401610b8691906139fe565b600080516020613fc583398151915281146134ec57604051632a87526960e21b815260048101829052602401610b86565b6115238383613689565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612f225760405163703e46dd60e11b815260040160405180910390fd5b6000613549612fd5565b6001600160a01b03808516600090815260138301602052604090205491925016801580159061359257506001600160a01b0381166000908152600d8301602052604090205460ff165b80156135b05750806001600160a01b0316836001600160a01b031614155b156113be578281604051636188505f60e11b8152600401610b86929190613d7e565b60006135dc6136df565b80549091506001190161360257604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60006136126136df565b6001905550565b6000818310613628578161362a565b825b9392505050565b613639613703565b612f2257604051631afcd79f60e31b815260040160405180910390fd5b613608613631565b6136688282612542565b61193357808260405163e2517d3f60e01b8152600401610b86929190613f19565b6136928261371d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156136d7576115238282613779565b6119336137ef565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b600061370d612ef6565b54600160401b900460ff16919050565b806001600160a01b03163b60000361374a5780604051634c9c8ce360e01b8152600401610b8691906139fe565b600080516020613fc583398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516137969190613f48565b600060405180830381855af49150503d80600081146137d1576040519150601f19603f3d011682016040523d82523d6000602084013e6137d6565b606091505b50915091506137e685838361380e565b95945050505050565b3415612f225760405163b398979f60e01b815260040160405180910390fd5b6060826138235761381e82613861565b61362a565b815115801561383a57506001600160a01b0384163b155b1561385a5783604051639996b31560e01b8152600401610b8691906139fe565b5092915050565b8051156138715780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b8280548282559060005260206000209081019282156138c5579160200282015b828111156138c55782518255916020019190600101906138aa565b506138d19291506138d5565b5090565b5b808211156138d157600081556001016138d6565b6000602082840312156138fc57600080fd5b81356001600160e01b03198116811461362a57600080fd5b80356001600160a01b038116811461392b57600080fd5b919050565b600080600080600060a0868803121561394857600080fd5b61395186613914565b945061395f60208701613914565b935061396d60408701613914565b925061397b60608701613914565b915061398960808701613914565b90509295509295909350565b6000602082840312156139a757600080fd5b61362a82613914565b6000602082840312156139c257600080fd5b5035919050565b6000806000606084860312156139de57600080fd5b833592506139ee60208501613914565b9150604084013590509250925092565b6001600160a01b0391909116815260200190565b60008060408385031215613a2557600080fd5b613a2e83613914565b946020939093013593505050565b60008060408385031215613a4f57600080fd5b82359150613a5f60208401613914565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613aa657613aa6613a68565b604052919050565b60008060408385031215613ac157600080fd5b613aca83613914565b91506020838101356001600160401b0380821115613ae757600080fd5b818601915086601f830112613afb57600080fd5b813581811115613b0d57613b0d613a68565b613b1f601f8201601f19168501613a7e565b91508082528784828501011115613b3557600080fd5b80848401858401376000848284010152508093505050509250929050565b60005b83811015613b6e578181015183820152602001613b56565b50506000910152565b6020815260008251806020840152613b96816040850160208701613b53565b601f01601f19169190910160400192915050565b600080600060608486031215613bbf57600080fd5b83359250613bcf60208501613914565b9150613bdd60408501613914565b90509250925092565b60008060408385031215613bf957600080fd5b50508035926020909101359150565b60008060008060808587031215613c1e57600080fd5b613c2785613914565b9350613c3560208601613914565b925060408501359150606085013560028110613c5057600080fd5b939692955090935050565b6020808252825182820181905260009190848201906040850190845b81811015613c9c5783516001600160a01b031683529284019291840191600101613c77565b50909695505050505050565b60008060008060808587031215613cbe57600080fd5b8435935060208086013593506040860135925060608601356001600160401b0380821115613ceb57600080fd5b818801915088601f830112613cff57600080fd5b813581811115613d1157613d11613a68565b8060051b9150613d22848301613a7e565b818152918301840191848101908b841115613d3c57600080fd5b938501935b83851015613d5a57843582529385019390850190613d41565b989b979a50959850505050505050565b6001600160401b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610a7357610a73613dae565b634e487b7160e01b600052603160045260246000fd5b600060018201613dff57613dff613dae565b5060010190565b6020808252603d908201527f52656c6179657252657761726473506f6f6c3a2063616c6c6572206d7573742060408201527f686176652061646d696e206f7220706f6f6c2061646d696e20726f6c65000000606082015260800190565b918252602082015260400190565b600060208284031215613e8357600080fd5b8151801515811461362a57600080fd5b8082028115828204841417610a7357610a73613dae565b600082613ec757634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613ede57600080fd5b5051919050565b80820180821115610a7357610a73613dae565b6020808252600790820152663932b630bcb2b960c91b604082015260600190565b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052602160045260246000fd5b60008251613f5a818460208701613b53565b919091019291505056fe24e583e35a20f9ecfc1572e7cb66bcc18ad3cd1650ec40dbf6ad2290e553a9fac7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc52656c6179657252657761726473506f6f6c3a2063616e6e6f7420726564756352656c6179657252657761726473506f6f6c3a206175746f2d766f74696e672052656c6179657252657761726473506f6f6c3a20466565206d7573742062652052656c6179657252657761726473506f6f6c3a2063616c6c6572206973206e6fa2646970667358221220575ddfb5fb16554e6e74e2c09bb9c4089141ad5184a6fedbde00707441f1d44b64736f6c63430008140033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
