{
  "_format": "hh-sol-artifact-1",
  "contractName": "MasterChefV2",
  "sourceName": "contracts/MasterChefV2.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IMasterChef",
          "name": "_MASTER_CHEF",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_tattoo",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_MASTER_PID",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "Deposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "EmergencyWithdraw",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Harvest",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "LogInit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allocPoint",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "lpToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IRewarder",
          "name": "rewarder",
          "type": "address"
        }
      ],
      "name": "LogPoolAddition",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allocPoint",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "contract IRewarder",
          "name": "rewarder",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "overwrite",
          "type": "bool"
        }
      ],
      "name": "LogSetPool",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "lastRewardBlock",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "lpSupply",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "accTattooPerShare",
          "type": "uint256"
        }
      ],
      "name": "LogUpdatePool",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "Withdraw",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "MASTER_CHEF",
      "outputs": [
        {
          "internalType": "contract IMasterChef",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MASTER_PID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "TATTOO",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "allocPoint",
          "type": "uint256"
        },
        {
          "internalType": "contract IERC20",
          "name": "_lpToken",
          "type": "address"
        },
        {
          "internalType": "contract IRewarder",
          "name": "_rewarder",
          "type": "address"
        }
      ],
      "name": "add",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "calls",
          "type": "bytes[]"
        },
        {
          "internalType": "bool",
          "name": "revertOnFail",
          "type": "bool"
        }
      ],
      "name": "batch",
      "outputs": [
        {
          "internalType": "bool[]",
          "name": "successes",
          "type": "bool[]"
        },
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "claimOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "emergencyWithdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "harvest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "harvestFromMasterChef",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "dummyToken",
          "type": "address"
        }
      ],
      "name": "init",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "lpToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "pids",
          "type": "uint256[]"
        }
      ],
      "name": "massUpdatePools",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_pid",
          "type": "uint256"
        }
      ],
      "name": "migrate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "migrator",
      "outputs": [
        {
          "internalType": "contract IMigratorChef",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "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": "_pid",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "pendingTattoo",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "pending",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permitToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "poolInfo",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "accTattooPerShare",
          "type": "uint128"
        },
        {
          "internalType": "uint64",
          "name": "lastRewardBlock",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "allocPoint",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "poolLength",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "pools",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "rewarder",
      "outputs": [
        {
          "internalType": "contract IRewarder",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_pid",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_allocPoint",
          "type": "uint256"
        },
        {
          "internalType": "contract IRewarder",
          "name": "_rewarder",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "overwrite",
          "type": "bool"
        }
      ],
      "name": "set",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IMigratorChef",
          "name": "_migrator",
          "type": "address"
        }
      ],
      "name": "setMigrator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tattooPerBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalAllocPoint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "direct",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "renounce",
          "type": "bool"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        }
      ],
      "name": "updatePool",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint128",
              "name": "accTattooPerShare",
              "type": "uint128"
            },
            {
              "internalType": "uint64",
              "name": "lastRewardBlock",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "allocPoint",
              "type": "uint64"
            }
          ],
          "internalType": "struct MasterChefV2.PoolInfo",
          "name": "pool",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "userInfo",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "int256",
          "name": "rewardDebt",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "pid",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "withdrawAndHarvest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60e06040523480156200001157600080fd5b50604051620031b7380380620031b7833981016040819052620000349162000097565b600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160601b0319606093841b81166080529190921b1660a05260c052620000f7565b600080600060608486031215620000ac578283fd5b8351620000b981620000de565b6020850151909350620000cc81620000de565b80925050604084015190509250925092565b6001600160a01b0381168114620000f457600080fd5b50565b60805160601c60a05160601c60c05161305b6200015c60003980610b935280611106528061141e52806120ad5250806108f552806118175280611aed525080610ad25280610b6652806110d95280611fd652806120805280612157525061305b6000f3fe6080604052600436106101d85760003560e01c806378ed5d1f11610102578063ab7de09811610095578063d59fc83911610064578063d59fc83914610535578063dddebc9914610555578063e30c39781461056a578063edd8b1701461057f576101d8565b8063ab7de098146104b4578063c346253d146104d4578063d1abb907146104f4578063d2423b5114610514576101d8565b80638da5cb5b116100d15780638da5cb5b1461043c5780638dbdbe6d1461045157806393f1a40b146104715780639e8bb6531461049f576101d8565b806378ed5d1f146103ba5780637c516e94146103e75780637cd07e471461040757806388bba42f1461041c576101d8565b806323cf31181161017a5780634f70b15a116101495780634f70b15a1461034357806351eb05a61461035857806357a5b58c1461038557806361621aaa146103a5576101d8565b806323cf3118146102ce5780632f940c70146102ee578063454b06081461030e5780634e71e0c81461032e576101d8565b80631526fe27116101b65780631526fe271461024a57806317caf6f11461027957806318fccc761461028e57806319ab453c146102ae576101d8565b8063078dfbe7146101dd578063081e3eda146101ff5780630ad58d2f1461022a575b600080fd5b3480156101e957600080fd5b506101fd6101f83660046125dd565b610594565b005b34801561020b57600080fd5b50610214610683565b6040516102219190612ee9565b60405180910390f35b34801561023657600080fd5b506101fd6102453660046128fc565b610689565b34801561025657600080fd5b5061026a610265366004612867565b610819565b60405161022193929190612ebf565b34801561028557600080fd5b5061021461085b565b34801561029a57600080fd5b506101fd6102a9366004612897565b610861565b3480156102ba57600080fd5b506101fd6102c93660046126cb565b6109fb565b3480156102da57600080fd5b506101fd6102e93660046126cb565b610c1c565b3480156102fa57600080fd5b506101fd610309366004612897565b610c68565b34801561031a57600080fd5b506101fd610329366004612867565b610d89565b34801561033a57600080fd5b506101fd611035565b34801561034f57600080fd5b506101fd6110c2565b34801561036457600080fd5b50610378610373366004612867565b611165565b6040516102219190612e86565b34801561039157600080fd5b506101fd6103a0366004612670565b6113ec565b3480156103b157600080fd5b5061021461141c565b3480156103c657600080fd5b506103da6103d5366004612867565b611440565b60405161022191906129ca565b3480156103f357600080fd5b506101fd610402366004612703565b611467565b34801561041357600080fd5b506103da6114db565b34801561042857600080fd5b506101fd610437366004612929565b6114ea565b34801561044857600080fd5b506103da611657565b34801561045d57600080fd5b506101fd61046c3660046128fc565b611666565b34801561047d57600080fd5b5061049161048c366004612897565b6117f1565b604051610221929190612f31565b3480156104ab57600080fd5b506103da611815565b3480156104c057600080fd5b506101fd6104cf3660046128c6565b611839565b3480156104e057600080fd5b506103da6104ef366004612867565b611a12565b34801561050057600080fd5b506101fd61050f3660046128fc565b611a1f565b610527610522366004612627565b611c52565b604051610221929190612a5c565b34801561054157600080fd5b50610214610550366004612897565b611de2565b34801561056157600080fd5b50610214611fd2565b34801561057657600080fd5b506103da612146565b34801561058b57600080fd5b506103da612155565b6000546001600160a01b031633146105c75760405162461bcd60e51b81526004016105be90612cfe565b60405180910390fd5b8115610662576001600160a01b0383161515806105e15750805b6105fd5760405162461bcd60e51b81526004016105be90612c18565b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b03199182161790915560018054909116905561067e565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b60035490565b610691612575565b61069a84611165565b600085815260066020908152604080832033845290915290208151919250906106ec9064e8d4a51000906106d89087906001600160801b0316612179565b816106df57fe5b60018401549190046121b6565b600182015580546106fd9085612203565b815560058054600091908790811061071157fe5b6000918252602090912001546001600160a01b03169050801561079757815460405163e24c761360e01b81526001600160a01b0383169163e24c761391610764918a9133918a9160009190600401612ef2565b600060405180830381600087803b15801561077e57600080fd5b505af1158015610792573d6000803e3d6000fd5b505050505b6107c58486600489815481106107a957fe5b6000918252602090912001546001600160a01b03169190612226565b836001600160a01b031686336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec2132886040516108099190612ee9565b60405180910390a4505050505050565b6003818154811061082657fe5b6000918252602090912001546001600160801b03811691506001600160401b03600160801b8204811691600160c01b90041683565b60075481565b610869612575565b61087283611165565b6000848152600660209081526040808320338452909152812082518154939450909264e8d4a51000916108ae91906001600160801b0316612179565b816108b557fe5b04905060006108d96108d48460010154846121b690919063ffffffff16565b612314565b600184018390559050801561091c5761091c6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683612226565b60006005878154811061092b57fe5b6000918252602090912001546001600160a01b0316905080156109b057835460405163e24c761360e01b81526001600160a01b0383169163e24c76139161097d918b9133918c91899190600401612ef2565b600060405180830381600087803b15801561099757600080fd5b505af11580156109ab573d6000803e3d6000fd5b505050505b86336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae0660924954846040516109ea9190612ee9565b60405180910390a350505050505050565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610a2a9033906004016129ca565b60206040518083038186803b158015610a4257600080fd5b505afa158015610a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7a919061287f565b905080610a995760405162461bcd60e51b81526004016105be90612b5d565b610aae6001600160a01b03831633308461233a565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610afc907f0000000000000000000000000000000000000000000000000000000000000000908590600401612a43565b602060405180830381600087803b158015610b1657600080fd5b505af1158015610b2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4e91906126af565b50604051631c57762b60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e2bbb15890610bbd907f0000000000000000000000000000000000000000000000000000000000000000908590600401612f31565b600060405180830381600087803b158015610bd757600080fd5b505af1158015610beb573d6000803e3d6000fd5b50506040517f98a9bd3b7a617581fc53b1e2992534e0e0cb5091c9d44aa1a7fc978f706caa83925060009150a15050565b6000546001600160a01b03163314610c465760405162461bcd60e51b81526004016105be90612cfe565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526006602090815260408083203384529091528120805482825560018201839055600580549293919286908110610c9f57fe5b6000918252602090912001546001600160a01b031690508015610d245760405163e24c761360e01b81526001600160a01b0382169063e24c761390610cf1908890339089906000908190600401612ef2565b600060405180830381600087803b158015610d0b57600080fd5b505af1158015610d1f573d6000803e3d6000fd5b505050505b610d368483600488815481106107a957fe5b836001600160a01b031685336001600160a01b03167f2cac5e20e1541d836381527a43f651851e302817b71dc8e810284e69210c1c6b85604051610d7a9190612ee9565b60405180910390a45050505050565b6002546001600160a01b0316610db15760405162461bcd60e51b81526004016105be90612d9f565b600060048281548110610dc057fe5b60009182526020822001546040516370a0823160e01b81526001600160a01b03909116925082906370a0823190610dfb9030906004016129ca565b60206040518083038186803b158015610e1357600080fd5b505afa158015610e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4b919061287f565b60025460405163095ea7b360e01b81529192506001600160a01b038085169263095ea7b392610e809216908590600401612a43565b602060405180830381600087803b158015610e9a57600080fd5b505af1158015610eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed291906126af565b5060025460405163ce5494bb60e01b81526000916001600160a01b03169063ce5494bb90610f049086906004016129ca565b602060405180830381600087803b158015610f1e57600080fd5b505af1158015610f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5691906126e7565b6040516370a0823160e01b81529091506001600160a01b038216906370a0823190610f859030906004016129ca565b60206040518083038186803b158015610f9d57600080fd5b505afa158015610fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd5919061287f565b8214610ff35760405162461bcd60e51b81526004016105be90612c47565b806004858154811061100157fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050505050565b6001546001600160a01b03163381146110605760405162461bcd60e51b81526004016105be90612d33565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b604051631c57762b60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e2bbb15890611131907f000000000000000000000000000000000000000000000000000000000000000090600090600401612f31565b600060405180830381600087803b15801561114b57600080fd5b505af115801561115f573d6000803e3d6000fd5b50505050565b61116d612575565b6003828154811061117a57fe5b60009182526020918290206040805160608101825292909101546001600160801b03811683526001600160401b03600160801b82048116948401859052600160c01b909104169082015291504311156113e7576000600483815481106111dc57fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a08231906112159030906004016129ca565b60206040518083038186803b15801561122d57600080fd5b505afa158015611241573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611265919061287f565b9050801561130b57600061128f83602001516001600160401b03164361220390919063ffffffff16565b905060006007546112bf85604001516001600160401b03166112b96112b2611fd2565b8690612179565b90612179565b816112c657fe5b0490506112fd6112ec846112df8464e8d4a51000612179565b816112e657fe5b0461242b565b85516001600160801b031690612454565b6001600160801b0316845250505b61131443612483565b6001600160401b03166020830152600380548391908590811061133357fe5b6000918252602091829020835191018054848401516040958601516001600160801b03199092166001600160801b039094169390931767ffffffffffffffff60801b1916600160801b6001600160401b0394851602176001600160c01b0316600160c01b93909116929092029190911790558301518351915185927f0fc9545022a542541ad085d091fb09a2ab36fee366a4576ab63714ea907ad353926113dd9290918691612f3f565b60405180910390a2505b919050565b8060005b8181101561115f5761141384848381811061140757fe5b90506020020135611165565b506001016113f0565b7f000000000000000000000000000000000000000000000000000000000000000081565b6004818154811061144d57fe5b6000918252602090912001546001600160a01b0316905081565b60405163d505accf60e01b81526001600160a01b0389169063d505accf9061149f908a908a908a908a908a908a908a90600401612a02565b600060405180830381600087803b1580156114b957600080fd5b505af11580156114cd573d6000803e3d6000fd5b505050505050505050505050565b6002546001600160a01b031681565b6000546001600160a01b031633146115145760405162461bcd60e51b81526004016105be90612cfe565b6115538361154d6003878154811061152857fe5b60009182526020909120015460075490600160c01b90046001600160401b0316612203565b906124ac565b60075561155f83612483565b6003858154811061156c57fe5b9060005260206000200160000160186101000a8154816001600160401b0302191690836001600160401b0316021790555080156115e05781600585815481106115b157fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8061160c57600584815481106115f257fe5b6000918252602090912001546001600160a01b031661160e565b815b6001600160a01b0316847f95895a6ab1df54420d241b55243258a33e61b2194db66c1179ec521aae8e18658584604051611649929190612f21565b60405180910390a350505050565b6000546001600160a01b031681565b61166e612575565b61167784611165565b60008581526006602090815260408083206001600160a01b038716845290915290208054919250906116a990856124ac565b815581516116e09064e8d4a51000906116cc9087906001600160801b0316612179565b816116d357fe5b60018401549190046124cf565b81600101819055506000600586815481106116f757fe5b6000918252602090912001546001600160a01b03169050801561177d57815460405163e24c761360e01b81526001600160a01b0383169163e24c76139161174a918a918991829160009190600401612ef2565b600060405180830381600087803b15801561176457600080fd5b505af1158015611778573d6000803e3d6000fd5b505050505b6117ad33308760048a8154811061179057fe5b6000918252602090912001546001600160a01b031692919061233a565b836001600160a01b031686336001600160a01b03167f02d7e648dd130fc184d383e55bb126ac4c9c60e8f94bf05acdf557ba2d540b47886040516108099190612ee9565b60066020908152600092835260408084209091529082529020805460019091015482565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031633146118635760405162461bcd60e51b81526004016105be90612cfe565b600754439061187290856124ac565b6007556004805460018181019092557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b038087166001600160a01b03199283161790925560058054938401815560009081527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db090930180549286169290911691909117905560408051606081019091529081526003906020810161191f84612483565b6001600160401b0316815260200161193687612483565b6001600160401b039081169091528254600181810185556000948552602094859020845192018054958501516040909501518416600160c01b026001600160c01b0395909416600160801b0267ffffffffffffffff60801b196001600160801b039094166001600160801b0319909716969096179290921694909417929092161790556004546001600160a01b0380851692908616916119d591612203565b7f81ee0f8c5c46e2cb41984886f77a84181724abb86c32a5f6de539b07509d45e587604051611a049190612ee9565b60405180910390a450505050565b6005818154811061144d57fe5b611a27612575565b611a3084611165565b6000858152600660209081526040808320338452909152812082518154939450909264e8d4a5100091611a6c91906001600160801b0316612179565b81611a7357fe5b0490506000611a926108d48460010154846121b690919063ffffffff16565b9050611acd64e8d4a51000611abd86600001516001600160801b03168961217990919063ffffffff16565b81611ac457fe5b849190046121b6565b60018401558254611ade9087612203565b8355611b146001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683612226565b600060058881548110611b2357fe5b6000918252602090912001546001600160a01b031690508015611ba857835460405163e24c761360e01b81526001600160a01b0383169163e24c761391611b75918c9133918c91899190600401612ef2565b600060405180830381600087803b158015611b8f57600080fd5b505af1158015611ba3573d6000803e3d6000fd5b505050505b611bba868860048b815481106107a957fe5b856001600160a01b031688336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec21328a604051611bfe9190612ee9565b60405180910390a487336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae066092495484604051611c409190612ee9565b60405180910390a35050505050505050565b606080836001600160401b0381118015611c6b57600080fd5b50604051908082528060200260200182016040528015611c95578160200160208202803683370190505b509150836001600160401b0381118015611cae57600080fd5b50604051908082528060200260200182016040528015611ce257816020015b6060815260200190600190039081611ccd5790505b50905060005b84811015611dd9576000606030888885818110611d0157fe5b9050602002810190611d139190612f69565b604051611d2192919061299e565b600060405180830381855af49150503d8060008114611d5c576040519150601f19603f3d011682016040523d82523d6000602084013e611d61565b606091505b50915091508180611d70575085155b611d7982612515565b90611d975760405162461bcd60e51b81526004016105be9190612af6565b5081858481518110611da557fe5b60200260200101901515908115158152505080848481518110611dc457fe5b60209081029190910101525050600101611ce8565b50935093915050565b6000611dec612575565b60038481548110611df957fe5b600091825260208083206040805160608101825291909301546001600160801b0380821683526001600160401b03600160801b8304811684860152600160c01b90920490911682850152888552600683528385206001600160a01b0389168652909252918320825160048054949650919492169288908110611e7757fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190611eb09030906004016129ca565b60206040518083038186803b158015611ec857600080fd5b505afa158015611edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f00919061287f565b905083602001516001600160401b031643118015611f1d57508015155b15611f99576000611f4485602001516001600160401b03164361220390919063ffffffff16565b90506000600754611f6787604001516001600160401b03166112b96112b2611fd2565b81611f6e57fe5b049050611f9483611f848364e8d4a51000612179565b81611f8b57fe5b869190046124ac565b935050505b60018301548354611fc7916108d49164e8d4a5100090611fb99087612179565b81611fc057fe5b04906121b6565b979650505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b15801561202d57600080fd5b505afa158015612041573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612065919061287f565b604051631526fe2760e01b8152612139906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631526fe27906120d5907f000000000000000000000000000000000000000000000000000000000000000090600401612ee9565b60806040518083038186803b1580156120ed57600080fd5b505afa158015612101573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121259190612815565b6020015168056bc75e2d6310000090612179565b8161214057fe5b04905090565b6001546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008115806121945750508082028282828161219157fe5b04145b6121b05760405162461bcd60e51b81526004016105be90612e4f565b92915050565b60008183038183128015906121cb5750838113155b806121e057506000831280156121e057508381135b6121fc5760405162461bcd60e51b81526004016105be90612dd6565b9392505050565b808203828111156121b05760405162461bcd60e51b81526004016105be90612b09565b60006060846001600160a01b031663a9059cbb858560405160240161224c929190612a43565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161228591906129ae565b6000604051808303816000865af19150503d80600081146122c2576040519150601f19603f3d011682016040523d82523d6000602084013e6122c7565b606091505b50915091508180156122f15750805115806122f15750808060200190518101906122f191906126af565b61230d5760405162461bcd60e51b81526004016105be90612ba0565b5050505050565b6000808212156123365760405162461bcd60e51b81526004016105be90612b38565b5090565b60006060856001600160a01b03166323b872dd868686604051602401612362939291906129de565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161239b91906129ae565b6000604051808303816000865af19150503d80600081146123d8576040519150601f19603f3d011682016040523d82523d6000602084013e6123dd565b606091505b509150915081801561240757508051158061240757508080602001905181019061240791906126af565b6124235760405162461bcd60e51b81526004016105be90612e1a565b505050505050565b60006001600160801b038211156123365760405162461bcd60e51b81526004016105be90612c90565b8181016001600160801b0380831690821610156121b05760405162461bcd60e51b81526004016105be90612cc7565b60006001600160401b038211156123365760405162461bcd60e51b81526004016105be90612d68565b818101818110156121b05760405162461bcd60e51b81526004016105be90612cc7565b60008282018183128015906124e45750838112155b806124f957506000831280156124f957508381125b6121fc5760405162461bcd60e51b81526004016105be90612bd7565b606060448251101561255b575060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c7900000060208201526113e7565b600482019150818060200190518101906121b0919061278a565b604080516060810182526000808252602082018190529181019190915290565b60008083601f8401126125a6578182fd5b5081356001600160401b038111156125bc578182fd5b60208301915083602080830285010111156125d657600080fd5b9250929050565b6000806000606084860312156125f1578283fd5b83356125fc81612fff565b9250602084013561260c81613017565b9150604084013561261c81613017565b809150509250925092565b60008060006040848603121561263b578283fd5b83356001600160401b03811115612650578384fd5b61265c86828701612595565b909450925050602084013561261c81613017565b60008060208385031215612682578182fd5b82356001600160401b03811115612697578283fd5b6126a385828601612595565b90969095509350505050565b6000602082840312156126c0578081fd5b81516121fc81613017565b6000602082840312156126dc578081fd5b81356121fc81612fff565b6000602082840312156126f8578081fd5b81516121fc81612fff565b600080600080600080600080610100898b03121561271f578384fd5b883561272a81612fff565b9750602089013561273a81612fff565b9650604089013561274a81612fff565b9550606089013594506080890135935060a089013560ff8116811461276d578384fd5b979a969950949793969295929450505060c08201359160e0013590565b60006020828403121561279b578081fd5b81516001600160401b03808211156127b1578283fd5b818401915084601f8301126127c4578283fd5b8151818111156127d2578384fd5b6127e5601f8201601f1916602001612fad565b91508082528560208285010111156127fb578384fd5b61280c816020840160208601612fd3565b50949350505050565b600060808284031215612826578081fd5b6128306080612fad565b825161283b81612fff565b808252506020830151602082015260408301516040820152606083015160608201528091505092915050565b600060208284031215612878578081fd5b5035919050565b600060208284031215612890578081fd5b5051919050565b600080604083850312156128a9578182fd5b8235915060208301356128bb81612fff565b809150509250929050565b6000806000606084860312156128da578081fd5b8335925060208401356128ec81612fff565b9150604084013561261c81612fff565b600080600060608486031215612910578081fd5b8335925060208401359150604084013561261c81612fff565b6000806000806080858703121561293e578182fd5b8435935060208501359250604085013561295781612fff565b9150606085013561296781613017565b939692955090935050565b6000815180845261298a816020860160208601612fd3565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b600082516129c0818460208701612fd3565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b82811015612a97578151151584529284019290840190600101612a79565b50505083810382850152808551612aae8184612ee9565b91508192508381028201848801865b83811015612ae7578583038552612ad5838351612972565b94870194925090860190600101612abd565b50909998505050505050505050565b6000602082526121fc6020830184612972565b602080825260159082015274426f72696e674d6174683a20556e646572666c6f7760581b604082015260600190565b6020808252600b908201526a0496e7465676572203c20360ac1b604082015260600190565b60208082526023908201527f4d61737465724368656656323a2042616c616e6365206d75737420657863656560408201526206420360ec1b606082015260800190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601590820152744f776e61626c653a207a65726f206164647265737360581b604082015260600190565b60208082526029908201527f4d61737465724368656656323a206d696772617465642062616c616e6365206d6040820152680eae6e840dac2e8c6d60bb1b606082015260800190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b6020808252601d908201527f4d61737465724368656656323a206e6f206d69677261746f7220736574000000604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252818101527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b81516001600160801b031681526020808301516001600160401b0390811691830191909152604092830151169181019190915260600190565b6001600160801b039390931683526001600160401b03918216602084015216604082015260600190565b90815260200190565b9485526001600160a01b0393841660208601529190921660408401526060830191909152608082015260a00190565b9182521515602082015260400190565b918252602082015260400190565b6001600160401b0393909316835260208301919091526001600160801b0316604082015260600190565b6000808335601e19843603018112612f7f578283fd5b8301803591506001600160401b03821115612f98578283fd5b6020019150368190038213156125d657600080fd5b6040518181016001600160401b0381118282101715612fcb57600080fd5b604052919050565b60005b83811015612fee578181015183820152602001612fd6565b8381111561115f5750506000910152565b6001600160a01b038116811461301457600080fd5b50565b801515811461301457600080fdfea2646970667358221220e115c2a65a41c2da24e9de3df6524a63a89c3c6ee1ad3e68eac1dc517aaf107a64736f6c634300060c0033",
  "deployedBytecode": "0x6080604052600436106101d85760003560e01c806378ed5d1f11610102578063ab7de09811610095578063d59fc83911610064578063d59fc83914610535578063dddebc9914610555578063e30c39781461056a578063edd8b1701461057f576101d8565b8063ab7de098146104b4578063c346253d146104d4578063d1abb907146104f4578063d2423b5114610514576101d8565b80638da5cb5b116100d15780638da5cb5b1461043c5780638dbdbe6d1461045157806393f1a40b146104715780639e8bb6531461049f576101d8565b806378ed5d1f146103ba5780637c516e94146103e75780637cd07e471461040757806388bba42f1461041c576101d8565b806323cf31181161017a5780634f70b15a116101495780634f70b15a1461034357806351eb05a61461035857806357a5b58c1461038557806361621aaa146103a5576101d8565b806323cf3118146102ce5780632f940c70146102ee578063454b06081461030e5780634e71e0c81461032e576101d8565b80631526fe27116101b65780631526fe271461024a57806317caf6f11461027957806318fccc761461028e57806319ab453c146102ae576101d8565b8063078dfbe7146101dd578063081e3eda146101ff5780630ad58d2f1461022a575b600080fd5b3480156101e957600080fd5b506101fd6101f83660046125dd565b610594565b005b34801561020b57600080fd5b50610214610683565b6040516102219190612ee9565b60405180910390f35b34801561023657600080fd5b506101fd6102453660046128fc565b610689565b34801561025657600080fd5b5061026a610265366004612867565b610819565b60405161022193929190612ebf565b34801561028557600080fd5b5061021461085b565b34801561029a57600080fd5b506101fd6102a9366004612897565b610861565b3480156102ba57600080fd5b506101fd6102c93660046126cb565b6109fb565b3480156102da57600080fd5b506101fd6102e93660046126cb565b610c1c565b3480156102fa57600080fd5b506101fd610309366004612897565b610c68565b34801561031a57600080fd5b506101fd610329366004612867565b610d89565b34801561033a57600080fd5b506101fd611035565b34801561034f57600080fd5b506101fd6110c2565b34801561036457600080fd5b50610378610373366004612867565b611165565b6040516102219190612e86565b34801561039157600080fd5b506101fd6103a0366004612670565b6113ec565b3480156103b157600080fd5b5061021461141c565b3480156103c657600080fd5b506103da6103d5366004612867565b611440565b60405161022191906129ca565b3480156103f357600080fd5b506101fd610402366004612703565b611467565b34801561041357600080fd5b506103da6114db565b34801561042857600080fd5b506101fd610437366004612929565b6114ea565b34801561044857600080fd5b506103da611657565b34801561045d57600080fd5b506101fd61046c3660046128fc565b611666565b34801561047d57600080fd5b5061049161048c366004612897565b6117f1565b604051610221929190612f31565b3480156104ab57600080fd5b506103da611815565b3480156104c057600080fd5b506101fd6104cf3660046128c6565b611839565b3480156104e057600080fd5b506103da6104ef366004612867565b611a12565b34801561050057600080fd5b506101fd61050f3660046128fc565b611a1f565b610527610522366004612627565b611c52565b604051610221929190612a5c565b34801561054157600080fd5b50610214610550366004612897565b611de2565b34801561056157600080fd5b50610214611fd2565b34801561057657600080fd5b506103da612146565b34801561058b57600080fd5b506103da612155565b6000546001600160a01b031633146105c75760405162461bcd60e51b81526004016105be90612cfe565b60405180910390fd5b8115610662576001600160a01b0383161515806105e15750805b6105fd5760405162461bcd60e51b81526004016105be90612c18565b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b03199182161790915560018054909116905561067e565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b60035490565b610691612575565b61069a84611165565b600085815260066020908152604080832033845290915290208151919250906106ec9064e8d4a51000906106d89087906001600160801b0316612179565b816106df57fe5b60018401549190046121b6565b600182015580546106fd9085612203565b815560058054600091908790811061071157fe5b6000918252602090912001546001600160a01b03169050801561079757815460405163e24c761360e01b81526001600160a01b0383169163e24c761391610764918a9133918a9160009190600401612ef2565b600060405180830381600087803b15801561077e57600080fd5b505af1158015610792573d6000803e3d6000fd5b505050505b6107c58486600489815481106107a957fe5b6000918252602090912001546001600160a01b03169190612226565b836001600160a01b031686336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec2132886040516108099190612ee9565b60405180910390a4505050505050565b6003818154811061082657fe5b6000918252602090912001546001600160801b03811691506001600160401b03600160801b8204811691600160c01b90041683565b60075481565b610869612575565b61087283611165565b6000848152600660209081526040808320338452909152812082518154939450909264e8d4a51000916108ae91906001600160801b0316612179565b816108b557fe5b04905060006108d96108d48460010154846121b690919063ffffffff16565b612314565b600184018390559050801561091c5761091c6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683612226565b60006005878154811061092b57fe5b6000918252602090912001546001600160a01b0316905080156109b057835460405163e24c761360e01b81526001600160a01b0383169163e24c76139161097d918b9133918c91899190600401612ef2565b600060405180830381600087803b15801561099757600080fd5b505af11580156109ab573d6000803e3d6000fd5b505050505b86336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae0660924954846040516109ea9190612ee9565b60405180910390a350505050505050565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610a2a9033906004016129ca565b60206040518083038186803b158015610a4257600080fd5b505afa158015610a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7a919061287f565b905080610a995760405162461bcd60e51b81526004016105be90612b5d565b610aae6001600160a01b03831633308461233a565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610afc907f0000000000000000000000000000000000000000000000000000000000000000908590600401612a43565b602060405180830381600087803b158015610b1657600080fd5b505af1158015610b2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4e91906126af565b50604051631c57762b60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e2bbb15890610bbd907f0000000000000000000000000000000000000000000000000000000000000000908590600401612f31565b600060405180830381600087803b158015610bd757600080fd5b505af1158015610beb573d6000803e3d6000fd5b50506040517f98a9bd3b7a617581fc53b1e2992534e0e0cb5091c9d44aa1a7fc978f706caa83925060009150a15050565b6000546001600160a01b03163314610c465760405162461bcd60e51b81526004016105be90612cfe565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526006602090815260408083203384529091528120805482825560018201839055600580549293919286908110610c9f57fe5b6000918252602090912001546001600160a01b031690508015610d245760405163e24c761360e01b81526001600160a01b0382169063e24c761390610cf1908890339089906000908190600401612ef2565b600060405180830381600087803b158015610d0b57600080fd5b505af1158015610d1f573d6000803e3d6000fd5b505050505b610d368483600488815481106107a957fe5b836001600160a01b031685336001600160a01b03167f2cac5e20e1541d836381527a43f651851e302817b71dc8e810284e69210c1c6b85604051610d7a9190612ee9565b60405180910390a45050505050565b6002546001600160a01b0316610db15760405162461bcd60e51b81526004016105be90612d9f565b600060048281548110610dc057fe5b60009182526020822001546040516370a0823160e01b81526001600160a01b03909116925082906370a0823190610dfb9030906004016129ca565b60206040518083038186803b158015610e1357600080fd5b505afa158015610e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4b919061287f565b60025460405163095ea7b360e01b81529192506001600160a01b038085169263095ea7b392610e809216908590600401612a43565b602060405180830381600087803b158015610e9a57600080fd5b505af1158015610eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed291906126af565b5060025460405163ce5494bb60e01b81526000916001600160a01b03169063ce5494bb90610f049086906004016129ca565b602060405180830381600087803b158015610f1e57600080fd5b505af1158015610f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5691906126e7565b6040516370a0823160e01b81529091506001600160a01b038216906370a0823190610f859030906004016129ca565b60206040518083038186803b158015610f9d57600080fd5b505afa158015610fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd5919061287f565b8214610ff35760405162461bcd60e51b81526004016105be90612c47565b806004858154811061100157fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050505050565b6001546001600160a01b03163381146110605760405162461bcd60e51b81526004016105be90612d33565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b604051631c57762b60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e2bbb15890611131907f000000000000000000000000000000000000000000000000000000000000000090600090600401612f31565b600060405180830381600087803b15801561114b57600080fd5b505af115801561115f573d6000803e3d6000fd5b50505050565b61116d612575565b6003828154811061117a57fe5b60009182526020918290206040805160608101825292909101546001600160801b03811683526001600160401b03600160801b82048116948401859052600160c01b909104169082015291504311156113e7576000600483815481106111dc57fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a08231906112159030906004016129ca565b60206040518083038186803b15801561122d57600080fd5b505afa158015611241573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611265919061287f565b9050801561130b57600061128f83602001516001600160401b03164361220390919063ffffffff16565b905060006007546112bf85604001516001600160401b03166112b96112b2611fd2565b8690612179565b90612179565b816112c657fe5b0490506112fd6112ec846112df8464e8d4a51000612179565b816112e657fe5b0461242b565b85516001600160801b031690612454565b6001600160801b0316845250505b61131443612483565b6001600160401b03166020830152600380548391908590811061133357fe5b6000918252602091829020835191018054848401516040958601516001600160801b03199092166001600160801b039094169390931767ffffffffffffffff60801b1916600160801b6001600160401b0394851602176001600160c01b0316600160c01b93909116929092029190911790558301518351915185927f0fc9545022a542541ad085d091fb09a2ab36fee366a4576ab63714ea907ad353926113dd9290918691612f3f565b60405180910390a2505b919050565b8060005b8181101561115f5761141384848381811061140757fe5b90506020020135611165565b506001016113f0565b7f000000000000000000000000000000000000000000000000000000000000000081565b6004818154811061144d57fe5b6000918252602090912001546001600160a01b0316905081565b60405163d505accf60e01b81526001600160a01b0389169063d505accf9061149f908a908a908a908a908a908a908a90600401612a02565b600060405180830381600087803b1580156114b957600080fd5b505af11580156114cd573d6000803e3d6000fd5b505050505050505050505050565b6002546001600160a01b031681565b6000546001600160a01b031633146115145760405162461bcd60e51b81526004016105be90612cfe565b6115538361154d6003878154811061152857fe5b60009182526020909120015460075490600160c01b90046001600160401b0316612203565b906124ac565b60075561155f83612483565b6003858154811061156c57fe5b9060005260206000200160000160186101000a8154816001600160401b0302191690836001600160401b0316021790555080156115e05781600585815481106115b157fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8061160c57600584815481106115f257fe5b6000918252602090912001546001600160a01b031661160e565b815b6001600160a01b0316847f95895a6ab1df54420d241b55243258a33e61b2194db66c1179ec521aae8e18658584604051611649929190612f21565b60405180910390a350505050565b6000546001600160a01b031681565b61166e612575565b61167784611165565b60008581526006602090815260408083206001600160a01b038716845290915290208054919250906116a990856124ac565b815581516116e09064e8d4a51000906116cc9087906001600160801b0316612179565b816116d357fe5b60018401549190046124cf565b81600101819055506000600586815481106116f757fe5b6000918252602090912001546001600160a01b03169050801561177d57815460405163e24c761360e01b81526001600160a01b0383169163e24c76139161174a918a918991829160009190600401612ef2565b600060405180830381600087803b15801561176457600080fd5b505af1158015611778573d6000803e3d6000fd5b505050505b6117ad33308760048a8154811061179057fe5b6000918252602090912001546001600160a01b031692919061233a565b836001600160a01b031686336001600160a01b03167f02d7e648dd130fc184d383e55bb126ac4c9c60e8f94bf05acdf557ba2d540b47886040516108099190612ee9565b60066020908152600092835260408084209091529082529020805460019091015482565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031633146118635760405162461bcd60e51b81526004016105be90612cfe565b600754439061187290856124ac565b6007556004805460018181019092557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b038087166001600160a01b03199283161790925560058054938401815560009081527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db090930180549286169290911691909117905560408051606081019091529081526003906020810161191f84612483565b6001600160401b0316815260200161193687612483565b6001600160401b039081169091528254600181810185556000948552602094859020845192018054958501516040909501518416600160c01b026001600160c01b0395909416600160801b0267ffffffffffffffff60801b196001600160801b039094166001600160801b0319909716969096179290921694909417929092161790556004546001600160a01b0380851692908616916119d591612203565b7f81ee0f8c5c46e2cb41984886f77a84181724abb86c32a5f6de539b07509d45e587604051611a049190612ee9565b60405180910390a450505050565b6005818154811061144d57fe5b611a27612575565b611a3084611165565b6000858152600660209081526040808320338452909152812082518154939450909264e8d4a5100091611a6c91906001600160801b0316612179565b81611a7357fe5b0490506000611a926108d48460010154846121b690919063ffffffff16565b9050611acd64e8d4a51000611abd86600001516001600160801b03168961217990919063ffffffff16565b81611ac457fe5b849190046121b6565b60018401558254611ade9087612203565b8355611b146001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683612226565b600060058881548110611b2357fe5b6000918252602090912001546001600160a01b031690508015611ba857835460405163e24c761360e01b81526001600160a01b0383169163e24c761391611b75918c9133918c91899190600401612ef2565b600060405180830381600087803b158015611b8f57600080fd5b505af1158015611ba3573d6000803e3d6000fd5b505050505b611bba868860048b815481106107a957fe5b856001600160a01b031688336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec21328a604051611bfe9190612ee9565b60405180910390a487336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae066092495484604051611c409190612ee9565b60405180910390a35050505050505050565b606080836001600160401b0381118015611c6b57600080fd5b50604051908082528060200260200182016040528015611c95578160200160208202803683370190505b509150836001600160401b0381118015611cae57600080fd5b50604051908082528060200260200182016040528015611ce257816020015b6060815260200190600190039081611ccd5790505b50905060005b84811015611dd9576000606030888885818110611d0157fe5b9050602002810190611d139190612f69565b604051611d2192919061299e565b600060405180830381855af49150503d8060008114611d5c576040519150601f19603f3d011682016040523d82523d6000602084013e611d61565b606091505b50915091508180611d70575085155b611d7982612515565b90611d975760405162461bcd60e51b81526004016105be9190612af6565b5081858481518110611da557fe5b60200260200101901515908115158152505080848481518110611dc457fe5b60209081029190910101525050600101611ce8565b50935093915050565b6000611dec612575565b60038481548110611df957fe5b600091825260208083206040805160608101825291909301546001600160801b0380821683526001600160401b03600160801b8304811684860152600160c01b90920490911682850152888552600683528385206001600160a01b0389168652909252918320825160048054949650919492169288908110611e7757fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190611eb09030906004016129ca565b60206040518083038186803b158015611ec857600080fd5b505afa158015611edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f00919061287f565b905083602001516001600160401b031643118015611f1d57508015155b15611f99576000611f4485602001516001600160401b03164361220390919063ffffffff16565b90506000600754611f6787604001516001600160401b03166112b96112b2611fd2565b81611f6e57fe5b049050611f9483611f848364e8d4a51000612179565b81611f8b57fe5b869190046124ac565b935050505b60018301548354611fc7916108d49164e8d4a5100090611fb99087612179565b81611fc057fe5b04906121b6565b979650505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b15801561202d57600080fd5b505afa158015612041573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612065919061287f565b604051631526fe2760e01b8152612139906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631526fe27906120d5907f000000000000000000000000000000000000000000000000000000000000000090600401612ee9565b60806040518083038186803b1580156120ed57600080fd5b505afa158015612101573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121259190612815565b6020015168056bc75e2d6310000090612179565b8161214057fe5b04905090565b6001546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008115806121945750508082028282828161219157fe5b04145b6121b05760405162461bcd60e51b81526004016105be90612e4f565b92915050565b60008183038183128015906121cb5750838113155b806121e057506000831280156121e057508381135b6121fc5760405162461bcd60e51b81526004016105be90612dd6565b9392505050565b808203828111156121b05760405162461bcd60e51b81526004016105be90612b09565b60006060846001600160a01b031663a9059cbb858560405160240161224c929190612a43565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161228591906129ae565b6000604051808303816000865af19150503d80600081146122c2576040519150601f19603f3d011682016040523d82523d6000602084013e6122c7565b606091505b50915091508180156122f15750805115806122f15750808060200190518101906122f191906126af565b61230d5760405162461bcd60e51b81526004016105be90612ba0565b5050505050565b6000808212156123365760405162461bcd60e51b81526004016105be90612b38565b5090565b60006060856001600160a01b03166323b872dd868686604051602401612362939291906129de565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161239b91906129ae565b6000604051808303816000865af19150503d80600081146123d8576040519150601f19603f3d011682016040523d82523d6000602084013e6123dd565b606091505b509150915081801561240757508051158061240757508080602001905181019061240791906126af565b6124235760405162461bcd60e51b81526004016105be90612e1a565b505050505050565b60006001600160801b038211156123365760405162461bcd60e51b81526004016105be90612c90565b8181016001600160801b0380831690821610156121b05760405162461bcd60e51b81526004016105be90612cc7565b60006001600160401b038211156123365760405162461bcd60e51b81526004016105be90612d68565b818101818110156121b05760405162461bcd60e51b81526004016105be90612cc7565b60008282018183128015906124e45750838112155b806124f957506000831280156124f957508381125b6121fc5760405162461bcd60e51b81526004016105be90612bd7565b606060448251101561255b575060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c7900000060208201526113e7565b600482019150818060200190518101906121b0919061278a565b604080516060810182526000808252602082018190529181019190915290565b60008083601f8401126125a6578182fd5b5081356001600160401b038111156125bc578182fd5b60208301915083602080830285010111156125d657600080fd5b9250929050565b6000806000606084860312156125f1578283fd5b83356125fc81612fff565b9250602084013561260c81613017565b9150604084013561261c81613017565b809150509250925092565b60008060006040848603121561263b578283fd5b83356001600160401b03811115612650578384fd5b61265c86828701612595565b909450925050602084013561261c81613017565b60008060208385031215612682578182fd5b82356001600160401b03811115612697578283fd5b6126a385828601612595565b90969095509350505050565b6000602082840312156126c0578081fd5b81516121fc81613017565b6000602082840312156126dc578081fd5b81356121fc81612fff565b6000602082840312156126f8578081fd5b81516121fc81612fff565b600080600080600080600080610100898b03121561271f578384fd5b883561272a81612fff565b9750602089013561273a81612fff565b9650604089013561274a81612fff565b9550606089013594506080890135935060a089013560ff8116811461276d578384fd5b979a969950949793969295929450505060c08201359160e0013590565b60006020828403121561279b578081fd5b81516001600160401b03808211156127b1578283fd5b818401915084601f8301126127c4578283fd5b8151818111156127d2578384fd5b6127e5601f8201601f1916602001612fad565b91508082528560208285010111156127fb578384fd5b61280c816020840160208601612fd3565b50949350505050565b600060808284031215612826578081fd5b6128306080612fad565b825161283b81612fff565b808252506020830151602082015260408301516040820152606083015160608201528091505092915050565b600060208284031215612878578081fd5b5035919050565b600060208284031215612890578081fd5b5051919050565b600080604083850312156128a9578182fd5b8235915060208301356128bb81612fff565b809150509250929050565b6000806000606084860312156128da578081fd5b8335925060208401356128ec81612fff565b9150604084013561261c81612fff565b600080600060608486031215612910578081fd5b8335925060208401359150604084013561261c81612fff565b6000806000806080858703121561293e578182fd5b8435935060208501359250604085013561295781612fff565b9150606085013561296781613017565b939692955090935050565b6000815180845261298a816020860160208601612fd3565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b600082516129c0818460208701612fd3565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b82811015612a97578151151584529284019290840190600101612a79565b50505083810382850152808551612aae8184612ee9565b91508192508381028201848801865b83811015612ae7578583038552612ad5838351612972565b94870194925090860190600101612abd565b50909998505050505050505050565b6000602082526121fc6020830184612972565b602080825260159082015274426f72696e674d6174683a20556e646572666c6f7760581b604082015260600190565b6020808252600b908201526a0496e7465676572203c20360ac1b604082015260600190565b60208082526023908201527f4d61737465724368656656323a2042616c616e6365206d75737420657863656560408201526206420360ec1b606082015260800190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601590820152744f776e61626c653a207a65726f206164647265737360581b604082015260600190565b60208082526029908201527f4d61737465724368656656323a206d696772617465642062616c616e6365206d6040820152680eae6e840dac2e8c6d60bb1b606082015260800190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b6020808252601d908201527f4d61737465724368656656323a206e6f206d69677261746f7220736574000000604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252818101527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b81516001600160801b031681526020808301516001600160401b0390811691830191909152604092830151169181019190915260600190565b6001600160801b039390931683526001600160401b03918216602084015216604082015260600190565b90815260200190565b9485526001600160a01b0393841660208601529190921660408401526060830191909152608082015260a00190565b9182521515602082015260400190565b918252602082015260400190565b6001600160401b0393909316835260208301919091526001600160801b0316604082015260600190565b6000808335601e19843603018112612f7f578283fd5b8301803591506001600160401b03821115612f98578283fd5b6020019150368190038213156125d657600080fd5b6040518181016001600160401b0381118282101715612fcb57600080fd5b604052919050565b60005b83811015612fee578181015183820152602001612fd6565b8381111561115f5750506000910152565b6001600160a01b038116811461301457600080fd5b50565b801515811461301457600080fdfea2646970667358221220e115c2a65a41c2da24e9de3df6524a63a89c3c6ee1ad3e68eac1dc517aaf107a64736f6c634300060c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
