{
  "_format": "hh-sol-artifact-1",
  "contractName": "FarmLensV2",
  "sourceName": "contracts/traderjoe/FarmLensV2.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_joe",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_wavax",
          "type": "address"
        },
        {
          "internalType": "contract IJoePair",
          "name": "_wavaxUsdte",
          "type": "address"
        },
        {
          "internalType": "contract IJoePair",
          "name": "_wavaxUsdce",
          "type": "address"
        },
        {
          "internalType": "contract IJoePair",
          "name": "_wavaxUsdc",
          "type": "address"
        },
        {
          "internalType": "contract IJoeFactory",
          "name": "_joeFactory",
          "type": "address"
        },
        {
          "internalType": "contract IMasterChef",
          "name": "_chefv2",
          "type": "address"
        },
        {
          "internalType": "contract IMasterChef",
          "name": "_chefv3",
          "type": "address"
        },
        {
          "internalType": "contract IBoostedMasterchef",
          "name": "_bmcj",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "bmcj",
      "outputs": [
        {
          "internalType": "contract IBoostedMasterchef",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "chefv2",
      "outputs": [
        {
          "internalType": "contract IMasterChef",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "chefv3",
      "outputs": [
        {
          "internalType": "contract IMasterChef",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "whitelistedPidsV2",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "whitelistedPidsV3",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "whitelistedPidsBMCJ",
          "type": "uint256[]"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getAllFarmData",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "avaxPriceUsd",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "joePriceUsd",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalAllocChefV2",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalAllocChefV3",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalAllocBMCJ",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "joePerSecChefV2",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "joePerSecChefV3",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "joePerSecBMCJ",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "allocPoint",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "lpAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token0Address",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token1Address",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "token0Symbol",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "token1Symbol",
                  "type": "string"
                },
                {
                  "internalType": "uint256",
                  "name": "reserveUsd",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalSupplyScaled",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "chefAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "chefBalanceScaled",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "chefTotalAlloc",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "chefJoePerSec",
                  "type": "uint256"
                }
              ],
              "internalType": "struct FarmLensV2.FarmInfo[]",
              "name": "farmInfosV2",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "allocPoint",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "lpAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token0Address",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token1Address",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "token0Symbol",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "token1Symbol",
                  "type": "string"
                },
                {
                  "internalType": "uint256",
                  "name": "reserveUsd",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalSupplyScaled",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "chefAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "chefBalanceScaled",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "chefTotalAlloc",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "chefJoePerSec",
                  "type": "uint256"
                }
              ],
              "internalType": "struct FarmLensV2.FarmInfo[]",
              "name": "farmInfosV3",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "allocPoint",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "lpAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token0Address",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token1Address",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "token0Symbol",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "token1Symbol",
                  "type": "string"
                },
                {
                  "internalType": "uint256",
                  "name": "reserveUsd",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalSupplyScaled",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "chefAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "chefBalanceScaled",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "chefTotalAlloc",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "chefJoePerSec",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "baseApr",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "averageBoostedApr",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "veJoeShareBp",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "joePriceUsd",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "userLp",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "userPendingJoe",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "userBoostedApr",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "userFactorShare",
                  "type": "uint256"
                }
              ],
              "internalType": "struct FarmLensV2.FarmInfoBMCJ[]",
              "name": "farmInfosBMCJ",
              "type": "tuple[]"
            }
          ],
          "internalType": "struct FarmLensV2.AllFarmData",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAvaxPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IBoostedMasterchef",
          "name": "chef",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "whitelistedPids",
          "type": "uint256[]"
        }
      ],
      "name": "getBMCJFarmInfos",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "allocPoint",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "lpAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token0Address",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1Address",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "token0Symbol",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "token1Symbol",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "reserveUsd",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalSupplyScaled",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "chefAddress",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "chefBalanceScaled",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "chefTotalAlloc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "chefJoePerSec",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "baseApr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "averageBoostedApr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "veJoeShareBp",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "joePriceUsd",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "userLp",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "userPendingJoe",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "userBoostedApr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "userFactorShare",
              "type": "uint256"
            }
          ],
          "internalType": "struct FarmLensV2.FarmInfoBMCJ[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getDerivedAvaxPriceOfToken",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IMasterChef",
          "name": "chef",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "whitelistedPids",
          "type": "uint256[]"
        }
      ],
      "name": "getMCFarmInfos",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "allocPoint",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "lpAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token0Address",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1Address",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "token0Symbol",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "token1Symbol",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "reserveUsd",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalSupplyScaled",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "chefAddress",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "chefBalanceScaled",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "chefTotalAlloc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "chefJoePerSec",
              "type": "uint256"
            }
          ],
          "internalType": "struct FarmLensV2.FarmInfo[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getTokenPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "joe",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "joeFactory",
      "outputs": [
        {
          "internalType": "contract IJoeFactory",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "wavax",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "wavaxUsdc",
      "outputs": [
        {
          "internalType": "contract IJoePair",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "wavaxUsdce",
      "outputs": [
        {
          "internalType": "contract IJoePair",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "wavaxUsdte",
      "outputs": [
        {
          "internalType": "contract IJoePair",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6102006040523480156200001257600080fd5b50604051620033d7380380620033d7833981016040819052620000359162000285565b6001600160601b031960608a811b821660805289811b821660a05288811b821660c05287811b821660e05286811b82166101005285811b82166101205284811b82166101405283811b82166101605282901b16610180526040805163d21220a760e01b815290516001600160a01b038a811692908a169163d21220a791600480820192602092909190829003018186803b158015620000d357600080fd5b505afa158015620000e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010e91906200025f565b6001600160a01b03161415156101a081151560f81b81525050876001600160a01b0316866001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156200016b57600080fd5b505afa15801562000180573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a691906200025f565b6001600160a01b03161415156101c081151560f81b81525050876001600160a01b0316856001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156200020357600080fd5b505afa15801562000218573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023e91906200025f565b6001600160a01b03161460f81b6101e0525062000374975050505050505050565b60006020828403121562000271578081fd5b81516200027e816200035b565b9392505050565b60008060008060008060008060006101208a8c031215620002a4578485fd5b8951620002b1816200035b565b60208b0151909950620002c4816200035b565b60408b0151909850620002d7816200035b565b60608b0151909750620002ea816200035b565b60808b0151909650620002fd816200035b565b60a08b015190955062000310816200035b565b60c08b015190945062000323816200035b565b60e08b015190935062000336816200035b565b6101008b01519092506200034a816200035b565b809150509295985092959850929598565b6001600160a01b03811681146200037157600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160f81c6101c05160f81c6101e05160f81c612f4162000496600039806109b8525080610a05525080610a4f5250806101f5528061053e52806105d852806108635280610ebf5280610eee5280610f8452806119f552508061023d528061040a52806104a452806106a352806107c15250806102e95280610370528061067152806106f452806107865250806107605280610aeb52508061073c528061099752508061091a52806109e45250806107185280610a2e5250806102195280610a8a5280610b1a5280611dcd52508061028f528061083d52806108d25250612f416000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638a38466e11610097578063cff5dd3311610066578063cff5dd33146101b0578063d02641a0146101b8578063eee5c276146101d8578063f97a496c146101eb576100f5565b80638a38466e146101605780639bbf1deb14610168578063b985a3a014610188578063ce7a198914610190576100f5565b806335541641116100d357806335541641146101285780634e57afe014610148578063685f02e71461015057806387dabe4614610158576100f5565b80630d1dcd9a146100fa578063117be4c2146101185780632c9e2b0514610120575b600080fd5b6101026101f3565b60405161010f9190612bd4565b60405180910390f35b610102610217565b61010261023b565b61013b610136366004612543565b61025f565b60405161010f9190612daa565b6101026106f2565b610102610716565b61010261073a565b61010261075e565b61017b610176366004612650565b610782565b60405161010f9190612c62565b61010261083b565b6101a361019e3660046125ed565b61085f565b60405161010f9190612c02565b610102610918565b6101cb6101c636600461250b565b61093c565b60405161010f9190612e67565b6101cb6101e636600461250b565b61096b565b6101cb61097c565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b61026761219a565b61026f61219a565b600061027961098b565b90506000670de0b6b3a76400006102b9836102b37f0000000000000000000000000000000000000000000000000000000000000000610a86565b90610c41565b816102c057fe5b838552046020808501829052604080516317caf6f160e01b815290519293506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926317caf6f192600480840193919291829003018186803b15801561032d57600080fd5b505afa158015610341573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610365919061285d565b8360400181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b1580156103c757600080fd5b505afa1580156103db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ff919061285d565b8360a00181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b15801561046157600080fd5b505afa158015610475573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610499919061285d565b8360600181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b1580156104fb57600080fd5b505afa15801561050f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610533919061285d565b8360c00181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b15801561059557600080fd5b505afa1580156105a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cd919061285d565b8360800181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b15801561062f57600080fd5b505afa158015610643573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610667919061285d565b60e08401526106987f0000000000000000000000000000000000000000000000000000000000000000838d8d610c78565b6101008401526106ca7f0000000000000000000000000000000000000000000000000000000000000000838b8b610c78565b6101208401526106dd8282878a8a610ea8565b61014084015250909998505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614806107f557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b61081a5760405162461bcd60e51b815260040161081190612d09565b60405180910390fd5b600061082461098b565b905061083285828686610c78565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316146108b25760405162461bcd60e51b815260040161081190612ca5565b60006108bc61098b565b90506000670de0b6b3a76400006108f6836102b37f0000000000000000000000000000000000000000000000000000000000000000610a86565b816108fd57fe5b04905061090d8282888888610ea8565b979650505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000670de0b6b3a764000061095b61095261098b565b6102b385610a86565b8161096257fe5b0490505b919050565b600061097682610a86565b92915050565b600061098661098b565b905090565b60006003610a796109dc7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006112b5565b610a73610a297f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006112b5565b610a737f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006112b5565b9061145a565b81610a8057fe5b04905090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415610ad15750670de0b6b3a7640000610966565b60405163e6a4390560e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e6a4390590610b429086907f000000000000000000000000000000000000000000000000000000000000000090600401612be8565b60206040518083038186803b158015610b5a57600080fd5b505afa158015610b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b929190612527565b90506001600160a01b038116610bac576000915050610966565b610c3a81826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610be957600080fd5b505afa158015610bfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c219190612527565b6001600160a01b0316856001600160a01b0316146112b5565b9392505050565b6000811580610c5c57505080820282828281610c5957fe5b04145b6109765760405162461bcd60e51b815260040161081190612d7a565b606081818167ffffffffffffffff81118015610c9357600080fd5b50604051908082528060200260200182016040528015610ccd57816020015b610cba6121f4565b815260200190600190039081610cb25790505b5090506000876001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0b57600080fd5b505afa158015610d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d43919061285d565b90506000886001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8057600080fd5b505afa158015610d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db8919061285d565b905060005b84811015610e9a576000888883818110610dd357fe5b905060200201359050610de4612280565b604051631526fe2760e01b81526001600160a01b038d1690631526fe2790610e10908590600401612e67565b60806040518083038186803b158015610e2857600080fd5b505afa158015610e3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6091906126d6565b9050610e798c8c84846000015185602001518a8a61147d565b868481518110610e8557fe5b60209081029190910101525050600101610dbd565b509198975050505050505050565b6060610eb26122b1565b60405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4557600080fd5b505afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d919061285d565b81526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b158015610fdb57600080fd5b505afa158015610fef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611013919061285d565b905290508260608167ffffffffffffffff8111801561103157600080fd5b5060405190808252806020026020018201604052801561106b57816020015b6110586122db565b8152602001906001900390816110505790505b50905060005b828110156112a857600087878381811061108757fe5b90506020020135905061109861239f565b8551604051631526fe2760e01b81526001600160a01b0390911690631526fe27906110c7908590600401612e67565b6101206040518083038186803b1580156110e057600080fd5b505afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190612728565b90506111226123eb565b86516040516393f1a40b60e01b81526001600160a01b03909116906393f1a40b906111539086908f90600401612e70565b60606040518083038186803b15801561116b57600080fd5b505afa15801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a391906127cc565b9050828585815181106111b257fe5b602090810291909101015152865185518690869081106111ce57fe5b602002602001015161012001906001600160a01b031690816001600160a01b031681525050866020015185858151811061120457fe5b6020026020010151610160018181525050866040015185858151811061122657fe5b60200260200101516101800181815250508b85858151811061124457fe5b602002602001015161020001818152505061129d8d670de0b6b3a76400006112798f8b60400151610c4190919063ffffffff16565b8161128057fe5b048d88888151811061128e57fe5b602002602001015186866117c7565b505050600101611071565b5098975050505050505050565b6000806000846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156112f357600080fd5b505afa158015611307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132b9190612809565b506001600160701b031691506001600160701b0316915060006113c6866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561138057600080fd5b505afa158015611394573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b89190612527565b6001600160a01b0316611c96565b60ff1690506000611409876001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561138057600080fd5b60ff16905085156114475761143c83611436866114318661142b87601261145a565b90611d57565b611d7a565b90611d96565b945050505050610976565b61143c84611436856114318561142b8860125b818101818110156109765760405162461bcd60e51b815260040161081190612c75565b6114856121f4565b6000856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156114c057600080fd5b505afa1580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906128d5565b60ff169050600061157c876001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561153b57600080fd5b505afa15801561154f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611573919061285d565b83601203611d7a565b90506000611608886001600160a01b03166370a082318d6040518263ffffffff1660e01b81526004016115af9190612bd4565b60206040518083038186803b1580156115c757600080fd5b505afa1580156115db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ff919061285d565b84601203611d7a565b90506000670de0b6b3a76400006116228c6102b38c611dc8565b8161162957fe5b0490506000896001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561166757600080fd5b505afa15801561167b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169f9190612527565b905060008a6001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156116dc57600080fd5b505afa1580156116f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117149190612527565b9050604051806101a001604052808d81526020018b81526020018c6001600160a01b03168152602001836001600160a01b03168152602001826001600160a01b0316815260200161176d846001600160a01b03166120c7565b8152602001611784836001600160a01b03166120c7565b81526020018481526020018681526020018f6001600160a01b031681526020018581526020018a8152602001898152509650505050505050979650505050505050565b6000826000015190506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561180b57600080fd5b505afa15801561181f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118439190612527565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561188057600080fd5b505afa158015611894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b89190612527565b6020808701516001600160601b0316908801526001600160a01b0380851660408901528381166060890181905290821660808901529091506118f9906120c7565b60a08701526119106001600160a01b0382166120c7565b60c0870152670de0b6b3a764000061192b8a6102b386611dc8565b8161193257fe5b048660e0018181525050826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561197557600080fd5b505afa158015611989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ad919061285d565b61010080880191909152850151610140870152835161022087015260c085015163ffffffff166101e0870152855160405160016232bd9d60e01b031981526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163ffcd426391611a2b91908b90600401612e70565b60006040518083038186803b158015611a4357600080fd5b505afa158015611a57573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a7f9190810190612875565b50505061024087015250505061010082015115801590611aa3575061010083015115155b8015611ab3575061016083015115155b8015611ac2575060e083015115155b15611c8e576000836101600151611af76301e133806102b386602001516001600160601b03168a610c4190919063ffffffff16565b81611afe57fe5b0490506000846101000151611b258661014001518760e00151610c4190919063ffffffff16565b81611b2c57fe5b04905080611b3b575050611c8e565b61271081611b6c670de0b6b3a76400006102b38860c0015163ffffffff166127100387610c4190919063ffffffff16565b81611b7357fe5b0481611b7b57fe5b046101a086015260e084015115611c8b5761271081611bb9670de0b6b3a76400006102b38860c0015163ffffffff1687610c4190919063ffffffff16565b81611bc057fe5b0481611bc857fe5b046101c0860152825115801590611be25750604083015115155b15611c8b5761010084015160e0860151845160009291611c029190610c41565b81611c0957fe5b04905061271081611c49670de0b6b3a76400006102b38960e001516114368a604001516102b38d60c0015163ffffffff168c610c4190919063ffffffff16565b81611c5057fe5b0481611c5857fe5b0461026087015260e08501516040850151611c7b90670de0b6b3a7640000610c41565b81611c8257fe5b04610280870152505b50505b505050505050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b179052905160009182916060916001600160a01b03861691611cdd9190612bb8565b600060405180830381855afa9150503d8060008114611d18576040519150601f19603f3d011682016040523d82523d6000602084013e611d1d565b606091505b5091509150818015611d30575080516020145b611d3b576012611d4f565b80806020019051810190611d4f91906128d5565b949350505050565b808203828111156109765760405162461bcd60e51b815260040161081190612cdc565b600081611d88575081610976565b610c3a83600a84900a610c41565b6000808211611db75760405162461bcd60e51b815260040161081190612d4b565b818381611dc057fe5b049392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000009050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611e2a57600080fd5b505afa158015611e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e629190612809565b506001600160701b031691506001600160701b031691506000856001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611eb457600080fd5b505afa158015611ec8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eec9190612527565b90506000866001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611f2957600080fd5b505afa158015611f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f619190612527565b90506000611f77836001600160a01b0316611c96565b60ff1690506000611f90836001600160a01b0316611c96565b60ff169050611fa486611431601285611d57565b9550611fb585611431601284611d57565b9450600080886001600160a01b0316866001600160a01b03161415611ff157670de0b6b3a76400009150611fea8b60016112b5565b9050612090565b886001600160a01b0316856001600160a01b03161415612028576120168b60006112b5565b9150670de0b6b3a76400009050612090565b61203186610a86565b915061203c85610a86565b90508161207357670de0b6b3a764000061205b60026102b38a85610c41565b8161206257fe5b049950505050505050505050610966565b8061209057670de0b6b3a764000061205b60026102b38b86610c41565b670de0b6b3a76400006120b06120a68984610c41565b610a738b86610c41565b816120b757fe5b049b9a5050505050505050505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b179052905160609160009183916001600160a01b0386169161210e9190612bb8565b600060405180830381855afa9150503d8060008114612149576040519150601f19603f3d011682016040523d82523d6000602084013e61214e565b606091505b5091509150818015612161575060008151115b61218657604051806040016040528060038152602001623f3f3f60e81b815250611d4f565b80806020019051810190611d4f91906126a3565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160608152602001606081525090565b604051806101a00160405280600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b604051806102a00160405280600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290565b60405180606001604052806000815260200160008152602001600081525090565b805161097681612ede565b60008083601f840112612428578182fd5b50813567ffffffffffffffff81111561243f578182fd5b602083019150836020808302850101111561245957600080fd5b9250929050565b600082601f830112612470578081fd5b815167ffffffffffffffff811115612486578182fd5b612499601f8201601f1916602001612e87565b91508082528360208285010111156124b057600080fd5b6124c1816020840160208601612eae565b5092915050565b805163ffffffff8116811461097657600080fd5b805167ffffffffffffffff8116811461097657600080fd5b80516001600160601b038116811461097657600080fd5b60006020828403121561251c578081fd5b8135610c3a81612ede565b600060208284031215612538578081fd5b8151610c3a81612ede565b60008060008060008060006080888a03121561255d578283fd5b873567ffffffffffffffff80821115612574578485fd5b6125808b838c01612417565b909950975060208a0135915080821115612598578485fd5b6125a48b838c01612417565b909750955060408a01359150808211156125bc578485fd5b506125c98a828b01612417565b90945092505060608801356125dd81612ede565b8091505092959891949750929550565b60008060008060608587031215612602578384fd5b843561260d81612ede565b9350602085013561261d81612ede565b9250604085013567ffffffffffffffff811115612638578283fd5b61264487828801612417565b95989497509550505050565b600080600060408486031215612664578283fd5b833561266f81612ede565b9250602084013567ffffffffffffffff81111561268a578283fd5b61269686828701612417565b9497909650939450505050565b6000602082840312156126b4578081fd5b815167ffffffffffffffff8111156126ca578182fd5b611d4f84828501612460565b6000608082840312156126e7578081fd5b6126f16080612e87565b82516126fc81612ede565b808252506020830151602082015260408301516040820152606083015160608201528091505092915050565b600061012080838503121561273b578182fd5b61274481612e87565b9050612750848461240c565b815261275f84602085016124f4565b6020820152604083015160408201526060830151606082015261278584608085016124dc565b60808201526127978460a0850161240c565b60a08201526127a98460c085016124c8565b60c082015260e08381015190820152610100928301519281019290925250919050565b6000606082840312156127dd578081fd5b6127e76060612e87565b8251815260208301516020820152604083015160408201528091505092915050565b60008060006060848603121561281d578081fd5b835161282881612ef6565b602085015190935061283981612ef6565b604085015190925063ffffffff81168114612852578182fd5b809150509250925092565b60006020828403121561286e578081fd5b5051919050565b6000806000806080858703121561288a578182fd5b84519350602085015161289c81612ede565b604086015190935067ffffffffffffffff8111156128b8578283fd5b6128c487828801612460565b606096909601519497939650505050565b6000602082840312156128e6578081fd5b815160ff81168114610c3a578182fd5b6001600160a01b03169052565b6000815180845260208085018081965082840281019150828601855b85811015612949578284038952612937848351612a8c565b9885019893509084019060010161291f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b8581101561294957828403895281516101a08151865286820151878701526040808301516129a2828901826128f6565b50506060808301516129b6828901826128f6565b50506080808301516129ca828901826128f6565b505060a08083015182828901526129e383890182612a60565b9250505060c080830151878303828901526129fe8382612a60565b9250505060e080830151818801525061010080830151818801525061012080830151612a2c828901826128f6565b5050610140828101519087015261016080830151908701526101809182015191909501529784019790840190600101612972565b60008151808452612a78816020860160208601612eae565b601f01601f19169290920160200192915050565b60006102a082518452602083015160208501526040830151612ab160408601826128f6565b506060830151612ac460608601826128f6565b506080830151612ad760808601826128f6565b5060a08301518160a0860152612aef82860182612a60565b91505060c083015184820360c0860152612b098282612a60565b91505060e083015160e085015261010080840151818601525061012080840151612b35828701826128f6565b50506101408381015190850152610160808401519085015261018080840151908501526101a080840151908501526101c080840151908501526101e0808401519085015261020080840151908501526102208084015190850152610240808401519085015261026080840151908501526102809283015192909301919091525090565b60008251612bca818460208701612eae565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015612c5557603f19888603018452612c43858351612a8c565b94509285019290850190600101612c27565b5092979650505050505050565b600060208252610c3a6020830184612956565b602080825260169082015275536166654d6174683a20416464204f766572666c6f7760501b604082015260600190565b60208082526019908201527f4661726d4c656e7356323a204f6e6c7920666f7220424d434a00000000000000604082015260600190565b602080825260139082015272536166654d6174683a20556e646572666c6f7760681b604082015260600190565b60208082526022908201527f4661726d4c656e7356323a206f6e6c7920666f72204d43563220616e64204d43604082015261563360f01b606082015260800190565b602080825260159082015274536166654d6174683a20446976206279205a65726f60581b604082015260600190565b602080825260169082015275536166654d6174683a204d756c204f766572666c6f7760501b604082015260600190565b60006020825282516020830152602083015160408301526040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c083015160e083015260e08301516101008181850152808501519150506101606101208181860152612e20610180860184612956565b9250808601519050601f19610140818786030181880152612e418584612956565b908801518782039092018488015293509050612e5d8382612903565b9695505050505050565b90815260200190565b9182526001600160a01b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715612ea657600080fd5b604052919050565b60005b83811015612ec9578181015183820152602001612eb1565b83811115612ed8576000848401525b50505050565b6001600160a01b0381168114612ef357600080fd5b50565b6001600160701b0381168114612ef357600080fdfea2646970667358221220e96f0b7ea9d85c3bdd70907d3de15155a170dba20ba69ca8850845c642802a6f64736f6c634300060c0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80638a38466e11610097578063cff5dd3311610066578063cff5dd33146101b0578063d02641a0146101b8578063eee5c276146101d8578063f97a496c146101eb576100f5565b80638a38466e146101605780639bbf1deb14610168578063b985a3a014610188578063ce7a198914610190576100f5565b806335541641116100d357806335541641146101285780634e57afe014610148578063685f02e71461015057806387dabe4614610158576100f5565b80630d1dcd9a146100fa578063117be4c2146101185780632c9e2b0514610120575b600080fd5b6101026101f3565b60405161010f9190612bd4565b60405180910390f35b610102610217565b61010261023b565b61013b610136366004612543565b61025f565b60405161010f9190612daa565b6101026106f2565b610102610716565b61010261073a565b61010261075e565b61017b610176366004612650565b610782565b60405161010f9190612c62565b61010261083b565b6101a361019e3660046125ed565b61085f565b60405161010f9190612c02565b610102610918565b6101cb6101c636600461250b565b61093c565b60405161010f9190612e67565b6101cb6101e636600461250b565b61096b565b6101cb61097c565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b61026761219a565b61026f61219a565b600061027961098b565b90506000670de0b6b3a76400006102b9836102b37f0000000000000000000000000000000000000000000000000000000000000000610a86565b90610c41565b816102c057fe5b838552046020808501829052604080516317caf6f160e01b815290519293506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926317caf6f192600480840193919291829003018186803b15801561032d57600080fd5b505afa158015610341573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610365919061285d565b8360400181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b1580156103c757600080fd5b505afa1580156103db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ff919061285d565b8360a00181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b15801561046157600080fd5b505afa158015610475573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610499919061285d565b8360600181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b1580156104fb57600080fd5b505afa15801561050f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610533919061285d565b8360c00181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b15801561059557600080fd5b505afa1580156105a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cd919061285d565b8360800181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b15801561062f57600080fd5b505afa158015610643573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610667919061285d565b60e08401526106987f0000000000000000000000000000000000000000000000000000000000000000838d8d610c78565b6101008401526106ca7f0000000000000000000000000000000000000000000000000000000000000000838b8b610c78565b6101208401526106dd8282878a8a610ea8565b61014084015250909998505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614806107f557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b61081a5760405162461bcd60e51b815260040161081190612d09565b60405180910390fd5b600061082461098b565b905061083285828686610c78565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316146108b25760405162461bcd60e51b815260040161081190612ca5565b60006108bc61098b565b90506000670de0b6b3a76400006108f6836102b37f0000000000000000000000000000000000000000000000000000000000000000610a86565b816108fd57fe5b04905061090d8282888888610ea8565b979650505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000670de0b6b3a764000061095b61095261098b565b6102b385610a86565b8161096257fe5b0490505b919050565b600061097682610a86565b92915050565b600061098661098b565b905090565b60006003610a796109dc7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006112b5565b610a73610a297f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006112b5565b610a737f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006112b5565b9061145a565b81610a8057fe5b04905090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415610ad15750670de0b6b3a7640000610966565b60405163e6a4390560e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e6a4390590610b429086907f000000000000000000000000000000000000000000000000000000000000000090600401612be8565b60206040518083038186803b158015610b5a57600080fd5b505afa158015610b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b929190612527565b90506001600160a01b038116610bac576000915050610966565b610c3a81826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610be957600080fd5b505afa158015610bfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c219190612527565b6001600160a01b0316856001600160a01b0316146112b5565b9392505050565b6000811580610c5c57505080820282828281610c5957fe5b04145b6109765760405162461bcd60e51b815260040161081190612d7a565b606081818167ffffffffffffffff81118015610c9357600080fd5b50604051908082528060200260200182016040528015610ccd57816020015b610cba6121f4565b815260200190600190039081610cb25790505b5090506000876001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0b57600080fd5b505afa158015610d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d43919061285d565b90506000886001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8057600080fd5b505afa158015610d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db8919061285d565b905060005b84811015610e9a576000888883818110610dd357fe5b905060200201359050610de4612280565b604051631526fe2760e01b81526001600160a01b038d1690631526fe2790610e10908590600401612e67565b60806040518083038186803b158015610e2857600080fd5b505afa158015610e3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6091906126d6565b9050610e798c8c84846000015185602001518a8a61147d565b868481518110610e8557fe5b60209081029190910101525050600101610dbd565b509198975050505050505050565b6060610eb26122b1565b60405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4557600080fd5b505afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d919061285d565b81526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b158015610fdb57600080fd5b505afa158015610fef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611013919061285d565b905290508260608167ffffffffffffffff8111801561103157600080fd5b5060405190808252806020026020018201604052801561106b57816020015b6110586122db565b8152602001906001900390816110505790505b50905060005b828110156112a857600087878381811061108757fe5b90506020020135905061109861239f565b8551604051631526fe2760e01b81526001600160a01b0390911690631526fe27906110c7908590600401612e67565b6101206040518083038186803b1580156110e057600080fd5b505afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190612728565b90506111226123eb565b86516040516393f1a40b60e01b81526001600160a01b03909116906393f1a40b906111539086908f90600401612e70565b60606040518083038186803b15801561116b57600080fd5b505afa15801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a391906127cc565b9050828585815181106111b257fe5b602090810291909101015152865185518690869081106111ce57fe5b602002602001015161012001906001600160a01b031690816001600160a01b031681525050866020015185858151811061120457fe5b6020026020010151610160018181525050866040015185858151811061122657fe5b60200260200101516101800181815250508b85858151811061124457fe5b602002602001015161020001818152505061129d8d670de0b6b3a76400006112798f8b60400151610c4190919063ffffffff16565b8161128057fe5b048d88888151811061128e57fe5b602002602001015186866117c7565b505050600101611071565b5098975050505050505050565b6000806000846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156112f357600080fd5b505afa158015611307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132b9190612809565b506001600160701b031691506001600160701b0316915060006113c6866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561138057600080fd5b505afa158015611394573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b89190612527565b6001600160a01b0316611c96565b60ff1690506000611409876001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561138057600080fd5b60ff16905085156114475761143c83611436866114318661142b87601261145a565b90611d57565b611d7a565b90611d96565b945050505050610976565b61143c84611436856114318561142b8860125b818101818110156109765760405162461bcd60e51b815260040161081190612c75565b6114856121f4565b6000856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156114c057600080fd5b505afa1580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906128d5565b60ff169050600061157c876001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561153b57600080fd5b505afa15801561154f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611573919061285d565b83601203611d7a565b90506000611608886001600160a01b03166370a082318d6040518263ffffffff1660e01b81526004016115af9190612bd4565b60206040518083038186803b1580156115c757600080fd5b505afa1580156115db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ff919061285d565b84601203611d7a565b90506000670de0b6b3a76400006116228c6102b38c611dc8565b8161162957fe5b0490506000896001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561166757600080fd5b505afa15801561167b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169f9190612527565b905060008a6001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156116dc57600080fd5b505afa1580156116f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117149190612527565b9050604051806101a001604052808d81526020018b81526020018c6001600160a01b03168152602001836001600160a01b03168152602001826001600160a01b0316815260200161176d846001600160a01b03166120c7565b8152602001611784836001600160a01b03166120c7565b81526020018481526020018681526020018f6001600160a01b031681526020018581526020018a8152602001898152509650505050505050979650505050505050565b6000826000015190506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561180b57600080fd5b505afa15801561181f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118439190612527565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561188057600080fd5b505afa158015611894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b89190612527565b6020808701516001600160601b0316908801526001600160a01b0380851660408901528381166060890181905290821660808901529091506118f9906120c7565b60a08701526119106001600160a01b0382166120c7565b60c0870152670de0b6b3a764000061192b8a6102b386611dc8565b8161193257fe5b048660e0018181525050826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561197557600080fd5b505afa158015611989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ad919061285d565b61010080880191909152850151610140870152835161022087015260c085015163ffffffff166101e0870152855160405160016232bd9d60e01b031981526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163ffcd426391611a2b91908b90600401612e70565b60006040518083038186803b158015611a4357600080fd5b505afa158015611a57573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a7f9190810190612875565b50505061024087015250505061010082015115801590611aa3575061010083015115155b8015611ab3575061016083015115155b8015611ac2575060e083015115155b15611c8e576000836101600151611af76301e133806102b386602001516001600160601b03168a610c4190919063ffffffff16565b81611afe57fe5b0490506000846101000151611b258661014001518760e00151610c4190919063ffffffff16565b81611b2c57fe5b04905080611b3b575050611c8e565b61271081611b6c670de0b6b3a76400006102b38860c0015163ffffffff166127100387610c4190919063ffffffff16565b81611b7357fe5b0481611b7b57fe5b046101a086015260e084015115611c8b5761271081611bb9670de0b6b3a76400006102b38860c0015163ffffffff1687610c4190919063ffffffff16565b81611bc057fe5b0481611bc857fe5b046101c0860152825115801590611be25750604083015115155b15611c8b5761010084015160e0860151845160009291611c029190610c41565b81611c0957fe5b04905061271081611c49670de0b6b3a76400006102b38960e001516114368a604001516102b38d60c0015163ffffffff168c610c4190919063ffffffff16565b81611c5057fe5b0481611c5857fe5b0461026087015260e08501516040850151611c7b90670de0b6b3a7640000610c41565b81611c8257fe5b04610280870152505b50505b505050505050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b179052905160009182916060916001600160a01b03861691611cdd9190612bb8565b600060405180830381855afa9150503d8060008114611d18576040519150601f19603f3d011682016040523d82523d6000602084013e611d1d565b606091505b5091509150818015611d30575080516020145b611d3b576012611d4f565b80806020019051810190611d4f91906128d5565b949350505050565b808203828111156109765760405162461bcd60e51b815260040161081190612cdc565b600081611d88575081610976565b610c3a83600a84900a610c41565b6000808211611db75760405162461bcd60e51b815260040161081190612d4b565b818381611dc057fe5b049392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000009050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611e2a57600080fd5b505afa158015611e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e629190612809565b506001600160701b031691506001600160701b031691506000856001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611eb457600080fd5b505afa158015611ec8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eec9190612527565b90506000866001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611f2957600080fd5b505afa158015611f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f619190612527565b90506000611f77836001600160a01b0316611c96565b60ff1690506000611f90836001600160a01b0316611c96565b60ff169050611fa486611431601285611d57565b9550611fb585611431601284611d57565b9450600080886001600160a01b0316866001600160a01b03161415611ff157670de0b6b3a76400009150611fea8b60016112b5565b9050612090565b886001600160a01b0316856001600160a01b03161415612028576120168b60006112b5565b9150670de0b6b3a76400009050612090565b61203186610a86565b915061203c85610a86565b90508161207357670de0b6b3a764000061205b60026102b38a85610c41565b8161206257fe5b049950505050505050505050610966565b8061209057670de0b6b3a764000061205b60026102b38b86610c41565b670de0b6b3a76400006120b06120a68984610c41565b610a738b86610c41565b816120b757fe5b049b9a5050505050505050505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b179052905160609160009183916001600160a01b0386169161210e9190612bb8565b600060405180830381855afa9150503d8060008114612149576040519150601f19603f3d011682016040523d82523d6000602084013e61214e565b606091505b5091509150818015612161575060008151115b61218657604051806040016040528060038152602001623f3f3f60e81b815250611d4f565b80806020019051810190611d4f91906126a3565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160608152602001606081525090565b604051806101a00160405280600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b604051806102a00160405280600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290565b60405180606001604052806000815260200160008152602001600081525090565b805161097681612ede565b60008083601f840112612428578182fd5b50813567ffffffffffffffff81111561243f578182fd5b602083019150836020808302850101111561245957600080fd5b9250929050565b600082601f830112612470578081fd5b815167ffffffffffffffff811115612486578182fd5b612499601f8201601f1916602001612e87565b91508082528360208285010111156124b057600080fd5b6124c1816020840160208601612eae565b5092915050565b805163ffffffff8116811461097657600080fd5b805167ffffffffffffffff8116811461097657600080fd5b80516001600160601b038116811461097657600080fd5b60006020828403121561251c578081fd5b8135610c3a81612ede565b600060208284031215612538578081fd5b8151610c3a81612ede565b60008060008060008060006080888a03121561255d578283fd5b873567ffffffffffffffff80821115612574578485fd5b6125808b838c01612417565b909950975060208a0135915080821115612598578485fd5b6125a48b838c01612417565b909750955060408a01359150808211156125bc578485fd5b506125c98a828b01612417565b90945092505060608801356125dd81612ede565b8091505092959891949750929550565b60008060008060608587031215612602578384fd5b843561260d81612ede565b9350602085013561261d81612ede565b9250604085013567ffffffffffffffff811115612638578283fd5b61264487828801612417565b95989497509550505050565b600080600060408486031215612664578283fd5b833561266f81612ede565b9250602084013567ffffffffffffffff81111561268a578283fd5b61269686828701612417565b9497909650939450505050565b6000602082840312156126b4578081fd5b815167ffffffffffffffff8111156126ca578182fd5b611d4f84828501612460565b6000608082840312156126e7578081fd5b6126f16080612e87565b82516126fc81612ede565b808252506020830151602082015260408301516040820152606083015160608201528091505092915050565b600061012080838503121561273b578182fd5b61274481612e87565b9050612750848461240c565b815261275f84602085016124f4565b6020820152604083015160408201526060830151606082015261278584608085016124dc565b60808201526127978460a0850161240c565b60a08201526127a98460c085016124c8565b60c082015260e08381015190820152610100928301519281019290925250919050565b6000606082840312156127dd578081fd5b6127e76060612e87565b8251815260208301516020820152604083015160408201528091505092915050565b60008060006060848603121561281d578081fd5b835161282881612ef6565b602085015190935061283981612ef6565b604085015190925063ffffffff81168114612852578182fd5b809150509250925092565b60006020828403121561286e578081fd5b5051919050565b6000806000806080858703121561288a578182fd5b84519350602085015161289c81612ede565b604086015190935067ffffffffffffffff8111156128b8578283fd5b6128c487828801612460565b606096909601519497939650505050565b6000602082840312156128e6578081fd5b815160ff81168114610c3a578182fd5b6001600160a01b03169052565b6000815180845260208085018081965082840281019150828601855b85811015612949578284038952612937848351612a8c565b9885019893509084019060010161291f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b8581101561294957828403895281516101a08151865286820151878701526040808301516129a2828901826128f6565b50506060808301516129b6828901826128f6565b50506080808301516129ca828901826128f6565b505060a08083015182828901526129e383890182612a60565b9250505060c080830151878303828901526129fe8382612a60565b9250505060e080830151818801525061010080830151818801525061012080830151612a2c828901826128f6565b5050610140828101519087015261016080830151908701526101809182015191909501529784019790840190600101612972565b60008151808452612a78816020860160208601612eae565b601f01601f19169290920160200192915050565b60006102a082518452602083015160208501526040830151612ab160408601826128f6565b506060830151612ac460608601826128f6565b506080830151612ad760808601826128f6565b5060a08301518160a0860152612aef82860182612a60565b91505060c083015184820360c0860152612b098282612a60565b91505060e083015160e085015261010080840151818601525061012080840151612b35828701826128f6565b50506101408381015190850152610160808401519085015261018080840151908501526101a080840151908501526101c080840151908501526101e0808401519085015261020080840151908501526102208084015190850152610240808401519085015261026080840151908501526102809283015192909301919091525090565b60008251612bca818460208701612eae565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015612c5557603f19888603018452612c43858351612a8c565b94509285019290850190600101612c27565b5092979650505050505050565b600060208252610c3a6020830184612956565b602080825260169082015275536166654d6174683a20416464204f766572666c6f7760501b604082015260600190565b60208082526019908201527f4661726d4c656e7356323a204f6e6c7920666f7220424d434a00000000000000604082015260600190565b602080825260139082015272536166654d6174683a20556e646572666c6f7760681b604082015260600190565b60208082526022908201527f4661726d4c656e7356323a206f6e6c7920666f72204d43563220616e64204d43604082015261563360f01b606082015260800190565b602080825260159082015274536166654d6174683a20446976206279205a65726f60581b604082015260600190565b602080825260169082015275536166654d6174683a204d756c204f766572666c6f7760501b604082015260600190565b60006020825282516020830152602083015160408301526040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c083015160e083015260e08301516101008181850152808501519150506101606101208181860152612e20610180860184612956565b9250808601519050601f19610140818786030181880152612e418584612956565b908801518782039092018488015293509050612e5d8382612903565b9695505050505050565b90815260200190565b9182526001600160a01b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715612ea657600080fd5b604052919050565b60005b83811015612ec9578181015183820152602001612eb1565b83811115612ed8576000848401525b50505050565b6001600160a01b0381168114612ef357600080fd5b50565b6001600160701b0381168114612ef357600080fdfea2646970667358221220e96f0b7ea9d85c3bdd70907d3de15155a170dba20ba69ca8850845c642802a6f64736f6c634300060c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
