{
    "_format": "hh-sol-artifact-1",
    "contractName": "DefaultExchangeRatePolicy",
    "sourceName": "contracts/OperatorTokenomics/OperatorPolicies/DefaultExchangeRatePolicy.sol",
    "abi": [
        {
            "inputs": [],
            "name": "AccessDenied",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "AccessDeniedDATATokenOnly",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "AccessDeniedNodesOnly",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "AccessDeniedOperatorOnly",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "AccessDeniedStreamrSponsorshipOnly",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "operatorTokenBalanceWei",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "minimumDelegationWei",
                    "type": "uint256"
                }
            ],
            "name": "DelegationBelowMinimum",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "DidNotReceiveReward",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "FirstEmptyQueueThenStake",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "newOperatorsCutFraction",
                    "type": "uint256"
                }
            ],
            "name": "InvalidOperatorsCut",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "module",
                    "type": "address"
                },
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "ModuleCallError",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "ModuleGetError",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "NoEarnings",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "NotMyStakedSponsorship",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "operatorBalanceWei",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "minimumSelfDelegationWei",
                    "type": "uint256"
                }
            ],
            "name": "SelfDelegationTooLow",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "StakedInSponsorships",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "ZeroUndelegation",
            "type": "error"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "Approval",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "balanceWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "totalSupplyWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "dataValueWithoutEarnings",
                    "type": "uint256"
                }
            ],
            "name": "BalanceUpdate",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountDataWei",
                    "type": "uint256"
                }
            ],
            "name": "Delegated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "nodeAddress",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "jsonData",
                    "type": "string"
                }
            ],
            "name": "Heartbeat",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint8",
                    "name": "version",
                    "type": "uint8"
                }
            ],
            "name": "Initialized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "valueDecreaseWei",
                    "type": "uint256"
                }
            ],
            "name": "Loss",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "metadataJsonString",
                    "type": "string"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operatorAddress",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "operatorsCutFraction",
                    "type": "uint256"
                }
            ],
            "name": "MetadataUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address[]",
                    "name": "nodes",
                    "type": "address[]"
                }
            ],
            "name": "NodesSet",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "slashingAmountDataWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "slashingAmountInOperatorTokensWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "actuallySlashedInOperatorTokensWei",
                    "type": "uint256"
                }
            ],
            "name": "OperatorSlashed",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "totalStakeInSponsorshipsWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "dataTokenBalanceWei",
                    "type": "uint256"
                }
            ],
            "name": "OperatorValueUpdate",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "valueIncreaseWei",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "operatorsCutDataWei",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "protocolFeeDataWei",
                    "type": "uint256"
                }
            ],
            "name": "Profit",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "queueIndex",
                    "type": "uint256"
                }
            ],
            "name": "QueueUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "queueIndex",
                    "type": "uint256"
                }
            ],
            "name": "QueuedDataPayout",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "targetOperator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "voteStartTimestamp",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "voteEndTimestamp",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "flagMetadata",
                    "type": "string"
                }
            ],
            "name": "ReviewRequest",
            "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": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "stakedWei",
                    "type": "uint256"
                }
            ],
            "name": "StakeUpdate",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                }
            ],
            "name": "Staked",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "Transfer",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountDataWei",
                    "type": "uint256"
                }
            ],
            "name": "Undelegated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                }
            ],
            "name": "Unstaked",
            "type": "event"
        },
        {
            "stateMutability": "nonpayable",
            "type": "fallback"
        },
        {
            "inputs": [],
            "name": "CONTROLLER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "DEFAULT_ADMIN_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "OWNER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                }
            ],
            "name": "allowance",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "approve",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                }
            ],
            "name": "balanceInData",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "amountDataWei",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "balanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "dataWei",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "alreadyTransferredWei",
                    "type": "uint256"
                }
            ],
            "name": "dataToOperatorToken",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "operatorTokenWei",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "decimals",
            "outputs": [
                {
                    "internalType": "uint8",
                    "name": "",
                    "type": "uint8"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "subtractedValue",
                    "type": "uint256"
                }
            ],
            "name": "decreaseAllowance",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                }
            ],
            "name": "delegate",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "delegationPolicy",
            "outputs": [
                {
                    "internalType": "contract IDelegationPolicy",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "exchangeRatePolicy",
            "outputs": [
                {
                    "internalType": "contract IExchangeRatePolicy",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "targetOperator",
                    "type": "address"
                },
                {
                    "internalType": "string",
                    "name": "flagMetadata",
                    "type": "string"
                }
            ],
            "name": "flag",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "maxQueuePayoutIterations",
                    "type": "uint256"
                }
            ],
            "name": "forceUnstake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getNodeAddresses",
            "outputs": [
                {
                    "internalType": "address[]",
                    "name": "",
                    "type": "address[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                }
            ],
            "name": "getRoleAdmin",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getSponsorshipsAndEarnings",
            "outputs": [
                {
                    "internalType": "address[]",
                    "name": "addresses",
                    "type": "address[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "earnings",
                    "type": "uint256[]"
                },
                {
                    "internalType": "uint256",
                    "name": "maxAllowedEarnings",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getStreamMetadata",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "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": "string",
                    "name": "jsonData",
                    "type": "string"
                }
            ],
            "name": "heartbeat",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "addedValue",
                    "type": "uint256"
                }
            ],
            "name": "increaseAllowance",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "indexOfSponsorships",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "tokenAddress",
                    "type": "address"
                },
                {
                    "internalType": "contract StreamrConfig",
                    "name": "config",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "ownerAddress",
                    "type": "address"
                },
                {
                    "internalType": "string",
                    "name": "operatorTokenName",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "operatorMetadataJson",
                    "type": "string"
                },
                {
                    "internalType": "uint256",
                    "name": "operatorsCut",
                    "type": "uint256"
                },
                {
                    "internalType": "address[3]",
                    "name": "modules",
                    "type": "address[3]"
                }
            ],
            "name": "initialize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "latestDelegationTimestamp",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "metadata",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "name",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "nodeIndex",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "nodeModule",
            "outputs": [
                {
                    "internalType": "contract INodeModule",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "nodes",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amountSlashedDataWei",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "receivedPayoutWei",
                    "type": "uint256"
                }
            ],
            "name": "onKick",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "targetOperator",
                    "type": "address"
                }
            ],
            "name": "onReviewRequest",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amountSlashed",
                    "type": "uint256"
                }
            ],
            "name": "onSlash",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "onTokenTransfer",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "operatorTokenWei",
                    "type": "uint256"
                }
            ],
            "name": "operatorTokenToData",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "dataWei",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "dataWei",
                    "type": "uint256"
                }
            ],
            "name": "operatorTokenToDataInverse",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "operatorTokenWei",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "operatorsCutFraction",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "payOutFirstInQueue",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "payoutComplete",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "maxIterations",
                    "type": "uint256"
                }
            ],
            "name": "payOutQueue",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "queueCurrentIndex",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "queueEntryAt",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "timestamp",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "queueIsEmpty",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "queueLastIndex",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "queueModule",
            "outputs": [
                {
                    "internalType": "contract IQueueModule",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "targetStakeWei",
                    "type": "uint256"
                }
            ],
            "name": "reduceStakeTo",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "targetStakeWei",
                    "type": "uint256"
                }
            ],
            "name": "reduceStakeWithoutQueue",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "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": "contract IDelegationPolicy",
                    "name": "policy",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "param",
                    "type": "uint256"
                }
            ],
            "name": "setDelegationPolicy",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IExchangeRatePolicy",
                    "name": "policy",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "param",
                    "type": "uint256"
                }
            ],
            "name": "setExchangeRatePolicy",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address[]",
                    "name": "newNodes",
                    "type": "address[]"
                }
            ],
            "name": "setNodeAddresses",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "setParam",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IUndelegationPolicy",
                    "name": "policy",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "param",
                    "type": "uint256"
                }
            ],
            "name": "setUndelegationPolicy",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "slashedIn",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "sponsorships",
            "outputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                }
            ],
            "name": "stake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "stakeModule",
            "outputs": [
                {
                    "internalType": "contract IStakeModule",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "stakedInto",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "streamId",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "streamRegistry",
            "outputs": [
                {
                    "internalType": "contract IStreamRegistryV4",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "streamrConfig",
            "outputs": [
                {
                    "internalType": "contract StreamrConfig",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "interfaceId",
                    "type": "bytes4"
                }
            ],
            "name": "supportsInterface",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "symbol",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "token",
            "outputs": [
                {
                    "internalType": "contract IERC677",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalSlashedInSponsorshipsWei",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalStakedIntoSponsorshipsWei",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalSupply",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "transfer",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "transferFrom",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Operator",
                    "name": "other",
                    "type": "address"
                },
                {
                    "internalType": "contract Sponsorship[]",
                    "name": "sponsorshipAddresses",
                    "type": "address[]"
                }
            ],
            "name": "triggerAnotherOperatorWithdraw",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amountDataWei",
                    "type": "uint256"
                }
            ],
            "name": "undelegate",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "undelegationPolicy",
            "outputs": [
                {
                    "internalType": "contract IUndelegationPolicy",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "undelegationQueue",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "delegator",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amountWei",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "timestamp",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct Operator.UndelegationQueueEntry[]",
                    "name": "queue",
                    "type": "tuple[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                }
            ],
            "name": "unstake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                }
            ],
            "name": "unstakeWithoutQueue",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "metadataJsonString",
                    "type": "string"
                }
            ],
            "name": "updateMetadata",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address[]",
                    "name": "addNodes",
                    "type": "address[]"
                },
                {
                    "internalType": "address[]",
                    "name": "removeNodes",
                    "type": "address[]"
                }
            ],
            "name": "updateNodeAddresses",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "newOperatorsCutFraction",
                    "type": "uint256"
                }
            ],
            "name": "updateOperatorsCutFraction",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "metadataJsonString",
                    "type": "string"
                }
            ],
            "name": "updateStreamMetadata",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "valueWithoutEarnings",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "version",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "targetOperator",
                    "type": "address"
                },
                {
                    "internalType": "bytes32",
                    "name": "voteData",
                    "type": "bytes32"
                }
            ],
            "name": "voteOnFlag",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship[]",
                    "name": "sponsorshipAddresses",
                    "type": "address[]"
                }
            ],
            "name": "withdrawEarningsFromSponsorships",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship[]",
                    "name": "sponsorshipAddresses",
                    "type": "address[]"
                }
            ],
            "name": "withdrawEarningsFromSponsorshipsWithoutQueue",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "withdrawnEarningsDataWei",
                    "type": "uint256"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "bytecode": "0x608060405234801561001057600080fd5b50614996806100206000396000f3fe608060405234801561001057600080fd5b50600436106104c25760003560e01c8063870ffde211610278578063ae4470241161015c578063dd62ed3e116100ce578063f2888dbb11610092578063f2888dbb14610c27578063f3aea65014610c3a578063f4350c2414610c4d578063f4408e4b14610c60578063fc0c546a14610c68578063ffff59a614610c7b576104c2565b8063dd62ed3e14610bc6578063e364215314610bd9578063e58378bb14610bec578063e8e658b414610c01578063e926d55c14610c14576104c2565b8063bc9b30c811610120578063bc9b30c814610b52578063bed6ff0914610b65578063c229918e14610b78578063d1b6861114610b80578063d547741f14610b93578063d673de4614610ba6576104c2565b8063ae44702414610a9b578063b07f3c4714610aae578063b72cd7a814610b0c578063ba2bfc0a14610b1f578063bc697ec514610b3f576104c2565b8063a457c2d7116101f5578063a9059cbb116101b9578063a9059cbb14610a3e578063a93a019f14610a51578063a99fa31a14610a64578063aa5703ad14610a77578063aa77fd5514610a7f578063adc9772e14610a88576104c2565b8063a457c2d7146109df578063a48dca18146109f2578063a4c0ed3614610a05578063a63ed2c814610a18578063a74194af14610a2b576104c2565b80639413462c1161023c5780639413462c146109a057806395d89b41146109a957806398833130146109b15780639fa6dd35146109c4578063a217fddf146109d7576104c2565b8063870ffde21461094b57806387396e3b146109545780638da5cb5b14610967578063918b5be11461097a57806391d148541461098d576104c2565b806336568abe116103aa5780635dff6e9f1161031c5780636f398f98116102e05780636f398f98146108ca57806370a08231146108dd578063799e2590146108f05780637bf713b6146109035780637d429385146109165780637e82fd6f14610936576104c2565b80635dff6e9f146108725780635e61bb871461088557806363d1ecf21461089157806364f1abb7146108a45780636c68c0e1146108b7576104c2565b80634a45d2e61161036e5780634a45d2e61461080b5780634b095c031461081c57806350d3ba9e1461082f57806354fd4d5014610842578063558a15681461084957806358fc614a14610852576104c2565b806336568abe146107aa578063392f37e9146107bd57806339509351146107c5578063430457e1146107d85780634a178fe4146107f8576104c2565b80631c53c28011610443578063248a9ca311610407578063248a9ca31461072657806325c33549146107495780632e9498241461075c5780632ebd89d1146107715780632f2ff15d14610788578063313ce5671461079b576104c2565b80631c53c280146106ba57806320fed94f146106da57806321194bd7146106ed57806321a769071461070057806323b872dd14610713576104c2565b80630fd6ff491161048a5780630fd6ff491461066f57806311606010146106845780631401f70b1461068c57806314797daa1461069f57806318160ddd146106b2576104c2565b806301ffc9a7146105e257806304cbab8b1461061b57806306fdde0314610632578063092c5b3b14610647578063095ea7b31461065c575b60003660603330146104e757604051634ca8886760e01b815260040160405180910390fd5b81600084826104f7601482613ba8565b61050392859290613bbf565b61050c91613be9565b60601c90506000858186610521602087613ba8565b9261052e93929190613bbf565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051949550938493506001600160a01b038716925061058091508590613c4a565b600060405180830381855af49150503d80600081146105bb576040519150601f19603f3d011682016040523d82523d6000602084013e6105c0565b606091505b5091509150816105d257805181602001fd5b8051975060200195505050505050f35b6106066105f0366004613c66565b6001600160e01b03191663310f7c0360e11b1490565b60405190151581526020015b60405180910390f35b61062460c95481565b604051908152602001610612565b61063a610c8e565b6040516106129190613cbc565b6106246000805160206148e183398151915281565b61060661066a366004613ce4565b610d20565b61068261067d366004613d58565b610d3a565b005b610606610db0565b61068261069a366004613d99565b610dfb565b6106826106ad366004613dfa565b610e96565b609954610624565b6106cd6106c8366004613e65565b610f03565b6040516106129190613e7e565b6106826106e8366004613e92565b610f2d565b6106826106fb366004613d58565b610fce565b60d0546106cd906001600160a01b031681565b610606610721366004613eb4565b61106e565b610624610734366004613e65565b60009081526065602052604090206001015490565b610682610757366004613ef5565b611092565b6107646110f8565b6040516106129190613f6e565b610779611159565b60405161061293929190613f81565b610682610796366004613fe1565b611388565b60405160128152602001610612565b6106826107b8366004613fe1565b6113ad565b61063a61142c565b6106066107d3366004613ce4565b6114ba565b6106246107e6366004613d99565b60d96020526000908152604090205481565b6106826108063660046140fc565b6114dc565b610682610819366004613e65565b50565b61068261082a366004613ce4565b611570565b61062461083d3660046141e5565b6115d2565b6003610624565b61062460d45481565b610624610860366004613d99565b60d66020526000908152604090205481565b610682610880366004613e65565b611601565b60db5460dc5414610606565b60ce546106cd906001600160a01b031681565b6106826108b2366004613d99565b61163f565b6106826108c5366004613e65565b61190b565b6106246108d8366004613e65565b61193d565b6106246108eb366004613d99565b611976565b60cb546106cd906001600160a01b031681565b610682610911366004613e65565b611991565b610624610924366004613d99565b60d76020526000908152604090205481565b61093e611b1c565b6040516106129190614219565b61062460ca5481565b610682610962366004613e65565b611c3b565b60d2546106cd906001600160a01b031681565b610682610988366004613d58565b611c67565b61060661099b366004613fe1565b611cf9565b61062460db5481565b61063a611d24565b60d1546106cd906001600160a01b031681565b6106826109d2366004613e65565b611d33565b610624600081565b6106066109ed366004613ce4565b611dd1565b60cf546106cd906001600160a01b031681565b610682610a1336600461427b565b611e4c565b610624610a26366004613d99565b611ed3565b6106cd610a39366004613e65565b611f57565b610606610a4c366004613ce4565b611f67565b610682610a5f366004613ce4565b611f75565b610682610a723660046142ca565b61208a565b61063a6122f0565b61062460dc5481565b610682610a96366004613ce4565b61236c565b610624610aa9366004613e65565b6123ce565b610ae7610abc366004613e65565b60da602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b039094168452602084019290925290820152606001610612565b60cc546106cd906001600160a01b031681565b610624610b2d366004613d99565b60d86020526000908152604090205481565b610682610b4d366004613ce4565b612417565b60cd546106cd906001600160a01b031681565b610682610b73366004613eb4565b612460565b6106246124bd565b610682610b8e366004613ce4565b61254b565b610682610ba1366004613fe1565b612594565b610624610bb4366004613d99565b60de6020526000908152604090205481565b610624610bd43660046143ca565b6125b9565b60e0546106cd906001600160a01b031681565b6106246000805160206148c183398151915281565b610682610c0f3660046141e5565b6125e4565b610624610c22366004613e92565b6128ab565b610682610c35366004613d99565b6128f9565b610682610c48366004613ce4565b612937565b610682610c5b3660046143f8565b612980565b61063a6129ad565b60d3546106cd906001600160a01b031681565b610682610c89366004613ce4565b6129ba565b6060609a8054610c9d90614447565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc990614447565b8015610d165780601f10610ceb57610100808354040283529160200191610d16565b820191906000526020600020905b815481529060010190602001808311610cf957829003601f168201915b5050505050905090565b600033610d2e818585612a03565b60019150505b92915050565b33600090815260de60205260408120549003610d6957604051634f1cec5f60e11b815260040160405180910390fd5b336001600160a01b03167f7432bbcdcf6009b3131a7b65f7af1fdbf79c27db5c115c1cdbcf9210298bc5f48383604051610da49291906144aa565b60405180910390a25050565b60cf546040805160048152602481019091526020810180516001600160e01b031663726884c360e11b179052600091610df4916001600160a01b0390911690612b27565b1515919050565b610e136000805160206148e183398151915233611cf9565b610e3057604051631a76708960e21b815260040160405180910390fd5b60d054604051610e92916001600160a01b03169063af9ee81d60e01b90610e5b908590602401613e7e565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612b27565b5050565b610eae6000805160206148e183398151915233611cf9565b610ecb57604051631a76708960e21b815260040160405180910390fd5b60ce54604051610efc916001600160a01b031690635e2cb23f60e11b90610e5b9088908890889088906024016144fc565b5050505050565b60dd8181548110610f1357600080fd5b6000918252602090912001546001600160a01b0316905081565b33600081815260d660205260408120549003610f5c5760405163012d886f60e51b815260040160405180910390fd5b8215610f9b578160ca6000828254610f749190614523565b90915550610f83905083612bc8565b8160ca6000828254610f959190613ba8565b90915550505b60d054604051610fc8916001600160a01b031690631644f38560e31b90610e5b908590879060240161453b565b50505050565b610fe66000805160206148e183398151915233611cf9565b61100357604051631a76708960e21b815260040160405180910390fd5b60e0546040516342617fe760e01b81526001600160a01b03909116906342617fe7906110389060df90869086906004016145f3565b600060405180830381600087803b15801561105257600080fd5b505af1158015611066573d6000803e3d6000fd5b505050505050565b60003361107c858285612cda565b611087858585612d4e565b506001949350505050565b6110aa6000805160206148e183398151915233611cf9565b6110c757604051631a76708960e21b815260040160405180910390fd5b60ce546040516110f3916001600160a01b03169062b08f2560e61b90610e5b9086908690602401614623565b505050565b606060dd805480602002602001604051908101604052809291908181526020018280548015610d1657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611132575050505050905090565b606080600060d5805490506001600160401b0381111561117b5761117b614011565b6040519080825280602002602001820160405280156111a4578160200160208202803683370190505b5060d5549093506001600160401b038111156111c2576111c2614011565b6040519080825280602002602001820160405280156111eb578160200160208202803683370190505b50915060005b60d5548110156112ef57600060d5828154811061121057611210614637565b9060005260206000200160009054906101000a90046001600160a01b031690508085838151811061124357611243614637565b6001600160a01b0392831660209182029290920101526040516304c6e70160e21b81529082169063131b9c049061127e903090600401613e7e565b602060405180830381865afa15801561129b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bf919061464d565b8483815181106112d1576112d1614637565b602090810291909101015250806112e781614666565b9150506111f1565b5060d154604080516315d94f8f60e31b81529051670de0b6b3a7640000926001600160a01b03169163aeca7c789160048083019260209291908290030181865afa158015611341573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611365919061464d565b61136d6124bd565b611377919061467f565b611381919061469e565b9050909192565b6000828152606560205260409020600101546113a381612f69565b6110f38383612f73565b6001600160a01b03811633146114225760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610e928282612ff9565b60e1805461143990614447565b80601f016020809104026020016040519081016040528092919081815260200182805461146590614447565b80156114b25780601f10611487576101008083540402835291602001916114b2565b820191906000526020600020905b81548152906001019060200180831161149557829003601f168201915b505050505081565b600033610d2e8185856114cd83836125b9565b6114d79190614523565b612a03565b33600090815260de6020526040812054900361150b57604051634f1cec5f60e11b815260040160405180910390fd5b604051633f08e8e360e11b81526001600160a01b03841690637e11d1c69061153990859085906004016146c0565b600060405180830381600087803b15801561155357600080fd5b505af1158015611567573d6000803e3d6000fd5b50505050505050565b6115886000805160206148e183398151915233611cf9565b6115a557604051631a76708960e21b815260040160405180910390fd5b60d0546040516110f3916001600160a01b03169063d572a9cd60e01b90610e5b908690869060240161453b565b60d054604051600091610d34916001600160a01b039091169062d8aad560e51b90610e5b908690602401613f6e565b6116196000805160206148e183398151915233611cf9565b61163657604051631a76708960e21b815260040160405180910390fd5b61081981613060565b60d160009054906101000a90046001600160a01b03166001600160a01b0316635efca0a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b691906146e4565b6001600160a01b0316634703e001336040518263ffffffff1660e01b81526004016116e19190613e7e565b602060405180830381865afa1580156116fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611722919061464d565b600003611742576040516359e9fbbf60e11b815260040160405180910390fd5b60d154604080516358c6e66160e11b8152905133926000926001600160a01b039091169163b18dccc2916004808201926020929091908290030181865afa158015611791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b5919061464d565b6117bf9042614523565b9050600060d160009054906101000a90046001600160a01b03166001600160a01b031663cb85fe356040518163ffffffff1660e01b8152600401602060405180830381865afa158015611816573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183a919061464d565b6118449083614523565b9050836001600160a01b0316836001600160a01b03167fe89a7bfa490a911e4a2981566a4710a51b0057109370b86784fe0764904d036f8484876001600160a01b0316637db188078a6040518263ffffffff1660e01b81526004016118a99190613e7e565b600060405180830381865afa1580156118c6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118ee9190810190614701565b6040516118fd93929190614777565b60405180910390a350505050565b60cf5460405160248101839052336044820152610e92916001600160a01b031690630744132360e21b90606401610e5b565b600061194860995490565b60000361195757506000919050565b6099546119626124bd565b61196c908461467f565b610d34919061469e565b6001600160a01b031660009081526097602052604090205490565b33600081815260d6602052604081205490036119c05760405163012d886f60e51b815260040160405180910390fd5b6119c982612bc8565b6001600160a01b038116600090815260d86020526040812080548492906119f1908490614523565b925050819055508160ca6000828254611a0a9190614523565b90915550506001600160a01b038116600081815260d8602090815260408083205460d7909252909120547f89dbe872fd688c751e8c5df10849155d89d1467fd56ddb92b0d0024cda2ccd7891611a5f91613ba8565b60405190815260200160405180910390a260008051602061494183398151915260ca5460c954611a8f9190613ba8565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190611abf903090600401613e7e565b602060405180830381865afa158015611adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b00919061464d565b6040805192835260208301919091520160405180910390a15050565b6060600060dc5460db54611b309190613ba8565b9050806001600160401b03811115611b4a57611b4a614011565b604051908082528060200260200182016040528015611ba857816020015b611b95604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b815260200190600190039081611b685790505b50915060005b81811015611c365760da60008260dc54611bc89190614523565b81526020808201929092526040908101600020815160608101835281546001600160a01b0316815260018201549381019390935260020154908201528351849083908110611c1857611c18614637565b60200260200101819052508080611c2e90614666565b915050611bae565b505090565b60cf5460405160248101839052610e92916001600160a01b03169063211cccd160e21b90604401610e5b565b611c7f6000805160206148e183398151915233611cf9565b611c9c57604051631a76708960e21b815260040160405180910390fd5b611ca860e18383613a85565b5060d45460d2546040516001600160a01b03909116907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d090611ced90869086906144aa565b60405180910390a35050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060609b8054610c9d90614447565b60d3546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018490526064016020604051808303816000875af1158015611d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbc9190614796565b50611dc733826130fd565b6108196000611c3b565b60003381611ddf82866125b9565b905083811015611e3f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611419565b6110878286868403612a03565b60d3546001600160a01b03163314611e775760405163118d9d7160e11b815260040160405180910390fd5b6001600160a01b038416600090815260d66020526040902054849015611e9d5750610fc8565b846014839003611eb25750823560601c611ebf565b6020839003611ebf575082355b611ec981866130fd565b6110666000611c3b565b6000611ede82611976565b600003611eed57506000919050565b610d34630de731f360e31b611f0184611976565b60cc5460405160248101929092526001600160a01b0316604482015260640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261336c565b60d58181548110610f1357600080fd5b600033610d2e818585612d4e565b60db5460dc54148061201b575060d160009054906101000a90046001600160a01b03166001600160a01b031663e2e8bcd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff9919061464d565b60dc54600090815260da60205260409020600201546120189190614523565b42105b15612055576120386000805160206148e183398151915233611cf9565b61205557604051631a76708960e21b815260040160405180910390fd5b60d054604051612080916001600160a01b031690633d16f42d60e01b90610e5b908690602401613e7e565b50610e9281611c3b565b600054610100900460ff16158080156120aa5750600054600160ff909116105b806120c45750303b1580156120c4575060005460ff166001145b6121275760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611419565b6000805460ff19166001179055801561214a576000805461ff0019166101001790555b60d180546001600160a01b0319166001600160a01b03891617905561216d613402565b6121856000805160206148c18339815191528761342b565b61219d6000805160206148e18339815191528761342b565b6121c36000805160206148e18339815191526000805160206148c1833981519152613435565b60d380546001600160a01b03199081166001600160a01b038b811691909117909255835160ce80548316918416919091179055602084015160cf80548316918416919091179055604084015160d08054831691841691909117905560d280549091169188169190911790556122388580613480565b61224360003361342b565b83516122569060e1906020870190613b09565b5061226083613060565b60ce546040805160048152602481019091526020810180516001600160e01b031663377f1ecb60e01b17905261229f916001600160a01b031690612b27565b5080156122e6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b60e0546040516331ca7de960e11b81526060916001600160a01b031690636394fbd2906123229060df906004016147b8565b600060405180830381865afa15801561233f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123679190810190614701565b905090565b6123846000805160206148e183398151915233611cf9565b6123a157604051631a76708960e21b815260040160405180910390fd5b60d0546040516110f3916001600160a01b03169063aa0d97b360e01b90610e5b908690869060240161453b565b6000806123d96124bd565b9050806001826123e860995490565b6123f2908761467f565b6123fc9190614523565b6124069190613ba8565b612410919061469e565b9392505050565b600061242281612f69565b60cc80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610fc89190632522e97360e11b90604401610e5b565b33600090815260de6020526040812054900361248f57604051634f1cec5f60e11b815260040160405180910390fd5b60405163296e0f3960e21b81526001600160a01b0384169063a5b83ce490611539908590859060040161453b565b60ca5460c95460d3546040516370a0823160e01b815260009392916001600160a01b0316906370a08231906124f6903090600401613e7e565b602060405180830381865afa158015612513573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612537919061464d565b6125419190614523565b6123679190613ba8565b6125636000805160206148e183398151915233611cf9565b61258057604051631a76708960e21b815260040160405180910390fd5b61258a8282611570565b610e926000611c3b565b6000828152606560205260409020600101546125af81612f69565b6110f38383612ff9565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b60006125ee6124bd565b905060006125fb836115d2565b9050336126166000805160206148e183398151915282611cf9565b15801561263957506001600160a01b038116600090815260de6020526040902054155b156128a1576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b031663aeca7c786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561269c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c0919061464d565b6126ca908661467f565b6126d4919061469e565b90508083111561289f576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b0316636c29b3b76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561273c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612760919061464d565b61276a908661467f565b612774919061469e565b905061277f81612bc8565b60d35460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906127b1908690859060040161453b565b6020604051808303816000875af11580156127d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f49190614796565b5060008051602061494183398151915260ca5460c9546128149190613ba8565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190612844903090600401613e7e565b602060405180830381865afa158015612861573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612885919061464d565b6040805192835260208301919091520160405180910390a1505b505b610fc86000611c3b565b60006128b660995490565b6000036128c4575081610d34565b60006128ce6124bd565b90506128da8382613ba8565b6099546128e7908661467f565b6128f1919061469e565b949350505050565b6129116000805160206148e183398151915233611cf9565b61292e57604051631a76708960e21b815260040160405180910390fd5b611dc781610dfb565b600061294281612f69565b60cb80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610fc89190632522e97360e11b90604401610e5b565b60cf546040516110f3916001600160a01b031690637a227c9f60e01b90610e5b90869086906024016147cb565b60df805461143990614447565b60006129c581612f69565b60cd80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610fc89190632522e97360e11b90604401610e5b565b6001600160a01b038316612a655760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611419565b6001600160a01b038216612ac65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611419565b6001600160a01b0383811660008181526098602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806000846001600160a01b031684604051612b449190613c4a565b600060405180830381855af49150503d8060008114612b7f576040519150601f19603f3d011682016040523d82523d6000602084013e612b84565b606091505b509150915081612bbc578051600003612bb457848460405163918623b760e01b81526004016114199291906146c0565b805181602001fd5b60200151949350505050565b60d254600090612be0906001600160a01b0316611976565b905080600003612bee575050565b60cc5460405160248101849052600091612c1f916001600160a01b0390911690632b911c0960e21b90604401610e5b565b90506000612c2d83836134b1565b60d254909150612c46906001600160a01b0316826134c7565b60408051858152602081018490529081018290527ff22a8c26ad08bc6548cdae55fec4c309e15e9d2290ad7e1f9186fc20189e7a159060600160405180910390a160d2546001600160a01b0316600080516020614901833981519152612cab82611976565b609954612cb66124bd565b6040805193845260208401929092529082015260600160405180910390a250505050565b6000612ce684846125b9565b90506000198114610fc85781811015612d415760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611419565b610fc88484848403612a03565b6000612d5983611976565b159050612d678484846135e9565b60d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa158015612db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd5919061464d565b905080612de186611976565b108015612df657506000612df486611976565b115b15612e2857612e0485611976565b6040516324c6940760e01b8152600481019190915260248101829052604401611419565b80612e3285611976565b1015612e4157612e0484611976565b8115612e855760cb546001600160a01b031615612e855760cb54604051612e83916001600160a01b03169063217fb33b60e01b90610e5b908890602401613e7e565b505b60cd546001600160a01b031615612ecc5760cd546040516001600160a01b03878116602483015260006044830152612eca921690633608993560e21b90606401610e5b565b505b846001600160a01b0316600080516020614901833981519152612eee87611976565b609954612ef96124bd565b6040805193845260208401929092529082015260600160405180910390a2836001600160a01b0316600080516020614901833981519152612f3986611976565b609954612f446124bd565b6040805193845260208401929092529082015260600160405180910390a25050505050565b6108198133613782565b612f7d8282611cf9565b610e925760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612fb53390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6130038282611cf9565b15610e925760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60c95415613081576040516301039eff60e71b815260040160405180910390fd5b670de0b6b3a76400008111156130ad57604051631e6f460160e31b815260048101829052602401611419565b60d481905560d25460405182916001600160a01b0316907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d0906130f29060e1906147b8565b60405180910390a350565b60cc546040516024810183905260448101839052600091613135916001600160a01b0390911690633a49b55760e21b90606401610e5b565b905061314183826137db565b60d2546001600160a01b0384811691161461321f5760d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa1580156131a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c4919061464d565b9050806131d085611976565b10156131df57612e0484611976565b60cb546001600160a01b03161561321d5760cb5460405161321b916001600160a01b03169063217fb33b60e01b90610e5b908890602401613e7e565b505b505b6001600160a01b038316600081815260d9602052604090819020429055517f83b3f5ce88736f0128f880f5cac19836da52ea5c5ca7704c7b38f3b06fffd7ab9061326c9085815260200190565b60405180910390a2826001600160a01b031660008051602061490183398151915261329685611976565b6099546132a16124bd565b6040805193845260208401929092529082015260600160405180910390a260008051602061494183398151915260ca5460c9546132de9190613ba8565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a082319061330e903090600401613e7e565b602060405180830381865afa15801561332b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334f919061464d565b6040805192835260208301919091520160405180910390a1505050565b6000806000306001600160a01b0316846040516133899190613c4a565b600060405180830381855afa9150503d80600081146133c4576040519150601f19603f3d011682016040523d82523d6000602084013e6133c9565b606091505b5091509150816133f7578051600003612bb4578360405163029801d760e41b81526004016114199190613cbc565b602001519392505050565b600054610100900460ff166134295760405162461bcd60e51b8152600401611419906147ef565b565b610e928282612f73565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600054610100900460ff166134a75760405162461bcd60e51b8152600401611419906147ef565b610e92828261388a565b60008183106134c05781612410565b5090919050565b6001600160a01b0382166135275760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401611419565b6001600160a01b0382166000908152609760205260409020548181101561359b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401611419565b6001600160a01b0383166000818152609760209081526040808320868603905560998054879003905551858152919291600080516020614921833981519152910160405180910390a3505050565b6001600160a01b03831661364d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611419565b6001600160a01b0382166136af5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401611419565b6001600160a01b038316600090815260976020526040902054818110156137275760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611419565b6001600160a01b038085166000818152609760205260408082208686039055928616808252908390208054860190559151600080516020614921833981519152906137759086815260200190565b60405180910390a3610fc8565b61378c8282611cf9565b610e9257613799816138d8565b6137a48360206138ea565b6040516020016137b592919061483a565b60408051601f198184030181529082905262461bcd60e51b825261141991600401613cbc565b6001600160a01b0382166138315760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401611419565b80609960008282546138439190614523565b90915550506001600160a01b038216600081815260976020908152604080832080548601905551848152600080516020614921833981519152910160405180910390a35050565b600054610100900460ff166138b15760405162461bcd60e51b8152600401611419906147ef565b81516138c490609a906020850190613b09565b5080516110f390609b906020840190613b09565b6060610d346001600160a01b03831660145b606060006138f983600261467f565b613904906002614523565b6001600160401b0381111561391b5761391b614011565b6040519080825280601f01601f191660200182016040528015613945576020820181803683370190505b509050600360fc1b8160008151811061396057613960614637565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061398f5761398f614637565b60200101906001600160f81b031916908160001a90535060006139b384600261467f565b6139be906001614523565b90505b6001811115613a36576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106139f2576139f2614637565b1a60f81b828281518110613a0857613a08614637565b60200101906001600160f81b031916908160001a90535060049490941c93613a2f816148a9565b90506139c1565b5083156124105760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401611419565b828054613a9190614447565b90600052602060002090601f016020900481019282613ab35760008555613af9565b82601f10613acc5782800160ff19823516178555613af9565b82800160010185558215613af9579182015b82811115613af9578235825591602001919060010190613ade565b50613b05929150613b7d565b5090565b828054613b1590614447565b90600052602060002090601f016020900481019282613b375760008555613af9565b82601f10613b5057805160ff1916838001178555613af9565b82800160010185558215613af9579182015b82811115613af9578251825591602001919060010190613b62565b5b80821115613b055760008155600101613b7e565b634e487b7160e01b600052601160045260246000fd5b600082821015613bba57613bba613b92565b500390565b60008085851115613bcf57600080fd5b83861115613bdc57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015613c165780818660140360031b1b83161692505b505092915050565b60005b83811015613c39578181015183820152602001613c21565b83811115610fc85750506000910152565b60008251613c5c818460208701613c1e565b9190910192915050565b600060208284031215613c7857600080fd5b81356001600160e01b03198116811461241057600080fd5b60008151808452613ca8816020860160208601613c1e565b601f01601f19169290920160200192915050565b6020815260006124106020830184613c90565b6001600160a01b038116811461081957600080fd5b60008060408385031215613cf757600080fd5b8235613d0281613ccf565b946020939093013593505050565b60008083601f840112613d2257600080fd5b5081356001600160401b03811115613d3957600080fd5b602083019150836020828501011115613d5157600080fd5b9250929050565b60008060208385031215613d6b57600080fd5b82356001600160401b03811115613d8157600080fd5b613d8d85828601613d10565b90969095509350505050565b600060208284031215613dab57600080fd5b813561241081613ccf565b60008083601f840112613dc857600080fd5b5081356001600160401b03811115613ddf57600080fd5b6020830191508360208260051b8501011115613d5157600080fd5b60008060008060408587031215613e1057600080fd5b84356001600160401b0380821115613e2757600080fd5b613e3388838901613db6565b90965094506020870135915080821115613e4c57600080fd5b50613e5987828801613db6565b95989497509550505050565b600060208284031215613e7757600080fd5b5035919050565b6001600160a01b0391909116815260200190565b60008060408385031215613ea557600080fd5b50508035926020909101359150565b600080600060608486031215613ec957600080fd5b8335613ed481613ccf565b92506020840135613ee481613ccf565b929592945050506040919091013590565b60008060208385031215613f0857600080fd5b82356001600160401b03811115613f1e57600080fd5b613d8d85828601613db6565b600081518084526020808501945080840160005b83811015613f635781516001600160a01b031687529582019590820190600101613f3e565b509495945050505050565b6020815260006124106020830184613f2a565b606081526000613f946060830186613f2a565b82810360208481019190915285518083528682019282019060005b81811015613fcb57845183529383019391830191600101613faf565b5050809350505050826040830152949350505050565b60008060408385031215613ff457600080fd5b82359150602083013561400681613ccf565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561404957614049614011565b60405290565b604051601f8201601f191681016001600160401b038111828210171561407757614077614011565b604052919050565b60006001600160401b0382111561409857614098614011565b50601f01601f191660200190565b600082601f8301126140b757600080fd5b81356140ca6140c58261407f565b61404f565b8181528460208386010111156140df57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561411157600080fd5b833561411c81613ccf565b9250602084013561412c81613ccf565b915060408401356001600160401b0381111561414757600080fd5b614153868287016140a6565b9150509250925092565b600082601f83011261416e57600080fd5b813560206001600160401b0382111561418957614189614011565b8160051b61419882820161404f565b92835284810182019282810190878511156141b257600080fd5b83870192505b848310156141da5782356141cb81613ccf565b825291830191908301906141b8565b979650505050505050565b6000602082840312156141f757600080fd5b81356001600160401b0381111561420d57600080fd5b6128f18482850161415d565b602080825282518282018190526000919060409081850190868401855b8281101561426e57815180516001600160a01b0316855286810151878601528501518585015260609093019290850190600101614236565b5091979650505050505050565b6000806000806060858703121561429157600080fd5b843561429c81613ccf565b93506020850135925060408501356001600160401b038111156142be57600080fd5b613e5987828801613d10565b600080600080600080600061012080898b0312156142e757600080fd5b88356142f281613ccf565b975060208981013561430381613ccf565b975060408a013561431381613ccf565b965060608a01356001600160401b038082111561432f57600080fd5b61433b8d838e016140a6565b975060808c013591508082111561435157600080fd5b5061435e8c828d016140a6565b95505060a08a013593508a60df8b011261437757600080fd5b61437f614027565b918a0191808c84111561439157600080fd5b60c08c015b848110156143b65780356143a981613ccf565b8352918301918301614396565b508094505050505092959891949750929550565b600080604083850312156143dd57600080fd5b82356143e881613ccf565b9150602083013561400681613ccf565b6000806040838503121561440b57600080fd5b823561441681613ccf565b915060208301356001600160401b0381111561443157600080fd5b61443d8582860161415d565b9150509250929050565b600181811c9082168061445b57607f821691505b60208210810361447b57634e487b7160e01b600052602260045260246000fd5b50919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006128f1602083018486614481565b8183526000602080850194508260005b85811015613f635781356144e181613ccf565b6001600160a01b0316875295820195908201906001016144ce565b6040815260006145106040830186886144be565b82810360208401526141da8185876144be565b6000821982111561453657614536613b92565b500190565b6001600160a01b03929092168252602082015260400190565b8054600090600181811c908083168061456e57607f831692505b6020808410820361458f57634e487b7160e01b600052602260045260246000fd5b838852602088018280156145aa57600181146145bb576145e6565b60ff198716825282820197506145e6565b60008981526020902060005b878110156145e0578154848201529086019084016145c7565b83019850505b5050505050505092915050565b6040815260006146066040830186614554565b8281036020840152614619818587614481565b9695505050505050565b6020815260006128f16020830184866144be565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561465f57600080fd5b5051919050565b60006001820161467857614678613b92565b5060010190565b600081600019048311821515161561469957614699613b92565b500290565b6000826146bb57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082018190526000906128f190830184613c90565b6000602082840312156146f657600080fd5b815161241081613ccf565b60006020828403121561471357600080fd5b81516001600160401b0381111561472957600080fd5b8201601f8101841361473a57600080fd5b80516147486140c58261407f565b81815285602083850101111561475d57600080fd5b61476e826020830160208601613c1e565b95945050505050565b83815282602082015260606040820152600061476e6060830184613c90565b6000602082840312156147a857600080fd5b8151801515811461241057600080fd5b6020815260006124106020830184614554565b6001600160a01b03831681526040602082018190526000906128f190830184613f2a565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b81526000835161486c816017850160208801613c1e565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161489d816028840160208801613c1e565b01602801949350505050565b6000816148b8576148b8613b92565b50600019019056feb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357861514f61b5b3fcfb87564eec25aa9bdfcf29e63af898e1fd66ba0f88ef51839ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef41c23f1b303a0c4396ea09a7fb42b216cd382ec1ea27c71c3e89e314be197a03a2646970667358221220a49bfd8348ab347aa70598c2cbda3c75a3d08954c4ac83060da5117be6086eec64736f6c634300080d0033",
    "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104c25760003560e01c8063870ffde211610278578063ae4470241161015c578063dd62ed3e116100ce578063f2888dbb11610092578063f2888dbb14610c27578063f3aea65014610c3a578063f4350c2414610c4d578063f4408e4b14610c60578063fc0c546a14610c68578063ffff59a614610c7b576104c2565b8063dd62ed3e14610bc6578063e364215314610bd9578063e58378bb14610bec578063e8e658b414610c01578063e926d55c14610c14576104c2565b8063bc9b30c811610120578063bc9b30c814610b52578063bed6ff0914610b65578063c229918e14610b78578063d1b6861114610b80578063d547741f14610b93578063d673de4614610ba6576104c2565b8063ae44702414610a9b578063b07f3c4714610aae578063b72cd7a814610b0c578063ba2bfc0a14610b1f578063bc697ec514610b3f576104c2565b8063a457c2d7116101f5578063a9059cbb116101b9578063a9059cbb14610a3e578063a93a019f14610a51578063a99fa31a14610a64578063aa5703ad14610a77578063aa77fd5514610a7f578063adc9772e14610a88576104c2565b8063a457c2d7146109df578063a48dca18146109f2578063a4c0ed3614610a05578063a63ed2c814610a18578063a74194af14610a2b576104c2565b80639413462c1161023c5780639413462c146109a057806395d89b41146109a957806398833130146109b15780639fa6dd35146109c4578063a217fddf146109d7576104c2565b8063870ffde21461094b57806387396e3b146109545780638da5cb5b14610967578063918b5be11461097a57806391d148541461098d576104c2565b806336568abe116103aa5780635dff6e9f1161031c5780636f398f98116102e05780636f398f98146108ca57806370a08231146108dd578063799e2590146108f05780637bf713b6146109035780637d429385146109165780637e82fd6f14610936576104c2565b80635dff6e9f146108725780635e61bb871461088557806363d1ecf21461089157806364f1abb7146108a45780636c68c0e1146108b7576104c2565b80634a45d2e61161036e5780634a45d2e61461080b5780634b095c031461081c57806350d3ba9e1461082f57806354fd4d5014610842578063558a15681461084957806358fc614a14610852576104c2565b806336568abe146107aa578063392f37e9146107bd57806339509351146107c5578063430457e1146107d85780634a178fe4146107f8576104c2565b80631c53c28011610443578063248a9ca311610407578063248a9ca31461072657806325c33549146107495780632e9498241461075c5780632ebd89d1146107715780632f2ff15d14610788578063313ce5671461079b576104c2565b80631c53c280146106ba57806320fed94f146106da57806321194bd7146106ed57806321a769071461070057806323b872dd14610713576104c2565b80630fd6ff491161048a5780630fd6ff491461066f57806311606010146106845780631401f70b1461068c57806314797daa1461069f57806318160ddd146106b2576104c2565b806301ffc9a7146105e257806304cbab8b1461061b57806306fdde0314610632578063092c5b3b14610647578063095ea7b31461065c575b60003660603330146104e757604051634ca8886760e01b815260040160405180910390fd5b81600084826104f7601482613ba8565b61050392859290613bbf565b61050c91613be9565b60601c90506000858186610521602087613ba8565b9261052e93929190613bbf565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051949550938493506001600160a01b038716925061058091508590613c4a565b600060405180830381855af49150503d80600081146105bb576040519150601f19603f3d011682016040523d82523d6000602084013e6105c0565b606091505b5091509150816105d257805181602001fd5b8051975060200195505050505050f35b6106066105f0366004613c66565b6001600160e01b03191663310f7c0360e11b1490565b60405190151581526020015b60405180910390f35b61062460c95481565b604051908152602001610612565b61063a610c8e565b6040516106129190613cbc565b6106246000805160206148e183398151915281565b61060661066a366004613ce4565b610d20565b61068261067d366004613d58565b610d3a565b005b610606610db0565b61068261069a366004613d99565b610dfb565b6106826106ad366004613dfa565b610e96565b609954610624565b6106cd6106c8366004613e65565b610f03565b6040516106129190613e7e565b6106826106e8366004613e92565b610f2d565b6106826106fb366004613d58565b610fce565b60d0546106cd906001600160a01b031681565b610606610721366004613eb4565b61106e565b610624610734366004613e65565b60009081526065602052604090206001015490565b610682610757366004613ef5565b611092565b6107646110f8565b6040516106129190613f6e565b610779611159565b60405161061293929190613f81565b610682610796366004613fe1565b611388565b60405160128152602001610612565b6106826107b8366004613fe1565b6113ad565b61063a61142c565b6106066107d3366004613ce4565b6114ba565b6106246107e6366004613d99565b60d96020526000908152604090205481565b6106826108063660046140fc565b6114dc565b610682610819366004613e65565b50565b61068261082a366004613ce4565b611570565b61062461083d3660046141e5565b6115d2565b6003610624565b61062460d45481565b610624610860366004613d99565b60d66020526000908152604090205481565b610682610880366004613e65565b611601565b60db5460dc5414610606565b60ce546106cd906001600160a01b031681565b6106826108b2366004613d99565b61163f565b6106826108c5366004613e65565b61190b565b6106246108d8366004613e65565b61193d565b6106246108eb366004613d99565b611976565b60cb546106cd906001600160a01b031681565b610682610911366004613e65565b611991565b610624610924366004613d99565b60d76020526000908152604090205481565b61093e611b1c565b6040516106129190614219565b61062460ca5481565b610682610962366004613e65565b611c3b565b60d2546106cd906001600160a01b031681565b610682610988366004613d58565b611c67565b61060661099b366004613fe1565b611cf9565b61062460db5481565b61063a611d24565b60d1546106cd906001600160a01b031681565b6106826109d2366004613e65565b611d33565b610624600081565b6106066109ed366004613ce4565b611dd1565b60cf546106cd906001600160a01b031681565b610682610a1336600461427b565b611e4c565b610624610a26366004613d99565b611ed3565b6106cd610a39366004613e65565b611f57565b610606610a4c366004613ce4565b611f67565b610682610a5f366004613ce4565b611f75565b610682610a723660046142ca565b61208a565b61063a6122f0565b61062460dc5481565b610682610a96366004613ce4565b61236c565b610624610aa9366004613e65565b6123ce565b610ae7610abc366004613e65565b60da602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b039094168452602084019290925290820152606001610612565b60cc546106cd906001600160a01b031681565b610624610b2d366004613d99565b60d86020526000908152604090205481565b610682610b4d366004613ce4565b612417565b60cd546106cd906001600160a01b031681565b610682610b73366004613eb4565b612460565b6106246124bd565b610682610b8e366004613ce4565b61254b565b610682610ba1366004613fe1565b612594565b610624610bb4366004613d99565b60de6020526000908152604090205481565b610624610bd43660046143ca565b6125b9565b60e0546106cd906001600160a01b031681565b6106246000805160206148c183398151915281565b610682610c0f3660046141e5565b6125e4565b610624610c22366004613e92565b6128ab565b610682610c35366004613d99565b6128f9565b610682610c48366004613ce4565b612937565b610682610c5b3660046143f8565b612980565b61063a6129ad565b60d3546106cd906001600160a01b031681565b610682610c89366004613ce4565b6129ba565b6060609a8054610c9d90614447565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc990614447565b8015610d165780601f10610ceb57610100808354040283529160200191610d16565b820191906000526020600020905b815481529060010190602001808311610cf957829003601f168201915b5050505050905090565b600033610d2e818585612a03565b60019150505b92915050565b33600090815260de60205260408120549003610d6957604051634f1cec5f60e11b815260040160405180910390fd5b336001600160a01b03167f7432bbcdcf6009b3131a7b65f7af1fdbf79c27db5c115c1cdbcf9210298bc5f48383604051610da49291906144aa565b60405180910390a25050565b60cf546040805160048152602481019091526020810180516001600160e01b031663726884c360e11b179052600091610df4916001600160a01b0390911690612b27565b1515919050565b610e136000805160206148e183398151915233611cf9565b610e3057604051631a76708960e21b815260040160405180910390fd5b60d054604051610e92916001600160a01b03169063af9ee81d60e01b90610e5b908590602401613e7e565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612b27565b5050565b610eae6000805160206148e183398151915233611cf9565b610ecb57604051631a76708960e21b815260040160405180910390fd5b60ce54604051610efc916001600160a01b031690635e2cb23f60e11b90610e5b9088908890889088906024016144fc565b5050505050565b60dd8181548110610f1357600080fd5b6000918252602090912001546001600160a01b0316905081565b33600081815260d660205260408120549003610f5c5760405163012d886f60e51b815260040160405180910390fd5b8215610f9b578160ca6000828254610f749190614523565b90915550610f83905083612bc8565b8160ca6000828254610f959190613ba8565b90915550505b60d054604051610fc8916001600160a01b031690631644f38560e31b90610e5b908590879060240161453b565b50505050565b610fe66000805160206148e183398151915233611cf9565b61100357604051631a76708960e21b815260040160405180910390fd5b60e0546040516342617fe760e01b81526001600160a01b03909116906342617fe7906110389060df90869086906004016145f3565b600060405180830381600087803b15801561105257600080fd5b505af1158015611066573d6000803e3d6000fd5b505050505050565b60003361107c858285612cda565b611087858585612d4e565b506001949350505050565b6110aa6000805160206148e183398151915233611cf9565b6110c757604051631a76708960e21b815260040160405180910390fd5b60ce546040516110f3916001600160a01b03169062b08f2560e61b90610e5b9086908690602401614623565b505050565b606060dd805480602002602001604051908101604052809291908181526020018280548015610d1657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611132575050505050905090565b606080600060d5805490506001600160401b0381111561117b5761117b614011565b6040519080825280602002602001820160405280156111a4578160200160208202803683370190505b5060d5549093506001600160401b038111156111c2576111c2614011565b6040519080825280602002602001820160405280156111eb578160200160208202803683370190505b50915060005b60d5548110156112ef57600060d5828154811061121057611210614637565b9060005260206000200160009054906101000a90046001600160a01b031690508085838151811061124357611243614637565b6001600160a01b0392831660209182029290920101526040516304c6e70160e21b81529082169063131b9c049061127e903090600401613e7e565b602060405180830381865afa15801561129b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bf919061464d565b8483815181106112d1576112d1614637565b602090810291909101015250806112e781614666565b9150506111f1565b5060d154604080516315d94f8f60e31b81529051670de0b6b3a7640000926001600160a01b03169163aeca7c789160048083019260209291908290030181865afa158015611341573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611365919061464d565b61136d6124bd565b611377919061467f565b611381919061469e565b9050909192565b6000828152606560205260409020600101546113a381612f69565b6110f38383612f73565b6001600160a01b03811633146114225760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610e928282612ff9565b60e1805461143990614447565b80601f016020809104026020016040519081016040528092919081815260200182805461146590614447565b80156114b25780601f10611487576101008083540402835291602001916114b2565b820191906000526020600020905b81548152906001019060200180831161149557829003601f168201915b505050505081565b600033610d2e8185856114cd83836125b9565b6114d79190614523565b612a03565b33600090815260de6020526040812054900361150b57604051634f1cec5f60e11b815260040160405180910390fd5b604051633f08e8e360e11b81526001600160a01b03841690637e11d1c69061153990859085906004016146c0565b600060405180830381600087803b15801561155357600080fd5b505af1158015611567573d6000803e3d6000fd5b50505050505050565b6115886000805160206148e183398151915233611cf9565b6115a557604051631a76708960e21b815260040160405180910390fd5b60d0546040516110f3916001600160a01b03169063d572a9cd60e01b90610e5b908690869060240161453b565b60d054604051600091610d34916001600160a01b039091169062d8aad560e51b90610e5b908690602401613f6e565b6116196000805160206148e183398151915233611cf9565b61163657604051631a76708960e21b815260040160405180910390fd5b61081981613060565b60d160009054906101000a90046001600160a01b03166001600160a01b0316635efca0a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b691906146e4565b6001600160a01b0316634703e001336040518263ffffffff1660e01b81526004016116e19190613e7e565b602060405180830381865afa1580156116fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611722919061464d565b600003611742576040516359e9fbbf60e11b815260040160405180910390fd5b60d154604080516358c6e66160e11b8152905133926000926001600160a01b039091169163b18dccc2916004808201926020929091908290030181865afa158015611791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b5919061464d565b6117bf9042614523565b9050600060d160009054906101000a90046001600160a01b03166001600160a01b031663cb85fe356040518163ffffffff1660e01b8152600401602060405180830381865afa158015611816573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183a919061464d565b6118449083614523565b9050836001600160a01b0316836001600160a01b03167fe89a7bfa490a911e4a2981566a4710a51b0057109370b86784fe0764904d036f8484876001600160a01b0316637db188078a6040518263ffffffff1660e01b81526004016118a99190613e7e565b600060405180830381865afa1580156118c6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118ee9190810190614701565b6040516118fd93929190614777565b60405180910390a350505050565b60cf5460405160248101839052336044820152610e92916001600160a01b031690630744132360e21b90606401610e5b565b600061194860995490565b60000361195757506000919050565b6099546119626124bd565b61196c908461467f565b610d34919061469e565b6001600160a01b031660009081526097602052604090205490565b33600081815260d6602052604081205490036119c05760405163012d886f60e51b815260040160405180910390fd5b6119c982612bc8565b6001600160a01b038116600090815260d86020526040812080548492906119f1908490614523565b925050819055508160ca6000828254611a0a9190614523565b90915550506001600160a01b038116600081815260d8602090815260408083205460d7909252909120547f89dbe872fd688c751e8c5df10849155d89d1467fd56ddb92b0d0024cda2ccd7891611a5f91613ba8565b60405190815260200160405180910390a260008051602061494183398151915260ca5460c954611a8f9190613ba8565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190611abf903090600401613e7e565b602060405180830381865afa158015611adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b00919061464d565b6040805192835260208301919091520160405180910390a15050565b6060600060dc5460db54611b309190613ba8565b9050806001600160401b03811115611b4a57611b4a614011565b604051908082528060200260200182016040528015611ba857816020015b611b95604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b815260200190600190039081611b685790505b50915060005b81811015611c365760da60008260dc54611bc89190614523565b81526020808201929092526040908101600020815160608101835281546001600160a01b0316815260018201549381019390935260020154908201528351849083908110611c1857611c18614637565b60200260200101819052508080611c2e90614666565b915050611bae565b505090565b60cf5460405160248101839052610e92916001600160a01b03169063211cccd160e21b90604401610e5b565b611c7f6000805160206148e183398151915233611cf9565b611c9c57604051631a76708960e21b815260040160405180910390fd5b611ca860e18383613a85565b5060d45460d2546040516001600160a01b03909116907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d090611ced90869086906144aa565b60405180910390a35050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060609b8054610c9d90614447565b60d3546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018490526064016020604051808303816000875af1158015611d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbc9190614796565b50611dc733826130fd565b6108196000611c3b565b60003381611ddf82866125b9565b905083811015611e3f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611419565b6110878286868403612a03565b60d3546001600160a01b03163314611e775760405163118d9d7160e11b815260040160405180910390fd5b6001600160a01b038416600090815260d66020526040902054849015611e9d5750610fc8565b846014839003611eb25750823560601c611ebf565b6020839003611ebf575082355b611ec981866130fd565b6110666000611c3b565b6000611ede82611976565b600003611eed57506000919050565b610d34630de731f360e31b611f0184611976565b60cc5460405160248101929092526001600160a01b0316604482015260640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261336c565b60d58181548110610f1357600080fd5b600033610d2e818585612d4e565b60db5460dc54148061201b575060d160009054906101000a90046001600160a01b03166001600160a01b031663e2e8bcd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff9919061464d565b60dc54600090815260da60205260409020600201546120189190614523565b42105b15612055576120386000805160206148e183398151915233611cf9565b61205557604051631a76708960e21b815260040160405180910390fd5b60d054604051612080916001600160a01b031690633d16f42d60e01b90610e5b908690602401613e7e565b50610e9281611c3b565b600054610100900460ff16158080156120aa5750600054600160ff909116105b806120c45750303b1580156120c4575060005460ff166001145b6121275760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611419565b6000805460ff19166001179055801561214a576000805461ff0019166101001790555b60d180546001600160a01b0319166001600160a01b03891617905561216d613402565b6121856000805160206148c18339815191528761342b565b61219d6000805160206148e18339815191528761342b565b6121c36000805160206148e18339815191526000805160206148c1833981519152613435565b60d380546001600160a01b03199081166001600160a01b038b811691909117909255835160ce80548316918416919091179055602084015160cf80548316918416919091179055604084015160d08054831691841691909117905560d280549091169188169190911790556122388580613480565b61224360003361342b565b83516122569060e1906020870190613b09565b5061226083613060565b60ce546040805160048152602481019091526020810180516001600160e01b031663377f1ecb60e01b17905261229f916001600160a01b031690612b27565b5080156122e6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b60e0546040516331ca7de960e11b81526060916001600160a01b031690636394fbd2906123229060df906004016147b8565b600060405180830381865afa15801561233f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123679190810190614701565b905090565b6123846000805160206148e183398151915233611cf9565b6123a157604051631a76708960e21b815260040160405180910390fd5b60d0546040516110f3916001600160a01b03169063aa0d97b360e01b90610e5b908690869060240161453b565b6000806123d96124bd565b9050806001826123e860995490565b6123f2908761467f565b6123fc9190614523565b6124069190613ba8565b612410919061469e565b9392505050565b600061242281612f69565b60cc80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610fc89190632522e97360e11b90604401610e5b565b33600090815260de6020526040812054900361248f57604051634f1cec5f60e11b815260040160405180910390fd5b60405163296e0f3960e21b81526001600160a01b0384169063a5b83ce490611539908590859060040161453b565b60ca5460c95460d3546040516370a0823160e01b815260009392916001600160a01b0316906370a08231906124f6903090600401613e7e565b602060405180830381865afa158015612513573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612537919061464d565b6125419190614523565b6123679190613ba8565b6125636000805160206148e183398151915233611cf9565b61258057604051631a76708960e21b815260040160405180910390fd5b61258a8282611570565b610e926000611c3b565b6000828152606560205260409020600101546125af81612f69565b6110f38383612ff9565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b60006125ee6124bd565b905060006125fb836115d2565b9050336126166000805160206148e183398151915282611cf9565b15801561263957506001600160a01b038116600090815260de6020526040902054155b156128a1576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b031663aeca7c786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561269c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c0919061464d565b6126ca908661467f565b6126d4919061469e565b90508083111561289f576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b0316636c29b3b76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561273c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612760919061464d565b61276a908661467f565b612774919061469e565b905061277f81612bc8565b60d35460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906127b1908690859060040161453b565b6020604051808303816000875af11580156127d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f49190614796565b5060008051602061494183398151915260ca5460c9546128149190613ba8565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190612844903090600401613e7e565b602060405180830381865afa158015612861573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612885919061464d565b6040805192835260208301919091520160405180910390a1505b505b610fc86000611c3b565b60006128b660995490565b6000036128c4575081610d34565b60006128ce6124bd565b90506128da8382613ba8565b6099546128e7908661467f565b6128f1919061469e565b949350505050565b6129116000805160206148e183398151915233611cf9565b61292e57604051631a76708960e21b815260040160405180910390fd5b611dc781610dfb565b600061294281612f69565b60cb80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610fc89190632522e97360e11b90604401610e5b565b60cf546040516110f3916001600160a01b031690637a227c9f60e01b90610e5b90869086906024016147cb565b60df805461143990614447565b60006129c581612f69565b60cd80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610fc89190632522e97360e11b90604401610e5b565b6001600160a01b038316612a655760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611419565b6001600160a01b038216612ac65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611419565b6001600160a01b0383811660008181526098602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806000846001600160a01b031684604051612b449190613c4a565b600060405180830381855af49150503d8060008114612b7f576040519150601f19603f3d011682016040523d82523d6000602084013e612b84565b606091505b509150915081612bbc578051600003612bb457848460405163918623b760e01b81526004016114199291906146c0565b805181602001fd5b60200151949350505050565b60d254600090612be0906001600160a01b0316611976565b905080600003612bee575050565b60cc5460405160248101849052600091612c1f916001600160a01b0390911690632b911c0960e21b90604401610e5b565b90506000612c2d83836134b1565b60d254909150612c46906001600160a01b0316826134c7565b60408051858152602081018490529081018290527ff22a8c26ad08bc6548cdae55fec4c309e15e9d2290ad7e1f9186fc20189e7a159060600160405180910390a160d2546001600160a01b0316600080516020614901833981519152612cab82611976565b609954612cb66124bd565b6040805193845260208401929092529082015260600160405180910390a250505050565b6000612ce684846125b9565b90506000198114610fc85781811015612d415760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611419565b610fc88484848403612a03565b6000612d5983611976565b159050612d678484846135e9565b60d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa158015612db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd5919061464d565b905080612de186611976565b108015612df657506000612df486611976565b115b15612e2857612e0485611976565b6040516324c6940760e01b8152600481019190915260248101829052604401611419565b80612e3285611976565b1015612e4157612e0484611976565b8115612e855760cb546001600160a01b031615612e855760cb54604051612e83916001600160a01b03169063217fb33b60e01b90610e5b908890602401613e7e565b505b60cd546001600160a01b031615612ecc5760cd546040516001600160a01b03878116602483015260006044830152612eca921690633608993560e21b90606401610e5b565b505b846001600160a01b0316600080516020614901833981519152612eee87611976565b609954612ef96124bd565b6040805193845260208401929092529082015260600160405180910390a2836001600160a01b0316600080516020614901833981519152612f3986611976565b609954612f446124bd565b6040805193845260208401929092529082015260600160405180910390a25050505050565b6108198133613782565b612f7d8282611cf9565b610e925760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612fb53390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6130038282611cf9565b15610e925760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60c95415613081576040516301039eff60e71b815260040160405180910390fd5b670de0b6b3a76400008111156130ad57604051631e6f460160e31b815260048101829052602401611419565b60d481905560d25460405182916001600160a01b0316907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d0906130f29060e1906147b8565b60405180910390a350565b60cc546040516024810183905260448101839052600091613135916001600160a01b0390911690633a49b55760e21b90606401610e5b565b905061314183826137db565b60d2546001600160a01b0384811691161461321f5760d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa1580156131a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c4919061464d565b9050806131d085611976565b10156131df57612e0484611976565b60cb546001600160a01b03161561321d5760cb5460405161321b916001600160a01b03169063217fb33b60e01b90610e5b908890602401613e7e565b505b505b6001600160a01b038316600081815260d9602052604090819020429055517f83b3f5ce88736f0128f880f5cac19836da52ea5c5ca7704c7b38f3b06fffd7ab9061326c9085815260200190565b60405180910390a2826001600160a01b031660008051602061490183398151915261329685611976565b6099546132a16124bd565b6040805193845260208401929092529082015260600160405180910390a260008051602061494183398151915260ca5460c9546132de9190613ba8565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a082319061330e903090600401613e7e565b602060405180830381865afa15801561332b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334f919061464d565b6040805192835260208301919091520160405180910390a1505050565b6000806000306001600160a01b0316846040516133899190613c4a565b600060405180830381855afa9150503d80600081146133c4576040519150601f19603f3d011682016040523d82523d6000602084013e6133c9565b606091505b5091509150816133f7578051600003612bb4578360405163029801d760e41b81526004016114199190613cbc565b602001519392505050565b600054610100900460ff166134295760405162461bcd60e51b8152600401611419906147ef565b565b610e928282612f73565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600054610100900460ff166134a75760405162461bcd60e51b8152600401611419906147ef565b610e92828261388a565b60008183106134c05781612410565b5090919050565b6001600160a01b0382166135275760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401611419565b6001600160a01b0382166000908152609760205260409020548181101561359b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401611419565b6001600160a01b0383166000818152609760209081526040808320868603905560998054879003905551858152919291600080516020614921833981519152910160405180910390a3505050565b6001600160a01b03831661364d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611419565b6001600160a01b0382166136af5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401611419565b6001600160a01b038316600090815260976020526040902054818110156137275760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611419565b6001600160a01b038085166000818152609760205260408082208686039055928616808252908390208054860190559151600080516020614921833981519152906137759086815260200190565b60405180910390a3610fc8565b61378c8282611cf9565b610e9257613799816138d8565b6137a48360206138ea565b6040516020016137b592919061483a565b60408051601f198184030181529082905262461bcd60e51b825261141991600401613cbc565b6001600160a01b0382166138315760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401611419565b80609960008282546138439190614523565b90915550506001600160a01b038216600081815260976020908152604080832080548601905551848152600080516020614921833981519152910160405180910390a35050565b600054610100900460ff166138b15760405162461bcd60e51b8152600401611419906147ef565b81516138c490609a906020850190613b09565b5080516110f390609b906020840190613b09565b6060610d346001600160a01b03831660145b606060006138f983600261467f565b613904906002614523565b6001600160401b0381111561391b5761391b614011565b6040519080825280601f01601f191660200182016040528015613945576020820181803683370190505b509050600360fc1b8160008151811061396057613960614637565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061398f5761398f614637565b60200101906001600160f81b031916908160001a90535060006139b384600261467f565b6139be906001614523565b90505b6001811115613a36576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106139f2576139f2614637565b1a60f81b828281518110613a0857613a08614637565b60200101906001600160f81b031916908160001a90535060049490941c93613a2f816148a9565b90506139c1565b5083156124105760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401611419565b828054613a9190614447565b90600052602060002090601f016020900481019282613ab35760008555613af9565b82601f10613acc5782800160ff19823516178555613af9565b82800160010185558215613af9579182015b82811115613af9578235825591602001919060010190613ade565b50613b05929150613b7d565b5090565b828054613b1590614447565b90600052602060002090601f016020900481019282613b375760008555613af9565b82601f10613b5057805160ff1916838001178555613af9565b82800160010185558215613af9579182015b82811115613af9578251825591602001919060010190613b62565b5b80821115613b055760008155600101613b7e565b634e487b7160e01b600052601160045260246000fd5b600082821015613bba57613bba613b92565b500390565b60008085851115613bcf57600080fd5b83861115613bdc57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015613c165780818660140360031b1b83161692505b505092915050565b60005b83811015613c39578181015183820152602001613c21565b83811115610fc85750506000910152565b60008251613c5c818460208701613c1e565b9190910192915050565b600060208284031215613c7857600080fd5b81356001600160e01b03198116811461241057600080fd5b60008151808452613ca8816020860160208601613c1e565b601f01601f19169290920160200192915050565b6020815260006124106020830184613c90565b6001600160a01b038116811461081957600080fd5b60008060408385031215613cf757600080fd5b8235613d0281613ccf565b946020939093013593505050565b60008083601f840112613d2257600080fd5b5081356001600160401b03811115613d3957600080fd5b602083019150836020828501011115613d5157600080fd5b9250929050565b60008060208385031215613d6b57600080fd5b82356001600160401b03811115613d8157600080fd5b613d8d85828601613d10565b90969095509350505050565b600060208284031215613dab57600080fd5b813561241081613ccf565b60008083601f840112613dc857600080fd5b5081356001600160401b03811115613ddf57600080fd5b6020830191508360208260051b8501011115613d5157600080fd5b60008060008060408587031215613e1057600080fd5b84356001600160401b0380821115613e2757600080fd5b613e3388838901613db6565b90965094506020870135915080821115613e4c57600080fd5b50613e5987828801613db6565b95989497509550505050565b600060208284031215613e7757600080fd5b5035919050565b6001600160a01b0391909116815260200190565b60008060408385031215613ea557600080fd5b50508035926020909101359150565b600080600060608486031215613ec957600080fd5b8335613ed481613ccf565b92506020840135613ee481613ccf565b929592945050506040919091013590565b60008060208385031215613f0857600080fd5b82356001600160401b03811115613f1e57600080fd5b613d8d85828601613db6565b600081518084526020808501945080840160005b83811015613f635781516001600160a01b031687529582019590820190600101613f3e565b509495945050505050565b6020815260006124106020830184613f2a565b606081526000613f946060830186613f2a565b82810360208481019190915285518083528682019282019060005b81811015613fcb57845183529383019391830191600101613faf565b5050809350505050826040830152949350505050565b60008060408385031215613ff457600080fd5b82359150602083013561400681613ccf565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561404957614049614011565b60405290565b604051601f8201601f191681016001600160401b038111828210171561407757614077614011565b604052919050565b60006001600160401b0382111561409857614098614011565b50601f01601f191660200190565b600082601f8301126140b757600080fd5b81356140ca6140c58261407f565b61404f565b8181528460208386010111156140df57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561411157600080fd5b833561411c81613ccf565b9250602084013561412c81613ccf565b915060408401356001600160401b0381111561414757600080fd5b614153868287016140a6565b9150509250925092565b600082601f83011261416e57600080fd5b813560206001600160401b0382111561418957614189614011565b8160051b61419882820161404f565b92835284810182019282810190878511156141b257600080fd5b83870192505b848310156141da5782356141cb81613ccf565b825291830191908301906141b8565b979650505050505050565b6000602082840312156141f757600080fd5b81356001600160401b0381111561420d57600080fd5b6128f18482850161415d565b602080825282518282018190526000919060409081850190868401855b8281101561426e57815180516001600160a01b0316855286810151878601528501518585015260609093019290850190600101614236565b5091979650505050505050565b6000806000806060858703121561429157600080fd5b843561429c81613ccf565b93506020850135925060408501356001600160401b038111156142be57600080fd5b613e5987828801613d10565b600080600080600080600061012080898b0312156142e757600080fd5b88356142f281613ccf565b975060208981013561430381613ccf565b975060408a013561431381613ccf565b965060608a01356001600160401b038082111561432f57600080fd5b61433b8d838e016140a6565b975060808c013591508082111561435157600080fd5b5061435e8c828d016140a6565b95505060a08a013593508a60df8b011261437757600080fd5b61437f614027565b918a0191808c84111561439157600080fd5b60c08c015b848110156143b65780356143a981613ccf565b8352918301918301614396565b508094505050505092959891949750929550565b600080604083850312156143dd57600080fd5b82356143e881613ccf565b9150602083013561400681613ccf565b6000806040838503121561440b57600080fd5b823561441681613ccf565b915060208301356001600160401b0381111561443157600080fd5b61443d8582860161415d565b9150509250929050565b600181811c9082168061445b57607f821691505b60208210810361447b57634e487b7160e01b600052602260045260246000fd5b50919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006128f1602083018486614481565b8183526000602080850194508260005b85811015613f635781356144e181613ccf565b6001600160a01b0316875295820195908201906001016144ce565b6040815260006145106040830186886144be565b82810360208401526141da8185876144be565b6000821982111561453657614536613b92565b500190565b6001600160a01b03929092168252602082015260400190565b8054600090600181811c908083168061456e57607f831692505b6020808410820361458f57634e487b7160e01b600052602260045260246000fd5b838852602088018280156145aa57600181146145bb576145e6565b60ff198716825282820197506145e6565b60008981526020902060005b878110156145e0578154848201529086019084016145c7565b83019850505b5050505050505092915050565b6040815260006146066040830186614554565b8281036020840152614619818587614481565b9695505050505050565b6020815260006128f16020830184866144be565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561465f57600080fd5b5051919050565b60006001820161467857614678613b92565b5060010190565b600081600019048311821515161561469957614699613b92565b500290565b6000826146bb57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082018190526000906128f190830184613c90565b6000602082840312156146f657600080fd5b815161241081613ccf565b60006020828403121561471357600080fd5b81516001600160401b0381111561472957600080fd5b8201601f8101841361473a57600080fd5b80516147486140c58261407f565b81815285602083850101111561475d57600080fd5b61476e826020830160208601613c1e565b95945050505050565b83815282602082015260606040820152600061476e6060830184613c90565b6000602082840312156147a857600080fd5b8151801515811461241057600080fd5b6020815260006124106020830184614554565b6001600160a01b03831681526040602082018190526000906128f190830184613f2a565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b81526000835161486c816017850160208801613c1e565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161489d816028840160208801613c1e565b01602801949350505050565b6000816148b8576148b8613b92565b50600019019056feb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357861514f61b5b3fcfb87564eec25aa9bdfcf29e63af898e1fd66ba0f88ef51839ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef41c23f1b303a0c4396ea09a7fb42b216cd382ec1ea27c71c3e89e314be197a03a2646970667358221220a49bfd8348ab347aa70598c2cbda3c75a3d08954c4ac83060da5117be6086eec64736f6c634300080d0033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
