{
  "_format": "hh-sol-artifact-1",
  "contractName": "PendleLiquidityRewardsReaderSingle",
  "sourceName": "contracts/misc/LiquidityRewardsReader/PendleLiquidityRewardsReaderSingle.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lmAddr",
          "type": "address"
        }
      ],
      "name": "getVars",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "startTime",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "epochDuration",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "currentEpoch",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "timeLeftInEpoch",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "vestingEpochs",
              "type": "uint256"
            }
          ],
          "internalType": "struct PendleLiquidityRewardsReaderBase.Vars",
          "name": "vars",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lm",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "currentEpoch",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "readAvailableRewardsForUserV1",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints",
          "name": "res",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lm",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "currentEpoch",
          "type": "uint256"
        }
      ],
      "name": "readEpochDataV1",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints",
          "name": "res",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lm",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "currentEpoch",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "readEpochDataV2",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "totalStakeUnits",
          "type": "uint256"
        },
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints",
          "name": "epochRewards",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "userStakeUnits",
          "type": "uint256"
        },
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints",
          "name": "availableRewardsForUser",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lmAddr",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "redeemAndCalculateAccruingV1",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "userStakeUnits",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "userStake",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalStakeUnits",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalStake",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenA",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenB",
                      "type": "address"
                    }
                  ],
                  "internalType": "struct PairTokens",
                  "name": "tokens",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "uintA",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "uintB",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct PairUints",
                  "name": "uints",
                  "type": "tuple"
                }
              ],
              "internalType": "struct PairTokenUints",
              "name": "userTentativeReward",
              "type": "tuple"
            }
          ],
          "internalType": "struct PendleLiquidityRewardsReaderBase.ResultsRedeemAndCalAccuring",
          "name": "res",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lmV2Addr",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "redeemAndCalculateAccruingV2",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "userStakeUnits",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "userStake",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalStakeUnits",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalStake",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenA",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenB",
                      "type": "address"
                    }
                  ],
                  "internalType": "struct PairTokens",
                  "name": "tokens",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "uintA",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "uintB",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct PairUints",
                  "name": "uints",
                  "type": "tuple"
                }
              ],
              "internalType": "struct PairTokenUints",
              "name": "userTentativeReward",
              "type": "tuple"
            }
          ],
          "internalType": "struct PendleLiquidityRewardsReaderBase.ResultsRedeemAndCalAccuring",
          "name": "res",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lmAddr",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "expiries",
          "type": "uint256[]"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "redeemAndCalculateVestedV1",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints",
          "name": "rewards",
          "type": "tuple"
        },
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints[]",
          "name": "vestedRewards",
          "type": "tuple[]"
        },
        {
          "internalType": "uint256",
          "name": "currentEpoch",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lmV2Addr",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "redeemAndCalculateVestedV2",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints",
          "name": "rewards",
          "type": "tuple"
        },
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints[]",
          "name": "vestedRewards",
          "type": "tuple[]"
        },
        {
          "internalType": "uint256",
          "name": "currentEpoch",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lm",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "redeemRewardsV1",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints",
          "name": "res",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lm",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "redeemRewardsV2",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints",
          "name": "res",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061179a806100206000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80635848e63e116100665780635848e63e14610144578063a008b1db14610157578063a0db255614610177578063c59cffc71461018a578063eeed49331461019d5761009e565b806304d86fe7146100a35780630671d45d146100ce5780630779031a146100ee5780631cb882fd146101015780631fc1935f14610121575b600080fd5b6100b66100b136600461139e565b6101b0565b6040516100c5939291906115c8565b60405180910390f35b6100e16100dc366004611433565b6102c8565b6040516100c591906115ba565b6100b66100fc366004611366565b6103d1565b61011461010f366004611366565b6104aa565b6040516100c5919061162f565b61013461012f36600461145e565b610622565b6040516100c594939291906116ec565b61011461015236600461145e565b6107dd565b61016a61016536600461132e565b610b72565b6040516100c59190611673565b6100e161018536600461145e565b610d21565b6100e1610198366004611366565b610e2d565b6100e16101ab36600461145e565b610f38565b6101b861127a565b60606000806101c688610b72565b90508060400151915060005b8681101561021e5760006101f98a8a8a858181106101ec57fe5b9050602002013589610f38565b90508161020857809550610215565b6102128682611015565b95505b506001016101d2565b50600181608001510367ffffffffffffffff8111801561023d57600080fd5b5060405190808252806020026020018201604052801561027757816020015b61026461127a565b81526020019060019003908161025c5790505b509250600182015b816080015183018110156102bc57610298898288610d21565b84600185840303815181106102a957fe5b602090810291909101015260010161027f565b50509450945094915050565b6102d061127a565b826001600160a01b031663a81e457c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561030957600080fd5b505afa15801561031d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610341919061134a565b81516001600160a01b03918216905260405163fb859d2b60e01b81529084169063fb859d2b906103759085906004016116ad565b604080518083038186803b15801561038c57600080fd5b505afa1580156103a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c491906114b7565b6020830151525092915050565b6103d961127a565b60606000806103e786610b72565b9050806040015191506103fa8686610e2d565b9350600181608001510367ffffffffffffffff8111801561041a57600080fd5b5060405190808252806020026020018201604052801561045457816020015b61044161127a565b8152602001906001900390816104395790505b509250600182015b816080015183018110156104a157610475878288610622565b8751909350879250600019878603019150811061048e57fe5b602090810291909101015260010161045c565b50509250925092565b6104b261129f565b826104bd8184610e2d565b5060006104c985610b72565b90506104d361127a565b6104e286836040015187610622565b50865260408087019290925290516327e235e360e01b81529091506001600160a01b038416906327e235e39061051c90889060040161157f565b60206040518083038186803b15801561053457600080fd5b505afa158015610548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056c919061149f565b846020018181525050826001600160a01b0316638b0e9f3f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105ae57600080fd5b505afa1580156105c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e6919061149f565b6060808601829052830151604086015186516106139392909202019061060d908490611073565b9061108e565b60808501525091949350505050565b600061062c61127a565b600061063661127a565b60405163b40310c960e01b81526001600160a01b0388169063b40310c99061066490899089906004016116b6565b60a06040518083038186803b15801561067c57600080fd5b505afa158015610690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b4919061150f565b602080890151878201519290925293905260408051632a07915f60e21b815290519498509095506001600160a01b038b169363a81e457c93600480840194509092829003018186803b15801561070957600080fd5b505afa15801561071d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610741919061134a565b83516001600160a01b03918216905260408051632a07915f60e21b815290519189169163a81e457c91600480820192602092909190829003018186803b15801561078a57600080fd5b505afa15801561079e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c2919061134a565b81516001600160a01b03909116905292969195509350909150565b6107e561129f565b8360006107f182610b72565b90506107fe868686610f38565b50600061080f8783604001516102c8565b60408084015190516348c51f2d60e11b81529192506001600160a01b0385169163918a3e5a91610843918a9060040161171d565b604080518083038186803b15801561085a57600080fd5b505afa15801561086e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089291906114b7565b50604080860191909152828101519051639bd3cc7b60e01b81526001600160a01b03851691639bd3cc7b916108ce919089908b906004016116cd565b60206040518083038186803b1580156108e657600080fd5b505afa1580156108fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091e919061149f565b845260405163bab9e5a760e01b81526001600160a01b0384169063bab9e5a79061094e90899089906004016116b6565b60206040518083038186803b15801561096657600080fd5b505afa15801561097a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099e919061149f565b6020850152604051632bf77f6960e01b81526001600160a01b03841690632bf77f69906109cf9089906004016116ad565b60806040518083038186803b1580156109e757600080fd5b505afa1580156109fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1f91906114da565b5050506060850152604080516331b6418360e01b815281516000926001600160a01b038716926331b641839260048083019392829003018186803b158015610a6657600080fd5b505afa158015610a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9e91906114b7565b5090506000610b33633b9aca0061060d876001600160a01b03166320616536868d6040518363ffffffff1660e01b8152600401610adc92919061171d565b60206040518083038186803b158015610af457600080fd5b505afa158015610b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2c919061149f565b8690611073565b9050610b60866060015185606001510287604001510161060d88600001518461107390919063ffffffff16565b60808701525093979650505050505050565b610b7a6112ce565b6000829050806001600160a01b03166378e979256040518163ffffffff1660e01b815260040160206040518083038186803b158015610bb857600080fd5b505afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061149f565b826000018181525050806001600160a01b0316634ff0876a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c3257600080fd5b505afa158015610c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6a919061149f565b602083018190528251420381610c7c57fe5b04600101604083015260208201518251420381610c9557fe5b06826020015103826060018181525050806001600160a01b0316639a51d2d16040518163ffffffff1660e01b815260040160206040518083038186803b158015610cde57600080fd5b505afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d16919061149f565b608083015250919050565b610d2961127a565b836001600160a01b031663a81e457c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6257600080fd5b505afa158015610d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9a919061134a565b81516001600160a01b03918216905260405163e7baa65760e01b81529085169063e7baa65790610dd090869086906004016116b6565b60206040518083038186803b158015610de857600080fd5b505afa158015610dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e20919061149f565b6020820151529392505050565b610e3561127a565b826001600160a01b031663a81e457c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e6e57600080fd5b505afa158015610e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea6919061134a565b81516001600160a01b039182169052604051639262187b60e01b815290841690639262187b90610eda90859060040161157f565b602060405180830381600087803b158015610ef457600080fd5b505af1158015610f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2c919061149f565b60208201515292915050565b610f4061127a565b836001600160a01b031663a81e457c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f7957600080fd5b505afa158015610f8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb1919061134a565b81516001600160a01b0391821690526040516363191e1360e11b81529085169063c6323c2690610fe790869086906004016116b6565b602060405180830381600087803b15801561100157600080fd5b505af1158015610dfc573d6000803e3d6000fd5b61101d61127a565b8251825161102b91906110a9565b6110505760405162461bcd60e51b815260040161104790611593565b60405180910390fd5b825181526020808401519083015161106891906110ec565b602082015292915050565b61107b61127a565b8251815260208301516110689083611116565b61109661127a565b825181526020830151611068908361113b565b805182516000916001600160a01b0391821691161480156110e3575081602001516001600160a01b031683602001516001600160a01b0316145b90505b92915050565b6110f46112fd565b8151835161110191611160565b81526020808301519084015161106891611160565b61111e6112fd565b825161112a90836111ba565b8152602083015161106890836111ba565b6111436112fd565b825161114f9083611213565b815260208301516110689083611213565b6000828201838110156110e3576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000826111c9575060006110e6565b828202828482816111d657fe5b04146110e35760405162461bcd60e51b81526004018080602001828103825260218152602001806117446021913960400191505060405180910390fd5b6000808211611269576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161127257fe5b049392505050565b604051806040016040528061128d611317565b815260200161129a6112fd565b905290565b6040518060a001604052806000815260200160008152602001600081526020016000815260200161129a61127a565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b60006020828403121561133f578081fd5b81356110e38161172b565b60006020828403121561135b578081fd5b81516110e38161172b565b60008060408385031215611378578081fd5b82356113838161172b565b915060208301356113938161172b565b809150509250929050565b600080600080606085870312156113b3578182fd5b84356113be8161172b565b9350602085013567ffffffffffffffff808211156113da578384fd5b818701915087601f8301126113ed578384fd5b8135818111156113fb578485fd5b886020808302850101111561140e578485fd5b60208301955080945050505060408501356114288161172b565b939692955090935050565b60008060408385031215611445578182fd5b82356114508161172b565b946020939093013593505050565b600080600060608486031215611472578283fd5b833561147d8161172b565b92506020840135915060408401356114948161172b565b809150509250925092565b6000602082840312156114b0578081fd5b5051919050565b600080604083850312156114c9578182fd5b505080516020909101519092909150565b600080600080608085870312156114ef578384fd5b84519350602085015192506040850151915060608501516114288161172b565b600080600080600060a08688031215611526578081fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b805180516001600160a01b039081168452602091820151168184015290810151805160408401520151606090910152565b6001600160a01b0391909116815260200190565b6020808252600d908201526c0a08292a4be9a92a69a82a8869609b1b604082015260600190565b608081016110e6828461154e565b600060c082016115d8838761154e565b608060c08185015281865180845260e08601915060209350838801855b828110156116185761160884835161154e565b92840192908501906001016115f5565b5050508093505050508260a0830152949350505050565b60006101008201905082518252602083015160208301526040830151604083015260608301516060830152608083015161166c608084018261154e565b5092915050565b600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b90815260200190565b9182526001600160a01b0316602082015260400190565b9283526001600160a01b03919091166020830152604082015260600190565b8481526101408101611701602083018661154e565b8360a083015261171460c083018461154e565b95945050505050565b918252602082015260400190565b6001600160a01b038116811461174057600080fd5b5056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122079050e1846ca3af956f173a8d9188ddbd334c1dbd29f77d7d053390ba79e56c764736f6c63430007060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80635848e63e116100665780635848e63e14610144578063a008b1db14610157578063a0db255614610177578063c59cffc71461018a578063eeed49331461019d5761009e565b806304d86fe7146100a35780630671d45d146100ce5780630779031a146100ee5780631cb882fd146101015780631fc1935f14610121575b600080fd5b6100b66100b136600461139e565b6101b0565b6040516100c5939291906115c8565b60405180910390f35b6100e16100dc366004611433565b6102c8565b6040516100c591906115ba565b6100b66100fc366004611366565b6103d1565b61011461010f366004611366565b6104aa565b6040516100c5919061162f565b61013461012f36600461145e565b610622565b6040516100c594939291906116ec565b61011461015236600461145e565b6107dd565b61016a61016536600461132e565b610b72565b6040516100c59190611673565b6100e161018536600461145e565b610d21565b6100e1610198366004611366565b610e2d565b6100e16101ab36600461145e565b610f38565b6101b861127a565b60606000806101c688610b72565b90508060400151915060005b8681101561021e5760006101f98a8a8a858181106101ec57fe5b9050602002013589610f38565b90508161020857809550610215565b6102128682611015565b95505b506001016101d2565b50600181608001510367ffffffffffffffff8111801561023d57600080fd5b5060405190808252806020026020018201604052801561027757816020015b61026461127a565b81526020019060019003908161025c5790505b509250600182015b816080015183018110156102bc57610298898288610d21565b84600185840303815181106102a957fe5b602090810291909101015260010161027f565b50509450945094915050565b6102d061127a565b826001600160a01b031663a81e457c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561030957600080fd5b505afa15801561031d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610341919061134a565b81516001600160a01b03918216905260405163fb859d2b60e01b81529084169063fb859d2b906103759085906004016116ad565b604080518083038186803b15801561038c57600080fd5b505afa1580156103a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c491906114b7565b6020830151525092915050565b6103d961127a565b60606000806103e786610b72565b9050806040015191506103fa8686610e2d565b9350600181608001510367ffffffffffffffff8111801561041a57600080fd5b5060405190808252806020026020018201604052801561045457816020015b61044161127a565b8152602001906001900390816104395790505b509250600182015b816080015183018110156104a157610475878288610622565b8751909350879250600019878603019150811061048e57fe5b602090810291909101015260010161045c565b50509250925092565b6104b261129f565b826104bd8184610e2d565b5060006104c985610b72565b90506104d361127a565b6104e286836040015187610622565b50865260408087019290925290516327e235e360e01b81529091506001600160a01b038416906327e235e39061051c90889060040161157f565b60206040518083038186803b15801561053457600080fd5b505afa158015610548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056c919061149f565b846020018181525050826001600160a01b0316638b0e9f3f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105ae57600080fd5b505afa1580156105c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e6919061149f565b6060808601829052830151604086015186516106139392909202019061060d908490611073565b9061108e565b60808501525091949350505050565b600061062c61127a565b600061063661127a565b60405163b40310c960e01b81526001600160a01b0388169063b40310c99061066490899089906004016116b6565b60a06040518083038186803b15801561067c57600080fd5b505afa158015610690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b4919061150f565b602080890151878201519290925293905260408051632a07915f60e21b815290519498509095506001600160a01b038b169363a81e457c93600480840194509092829003018186803b15801561070957600080fd5b505afa15801561071d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610741919061134a565b83516001600160a01b03918216905260408051632a07915f60e21b815290519189169163a81e457c91600480820192602092909190829003018186803b15801561078a57600080fd5b505afa15801561079e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c2919061134a565b81516001600160a01b03909116905292969195509350909150565b6107e561129f565b8360006107f182610b72565b90506107fe868686610f38565b50600061080f8783604001516102c8565b60408084015190516348c51f2d60e11b81529192506001600160a01b0385169163918a3e5a91610843918a9060040161171d565b604080518083038186803b15801561085a57600080fd5b505afa15801561086e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089291906114b7565b50604080860191909152828101519051639bd3cc7b60e01b81526001600160a01b03851691639bd3cc7b916108ce919089908b906004016116cd565b60206040518083038186803b1580156108e657600080fd5b505afa1580156108fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091e919061149f565b845260405163bab9e5a760e01b81526001600160a01b0384169063bab9e5a79061094e90899089906004016116b6565b60206040518083038186803b15801561096657600080fd5b505afa15801561097a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099e919061149f565b6020850152604051632bf77f6960e01b81526001600160a01b03841690632bf77f69906109cf9089906004016116ad565b60806040518083038186803b1580156109e757600080fd5b505afa1580156109fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1f91906114da565b5050506060850152604080516331b6418360e01b815281516000926001600160a01b038716926331b641839260048083019392829003018186803b158015610a6657600080fd5b505afa158015610a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9e91906114b7565b5090506000610b33633b9aca0061060d876001600160a01b03166320616536868d6040518363ffffffff1660e01b8152600401610adc92919061171d565b60206040518083038186803b158015610af457600080fd5b505afa158015610b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2c919061149f565b8690611073565b9050610b60866060015185606001510287604001510161060d88600001518461107390919063ffffffff16565b60808701525093979650505050505050565b610b7a6112ce565b6000829050806001600160a01b03166378e979256040518163ffffffff1660e01b815260040160206040518083038186803b158015610bb857600080fd5b505afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061149f565b826000018181525050806001600160a01b0316634ff0876a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c3257600080fd5b505afa158015610c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6a919061149f565b602083018190528251420381610c7c57fe5b04600101604083015260208201518251420381610c9557fe5b06826020015103826060018181525050806001600160a01b0316639a51d2d16040518163ffffffff1660e01b815260040160206040518083038186803b158015610cde57600080fd5b505afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d16919061149f565b608083015250919050565b610d2961127a565b836001600160a01b031663a81e457c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6257600080fd5b505afa158015610d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9a919061134a565b81516001600160a01b03918216905260405163e7baa65760e01b81529085169063e7baa65790610dd090869086906004016116b6565b60206040518083038186803b158015610de857600080fd5b505afa158015610dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e20919061149f565b6020820151529392505050565b610e3561127a565b826001600160a01b031663a81e457c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e6e57600080fd5b505afa158015610e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea6919061134a565b81516001600160a01b039182169052604051639262187b60e01b815290841690639262187b90610eda90859060040161157f565b602060405180830381600087803b158015610ef457600080fd5b505af1158015610f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2c919061149f565b60208201515292915050565b610f4061127a565b836001600160a01b031663a81e457c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f7957600080fd5b505afa158015610f8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb1919061134a565b81516001600160a01b0391821690526040516363191e1360e11b81529085169063c6323c2690610fe790869086906004016116b6565b602060405180830381600087803b15801561100157600080fd5b505af1158015610dfc573d6000803e3d6000fd5b61101d61127a565b8251825161102b91906110a9565b6110505760405162461bcd60e51b815260040161104790611593565b60405180910390fd5b825181526020808401519083015161106891906110ec565b602082015292915050565b61107b61127a565b8251815260208301516110689083611116565b61109661127a565b825181526020830151611068908361113b565b805182516000916001600160a01b0391821691161480156110e3575081602001516001600160a01b031683602001516001600160a01b0316145b90505b92915050565b6110f46112fd565b8151835161110191611160565b81526020808301519084015161106891611160565b61111e6112fd565b825161112a90836111ba565b8152602083015161106890836111ba565b6111436112fd565b825161114f9083611213565b815260208301516110689083611213565b6000828201838110156110e3576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000826111c9575060006110e6565b828202828482816111d657fe5b04146110e35760405162461bcd60e51b81526004018080602001828103825260218152602001806117446021913960400191505060405180910390fd5b6000808211611269576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161127257fe5b049392505050565b604051806040016040528061128d611317565b815260200161129a6112fd565b905290565b6040518060a001604052806000815260200160008152602001600081526020016000815260200161129a61127a565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b60006020828403121561133f578081fd5b81356110e38161172b565b60006020828403121561135b578081fd5b81516110e38161172b565b60008060408385031215611378578081fd5b82356113838161172b565b915060208301356113938161172b565b809150509250929050565b600080600080606085870312156113b3578182fd5b84356113be8161172b565b9350602085013567ffffffffffffffff808211156113da578384fd5b818701915087601f8301126113ed578384fd5b8135818111156113fb578485fd5b886020808302850101111561140e578485fd5b60208301955080945050505060408501356114288161172b565b939692955090935050565b60008060408385031215611445578182fd5b82356114508161172b565b946020939093013593505050565b600080600060608486031215611472578283fd5b833561147d8161172b565b92506020840135915060408401356114948161172b565b809150509250925092565b6000602082840312156114b0578081fd5b5051919050565b600080604083850312156114c9578182fd5b505080516020909101519092909150565b600080600080608085870312156114ef578384fd5b84519350602085015192506040850151915060608501516114288161172b565b600080600080600060a08688031215611526578081fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b805180516001600160a01b039081168452602091820151168184015290810151805160408401520151606090910152565b6001600160a01b0391909116815260200190565b6020808252600d908201526c0a08292a4be9a92a69a82a8869609b1b604082015260600190565b608081016110e6828461154e565b600060c082016115d8838761154e565b608060c08185015281865180845260e08601915060209350838801855b828110156116185761160884835161154e565b92840192908501906001016115f5565b5050508093505050508260a0830152949350505050565b60006101008201905082518252602083015160208301526040830151604083015260608301516060830152608083015161166c608084018261154e565b5092915050565b600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b90815260200190565b9182526001600160a01b0316602082015260400190565b9283526001600160a01b03919091166020830152604082015260600190565b8481526101408101611701602083018661154e565b8360a083015261171460c083018461154e565b95945050505050565b918252602082015260400190565b6001600160a01b038116811461174057600080fd5b5056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122079050e1846ca3af956f173a8d9188ddbd334c1dbd29f77d7d053390ba79e56c764736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
