{
  "_format": "hh-sol-artifact-1",
  "contractName": "UBIScheme",
  "sourceName": "contracts/ubi/UBIScheme.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "ActivatedUser",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newCycleLength",
          "type": "uint256"
        }
      ],
      "name": "CycleLengthSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newDay",
          "type": "uint256"
        }
      ],
      "name": "DaySet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "fished_account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "claimAmount",
          "type": "uint256"
        }
      ],
      "name": "InactiveUserFished",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bool",
          "name": "ShouldWithdrawFromDAO",
          "type": "bool"
        }
      ],
      "name": "ShouldWithdrawFromDAOSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "total",
          "type": "uint256"
        }
      ],
      "name": "TotalFished",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "day",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "dailyUbi",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "UBICalculated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "claimer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "UBIClaimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "day",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "pool",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cycleLength",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "dailyUBIPool",
          "type": "uint256"
        }
      ],
      "name": "UBICycleCalculated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "prevBalance",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newBalance",
          "type": "uint256"
        }
      ],
      "name": "WithdrawFromDao",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "activeUsersCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "avatar",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_member",
          "type": "address"
        }
      ],
      "name": "checkEntitlement",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "checkEntitlement",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "claim",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "claimDay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOfClaimers",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "claimAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentCycleLength",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentDay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentDayInCycle",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cycleLength",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "dailyCyclePool",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "dailyUBIHistory",
      "outputs": [
        {
          "internalType": "bool",
          "name": "hasWithdrawn",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "openAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "dailyUbi",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "dao",
      "outputs": [
        {
          "internalType": "contract Controller",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "estimateNextDailyUBI",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "firstClaimPool",
      "outputs": [
        {
          "internalType": "contract IFirstClaimPool",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        }
      ],
      "name": "fish",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_accounts",
          "type": "address[]"
        }
      ],
      "name": "fishMulti",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "fishedUsersAddresses",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "day",
          "type": "uint256"
        }
      ],
      "name": "getClaimAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "day",
          "type": "uint256"
        }
      ],
      "name": "getClaimerCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getDailyStats",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasClaimed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract INameService",
          "name": "_ns",
          "type": "address"
        },
        {
          "internalType": "contract IFirstClaimPool",
          "name": "_firstClaimPool",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_maxInactiveDays",
          "type": "uint256"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        }
      ],
      "name": "isActiveUser",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_account",
          "type": "address"
        }
      ],
      "name": "isNotNewUser",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "iterationGasLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lastClaimed",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastWithdrawDay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxInactiveDays",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minActiveUsers",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nameService",
      "outputs": [
        {
          "internalType": "contract INameService",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nativeToken",
      "outputs": [
        {
          "internalType": "contract IGoodDollar",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "_pause",
          "type": "bool"
        }
      ],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "periodStart",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_activeUserCount",
          "type": "uint256"
        }
      ],
      "name": "setActiveUserCount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_newLength",
          "type": "uint256"
        }
      ],
      "name": "setCycleLength",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setDay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "_shouldWithdraw",
          "type": "bool"
        }
      ],
      "name": "setShouldWithdrawFromDAO",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "_use",
          "type": "bool"
        }
      ],
      "name": "setUseFirstClaimPool",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "shouldWithdrawFromDAO",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "startOfCycle",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "totalClaimsPerUser",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updateAvatar",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "useFirstClaimPool",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_recipient",
          "type": "address"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523060805234801561001457600080fd5b50608051612d8c61004c60003960008181610e5c01528181610e9c015281816112d001528181611310015261138c0152612d8c6000f3fe6080604052600436106102385760003560e01c8062f714ce1461023d578063013eba921461025f57806302329a291461029f578063069786ea146102bf5780630ce82d67146102e95780631248b101146102fe5780631794bb3c146103355780631a787f2e146103555780631b3c90a8146103755780631bbc644c1461038a5780631d8f5ea9146103ba57806322b45727146103d05780633659cfe6146103e657806337658574146104065780633d84ceca1461041c5780633e6326fc1461043c5780634162169f146104695780634202d21414610489578063456ac1c2146104a95780634b4c7180146104c35780634e71d92d146104dd5780634f1ef286146104f25780635231e2f01461050557806352d1902d14610535578063560796d11461054a5780635aef7de61461059b5780635c9302c9146105bb5780635c975abb146105d157806373b2e80e146105eb578063741470ac1461060b5780638081cbbd146106215780638fd247d21461064157806398d6621b146106615780639dc2c03314610676578063a21f698a1461068c578063b656223d146106ac578063ba075410146106c2578063c033abf2146106d8578063c1337508146106ee578063c77138701461070e578063c7a76adf14610723578063cc054dfc14610743578063cef6360014610770578063d6a9f61814610790578063d7c4cbb8146107b0578063dddc3616146107c6578063de1de3a0146107db578063e1758bd8146107fb578063eac471a014610810578063eda4e6d614610826575b600080fd5b34801561024957600080fd5b5061025d61025836600461273f565b61083c565b005b34801561026b57600080fd5b5061028c61027a36600461276f565b609b6020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156102ab57600080fd5b5061025d6102ba36600461279a565b61090a565b3480156102cb57600080fd5b506102d4610925565b60408051928352602083019190915201610296565b3480156102f557600080fd5b5061028c610963565b34801561030a57600080fd5b506102d46103193660046127b7565b609a602052600090815260409020600181015460029091015482565b34801561034157600080fd5b5061025d6103503660046127d0565b610986565b34801561036157600080fd5b5061028c61037036600461276f565b610b74565b34801561038157600080fd5b5061025d610c9c565b34801561039657600080fd5b506103aa6103a536600461276f565b610dc3565b6040519015158152602001610296565b3480156103c657600080fd5b5061028c609e5481565b3480156103dc57600080fd5b5061028c60a05481565b3480156103f257600080fd5b5061025d61040136600461276f565b610e52565b34801561041257600080fd5b5061028c60a95481565b34801561042857600080fd5b5061025d6104373660046127b7565b610f1a565b34801561044857600080fd5b5060675461045c906001600160a01b031681565b6040516102969190612811565b34801561047557600080fd5b5060655461045c906001600160a01b031681565b34801561049557600080fd5b506103aa6104a436600461276f565b610fbd565b3480156104b557600080fd5b5060a3546103aa9060ff1681565b3480156104cf57600080fd5b5060a8546103aa9060ff1681565b3480156104e957600080fd5b506103aa61101f565b61025d610500366004612892565b6112c6565b34801561051157600080fd5b506103aa61052036600461276f565b60ac6020526000908152604090205460ff1681565b34801561054157600080fd5b5061028c61137f565b34801561055657600080fd5b506105846105653660046127b7565b60ab602052600090815260409020805460019091015460ff9091169082565b604080519215158352602083019190915201610296565b3480156105a757600080fd5b5060665461045c906001600160a01b031681565b3480156105c757600080fd5b5061028c609c5481565b3480156105dd57600080fd5b5060ae546103aa9060ff1681565b3480156105f757600080fd5b506103aa61060636600461276f565b61142d565b34801561061757600080fd5b5061028c60a75481565b34801561062d57600080fd5b5060aa5461045c906001600160a01b031681565b34801561064d57600080fd5b5061025d61065c3660046127b7565b611459565b34801561066d57600080fd5b5061028c611466565b34801561068257600080fd5b5061028c60a55481565b34801561069857600080fd5b506103aa6106a736600461276f565b611471565b3480156106b857600080fd5b5061028c60a25481565b3480156106ce57600080fd5b5061028c60a65481565b3480156106e457600080fd5b5061028c609f5481565b3480156106fa57600080fd5b5061028c610709366004612924565b611497565b34801561071a57600080fd5b5061028c6115e6565b34801561072f57600080fd5b5061028c61073e3660046127b7565b6116c9565b34801561074f57600080fd5b5061028c61075e36600461276f565b60ad6020526000908152604090205481565b34801561077c57600080fd5b5061028c61078b3660046127b7565b6116de565b34801561079c57600080fd5b5061025d6107ab36600461279a565b6116f3565b3480156107bc57600080fd5b5061028c60a15481565b3480156107d257600080fd5b5061025d61170e565b3480156107e757600080fd5b5061025d6107f636600461279a565b61176d565b34801561080757600080fd5b5061045c6117bc565b34801561081c57600080fd5b5061028c60a45481565b34801561083257600080fd5b5061028c609d5481565b610844611844565b600061084e6117bc565b60405163a9059cbb60e01b81529091506001600160a01b0382169063a9059cbb9061087f90859087906004016129d5565b6020604051808303816000875af115801561089e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c291906129ee565b6109055760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b60448201526064015b60405180910390fd5b505050565b610912611844565b60ae805460ff1916911515919091179055565b600080600062015180609d544261093c9190612a21565b6109469190612a34565b9050610951816116c9565b61095a826116de565b92509250509091565b60006201518060a654426109779190612a21565b6109819190612a34565b905090565b600054610100900460ff16158080156109a65750600054600160ff909116105b806109c757506109b530611909565b1580156109c7575060005460ff166001145b610a2a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108fc565b6000805460ff191660011790558015610a4d576000805461ff0019166101001790555b60008211610a9d5760405162461bcd60e51b815260206004820181905260248201527f4d617820696e61637469766520646179732063616e6e6f74206265207a65726f60448201526064016108fc565b610aa684611918565b60a282905560aa80546001600160a01b0319166001600160a01b03851617905560a3805460ff19169055601e60a4556202d2a8609f55610ae96201518042612a34565b610af69062015180612a56565b610b029061a8c0612a6d565b609d81905560a65560a8805460ff19166001600160a01b03851615151790556103e860a9558015610b6e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b50505050565b6000609d54421015610b8857506000919050565b60a85460ff168015610bc25750610b9e82611471565b1580610bc257506001600160a01b038216600090815260ac602052604090205460ff165b15610c445760aa60009054906101000a90046001600160a01b03166001600160a01b031663830953ab6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3e9190612a80565b92915050565b62015180609d5442610c569190612a21565b610c609190612a34565b609c54148015610c7257506000609e54115b15610c9457610c808261142d565b610c8c57609e54610c3e565b600092915050565b610c3e6115e6565b60675460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa158015610cff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d239190612a99565b606580546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de6916004808201926020929091908290030181865afa158015610d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da19190612a99565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b60ae5460009060ff16158015610ddb57506000609d54115b8015610de95750609d544210155b610e055760405162461bcd60e51b81526004016108fc90612ab6565b610e0e8261193b565b610e475760405162461bcd60e51b815260206004820152600a6024820152690c6c2dc4ee840ccd2e6d60b31b60448201526064016108fc565b610c3e82600161197f565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610e9a5760405162461bcd60e51b81526004016108fc90612aed565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610ecc611a2d565b6001600160a01b031614610ef25760405162461bcd60e51b81526004016108fc90612b27565b610efb81611a49565b60408051600080825260208201909252610f1791839190611a51565b50565b610f22611844565b60008111610f7c5760405162461bcd60e51b815260206004820152602160248201527f6379636c65206d757374206265206174206c65617374203120646179206c6f6e6044820152606760f81b60648201526084016108fc565b60a4819055600060a7556040518181527fa61e6cca2c12e2a0a493683acfe95b034f0f50d793434f4dfe3ba06ea201f344906020015b60405180910390a150565b6001600160a01b0381166000908152609b6020526040812054610fdf83611471565b1561101657600062015180610ff48342612a21565b610ffe9190612a34565b905060a254811015611014575060019392505050565b505b50600092915050565b60ae5460009060ff1615801561103757506000609d54115b80156110455750609d544210155b6110615760405162461bcd60e51b81526004016108fc90612ab6565b60675460405163bf40fac160e01b81526020600482015260086024820152674944454e5449545960c01b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa1580156110c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e79190612a99565b6001600160a01b0316632d0e9b46336040518263ffffffff1660e01b81526004016111129190612811565b602060405180830381865afa15801561112f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111539190612a99565b90506001600160a01b0381166111a85760405162461bcd60e51b815260206004820152601a60248201527915509254d8da195b594e881b9bdd081dda1a5d195b1a5cdd195960321b60448201526064016108fc565b60006111b48233611bbc565b60675460405163bf40fac160e01b815260206004820152600d60248201526c4744414f5f434c41494d45525360981b60448201529192506000916001600160a01b039091169063bf40fac190606401602060405180830381865afa158015611220573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112449190612a99565b905081801561125b57506001600160a01b03811615155b156112bf5760405163748abee960e11b81526001600160a01b0382169063e9157dd29061128c908690600401612811565b600060405180830381600087803b1580156112a657600080fd5b505af11580156112ba573d6000803e3d6000fd5b505050505b5091505090565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361130e5760405162461bcd60e51b81526004016108fc90612aed565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611340611a2d565b6001600160a01b0316146113665760405162461bcd60e51b81526004016108fc90612b27565b61136f82611a49565b61137b82826001611a51565b5050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461141a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b60648201526084016108fc565b50600080516020612d1083398151915290565b609c546000908152609a602090815260408083206001600160a01b039094168352929052205460ff1690565b611461611844565b60a055565b600061098133610b74565b6001600160a01b0381166000908152609b602052604081205415610c8c57506001919050565b60ae5460009060ff161580156114af57506000609d54115b80156114bd5750609d544210155b6114d95760405162461bcd60e51b81526004016108fc90612ab6565b6000805b835182101561159857609f545a106115985761151184838151811061150457611504612b61565b602002602001015161193b565b156115885761153a84838151811061152b5761152b612b61565b6020026020010151600061197f565b6115785760405162461bcd60e51b815260206004820152600f60248201526e199a5cda081a185cc819985a5b1959608a1b60448201526064016108fc565b609e546115859082612a6d565b90505b61159182612b77565b91506114dd565b80156115ac576115ac333383600080611d07565b6040518281527f72b174db45b7e58932cb0c6bf37a7158f40424a078b07677d823cafdb3db540f9060200160405180910390a15092915050565b6000806115f16117bc565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161161c9190612811565b602060405180830381865afa158015611639573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165d9190612a80565b9050600060a55460a454836116729190612a34565b119050600060a5549050600060a754611689610963565b1015806116935750825b156116a85760a4546116a59085612a34565b91505b6116b660a05460a954611fa0565b6116c09083612a34565b95945050505050565b6000908152609a602052604090206001015490565b6000908152609a602052604090206002015490565b6116fb611844565b60a8805460ff1916911515919091179055565b600062015180609d54426117229190612a21565b61172c9190612a34565b9050609c54811115610f1757609c8190556040518181527f67eb03bd555181f9dd23f546e4331ddfb8b4a7d0c8d261ba44e037f30ce894ea90602001610fb2565b611775611844565b60a3805460ff191682151590811790915560405160ff909116151581527f6cd9a0fd2e006be39a9918bf56c85cae1d4f4599474483ff18cb93355ebaaf8e90602001610fb2565b60675460405163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015611820573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109819190612a99565b60655460408051632d77bef360e11b8152905133926001600160a01b031691635aef7de69160048083019260209291908290030181865afa15801561188d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b19190612a99565b6001600160a01b0316146119075760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79206176617461722063616e2063616c6c2074686973206d6574686f6460448201526064016108fc565b565b6001600160a01b03163b151590565b606780546001600160a01b0319166001600160a01b038316179055610f17610c9c565b600061194682611471565b8015611958575061195682610fbd565b155b8015610c3e5750506001600160a01b0316600090815260ac602052604090205460ff161590565b6001600160a01b038216600090815260ac60205260408120805460ff19166001179055806119ab611fb9565b60a054909150156119cf57600160a060008282546119c99190612a21565b90915550505b82156119e3576119e3333383600080611d07565b6040518181526001600160a01b0385169033907f3c91d315d82534112f8ce552cb79133a14191077a2d715fd65cabd026fc27c749060200160405180910390a35060019392505050565b600080516020612d10833981519152546001600160a01b031690565b610f17611844565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611a84576109058361224b565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611ade575060408051601f3d908101601f19168201909252611adb91810190612a80565b60015b611b415760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016108fc565b600080516020612d108339815191528114611bb05760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016108fc565b506109058383836122e5565b600080611bc7611fb9565b9050611bd284611471565b8015611bf757506001600160a01b038416600090815260ac602052604090205460ff16155b8015611c095750611c078461142d565b155b15611c2757611c1d84848360016000611d07565b6001915050610c3e565b611c3084611471565b1580611c5457506001600160a01b038416600090815260ac602052604090205460ff165b15611cfd57600160a06000828254611c6c9190612a6d565b90915550506001600160a01b038416600090815260ac60205260409020805460ff1916905560a85460ff1615611cb057611cab84846000806001611d07565b611cbf565b611cbf84848360016000611d07565b6040516001600160a01b038516907f2f9cfaa2a5c422dfab45f7d0da071f030fc2d3a7a1f0a255c028eff9b6d3d93690600090a26001915050610c3e565b5060009392505050565b8180611d105750805b15611d9e576001609a6000609c5481526020019081526020016000206001016000828254611d3e9190612a6d565b9091555050609c546000908152609a602090815260408083206001600160a01b03891684528252808320805460ff19166001908117909155609b835281842042905560ad9092528220805491929091611d98908490612a6d565b90915550505b8015611e795760aa54604051636bf2228d60e11b81526000916001600160a01b03169063d7e4451a90611dd5908890600401612811565b6020604051808303816000875af1158015611df4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e189190612a80565b905080609a6000609c5481526020019081526020016000206002016000828254611e429190612a6d565b90915550506040518181526001600160a01b03871690600080516020612cf08339815191529060200160405180910390a250611f99565b8115611ed557609c546000908152609a602052604081206002018054859290611ea3908490612a6d565b90915550506040518381526001600160a01b03861690600080516020612cf08339815191529060200160405180910390a25b6000611edf6117bc565b60405163a9059cbb60e01b81529091506001600160a01b0382169063a9059cbb90611f1090889088906004016129d5565b6020604051808303816000875af1158015611f2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5391906129ee565b611f975760405162461bcd60e51b815260206004820152601560248201527418db185a5b481d1c985b9cd9995c8819985a5b1959605a1b60448201526064016108fc565b505b5050505050565b600081831015611fb05781611fb2565b825b9392505050565b6000611fc361170e565b60a154609c54141580611fd65750609e54155b15612244576000611fe56117bc565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016120159190612811565b602060405180830381865afa158015612032573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120569190612a80565b9050600060a55460a4548361206b9190612a34565b11905060a754612079610963565b1015806120835750805b1561218c5760a35460ff161561210b5761209b61230a565b6040516370a0823160e01b81526001600160a01b038416906370a08231906120c7903090600401612811565b602060405180830381865afa1580156120e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121089190612a80565b91505b60a4546121189083612a34565b60a55560a45460a75561212d610e1042612a34565b61213990610e10612a56565b60a655609c5460a45460a554604080519384526020840186905283019190915260608201527f83e0d535b9e84324e0a25922406398d6ff5f96d0c686204ee490e16d7670566f9060800160405180910390a15b609c5460a1819055600090815260ab6020526040902060a354815460ff191660ff90911615151781556001810183905560a05460a9546121cc9190611fa0565b60a5546121d99190612a34565b609e5560a0546121f7906121ef90600290612a34565b60a954611fa0565b60a955609c54609e546040805192835260208301919091524382820152517f836fa39995340265746dfe9587d9fe5c5de35b7bce778afd9b124ce1cfeafdc49181900360600190a1505050505b50609e5490565b61225481611909565b6122b65760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016108fc565b600080516020612d1083398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6122ee836125c8565b6000825111806122fb5750805b1561090557610b6e8383612608565b60006123146117bc565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016123449190612811565b602060405180830381865afa158015612361573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123859190612a80565b6066546040516370a0823160e01b81529192506000916001600160a01b03858116926370a08231926123bd9290911690600401612811565b602060405180830381865afa1580156123da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fe9190612a80565b6065546040519192506001600160a01b03169063d1b7089a90859061242990309086906024016129d5565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052606654905160e085901b6001600160e01b03191681526124849392916001600160a01b031690600090600401612be0565b6000604051808303816000875af11580156124a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124cb9190810190612c14565b50600090506124da8284612a6d565b6040516370a0823160e01b81529091506001600160a01b038516906370a0823190612509903090600401612811565b602060405180830381865afa158015612526573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254a9190612a80565b81146125925760405162461bcd60e51b8152602060048201526017602482015276111053c81d1c985b9cd9995c881a185cc819985a5b1959604a1b60448201526064016108fc565b60408051848152602081018390527f3107ec7eaa50b775d2486c7a394472235804b6fe1c0d4b7bd1d79b09df60f2ba9101610b65565b6125d18161224b565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061261383611909565b61266e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016108fc565b600080846001600160a01b0316846040516126899190612ca0565b600060405180830381855af49150503d80600081146126c4576040519150601f19603f3d011682016040523d82523d6000602084013e6126c9565b606091505b50915091506116c08282604051806060016040528060278152602001612d3060279139606083156126fb575081611fb2565b611fb283838151156127105781518083602001fd5b8060405162461bcd60e51b81526004016108fc9190612cbc565b6001600160a01b0381168114610f1757600080fd5b6000806040838503121561275257600080fd5b8235915060208301356127648161272a565b809150509250929050565b60006020828403121561278157600080fd5b8135611fb28161272a565b8015158114610f1757600080fd5b6000602082840312156127ac57600080fd5b8135611fb28161278c565b6000602082840312156127c957600080fd5b5035919050565b6000806000606084860312156127e557600080fd5b83356127f08161272a565b925060208401356128008161272a565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561286357612863612825565b604052919050565b60006001600160401b0382111561288457612884612825565b50601f01601f191660200190565b600080604083850312156128a557600080fd5b82356128b08161272a565b915060208301356001600160401b038111156128cb57600080fd5b8301601f810185136128dc57600080fd5b80356128ef6128ea8261286b565b61283b565b81815286602083850101111561290457600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000602080838503121561293757600080fd5b82356001600160401b038082111561294e57600080fd5b818501915085601f83011261296257600080fd5b81358181111561297457612974612825565b8060051b915061298584830161283b565b818152918301840191848101908884111561299f57600080fd5b938501935b838510156129c957843592506129b98361272a565b82825293850193908501906129a4565b98975050505050505050565b6001600160a01b03929092168252602082015260400190565b600060208284031215612a0057600080fd5b8151611fb28161278c565b634e487b7160e01b600052601160045260246000fd5b81810381811115610c3e57610c3e612a0b565b600082612a5157634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610c3e57610c3e612a0b565b80820180821115610c3e57610c3e612a0b565b600060208284031215612a9257600080fd5b5051919050565b600060208284031215612aab57600080fd5b8151611fb28161272a565b6020808252601e908201527f6e6f7420696e20706572696f6453746172746564206f72207061757365640000604082015260600190565b6020808252602c90820152600080516020612cd083398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c90820152600080516020612cd083398151915260408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060018201612b8957612b89612a0b565b5060010190565b60005b83811015612bab578181015183820152602001612b93565b50506000910152565b60008151808452612bcc816020860160208601612b90565b601f01601f19169290920160200192915050565b600060018060a01b03808716835260806020840152612c026080840187612bb4565b94166040830152506060015292915050565b60008060408385031215612c2757600080fd5b8251612c328161278c565b60208401519092506001600160401b03811115612c4e57600080fd5b8301601f81018513612c5f57600080fd5b8051612c6d6128ea8261286b565b818152866020838501011115612c8257600080fd5b612c93826020830160208601612b90565b8093505050509250929050565b60008251612cb2818460208701612b90565b9190910192915050565b602081526000611fb26020830184612bb456fe46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682089ed24731df6b066e4c5186901fffdba18cd9a10f07494aff900bdee260d1304360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d3d9e30a8542a46b932e51da10c3a7572bbfc0aee4540a393b39244f9947121064736f6c63430008130033",
  "deployedBytecode": "0x6080604052600436106102385760003560e01c8062f714ce1461023d578063013eba921461025f57806302329a291461029f578063069786ea146102bf5780630ce82d67146102e95780631248b101146102fe5780631794bb3c146103355780631a787f2e146103555780631b3c90a8146103755780631bbc644c1461038a5780631d8f5ea9146103ba57806322b45727146103d05780633659cfe6146103e657806337658574146104065780633d84ceca1461041c5780633e6326fc1461043c5780634162169f146104695780634202d21414610489578063456ac1c2146104a95780634b4c7180146104c35780634e71d92d146104dd5780634f1ef286146104f25780635231e2f01461050557806352d1902d14610535578063560796d11461054a5780635aef7de61461059b5780635c9302c9146105bb5780635c975abb146105d157806373b2e80e146105eb578063741470ac1461060b5780638081cbbd146106215780638fd247d21461064157806398d6621b146106615780639dc2c03314610676578063a21f698a1461068c578063b656223d146106ac578063ba075410146106c2578063c033abf2146106d8578063c1337508146106ee578063c77138701461070e578063c7a76adf14610723578063cc054dfc14610743578063cef6360014610770578063d6a9f61814610790578063d7c4cbb8146107b0578063dddc3616146107c6578063de1de3a0146107db578063e1758bd8146107fb578063eac471a014610810578063eda4e6d614610826575b600080fd5b34801561024957600080fd5b5061025d61025836600461273f565b61083c565b005b34801561026b57600080fd5b5061028c61027a36600461276f565b609b6020526000908152604090205481565b6040519081526020015b60405180910390f35b3480156102ab57600080fd5b5061025d6102ba36600461279a565b61090a565b3480156102cb57600080fd5b506102d4610925565b60408051928352602083019190915201610296565b3480156102f557600080fd5b5061028c610963565b34801561030a57600080fd5b506102d46103193660046127b7565b609a602052600090815260409020600181015460029091015482565b34801561034157600080fd5b5061025d6103503660046127d0565b610986565b34801561036157600080fd5b5061028c61037036600461276f565b610b74565b34801561038157600080fd5b5061025d610c9c565b34801561039657600080fd5b506103aa6103a536600461276f565b610dc3565b6040519015158152602001610296565b3480156103c657600080fd5b5061028c609e5481565b3480156103dc57600080fd5b5061028c60a05481565b3480156103f257600080fd5b5061025d61040136600461276f565b610e52565b34801561041257600080fd5b5061028c60a95481565b34801561042857600080fd5b5061025d6104373660046127b7565b610f1a565b34801561044857600080fd5b5060675461045c906001600160a01b031681565b6040516102969190612811565b34801561047557600080fd5b5060655461045c906001600160a01b031681565b34801561049557600080fd5b506103aa6104a436600461276f565b610fbd565b3480156104b557600080fd5b5060a3546103aa9060ff1681565b3480156104cf57600080fd5b5060a8546103aa9060ff1681565b3480156104e957600080fd5b506103aa61101f565b61025d610500366004612892565b6112c6565b34801561051157600080fd5b506103aa61052036600461276f565b60ac6020526000908152604090205460ff1681565b34801561054157600080fd5b5061028c61137f565b34801561055657600080fd5b506105846105653660046127b7565b60ab602052600090815260409020805460019091015460ff9091169082565b604080519215158352602083019190915201610296565b3480156105a757600080fd5b5060665461045c906001600160a01b031681565b3480156105c757600080fd5b5061028c609c5481565b3480156105dd57600080fd5b5060ae546103aa9060ff1681565b3480156105f757600080fd5b506103aa61060636600461276f565b61142d565b34801561061757600080fd5b5061028c60a75481565b34801561062d57600080fd5b5060aa5461045c906001600160a01b031681565b34801561064d57600080fd5b5061025d61065c3660046127b7565b611459565b34801561066d57600080fd5b5061028c611466565b34801561068257600080fd5b5061028c60a55481565b34801561069857600080fd5b506103aa6106a736600461276f565b611471565b3480156106b857600080fd5b5061028c60a25481565b3480156106ce57600080fd5b5061028c60a65481565b3480156106e457600080fd5b5061028c609f5481565b3480156106fa57600080fd5b5061028c610709366004612924565b611497565b34801561071a57600080fd5b5061028c6115e6565b34801561072f57600080fd5b5061028c61073e3660046127b7565b6116c9565b34801561074f57600080fd5b5061028c61075e36600461276f565b60ad6020526000908152604090205481565b34801561077c57600080fd5b5061028c61078b3660046127b7565b6116de565b34801561079c57600080fd5b5061025d6107ab36600461279a565b6116f3565b3480156107bc57600080fd5b5061028c60a15481565b3480156107d257600080fd5b5061025d61170e565b3480156107e757600080fd5b5061025d6107f636600461279a565b61176d565b34801561080757600080fd5b5061045c6117bc565b34801561081c57600080fd5b5061028c60a45481565b34801561083257600080fd5b5061028c609d5481565b610844611844565b600061084e6117bc565b60405163a9059cbb60e01b81529091506001600160a01b0382169063a9059cbb9061087f90859087906004016129d5565b6020604051808303816000875af115801561089e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c291906129ee565b6109055760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b60448201526064015b60405180910390fd5b505050565b610912611844565b60ae805460ff1916911515919091179055565b600080600062015180609d544261093c9190612a21565b6109469190612a34565b9050610951816116c9565b61095a826116de565b92509250509091565b60006201518060a654426109779190612a21565b6109819190612a34565b905090565b600054610100900460ff16158080156109a65750600054600160ff909116105b806109c757506109b530611909565b1580156109c7575060005460ff166001145b610a2a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108fc565b6000805460ff191660011790558015610a4d576000805461ff0019166101001790555b60008211610a9d5760405162461bcd60e51b815260206004820181905260248201527f4d617820696e61637469766520646179732063616e6e6f74206265207a65726f60448201526064016108fc565b610aa684611918565b60a282905560aa80546001600160a01b0319166001600160a01b03851617905560a3805460ff19169055601e60a4556202d2a8609f55610ae96201518042612a34565b610af69062015180612a56565b610b029061a8c0612a6d565b609d81905560a65560a8805460ff19166001600160a01b03851615151790556103e860a9558015610b6e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b50505050565b6000609d54421015610b8857506000919050565b60a85460ff168015610bc25750610b9e82611471565b1580610bc257506001600160a01b038216600090815260ac602052604090205460ff165b15610c445760aa60009054906101000a90046001600160a01b03166001600160a01b031663830953ab6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3e9190612a80565b92915050565b62015180609d5442610c569190612a21565b610c609190612a34565b609c54148015610c7257506000609e54115b15610c9457610c808261142d565b610c8c57609e54610c3e565b600092915050565b610c3e6115e6565b60675460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa158015610cff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d239190612a99565b606580546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de6916004808201926020929091908290030181865afa158015610d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da19190612a99565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b60ae5460009060ff16158015610ddb57506000609d54115b8015610de95750609d544210155b610e055760405162461bcd60e51b81526004016108fc90612ab6565b610e0e8261193b565b610e475760405162461bcd60e51b815260206004820152600a6024820152690c6c2dc4ee840ccd2e6d60b31b60448201526064016108fc565b610c3e82600161197f565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610e9a5760405162461bcd60e51b81526004016108fc90612aed565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610ecc611a2d565b6001600160a01b031614610ef25760405162461bcd60e51b81526004016108fc90612b27565b610efb81611a49565b60408051600080825260208201909252610f1791839190611a51565b50565b610f22611844565b60008111610f7c5760405162461bcd60e51b815260206004820152602160248201527f6379636c65206d757374206265206174206c65617374203120646179206c6f6e6044820152606760f81b60648201526084016108fc565b60a4819055600060a7556040518181527fa61e6cca2c12e2a0a493683acfe95b034f0f50d793434f4dfe3ba06ea201f344906020015b60405180910390a150565b6001600160a01b0381166000908152609b6020526040812054610fdf83611471565b1561101657600062015180610ff48342612a21565b610ffe9190612a34565b905060a254811015611014575060019392505050565b505b50600092915050565b60ae5460009060ff1615801561103757506000609d54115b80156110455750609d544210155b6110615760405162461bcd60e51b81526004016108fc90612ab6565b60675460405163bf40fac160e01b81526020600482015260086024820152674944454e5449545960c01b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa1580156110c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e79190612a99565b6001600160a01b0316632d0e9b46336040518263ffffffff1660e01b81526004016111129190612811565b602060405180830381865afa15801561112f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111539190612a99565b90506001600160a01b0381166111a85760405162461bcd60e51b815260206004820152601a60248201527915509254d8da195b594e881b9bdd081dda1a5d195b1a5cdd195960321b60448201526064016108fc565b60006111b48233611bbc565b60675460405163bf40fac160e01b815260206004820152600d60248201526c4744414f5f434c41494d45525360981b60448201529192506000916001600160a01b039091169063bf40fac190606401602060405180830381865afa158015611220573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112449190612a99565b905081801561125b57506001600160a01b03811615155b156112bf5760405163748abee960e11b81526001600160a01b0382169063e9157dd29061128c908690600401612811565b600060405180830381600087803b1580156112a657600080fd5b505af11580156112ba573d6000803e3d6000fd5b505050505b5091505090565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361130e5760405162461bcd60e51b81526004016108fc90612aed565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611340611a2d565b6001600160a01b0316146113665760405162461bcd60e51b81526004016108fc90612b27565b61136f82611a49565b61137b82826001611a51565b5050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461141a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b60648201526084016108fc565b50600080516020612d1083398151915290565b609c546000908152609a602090815260408083206001600160a01b039094168352929052205460ff1690565b611461611844565b60a055565b600061098133610b74565b6001600160a01b0381166000908152609b602052604081205415610c8c57506001919050565b60ae5460009060ff161580156114af57506000609d54115b80156114bd5750609d544210155b6114d95760405162461bcd60e51b81526004016108fc90612ab6565b6000805b835182101561159857609f545a106115985761151184838151811061150457611504612b61565b602002602001015161193b565b156115885761153a84838151811061152b5761152b612b61565b6020026020010151600061197f565b6115785760405162461bcd60e51b815260206004820152600f60248201526e199a5cda081a185cc819985a5b1959608a1b60448201526064016108fc565b609e546115859082612a6d565b90505b61159182612b77565b91506114dd565b80156115ac576115ac333383600080611d07565b6040518281527f72b174db45b7e58932cb0c6bf37a7158f40424a078b07677d823cafdb3db540f9060200160405180910390a15092915050565b6000806115f16117bc565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161161c9190612811565b602060405180830381865afa158015611639573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165d9190612a80565b9050600060a55460a454836116729190612a34565b119050600060a5549050600060a754611689610963565b1015806116935750825b156116a85760a4546116a59085612a34565b91505b6116b660a05460a954611fa0565b6116c09083612a34565b95945050505050565b6000908152609a602052604090206001015490565b6000908152609a602052604090206002015490565b6116fb611844565b60a8805460ff1916911515919091179055565b600062015180609d54426117229190612a21565b61172c9190612a34565b9050609c54811115610f1757609c8190556040518181527f67eb03bd555181f9dd23f546e4331ddfb8b4a7d0c8d261ba44e037f30ce894ea90602001610fb2565b611775611844565b60a3805460ff191682151590811790915560405160ff909116151581527f6cd9a0fd2e006be39a9918bf56c85cae1d4f4599474483ff18cb93355ebaaf8e90602001610fb2565b60675460405163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015611820573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109819190612a99565b60655460408051632d77bef360e11b8152905133926001600160a01b031691635aef7de69160048083019260209291908290030181865afa15801561188d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b19190612a99565b6001600160a01b0316146119075760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79206176617461722063616e2063616c6c2074686973206d6574686f6460448201526064016108fc565b565b6001600160a01b03163b151590565b606780546001600160a01b0319166001600160a01b038316179055610f17610c9c565b600061194682611471565b8015611958575061195682610fbd565b155b8015610c3e5750506001600160a01b0316600090815260ac602052604090205460ff161590565b6001600160a01b038216600090815260ac60205260408120805460ff19166001179055806119ab611fb9565b60a054909150156119cf57600160a060008282546119c99190612a21565b90915550505b82156119e3576119e3333383600080611d07565b6040518181526001600160a01b0385169033907f3c91d315d82534112f8ce552cb79133a14191077a2d715fd65cabd026fc27c749060200160405180910390a35060019392505050565b600080516020612d10833981519152546001600160a01b031690565b610f17611844565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611a84576109058361224b565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611ade575060408051601f3d908101601f19168201909252611adb91810190612a80565b60015b611b415760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016108fc565b600080516020612d108339815191528114611bb05760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016108fc565b506109058383836122e5565b600080611bc7611fb9565b9050611bd284611471565b8015611bf757506001600160a01b038416600090815260ac602052604090205460ff16155b8015611c095750611c078461142d565b155b15611c2757611c1d84848360016000611d07565b6001915050610c3e565b611c3084611471565b1580611c5457506001600160a01b038416600090815260ac602052604090205460ff165b15611cfd57600160a06000828254611c6c9190612a6d565b90915550506001600160a01b038416600090815260ac60205260409020805460ff1916905560a85460ff1615611cb057611cab84846000806001611d07565b611cbf565b611cbf84848360016000611d07565b6040516001600160a01b038516907f2f9cfaa2a5c422dfab45f7d0da071f030fc2d3a7a1f0a255c028eff9b6d3d93690600090a26001915050610c3e565b5060009392505050565b8180611d105750805b15611d9e576001609a6000609c5481526020019081526020016000206001016000828254611d3e9190612a6d565b9091555050609c546000908152609a602090815260408083206001600160a01b03891684528252808320805460ff19166001908117909155609b835281842042905560ad9092528220805491929091611d98908490612a6d565b90915550505b8015611e795760aa54604051636bf2228d60e11b81526000916001600160a01b03169063d7e4451a90611dd5908890600401612811565b6020604051808303816000875af1158015611df4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e189190612a80565b905080609a6000609c5481526020019081526020016000206002016000828254611e429190612a6d565b90915550506040518181526001600160a01b03871690600080516020612cf08339815191529060200160405180910390a250611f99565b8115611ed557609c546000908152609a602052604081206002018054859290611ea3908490612a6d565b90915550506040518381526001600160a01b03861690600080516020612cf08339815191529060200160405180910390a25b6000611edf6117bc565b60405163a9059cbb60e01b81529091506001600160a01b0382169063a9059cbb90611f1090889088906004016129d5565b6020604051808303816000875af1158015611f2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5391906129ee565b611f975760405162461bcd60e51b815260206004820152601560248201527418db185a5b481d1c985b9cd9995c8819985a5b1959605a1b60448201526064016108fc565b505b5050505050565b600081831015611fb05781611fb2565b825b9392505050565b6000611fc361170e565b60a154609c54141580611fd65750609e54155b15612244576000611fe56117bc565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016120159190612811565b602060405180830381865afa158015612032573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120569190612a80565b9050600060a55460a4548361206b9190612a34565b11905060a754612079610963565b1015806120835750805b1561218c5760a35460ff161561210b5761209b61230a565b6040516370a0823160e01b81526001600160a01b038416906370a08231906120c7903090600401612811565b602060405180830381865afa1580156120e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121089190612a80565b91505b60a4546121189083612a34565b60a55560a45460a75561212d610e1042612a34565b61213990610e10612a56565b60a655609c5460a45460a554604080519384526020840186905283019190915260608201527f83e0d535b9e84324e0a25922406398d6ff5f96d0c686204ee490e16d7670566f9060800160405180910390a15b609c5460a1819055600090815260ab6020526040902060a354815460ff191660ff90911615151781556001810183905560a05460a9546121cc9190611fa0565b60a5546121d99190612a34565b609e5560a0546121f7906121ef90600290612a34565b60a954611fa0565b60a955609c54609e546040805192835260208301919091524382820152517f836fa39995340265746dfe9587d9fe5c5de35b7bce778afd9b124ce1cfeafdc49181900360600190a1505050505b50609e5490565b61225481611909565b6122b65760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016108fc565b600080516020612d1083398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6122ee836125c8565b6000825111806122fb5750805b1561090557610b6e8383612608565b60006123146117bc565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016123449190612811565b602060405180830381865afa158015612361573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123859190612a80565b6066546040516370a0823160e01b81529192506000916001600160a01b03858116926370a08231926123bd9290911690600401612811565b602060405180830381865afa1580156123da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123fe9190612a80565b6065546040519192506001600160a01b03169063d1b7089a90859061242990309086906024016129d5565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052606654905160e085901b6001600160e01b03191681526124849392916001600160a01b031690600090600401612be0565b6000604051808303816000875af11580156124a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124cb9190810190612c14565b50600090506124da8284612a6d565b6040516370a0823160e01b81529091506001600160a01b038516906370a0823190612509903090600401612811565b602060405180830381865afa158015612526573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254a9190612a80565b81146125925760405162461bcd60e51b8152602060048201526017602482015276111053c81d1c985b9cd9995c881a185cc819985a5b1959604a1b60448201526064016108fc565b60408051848152602081018390527f3107ec7eaa50b775d2486c7a394472235804b6fe1c0d4b7bd1d79b09df60f2ba9101610b65565b6125d18161224b565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061261383611909565b61266e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016108fc565b600080846001600160a01b0316846040516126899190612ca0565b600060405180830381855af49150503d80600081146126c4576040519150601f19603f3d011682016040523d82523d6000602084013e6126c9565b606091505b50915091506116c08282604051806060016040528060278152602001612d3060279139606083156126fb575081611fb2565b611fb283838151156127105781518083602001fd5b8060405162461bcd60e51b81526004016108fc9190612cbc565b6001600160a01b0381168114610f1757600080fd5b6000806040838503121561275257600080fd5b8235915060208301356127648161272a565b809150509250929050565b60006020828403121561278157600080fd5b8135611fb28161272a565b8015158114610f1757600080fd5b6000602082840312156127ac57600080fd5b8135611fb28161278c565b6000602082840312156127c957600080fd5b5035919050565b6000806000606084860312156127e557600080fd5b83356127f08161272a565b925060208401356128008161272a565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561286357612863612825565b604052919050565b60006001600160401b0382111561288457612884612825565b50601f01601f191660200190565b600080604083850312156128a557600080fd5b82356128b08161272a565b915060208301356001600160401b038111156128cb57600080fd5b8301601f810185136128dc57600080fd5b80356128ef6128ea8261286b565b61283b565b81815286602083850101111561290457600080fd5b816020840160208301376000602083830101528093505050509250929050565b6000602080838503121561293757600080fd5b82356001600160401b038082111561294e57600080fd5b818501915085601f83011261296257600080fd5b81358181111561297457612974612825565b8060051b915061298584830161283b565b818152918301840191848101908884111561299f57600080fd5b938501935b838510156129c957843592506129b98361272a565b82825293850193908501906129a4565b98975050505050505050565b6001600160a01b03929092168252602082015260400190565b600060208284031215612a0057600080fd5b8151611fb28161278c565b634e487b7160e01b600052601160045260246000fd5b81810381811115610c3e57610c3e612a0b565b600082612a5157634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610c3e57610c3e612a0b565b80820180821115610c3e57610c3e612a0b565b600060208284031215612a9257600080fd5b5051919050565b600060208284031215612aab57600080fd5b8151611fb28161272a565b6020808252601e908201527f6e6f7420696e20706572696f6453746172746564206f72207061757365640000604082015260600190565b6020808252602c90820152600080516020612cd083398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c90820152600080516020612cd083398151915260408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060018201612b8957612b89612a0b565b5060010190565b60005b83811015612bab578181015183820152602001612b93565b50506000910152565b60008151808452612bcc816020860160208601612b90565b601f01601f19169290920160200192915050565b600060018060a01b03808716835260806020840152612c026080840187612bb4565b94166040830152506060015292915050565b60008060408385031215612c2757600080fd5b8251612c328161278c565b60208401519092506001600160401b03811115612c4e57600080fd5b8301601f81018513612c5f57600080fd5b8051612c6d6128ea8261286b565b818152866020838501011115612c8257600080fd5b612c93826020830160208601612b90565b8093505050509250929050565b60008251612cb2818460208701612b90565b9190910192915050565b602081526000611fb26020830184612bb456fe46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682089ed24731df6b066e4c5186901fffdba18cd9a10f07494aff900bdee260d1304360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d3d9e30a8542a46b932e51da10c3a7572bbfc0aee4540a393b39244f9947121064736f6c63430008130033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
