{
  "_format": "hh3-artifact-1",
  "contractName": "E3RefundManager",
  "sourceName": "contracts/E3RefundManager.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "claimant",
          "type": "address"
        }
      ],
      "name": "AlreadyClaimed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        }
      ],
      "name": "E3NotFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        }
      ],
      "name": "NoRefundAvailable",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "NotHonestNode",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "NotRequester",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NothingToClaim",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "OwnableInvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        }
      ],
      "name": "RefundNotCalculated",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "RenounceOwnershipDisabled",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "SafeERC20FailedOperation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Unauthorized",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "enclave",
          "type": "address"
        }
      ],
      "name": "EnclaveSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previous",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "next",
          "type": "address"
        }
      ],
      "name": "EnclaveUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "OrphanedSlashedFundsWithdrawn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "claimant",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "claimType",
          "type": "bytes32"
        }
      ],
      "name": "RefundClaimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "requesterAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "honestNodeAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "protocolAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalSlashed",
          "type": "uint256"
        }
      ],
      "name": "RefundDistributionCalculated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "toRequester",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "toHonestNodes",
          "type": "uint256"
        }
      ],
      "name": "SlashedFundsApplied",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "SlashedFundsClaimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "SlashedFundsCredited",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "toNodes",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "toProtocol",
          "type": "uint256"
        }
      ],
      "name": "SlashedFundsDistributedOnSuccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "SlashedFundsEscrowed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "treasury",
          "type": "address"
        }
      ],
      "name": "TreasurySet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "treasury",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "TreasurySlashedClaimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "treasury",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "TreasurySlashedCredited",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previous",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "next",
          "type": "address"
        }
      ],
      "name": "TreasuryUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint16",
              "name": "committeeFormationBps",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "dkgBps",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "decryptionBps",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "protocolBps",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "successSlashedNodeBps",
              "type": "uint16"
            }
          ],
          "indexed": false,
          "internalType": "struct IE3RefundManager.WorkValueAllocation",
          "name": "allocation",
          "type": "tuple"
        }
      ],
      "name": "WorkAllocationUpdated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "MAX_PROTOCOL_BPS",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bondingRegistry",
      "outputs": [
        {
          "internalType": "contract IBondingRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "originalPayment",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "honestNodes",
          "type": "address[]"
        },
        {
          "internalType": "contract IERC20",
          "name": "paymentToken",
          "type": "address"
        }
      ],
      "name": "calculateRefund",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum IEnclave.E3Stage",
          "name": "stage",
          "type": "uint8"
        }
      ],
      "name": "calculateWorkValue",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "workCompletedBps",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "workRemainingBps",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        }
      ],
      "name": "claimHonestNodeReward",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        }
      ],
      "name": "claimRequesterRefund",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        }
      ],
      "name": "claimSlashedFundsOnSuccess",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "e3Ids",
          "type": "uint256[]"
        }
      ],
      "name": "claimSlashedFundsOnSuccessBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "honestNodes",
          "type": "address[]"
        },
        {
          "internalType": "contract IERC20",
          "name": "paymentToken",
          "type": "address"
        }
      ],
      "name": "distributeSlashedFundsOnSuccess",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "enclave",
      "outputs": [
        {
          "internalType": "contract IEnclave",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "escrowSlashedFunds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        }
      ],
      "name": "getRefundDistribution",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "requesterAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "honestNodeAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "protocolAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalSlashed",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "honestNodeCount",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "calculated",
              "type": "bool"
            },
            {
              "internalType": "contract IERC20",
              "name": "feeToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "originalPayment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "perNodeAmount",
              "type": "uint256"
            }
          ],
          "internalType": "struct IE3RefundManager.RefundDistribution",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getWorkAllocation",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint16",
              "name": "committeeFormationBps",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "dkgBps",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "decryptionBps",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "protocolBps",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "successSlashedNodeBps",
              "type": "uint16"
            }
          ],
          "internalType": "struct IE3RefundManager.WorkValueAllocation",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "claimant",
          "type": "address"
        }
      ],
      "name": "hasClaimed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_enclave",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_treasury",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "pendingSlashedFundsOnSuccess",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "treasuryAddr",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "pendingTreasuryClaim",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_enclave",
          "type": "address"
        }
      ],
      "name": "setEnclave",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_treasury",
          "type": "address"
        }
      ],
      "name": "setTreasury",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint16",
              "name": "committeeFormationBps",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "dkgBps",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "decryptionBps",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "protocolBps",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "successSlashedNodeBps",
              "type": "uint16"
            }
          ],
          "internalType": "struct IE3RefundManager.WorkValueAllocation",
          "name": "allocation",
          "type": "tuple"
        }
      ],
      "name": "setWorkAllocation",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "treasury",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "treasuryClaim",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "e3Id",
          "type": "uint256"
        },
        {
          "internalType": "contract IERC20",
          "name": "paymentToken",
          "type": "address"
        }
      ],
      "name": "withdrawOrphanedSlashedFunds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b612c8d806100d96000396000f3fe608060405234801561001057600080fd5b506004361061016a5760003560e01c806301ffc9a71461016f5780631142087c1461019757806322537f6e146101ac5780632aad855a14610283578063351c2edd146102a45780633b2879ab146102b75780633eecc133146102ca57806341489f15146102f857806350e5213f1461030b5780635282cb321461032757806361d027b31461035d578063647846a51461037d57806370e36bbe14610390578063715018a6146103a357806379ba5097146103ab57806385814243146103b3578063873f6f9e146103c65780638cc9ede3146103ff5780638da5cb5b14610412578063afaf00b11461041a578063c0c53b8b146104a4578063c1ab0f1f146104b7578063da19b697146104ca578063dbb06c93146104dd578063e30c3978146104f0578063e53c1a93146104f8578063e683453514610531578063ec3c3fa814610544578063f0f4426014610557578063f2fde38b1461056a575b600080fd5b61018261017d366004612650565b61057d565b60405190151581526020015b60405180910390f35b6101aa6101a5366004612696565b6105b4565b005b61022d6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a08101825260045461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b9004909116608082015290565b60405161018e9190600060a08201905061ffff835116825261ffff602084015116602083015261ffff604084015116604083015261ffff606084015116606083015261ffff608084015116608083015292915050565b6102966102913660046126c6565b610746565b60405190815260200161018e565b6102966102b23660046126df565b610af3565b6101aa6102c53660046126fc565b610bab565b6102dd6102d8366004612724565b610cbf565b6040805161ffff93841681529290911660208301520161018e565b6101aa61030636600461278c565b610df5565b61031461138881565b60405161ffff909116815260200161018e565b610296610335366004612696565b6000918252600c602090815260408084206001600160a01b0393909316845291905290205490565b600354610370906001600160a01b031681565b60405161018e91906127ea565b600154610370906001600160a01b031681565b6101aa61039e3660046126df565b61112f565b6101aa61119a565b6101aa6111be565b600254610370906001600160a01b031681565b6101826103d4366004612696565b60009182526006602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101aa61040d3660046127fe565b6111fd565b610370611262565b61042d6104283660046126c6565b61127d565b60405161018e9190600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a0830151151560a083015260018060a01b0360c08401511660c083015260e083015160e083015261010083015161010083015292915050565b6101aa6104b236600461283f565b611361565b6101aa6104c536600461288a565b61163a565b6101aa6104d83660046128ac565b6118bf565b600054610370906001600160a01b031681565b610370611c6d565b610296610506366004612916565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b61029661053f3660046126c6565b611c78565b6102966105523660046126c6565b611cac565b6101aa6105653660046126df565b611e9e565b6101aa6105783660046126df565b611f0b565b60006001600160e01b03198216631ee118c760e21b14806105ae57506001600160e01b031982166301ffc9a760e01b145b92915050565b6105bc611f7c565b6000828152600b6020526040902054806105d557600080fd5b6000805460405163cfbdc98d60e01b8152600481018690526001600160a01b039091169063cfbdc98d90602401602060405180830381865afa15801561061f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106439190612944565b9050600581600681111561065957610659612961565b14806106765750600681600681111561067457610674612961565b145b61067f57600080fd5b600681600681111561069357610693612961565b036106ca5760008481526005602081905260409091209081015460ff166106b957600080fd5b6004810154156106c857600080fd5b505b6000848152600b60205260408120556001600160a01b0383166106ec57600080fd5b600354610706906001600160a01b03858116911684611fb0565b837fab7295029903c409494400584b8bd66c2a73b4887b0bdd6d235b82eaba3b76708360405161073891815260200190565b60405180910390a250505050565b6000818152600560208190526040822090810154839060ff16610788576040516305716e5560e01b815260040161077f91815260200190565b60405180910390fd5b50600581015461010090046001600160a01b03166107a557600080fd5b60008381526006602090815260408083203380855292529091205484919060ff16156107e6576040516302a4851560e61b815260040161077f929190612977565b50506000838152600a602090815260408083208054825181850281018501909352808352919290919083018282801561084857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161082a575b505050505090506000805b825181108015610861575081155b156108a957336001600160a01b03168382815181106108825761088261298e565b60200260200101516001600160a01b031614915080806108a1906129ba565b915050610853565b508433826108cc57604051632ccd76b760e01b815260040161077f929190612977565b5050600083600401541185906108f8576040516327c4560160e11b815260040161077f91815260200190565b5060078301548581610920576040516327c4560160e11b815260040161077f91815260200190565b5060008681526008602052604081208054929650869291610940836129ba565b9091555050600484015460008781526008602052604090205403610a31576000868152600960205260408120546109789083906129d3565b905060008186600101541161098e57600061099e565b81866001015461099e91906129e6565b90508015610a2e576003546001600160a01b039081166000908152600e6020908152604080832060058b01546101009004909416835292905290812080548392906109ea9084906129d3565b909155505060058601546003546040518381526101009092046001600160a01b0390811692911690600080516020612c218339815191529060200160405180910390a35b50505b60008681526009602052604081208054879290610a4f9084906129d3565b909155505060008681526006602090815260408083203384528252808320805460ff1916600117905588835260079091528120805491610a8e836129ba565b9091555050600584015461010090046001600160a01b0316610ab1813388611fb0565b604080518781526a484f4e4553545f4e4f444560a81b602082015233918991600080516020612c61833981519152910160405180910390a35050505050919050565b336000908152600e602090815260408083206001600160a01b038516845290915290205480610b35576040516312d37ee560e31b815260040160405180910390fd5b336000818152600e602090815260408083206001600160a01b0387168085529252822091909155610b669183611fb0565b6040518181526001600160a01b0383169033907fcb3ed9e7c2c756c1b14e098be524d40bc18ba24f84993f9886edcad044f3d59c9060200160405180910390a3919050565b610bb3611f7c565b611388610bc66080830160608401612a09565b61ffff161115610bd557600080fd5b6000610be76080830160608401612a09565b61ffff16610bfb6060840160408501612a09565b61ffff16610c0f6040850160208601612a09565b61ffff16610c206020860186612a09565b61ffff16610c2e91906129d3565b610c3891906129d3565b610c4291906129d3565b90506127108114610c5257600080fd5b612710610c6560a0840160808501612a09565b61ffff161115610c7457600080fd5b816004610c818282612a33565b9050507fbf2706bf3bd0d1935782ec192df014829244863363c94cffce03b59c2a10de5982604051610cb39190612afc565b60405180910390a15050565b6040805160a08101825260045461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b9004909116608082015260009081906001846006811115610d2757610d27612961565b1480610d4457506000846006811115610d4257610d42612961565b145b15610d525760009250610dd2565b6002846006811115610d6657610d66612961565b03610d745780519250610dd2565b6003846006811115610d8857610d88612961565b03610da55760208101518151610d9e9190612b75565b9250610dd2565b6004846006811115610db957610db9612961565b03610dd25760208101518151610dcf9190612b75565b92505b6060810151610de384612710612b8f565b610ded9190612b8f565b915050915091565b6000546001600160a01b03163314610e1f576040516282b42960e81b815260040160405180910390fd5b6000848152600b602052604081205490819003610e3c5750611129565b6000858152600b60205260408120556001600160a01b038216610e5e57600080fd5b6000858152600d6020526040812080546001600160a01b0319166001600160a01b03851617905560045461271090610ea29061ffff600160401b9091041684612ba9565b610eac9190612bc0565b90506000610eba82846129e6565b90508015610f34576003546001600160a01b039081166000908152600e6020908152604080832093881683529290529081208054839290610efc9084906129d3565b90915550506003546040518281526001600160a01b03868116921690600080516020612c218339815191529060200160405180910390a35b600082118015610f4357508415155b15611072576000610f548684612bc0565b90506000805b8781101561106a5782610f6e60018a6129e6565b8203610f8157610f7e83876129e6565b90505b80156110555760008b8152600c6020526040812082918c8c86818110610fa957610fa961298e565b9050602002016020810190610fbe91906126df565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610fed91906129d3565b90915550506001600160a01b0388168a8a8481811061100e5761100e61298e565b905060200201602081019061102391906126df565b6001600160a01b03168c600080516020612c418339815191528460405161104c91815260200190565b60405180910390a45b61105f81846129d3565b925050600101610f5a565b5050506110ea565b81156110ea576003546001600160a01b039081166000908152600e60209081526040808320938816835292905290812080548492906110b29084906129d3565b90915550506003546040518381526001600160a01b03868116921690600080516020612c218339815191529060200160405180910390a35b604080518381526020810183905288917f1f2fe09d86ca51499f562df8aefb1bfebc71cb8ac179e947fe9106bbe4bbc31c910160405180910390a25050505b50505050565b611137611f7c565b6001600160a01b03811661114a57600080fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f15f35c07d0917633e8a1b7232fe844516e2da37ae79f3f99751b2189c6c1fd1f9190a35050565b6111a2611f7c565b6040516001623f026d60e01b0319815260040160405180910390fd5b33806111c8611c6d565b6001600160a01b0316146111f1578060405163118cdaa760e01b815260040161077f91906127ea565b6111fa81612007565b50565b806000805b828110156112405761122c85858381811061121f5761121f61298e565b905060200201353361202e565b61123690836129d3565b9150600101611202565b5060008111611129576040516312d37ee560e31b815260040160405180910390fd5b60008061126d6120f5565b546001600160a01b031692915050565b6112d7604051806101200160405280600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160006001600160a01b0316815260200160008152602001600081525090565b506000908152600560208181526040928390208351610120810185528154815260018201549281019290925260028101549382019390935260038301546060820152600483015460808201529082015460ff8116151560a08301526001600160a01b03610100918290041660c0830152600683015460e08301526007909201549181019190915290565b600061136b612119565b805490915060ff600160401b82041615906001600160401b03166000811580156113925750825b90506000826001600160401b031660011480156113ae5750303b155b9050811580156113bc575080155b156113da5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561140357845460ff60401b1916600160401b1785555b6001600160a01b03881661141657600080fd5b61141f33612142565b6001600160a01b03871661143257600080fd5b6001600160a01b03861661144557600080fd5b600080546001600160a01b0319166001600160a01b0389169081179091556040805163647846a560e01b8152905163647846a5916004808201926020929091908290030181865afa15801561149e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c29190612be2565b600180546001600160a01b0319166001600160a01b0392831617905560005460408051638581424360e01b81529051919092169163858142439160048083019260209291908290030181865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115449190612be2565b600280546001600160a01b03199081166001600160a01b0393841617909155600380549091169188169190911790556040805160a0810182526103e88152610bb8602082015261157c918101919091526101f46060820152611388608090910152600480546001600160501b03191669138801f4157c0bb803e81790556115c9611262565b6001600160a01b0316886001600160a01b0316146115ea576115ea88612007565b831561163057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b6000546001600160a01b03163314611664576040516282b42960e81b815260040160405180910390fd5b6000811161167157600080fd5b60008281526005602081905260409091209081015460ff161561185c5760008381526007602052604081205490036116b2576116ad8383612153565b611880565b6004810154156118345760058101546000848152600d60205260409020546001600160a01b036101009092048216911661170e576000848152600d6020526040902080546001600160a01b0319166001600160a01b0383161790555b6000848152600a602052604081208054909161172a8287612bc0565b90506000805b8381101561182957826117446001866129e6565b820361175757611754838a6129e6565b90505b80156118145760008a8152600c6020526040812087548392908990869081106117825761178261298e565b60009182526020808320909101546001600160a01b03168352820192909252604001812080549091906117b69084906129d3565b92505081905550866001600160a01b03168683815481106117d9576117d961298e565b600091825260209182902001546040518481526001600160a01b03909116918d91600080516020612c41833981519152910160405180910390a45b61181e81846129d3565b925050600101611730565b505050505050611880565b6000838152600b6020526040812080548492906118529084906129d3565b9091555050611880565b6000838152600b60205260408120805484929061187a9084906129d3565b90915550505b827f4f41a3b0a032ebcae925f2ace77d507435840ca4b2dbaffdd7723fa8d72ee542836040516118b291815260200190565b60405180910390a2505050565b6000546001600160a01b031633146118e9576040516282b42960e81b815260040160405180910390fd5b6000858152600560208190526040909120015460ff161561190957600080fd5b6000841161191657600080fd5b6001600160a01b03811661192957600080fd5b60006119348661230c565b905060008061194283610cbf565b9092509050600061271061195a61ffff85168a612ba9565b6119649190612bc0565b9050600061271061197961ffff85168b612ba9565b6119839190612bc0565b9050600081611992848c6129e6565b61199c91906129e6565b9050871580156119ac5750600083115b156119c2576119bb83836129d3565b9150600092505b604051806101200160405280838152602001848152602001828152602001600081526020018a8a90508152602001600115158152602001886001600160a01b031681526020018b81526020016000815250600560008d8152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555060c08201518160050160016101000a8154816001600160a01b0302191690836001600160a01b0316021790555060e08201518160060155610100820151816007015590505060005b88811015611b355760008c8152600a602052604090208a8a83818110611ae857611ae861298e565b9050602002016020810190611afd91906126df565b815460018082018455600093845260209093200180546001600160a01b0319166001600160a01b039290921691909117905501611ac0565b508015611bae576003546001600160a01b039081166000908152600e60209081526040808320938b1683529290529081208054839290611b769084906129d3565b90915550506003546040518281526001600160a01b03898116921690600080516020612c218339815191529060200160405180910390a35b60008b8152600b60205260409020548015611bdc5760008c8152600b6020526040812055611bdc8c82612153565b60008c81526005602052604090208915611c06576001810154611c00908b90612bc0565b60078201555b80546001820154600283015460038401546040805194855260208501939093529183015260608201528d907f2967f7504d941fbe5908ece00f677f793a3a9af800de3002a039cc79690156249060800160405180910390a250505050505050505050505050565b60008061126d6124f7565b6000611c84823361202e565b905060008111611ca7576040516312d37ee560e31b815260040160405180910390fd5b919050565b600081815260056020819052604082209081015460ff16611ce3576040516305716e5560e01b81526004810184905260240161077f565b600581015461010090046001600160a01b0316611cff57600080fd5b600080546040516399c6679d60e01b8152600481018690526001600160a01b03909116906399c6679d90602401602060405180830381865afa158015611d49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6d9190612be2565b9050336001600160a01b03821614611d9c5783336040516358ea1a2760e01b815260040161077f929190612977565b600084815260066020908152604080832033845290915290205460ff1615611ddb5783336040516302a4851560e61b815260040161077f929190612977565b815492506000839003611e04576040516327c4560160e11b81526004810185905260240161077f565b60008481526006602090815260408083203384528252808320805460ff1916600117905586835260079091528120805491611e3e836129ba565b90915550506005820154611e619061010090046001600160a01b03163385611fb0565b60408051848152682922a8aaa2a9aa22a960b91b602082015233918691600080516020612c61833981519152910160405180910390a35050919050565b611ea6611f7c565b6001600160a01b038116611eb957600080fd5b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f4ab5be82436d353e61ca18726e984e561f5c1cc7c6d38b29d2553c790434705a90600090a35050565b611f13611f7c565b6000611f1d6124f7565b80546001600160a01b0319166001600160a01b0384169081178255909150611f43611262565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b33611f85611262565b6001600160a01b031614611fae573360405163118cdaa760e01b815260040161077f91906127ea565b565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261200290849061251b565b505050565b60006120116124f7565b80546001600160a01b0319168155905061202a82612583565b5050565b6000828152600c602090815260408083206001600160a01b038516845290915281205490819003612061575060006105ae565b6000838152600c602090815260408083206001600160a01b038087168552908352818420849055868452600d90925290912054166120a0818484611fb0565b806001600160a01b0316836001600160a01b0316857f5d58a942a5fa4a62bc2978f0ac509c08493ac1337f204b2790d4e5a94e40120a856040516120e691815260200190565b60405180910390a45092915050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006105ae565b61214a6125df565b6111fa81612604565b60008281526005602052604081208054600682015491929111612177576000612188565b8154600683015461218891906129e6565b905060008184101561219a578361219c565b815b905060006121aa82866129e6565b9050836004015460001480156121c05750600081115b1561225657600584015461010090046001600160a01b03168015612250576003546001600160a01b039081166000908152600e60209081526040808320938516835292905290812080548492906122189084906129d3565b90915550506003546040518381526001600160a01b03838116921690600080516020612c218339815191529060200160405180910390a35b60009150505b8184600001600082825461226a91906129d3565b925050819055508084600101600082825461228591906129d3565b92505081905550848460030160008282546122a091906129d3565b90915550506004840154156122c957836004015484600101546122c39190612bc0565b60078501555b604080518381526020810183905287917f10ef923c4c67c367fd6584fa3cb4953c7317008d1b873572a9c8630953c8ffa3910160405180910390a2505050505050565b60008054604051631b62e9c560e11b81526004810184905282916001600160a01b0316906336c5d38a90602401602060405180830381865afa158015612356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237a9190612bff565b9050600181600d81111561239057612390612961565b14806123ad5750600281600d8111156123ab576123ab612961565b145b156123bb5750600192915050565b600381600d8111156123cf576123cf612961565b14806123ec5750600481600d8111156123ea576123ea612961565b145b156123fa5750600292915050565b600581600d81111561240e5761240e612961565b0361241c5750600392915050565b600681600d81111561243057612430612961565b148061244d5750600781600d81111561244b5761244b612961565b145b806124695750600881600d81111561246757612467612961565b145b806124855750600981600d81111561248357612483612961565b145b156124935750600392915050565b600a81600d8111156124a7576124a7612961565b14806124c45750600b81600d8111156124c2576124c2612961565b145b806124e05750600c81600d8111156124de576124de612961565b145b156124ee5750600492915050565b50600092915050565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0090565b600080602060008451602086016000885af18061253e576040513d6000823e3d81fd5b50506000513d91508115612556578060011415612563565b6001600160a01b0384163b155b156111295783604051635274afe760e01b815260040161077f91906127ea565b600061258d6120f5565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6125e7612636565b611fae57604051631afcd79f60e31b815260040160405180910390fd5b61260c6125df565b6001600160a01b0381166111f1576000604051631e4fbdf760e01b815260040161077f91906127ea565b6000612640612119565b54600160401b900460ff16919050565b60006020828403121561266257600080fd5b81356001600160e01b03198116811461267a57600080fd5b9392505050565b6001600160a01b03811681146111fa57600080fd5b600080604083850312156126a957600080fd5b8235915060208301356126bb81612681565b809150509250929050565b6000602082840312156126d857600080fd5b5035919050565b6000602082840312156126f157600080fd5b813561267a81612681565b600060a082840312801561270f57600080fd5b509092915050565b600781106111fa57600080fd5b60006020828403121561273657600080fd5b813561267a81612717565b60008083601f84011261275357600080fd5b5081356001600160401b0381111561276a57600080fd5b6020830191508360208260051b850101111561278557600080fd5b9250929050565b600080600080606085870312156127a257600080fd5b8435935060208501356001600160401b038111156127bf57600080fd5b6127cb87828801612741565b90945092505060408501356127df81612681565b939692955090935050565b6001600160a01b0391909116815260200190565b6000806020838503121561281157600080fd5b82356001600160401b0381111561282757600080fd5b61283385828601612741565b90969095509350505050565b60008060006060848603121561285457600080fd5b833561285f81612681565b9250602084013561286f81612681565b9150604084013561287f81612681565b809150509250925092565b6000806040838503121561289d57600080fd5b50508035926020909101359150565b6000806000806000608086880312156128c457600080fd5b853594506020860135935060408601356001600160401b038111156128e857600080fd5b6128f488828901612741565b909450925050606086013561290881612681565b809150509295509295909350565b6000806040838503121561292957600080fd5b823561293481612681565b915060208301356126bb81612681565b60006020828403121561295657600080fd5b815161267a81612717565b634e487b7160e01b600052602160045260246000fd5b9182526001600160a01b0316602082015260400190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016129cc576129cc6129a4565b5060010190565b808201808211156105ae576105ae6129a4565b818103818111156105ae576105ae6129a4565b61ffff811681146111fa57600080fd5b600060208284031215612a1b57600080fd5b813561267a816129f9565b600081356105ae816129f9565b8135612a3e816129f9565b61ffff8116905081548161ffff1982161783556020840135612a5f816129f9565b63ffff00008160101b168363ffffffff198416171784555050506040820135612a87816129f9565b815461ffff60201b191660209190911b61ffff60201b1617815560006060830135612ab1816129f9565b825461ffff60301b1916603082901b61ffff60301b1617835590505061202a612adc60808401612a26565b82805461ffff60401b191660409290921b61ffff60401b16919091179055565b60a081018235612b0b816129f9565b61ffff1682526020830135612b1f816129f9565b61ffff1660208301526040830135612b36816129f9565b61ffff1660408301526060830135612b4d816129f9565b61ffff1660608301526080830135612b64816129f9565b61ffff811660808401525092915050565b61ffff81811683821601908111156105ae576105ae6129a4565b61ffff82811682821603908111156105ae576105ae6129a4565b80820281158282048414176105ae576105ae6129a4565b600082612bdd57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612bf457600080fd5b815161267a81612681565b600060208284031215612c1157600080fd5b8151600e811061267a57600080fdfef3b94103dc48bec64ec30e13d9b969867513cb0ee413f03dd915bb30d7c90bae17c91f425dbab4ba30d33656a2c5a34b8f61bb20d74d9107c87785c5f2fe5a58ae0c8d9350b2d2fb3ecf7c8a4d3a4dcea1e210b76a30894c73810d9aeca6f8b6a164736f6c634300081c000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061016a5760003560e01c806301ffc9a71461016f5780631142087c1461019757806322537f6e146101ac5780632aad855a14610283578063351c2edd146102a45780633b2879ab146102b75780633eecc133146102ca57806341489f15146102f857806350e5213f1461030b5780635282cb321461032757806361d027b31461035d578063647846a51461037d57806370e36bbe14610390578063715018a6146103a357806379ba5097146103ab57806385814243146103b3578063873f6f9e146103c65780638cc9ede3146103ff5780638da5cb5b14610412578063afaf00b11461041a578063c0c53b8b146104a4578063c1ab0f1f146104b7578063da19b697146104ca578063dbb06c93146104dd578063e30c3978146104f0578063e53c1a93146104f8578063e683453514610531578063ec3c3fa814610544578063f0f4426014610557578063f2fde38b1461056a575b600080fd5b61018261017d366004612650565b61057d565b60405190151581526020015b60405180910390f35b6101aa6101a5366004612696565b6105b4565b005b61022d6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a08101825260045461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b9004909116608082015290565b60405161018e9190600060a08201905061ffff835116825261ffff602084015116602083015261ffff604084015116604083015261ffff606084015116606083015261ffff608084015116608083015292915050565b6102966102913660046126c6565b610746565b60405190815260200161018e565b6102966102b23660046126df565b610af3565b6101aa6102c53660046126fc565b610bab565b6102dd6102d8366004612724565b610cbf565b6040805161ffff93841681529290911660208301520161018e565b6101aa61030636600461278c565b610df5565b61031461138881565b60405161ffff909116815260200161018e565b610296610335366004612696565b6000918252600c602090815260408084206001600160a01b0393909316845291905290205490565b600354610370906001600160a01b031681565b60405161018e91906127ea565b600154610370906001600160a01b031681565b6101aa61039e3660046126df565b61112f565b6101aa61119a565b6101aa6111be565b600254610370906001600160a01b031681565b6101826103d4366004612696565b60009182526006602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6101aa61040d3660046127fe565b6111fd565b610370611262565b61042d6104283660046126c6565b61127d565b60405161018e9190600061012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a0830151151560a083015260018060a01b0360c08401511660c083015260e083015160e083015261010083015161010083015292915050565b6101aa6104b236600461283f565b611361565b6101aa6104c536600461288a565b61163a565b6101aa6104d83660046128ac565b6118bf565b600054610370906001600160a01b031681565b610370611c6d565b610296610506366004612916565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b61029661053f3660046126c6565b611c78565b6102966105523660046126c6565b611cac565b6101aa6105653660046126df565b611e9e565b6101aa6105783660046126df565b611f0b565b60006001600160e01b03198216631ee118c760e21b14806105ae57506001600160e01b031982166301ffc9a760e01b145b92915050565b6105bc611f7c565b6000828152600b6020526040902054806105d557600080fd5b6000805460405163cfbdc98d60e01b8152600481018690526001600160a01b039091169063cfbdc98d90602401602060405180830381865afa15801561061f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106439190612944565b9050600581600681111561065957610659612961565b14806106765750600681600681111561067457610674612961565b145b61067f57600080fd5b600681600681111561069357610693612961565b036106ca5760008481526005602081905260409091209081015460ff166106b957600080fd5b6004810154156106c857600080fd5b505b6000848152600b60205260408120556001600160a01b0383166106ec57600080fd5b600354610706906001600160a01b03858116911684611fb0565b837fab7295029903c409494400584b8bd66c2a73b4887b0bdd6d235b82eaba3b76708360405161073891815260200190565b60405180910390a250505050565b6000818152600560208190526040822090810154839060ff16610788576040516305716e5560e01b815260040161077f91815260200190565b60405180910390fd5b50600581015461010090046001600160a01b03166107a557600080fd5b60008381526006602090815260408083203380855292529091205484919060ff16156107e6576040516302a4851560e61b815260040161077f929190612977565b50506000838152600a602090815260408083208054825181850281018501909352808352919290919083018282801561084857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161082a575b505050505090506000805b825181108015610861575081155b156108a957336001600160a01b03168382815181106108825761088261298e565b60200260200101516001600160a01b031614915080806108a1906129ba565b915050610853565b508433826108cc57604051632ccd76b760e01b815260040161077f929190612977565b5050600083600401541185906108f8576040516327c4560160e11b815260040161077f91815260200190565b5060078301548581610920576040516327c4560160e11b815260040161077f91815260200190565b5060008681526008602052604081208054929650869291610940836129ba565b9091555050600484015460008781526008602052604090205403610a31576000868152600960205260408120546109789083906129d3565b905060008186600101541161098e57600061099e565b81866001015461099e91906129e6565b90508015610a2e576003546001600160a01b039081166000908152600e6020908152604080832060058b01546101009004909416835292905290812080548392906109ea9084906129d3565b909155505060058601546003546040518381526101009092046001600160a01b0390811692911690600080516020612c218339815191529060200160405180910390a35b50505b60008681526009602052604081208054879290610a4f9084906129d3565b909155505060008681526006602090815260408083203384528252808320805460ff1916600117905588835260079091528120805491610a8e836129ba565b9091555050600584015461010090046001600160a01b0316610ab1813388611fb0565b604080518781526a484f4e4553545f4e4f444560a81b602082015233918991600080516020612c61833981519152910160405180910390a35050505050919050565b336000908152600e602090815260408083206001600160a01b038516845290915290205480610b35576040516312d37ee560e31b815260040160405180910390fd5b336000818152600e602090815260408083206001600160a01b0387168085529252822091909155610b669183611fb0565b6040518181526001600160a01b0383169033907fcb3ed9e7c2c756c1b14e098be524d40bc18ba24f84993f9886edcad044f3d59c9060200160405180910390a3919050565b610bb3611f7c565b611388610bc66080830160608401612a09565b61ffff161115610bd557600080fd5b6000610be76080830160608401612a09565b61ffff16610bfb6060840160408501612a09565b61ffff16610c0f6040850160208601612a09565b61ffff16610c206020860186612a09565b61ffff16610c2e91906129d3565b610c3891906129d3565b610c4291906129d3565b90506127108114610c5257600080fd5b612710610c6560a0840160808501612a09565b61ffff161115610c7457600080fd5b816004610c818282612a33565b9050507fbf2706bf3bd0d1935782ec192df014829244863363c94cffce03b59c2a10de5982604051610cb39190612afc565b60405180910390a15050565b6040805160a08101825260045461ffff808216835262010000820481166020840152600160201b8204811693830193909352600160301b810483166060830152600160401b9004909116608082015260009081906001846006811115610d2757610d27612961565b1480610d4457506000846006811115610d4257610d42612961565b145b15610d525760009250610dd2565b6002846006811115610d6657610d66612961565b03610d745780519250610dd2565b6003846006811115610d8857610d88612961565b03610da55760208101518151610d9e9190612b75565b9250610dd2565b6004846006811115610db957610db9612961565b03610dd25760208101518151610dcf9190612b75565b92505b6060810151610de384612710612b8f565b610ded9190612b8f565b915050915091565b6000546001600160a01b03163314610e1f576040516282b42960e81b815260040160405180910390fd5b6000848152600b602052604081205490819003610e3c5750611129565b6000858152600b60205260408120556001600160a01b038216610e5e57600080fd5b6000858152600d6020526040812080546001600160a01b0319166001600160a01b03851617905560045461271090610ea29061ffff600160401b9091041684612ba9565b610eac9190612bc0565b90506000610eba82846129e6565b90508015610f34576003546001600160a01b039081166000908152600e6020908152604080832093881683529290529081208054839290610efc9084906129d3565b90915550506003546040518281526001600160a01b03868116921690600080516020612c218339815191529060200160405180910390a35b600082118015610f4357508415155b15611072576000610f548684612bc0565b90506000805b8781101561106a5782610f6e60018a6129e6565b8203610f8157610f7e83876129e6565b90505b80156110555760008b8152600c6020526040812082918c8c86818110610fa957610fa961298e565b9050602002016020810190610fbe91906126df565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610fed91906129d3565b90915550506001600160a01b0388168a8a8481811061100e5761100e61298e565b905060200201602081019061102391906126df565b6001600160a01b03168c600080516020612c418339815191528460405161104c91815260200190565b60405180910390a45b61105f81846129d3565b925050600101610f5a565b5050506110ea565b81156110ea576003546001600160a01b039081166000908152600e60209081526040808320938816835292905290812080548492906110b29084906129d3565b90915550506003546040518381526001600160a01b03868116921690600080516020612c218339815191529060200160405180910390a35b604080518381526020810183905288917f1f2fe09d86ca51499f562df8aefb1bfebc71cb8ac179e947fe9106bbe4bbc31c910160405180910390a25050505b50505050565b611137611f7c565b6001600160a01b03811661114a57600080fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f15f35c07d0917633e8a1b7232fe844516e2da37ae79f3f99751b2189c6c1fd1f9190a35050565b6111a2611f7c565b6040516001623f026d60e01b0319815260040160405180910390fd5b33806111c8611c6d565b6001600160a01b0316146111f1578060405163118cdaa760e01b815260040161077f91906127ea565b6111fa81612007565b50565b806000805b828110156112405761122c85858381811061121f5761121f61298e565b905060200201353361202e565b61123690836129d3565b9150600101611202565b5060008111611129576040516312d37ee560e31b815260040160405180910390fd5b60008061126d6120f5565b546001600160a01b031692915050565b6112d7604051806101200160405280600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160006001600160a01b0316815260200160008152602001600081525090565b506000908152600560208181526040928390208351610120810185528154815260018201549281019290925260028101549382019390935260038301546060820152600483015460808201529082015460ff8116151560a08301526001600160a01b03610100918290041660c0830152600683015460e08301526007909201549181019190915290565b600061136b612119565b805490915060ff600160401b82041615906001600160401b03166000811580156113925750825b90506000826001600160401b031660011480156113ae5750303b155b9050811580156113bc575080155b156113da5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561140357845460ff60401b1916600160401b1785555b6001600160a01b03881661141657600080fd5b61141f33612142565b6001600160a01b03871661143257600080fd5b6001600160a01b03861661144557600080fd5b600080546001600160a01b0319166001600160a01b0389169081179091556040805163647846a560e01b8152905163647846a5916004808201926020929091908290030181865afa15801561149e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c29190612be2565b600180546001600160a01b0319166001600160a01b0392831617905560005460408051638581424360e01b81529051919092169163858142439160048083019260209291908290030181865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115449190612be2565b600280546001600160a01b03199081166001600160a01b0393841617909155600380549091169188169190911790556040805160a0810182526103e88152610bb8602082015261157c918101919091526101f46060820152611388608090910152600480546001600160501b03191669138801f4157c0bb803e81790556115c9611262565b6001600160a01b0316886001600160a01b0316146115ea576115ea88612007565b831561163057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b6000546001600160a01b03163314611664576040516282b42960e81b815260040160405180910390fd5b6000811161167157600080fd5b60008281526005602081905260409091209081015460ff161561185c5760008381526007602052604081205490036116b2576116ad8383612153565b611880565b6004810154156118345760058101546000848152600d60205260409020546001600160a01b036101009092048216911661170e576000848152600d6020526040902080546001600160a01b0319166001600160a01b0383161790555b6000848152600a602052604081208054909161172a8287612bc0565b90506000805b8381101561182957826117446001866129e6565b820361175757611754838a6129e6565b90505b80156118145760008a8152600c6020526040812087548392908990869081106117825761178261298e565b60009182526020808320909101546001600160a01b03168352820192909252604001812080549091906117b69084906129d3565b92505081905550866001600160a01b03168683815481106117d9576117d961298e565b600091825260209182902001546040518481526001600160a01b03909116918d91600080516020612c41833981519152910160405180910390a45b61181e81846129d3565b925050600101611730565b505050505050611880565b6000838152600b6020526040812080548492906118529084906129d3565b9091555050611880565b6000838152600b60205260408120805484929061187a9084906129d3565b90915550505b827f4f41a3b0a032ebcae925f2ace77d507435840ca4b2dbaffdd7723fa8d72ee542836040516118b291815260200190565b60405180910390a2505050565b6000546001600160a01b031633146118e9576040516282b42960e81b815260040160405180910390fd5b6000858152600560208190526040909120015460ff161561190957600080fd5b6000841161191657600080fd5b6001600160a01b03811661192957600080fd5b60006119348661230c565b905060008061194283610cbf565b9092509050600061271061195a61ffff85168a612ba9565b6119649190612bc0565b9050600061271061197961ffff85168b612ba9565b6119839190612bc0565b9050600081611992848c6129e6565b61199c91906129e6565b9050871580156119ac5750600083115b156119c2576119bb83836129d3565b9150600092505b604051806101200160405280838152602001848152602001828152602001600081526020018a8a90508152602001600115158152602001886001600160a01b031681526020018b81526020016000815250600560008d8152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555060c08201518160050160016101000a8154816001600160a01b0302191690836001600160a01b0316021790555060e08201518160060155610100820151816007015590505060005b88811015611b355760008c8152600a602052604090208a8a83818110611ae857611ae861298e565b9050602002016020810190611afd91906126df565b815460018082018455600093845260209093200180546001600160a01b0319166001600160a01b039290921691909117905501611ac0565b508015611bae576003546001600160a01b039081166000908152600e60209081526040808320938b1683529290529081208054839290611b769084906129d3565b90915550506003546040518281526001600160a01b03898116921690600080516020612c218339815191529060200160405180910390a35b60008b8152600b60205260409020548015611bdc5760008c8152600b6020526040812055611bdc8c82612153565b60008c81526005602052604090208915611c06576001810154611c00908b90612bc0565b60078201555b80546001820154600283015460038401546040805194855260208501939093529183015260608201528d907f2967f7504d941fbe5908ece00f677f793a3a9af800de3002a039cc79690156249060800160405180910390a250505050505050505050505050565b60008061126d6124f7565b6000611c84823361202e565b905060008111611ca7576040516312d37ee560e31b815260040160405180910390fd5b919050565b600081815260056020819052604082209081015460ff16611ce3576040516305716e5560e01b81526004810184905260240161077f565b600581015461010090046001600160a01b0316611cff57600080fd5b600080546040516399c6679d60e01b8152600481018690526001600160a01b03909116906399c6679d90602401602060405180830381865afa158015611d49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6d9190612be2565b9050336001600160a01b03821614611d9c5783336040516358ea1a2760e01b815260040161077f929190612977565b600084815260066020908152604080832033845290915290205460ff1615611ddb5783336040516302a4851560e61b815260040161077f929190612977565b815492506000839003611e04576040516327c4560160e11b81526004810185905260240161077f565b60008481526006602090815260408083203384528252808320805460ff1916600117905586835260079091528120805491611e3e836129ba565b90915550506005820154611e619061010090046001600160a01b03163385611fb0565b60408051848152682922a8aaa2a9aa22a960b91b602082015233918691600080516020612c61833981519152910160405180910390a35050919050565b611ea6611f7c565b6001600160a01b038116611eb957600080fd5b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f4ab5be82436d353e61ca18726e984e561f5c1cc7c6d38b29d2553c790434705a90600090a35050565b611f13611f7c565b6000611f1d6124f7565b80546001600160a01b0319166001600160a01b0384169081178255909150611f43611262565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b33611f85611262565b6001600160a01b031614611fae573360405163118cdaa760e01b815260040161077f91906127ea565b565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261200290849061251b565b505050565b60006120116124f7565b80546001600160a01b0319168155905061202a82612583565b5050565b6000828152600c602090815260408083206001600160a01b038516845290915281205490819003612061575060006105ae565b6000838152600c602090815260408083206001600160a01b038087168552908352818420849055868452600d90925290912054166120a0818484611fb0565b806001600160a01b0316836001600160a01b0316857f5d58a942a5fa4a62bc2978f0ac509c08493ac1337f204b2790d4e5a94e40120a856040516120e691815260200190565b60405180910390a45092915050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b6000807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006105ae565b61214a6125df565b6111fa81612604565b60008281526005602052604081208054600682015491929111612177576000612188565b8154600683015461218891906129e6565b905060008184101561219a578361219c565b815b905060006121aa82866129e6565b9050836004015460001480156121c05750600081115b1561225657600584015461010090046001600160a01b03168015612250576003546001600160a01b039081166000908152600e60209081526040808320938516835292905290812080548492906122189084906129d3565b90915550506003546040518381526001600160a01b03838116921690600080516020612c218339815191529060200160405180910390a35b60009150505b8184600001600082825461226a91906129d3565b925050819055508084600101600082825461228591906129d3565b92505081905550848460030160008282546122a091906129d3565b90915550506004840154156122c957836004015484600101546122c39190612bc0565b60078501555b604080518381526020810183905287917f10ef923c4c67c367fd6584fa3cb4953c7317008d1b873572a9c8630953c8ffa3910160405180910390a2505050505050565b60008054604051631b62e9c560e11b81526004810184905282916001600160a01b0316906336c5d38a90602401602060405180830381865afa158015612356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237a9190612bff565b9050600181600d81111561239057612390612961565b14806123ad5750600281600d8111156123ab576123ab612961565b145b156123bb5750600192915050565b600381600d8111156123cf576123cf612961565b14806123ec5750600481600d8111156123ea576123ea612961565b145b156123fa5750600292915050565b600581600d81111561240e5761240e612961565b0361241c5750600392915050565b600681600d81111561243057612430612961565b148061244d5750600781600d81111561244b5761244b612961565b145b806124695750600881600d81111561246757612467612961565b145b806124855750600981600d81111561248357612483612961565b145b156124935750600392915050565b600a81600d8111156124a7576124a7612961565b14806124c45750600b81600d8111156124c2576124c2612961565b145b806124e05750600c81600d8111156124de576124de612961565b145b156124ee5750600492915050565b50600092915050565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0090565b600080602060008451602086016000885af18061253e576040513d6000823e3d81fd5b50506000513d91508115612556578060011415612563565b6001600160a01b0384163b155b156111295783604051635274afe760e01b815260040161077f91906127ea565b600061258d6120f5565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6125e7612636565b611fae57604051631afcd79f60e31b815260040160405180910390fd5b61260c6125df565b6001600160a01b0381166111f1576000604051631e4fbdf760e01b815260040161077f91906127ea565b6000612640612119565b54600160401b900460ff16919050565b60006020828403121561266257600080fd5b81356001600160e01b03198116811461267a57600080fd5b9392505050565b6001600160a01b03811681146111fa57600080fd5b600080604083850312156126a957600080fd5b8235915060208301356126bb81612681565b809150509250929050565b6000602082840312156126d857600080fd5b5035919050565b6000602082840312156126f157600080fd5b813561267a81612681565b600060a082840312801561270f57600080fd5b509092915050565b600781106111fa57600080fd5b60006020828403121561273657600080fd5b813561267a81612717565b60008083601f84011261275357600080fd5b5081356001600160401b0381111561276a57600080fd5b6020830191508360208260051b850101111561278557600080fd5b9250929050565b600080600080606085870312156127a257600080fd5b8435935060208501356001600160401b038111156127bf57600080fd5b6127cb87828801612741565b90945092505060408501356127df81612681565b939692955090935050565b6001600160a01b0391909116815260200190565b6000806020838503121561281157600080fd5b82356001600160401b0381111561282757600080fd5b61283385828601612741565b90969095509350505050565b60008060006060848603121561285457600080fd5b833561285f81612681565b9250602084013561286f81612681565b9150604084013561287f81612681565b809150509250925092565b6000806040838503121561289d57600080fd5b50508035926020909101359150565b6000806000806000608086880312156128c457600080fd5b853594506020860135935060408601356001600160401b038111156128e857600080fd5b6128f488828901612741565b909450925050606086013561290881612681565b809150509295509295909350565b6000806040838503121561292957600080fd5b823561293481612681565b915060208301356126bb81612681565b60006020828403121561295657600080fd5b815161267a81612717565b634e487b7160e01b600052602160045260246000fd5b9182526001600160a01b0316602082015260400190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016129cc576129cc6129a4565b5060010190565b808201808211156105ae576105ae6129a4565b818103818111156105ae576105ae6129a4565b61ffff811681146111fa57600080fd5b600060208284031215612a1b57600080fd5b813561267a816129f9565b600081356105ae816129f9565b8135612a3e816129f9565b61ffff8116905081548161ffff1982161783556020840135612a5f816129f9565b63ffff00008160101b168363ffffffff198416171784555050506040820135612a87816129f9565b815461ffff60201b191660209190911b61ffff60201b1617815560006060830135612ab1816129f9565b825461ffff60301b1916603082901b61ffff60301b1617835590505061202a612adc60808401612a26565b82805461ffff60401b191660409290921b61ffff60401b16919091179055565b60a081018235612b0b816129f9565b61ffff1682526020830135612b1f816129f9565b61ffff1660208301526040830135612b36816129f9565b61ffff1660408301526060830135612b4d816129f9565b61ffff1660608301526080830135612b64816129f9565b61ffff811660808401525092915050565b61ffff81811683821601908111156105ae576105ae6129a4565b61ffff82811682821603908111156105ae576105ae6129a4565b80820281158282048414176105ae576105ae6129a4565b600082612bdd57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612bf457600080fd5b815161267a81612681565b600060208284031215612c1157600080fd5b8151600e811061267a57600080fdfef3b94103dc48bec64ec30e13d9b969867513cb0ee413f03dd915bb30d7c90bae17c91f425dbab4ba30d33656a2c5a34b8f61bb20d74d9107c87785c5f2fe5a58ae0c8d9350b2d2fb3ecf7c8a4d3a4dcea1e210b76a30894c73810d9aeca6f8b6a164736f6c634300081c000a",
  "linkReferences": {},
  "deployedLinkReferences": {},
  "immutableReferences": {},
  "inputSourceName": "project/contracts/E3RefundManager.sol",
  "buildInfoId": "solc-0_8_28-58b894a0ac77a2d784be77b69288a062b8f6f518"
}