{
  "_format": "hh-sol-artifact-1",
  "contractName": "NonfungiblePositionManager",
  "sourceName": "contracts/NonfungiblePositionManager.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_factory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_WNativeToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_tokenDescriptor_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_poolDeployer",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "tickOutOfRange",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "name": "Collect",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "name": "DecreaseLiquidity",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "FarmingFailed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "liquidityDesired",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "actualLiquidity",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "pool",
          "type": "address"
        }
      ],
      "name": "IncreaseLiquidity",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "NONFUNGIBLE_POSITION_MANAGER_ADMINISTRATOR_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PERMIT_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "WNativeToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount0Owed",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1Owed",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "algebraMintCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "approve",
          "type": "bool"
        },
        {
          "internalType": "address",
          "name": "farmingAddress",
          "type": "address"
        }
      ],
      "name": "approveForFarming",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint128",
              "name": "amount0Max",
              "type": "uint128"
            },
            {
              "internalType": "uint128",
              "name": "amount1Max",
              "type": "uint128"
            }
          ],
          "internalType": "struct INonfungiblePositionManager.CollectParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "collect",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "deployer",
          "type": "address"
        },
        {
          "internalType": "uint160",
          "name": "sqrtPriceX96",
          "type": "uint160"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "createAndInitializePoolIfNecessary",
      "outputs": [
        {
          "internalType": "address",
          "name": "pool",
          "type": "address"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint128",
              "name": "liquidity",
              "type": "uint128"
            },
            {
              "internalType": "uint256",
              "name": "amount0Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "pluginData",
              "type": "bytes"
            }
          ],
          "internalType": "struct INonfungiblePositionManager.DecreaseLiquidityParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "decreaseLiquidity",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "farmingApprovals",
      "outputs": [
        {
          "internalType": "address",
          "name": "farmingCenterAddress",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "farmingCenter",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount0Desired",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Desired",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount0Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "pluginData",
              "type": "bytes"
            }
          ],
          "internalType": "struct INonfungiblePositionManager.IncreaseLiquidityParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "increaseLiquidity",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "isApprovedOrOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token0",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "deployer",
              "type": "address"
            },
            {
              "internalType": "int24",
              "name": "tickLower",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "tickUpper",
              "type": "int24"
            },
            {
              "internalType": "uint256",
              "name": "amount0Desired",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Desired",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount0Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Min",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "pluginData",
              "type": "bytes"
            }
          ],
          "internalType": "struct INonfungiblePositionManager.MintParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "poolDeployer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "positions",
      "outputs": [
        {
          "internalType": "uint88",
          "name": "nonce",
          "type": "uint88"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "deployer",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "feeGrowthInside0LastX128",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeGrowthInside1LastX128",
          "type": "uint256"
        },
        {
          "internalType": "uint128",
          "name": "tokensOwed0",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "tokensOwed1",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "refundNativeToken",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermit",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitAllowed",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitAllowedIfNecessary",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitIfNecessary",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newFarmingCenter",
          "type": "address"
        }
      ],
      "name": "setFarmingCenter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "sweepToken",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "toActive",
          "type": "bool"
        }
      ],
      "name": "switchFarmingStatus",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenFarmedIn",
      "outputs": [
        {
          "internalType": "address",
          "name": "farmingCenterAddress",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenOfOwnerByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "unwrapWNativeToken",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    },
    {
      "inputs": [],
      "name": "alreadyInitialized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "arithmeticError",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "bottomTickLowerThanMIN",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "dynamicFeeActive",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "dynamicFeeDisabled",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "flashInsufficientPaid0",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "flashInsufficientPaid1",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "incorrectPluginFee",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "insufficientInputAmount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "invalidAmountRequired",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "expectedSelector",
          "type": "bytes4"
        }
      ],
      "name": "invalidHookResponse",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "invalidLimitSqrtPrice",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "invalidNewCommunityFee",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "invalidNewTickSpacing",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "liquidityAdd",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "liquidityOverflow",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "liquiditySub",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "locked",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "notAllowed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "notInitialized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "pluginIsNotConnected",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "priceOutOfRange",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "tickInvalidLinks",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "tickIsNotInitialized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "tickIsNotSpaced",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "tickOutOfRange",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "topTickAboveMAX",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "topTickLowerOrEqBottomTick",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "transferFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "zeroAmountRequired",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "zeroLiquidityActual",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "zeroLiquidityDesired",
      "type": "error"
    }
  ],
  "bytecode": "0x6101a06040527601000000000000000000000000000000000000000000016010553480156200002d57600080fd5b5060405162005c7f38038062005c7f8339810160408190526200005091620001bb565b8383826040518060400160405280601881526020017f416c676562726120506f736974696f6e73204e46542d5632000000000000000081525060405180604001604052806008815260200167414c47422d504f5360c01b815250604051806040016040528060018152602001601960f91b81525082828160009081620000d79190620002bd565b506001620000e68282620002bd565b50508351602080860191909120608081815284518584012060a08181524660e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818901528082019690965260608601939093529284019290925230838301528051808403909201825260c09092019091528051910120905060c05250503061010052506001600160a01b039283166101205282166101405281166101605291909116610180525062000389915050565b80516001600160a01b0381168114620001b657600080fd5b919050565b60008060008060808587031215620001d257600080fd5b620001dd856200019e565b9350620001ed602086016200019e565b9250620001fd604086016200019e565b91506200020d606086016200019e565b905092959194509250565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200024357607f821691505b6020821081036200026457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002b857600081815260208120601f850160051c81016020861015620002935750805b601f850160051c820191505b81811015620002b4578281556001016200029f565b5050505b505050565b81516001600160401b03811115620002d957620002d962000218565b620002f181620002ea84546200022e565b846200026a565b602080601f831160018114620003295760008415620003105750858301515b600019600386901b1c1916600185901b178555620002b4565b600085815260208120601f198616915b828110156200035a5788860151825594840194600190910190840162000339565b5085821015620003795787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051610120516101405161016051610180516158386200044760003960006123330152600081816102210152818161062001528181611759015281816117e701528181613075015281816130bb015261314101526000818161042201528181610f3401528181612c0401526133760152600081816107490152818161114c0152611a2b01526000610df901526000610e2301526000610e4d01526000610ec601526000610e9e01526158386000f3fe6080604052600436106102115760003560e01c806301ffc9a71461028d57806306fdde03146102c2578063081812fc146102e4578063095ea7b31461031157806318160ddd14610331578063238f510e1461035057806323b872dd146103785780632d0b22de146103985780632f745c59146103ce57806330adf81f146103ee5780633119049a146104105780633644e515146104445780633dd657c514610459578063418652701461047957806342842e0e1461048157806342966c68146104a1578063430c2081146104b45780634659a494146104d45780634d10862d146104e75780634f6ccce714610507578063560482ce146105275780636352211e1461056257806369bc35b214610582578063702275151461059557806370a08231146105b557806372426eb1146105d55780637ac2ff7b146105e8578063832f630a146105fb5780638af3ac851461060e57806395d89b411461064257806399fbab8814610657578063a22cb4651461068f578063a4a78f0c146106af578063ac9650d8146106c2578063b227aa79146106e2578063b88d4fde14610704578063c2e3140a14610724578063c45a015514610737578063c87b56dd1461076b578063dd56e5d81461078b578063df2ab5bb146107ab578063dfb9239a146107be578063e7ce18a3146107e0578063e985e9c514610816578063f3995c6714610836578063fc6f78651461084957600080fd5b3661028857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102865760405162461bcd60e51b815260206004820152601060248201526f2737ba102ba730ba34bb32aa37b5b2b760811b60448201526064015b60405180910390fd5b005b600080fd5b34801561029957600080fd5b506102ad6102a83660046146b5565b61085c565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102d7610887565b6040516102b99190614722565b3480156102f057600080fd5b506103046102ff366004614735565b610919565b6040516102b9919061474e565b34801561031d57600080fd5b5061028661032c366004614782565b610947565b34801561033d57600080fd5b506008545b6040519081526020016102b9565b61036361035e3660046147ae565b610a5c565b604080519283526020830191909152016102b9565b34801561038457600080fd5b506102866103933660046147e8565b610d25565b3480156103a457600080fd5b506103046103b3366004614735565b600b602052600090815260409020546001600160a01b031681565b3480156103da57600080fd5b506103426103e9366004614782565b610d56565b3480156103fa57600080fd5b506103426000805160206157ec83398151915281565b34801561041c57600080fd5b506103047f000000000000000000000000000000000000000000000000000000000000000081565b34801561045057600080fd5b50610342610dec565b34801561046557600080fd5b50610286610474366004614871565b610f1f565b610286610fa1565b34801561048d57600080fd5b5061028661049c3660046147e8565b610fb3565b6102866104af366004614735565b610fce565b3480156104c057600080fd5b506102ad6104cf366004614782565b611072565b6102866104e23660046148d2565b61108e565b3480156104f357600080fd5b5061028661050236600461492e565b611123565b34801561051357600080fd5b50610342610522366004614735565b6111ea565b61053a61053536600461494b565b61127d565b604080519485526001600160801b0390931660208501529183015260608201526080016102b9565b34801561056e57600080fd5b5061030461057d366004614735565b61171e565b610286610590366004614993565b611752565b3480156105a157600080fd5b506102866105b03660046149d1565b611855565b3480156105c157600080fd5b506103426105d036600461492e565b611970565b6103046105e33660046149f6565b6119f6565b6102866105f63660046148d2565b611c22565b610286610609366004614a83565b611f54565b34801561061a57600080fd5b506103047f000000000000000000000000000000000000000000000000000000000000000081565b34801561064e57600080fd5b506102d7611fb5565b34801561066357600080fd5b50610677610672366004614735565b611fc4565b6040516102b99c9b9a99989796959493929190614ac5565b34801561069b57600080fd5b506102866106aa366004614b57565b612164565b6102866106bd3660046148d2565b612173565b6106d56106d0366004614b85565b61219b565b6040516102b99190614bf9565b3480156106ee57600080fd5b506103426000805160206157ac83398151915281565b34801561071057600080fd5b5061028661071f366004614d45565b6122bb565b6102866107323660046148d2565b6122f3565b34801561074357600080fd5b506103047f000000000000000000000000000000000000000000000000000000000000000081565b34801561077757600080fd5b506102d7610786366004614735565b612311565b34801561079757600080fd5b50600a54610304906001600160a01b031681565b6102866107b9366004614db0565b6123af565b6107d16107cc366004614de7565b612412565b6040516102b993929190614e21565b3480156107ec57600080fd5b506103046107fb366004614735565b600c602052600090815260409020546001600160a01b031681565b34801561082257600080fd5b506102ad610831366004614e42565b612690565b6102866108443660046148d2565b6126be565b610363610857366004614e70565b612715565b60006001600160e01b0319821663780e9d6360e01b1480610881575061088182612a34565b92915050565b60606000805461089690614e88565b80601f01602080910402602001604051908101604052809291908181526020018280546108c290614e88565b801561090f5780601f106108e45761010080835404028352916020019161090f565b820191906000526020600020905b8154815290600101906020018083116108f257829003601f168201915b5050505050905090565b600061092482612a84565b506000908152600f6020526040902054600160581b90046001600160a01b031690565b60006109528261171e565b9050806001600160a01b0316836001600160a01b0316036109bf5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161027d565b336001600160a01b03821614806109db57506109db8133612690565b610a4d5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161027d565b610a578383612aac565b505050565b6000808235610a6a81612b26565b8360800135610a7881612b6b565b6000610a8a6040870160208801614ed1565b6001600160801b031611610a9d57600080fd5b84356000908152600f6020908152604091829020600181015490926001600160501b03821692600160501b8304600290810b93600160681b810490910b92600160801b9091046001600160801b031691610afb918c01908c01614ed1565b6001600160801b0316816001600160801b03161015610b1957600080fd5b6000610b2485612bb1565b9050610b9684848d6020016020810190610b3e9190614ed1565b8e8060a00190610b4e9190614eee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506001600160a01b03881695949392915050612c29565b909a50985060408b01358a10801590610bb357508a606001358910155b610bcf5760405162461bcd60e51b815260040161027d90614f34565b600080610be0888430898989612cae565b91509150818c018860040160008282829054906101000a90046001600160801b03160192506101000a8154816001600160801b0302191690836001600160801b03160217905550808b018860040160108282829054906101000a90046001600160801b03160192506101000a8154816001600160801b0302191690836001600160801b031602179055508c6020016020810190610c7d9190614ed1565b6001890180546001600160801b039287038316600160801b02921691909117905550508a357f26f6a048ee9138f2c0ce266f322cb99228e8d619ae2bff30c67f8dcf9d2377b4610cd360408e0160208f01614ed1565b8c8c604051610ce493929190614e21565b60405180910390a2610d188b35610d0160408e0160208f01614ed1565b6001600160801b0316610d1390614f78565b612d28565b5050505050505050915091565b610d2f3382612e52565b610d4b5760405162461bcd60e51b815260040161027d90614f94565b610a57838383612eb1565b6000610d6183611970565b8210610dc35760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161027d565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610e4557507f000000000000000000000000000000000000000000000000000000000000000046145b15610e6f57507f000000000000000000000000000000000000000000000000000000000000000090565b610f17604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b905090565b90565b6000610f2d82840184614fe1565b9050610f5d7f00000000000000000000000000000000000000000000000000000000000000008260000151613010565b508415610f7c57610f7c81600001516020015182602001513388613073565b8315610f9a57610f9a81600001516040015182602001513387613073565b5050505050565b4715610fb157610fb133476131f0565b565b610a57838383604051806020016040528060008152506122bb565b80610fd881612b26565b6000828152600f6020526040902060048101546001820154600160801b8083046001600160801b03908116938116919092049190911617171561101a57600080fd5b6000838152600f6020908152604080832080546001600160f81b0319168155600181018490556002810184905560038101849055600401839055600c909152902080546001600160a01b0319169055610a5783613293565b600061107d82612a84565b6110878383612e52565b9392505050565b6040516323f2ebc360e21b815233600482015230602482015260448101869052606481018590526001608482015260ff841660a482015260c4810183905260e481018290526001600160a01b03871690638fcbaf0c90610104015b600060405180830381600087803b15801561110357600080fd5b505af1158015611117573d6000803e3d6000fd5b50505050505050505050565b60405163e8ae2b6960e01b81526000805160206157ac83398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e8ae2b6990604401602060405180830381865afa15801561119b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bf91906150bd565b6111c857600080fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006111f560085490565b82106112585760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161027d565b6008828154811061126b5761126b6150da565b90600052602060002001549050919050565b60008060008084610140013561129281612b6b565b6000806113ab6040518061016001604052808a60000160208101906112b7919061492e565b6001600160a01b031681526020018a60200160208101906112d8919061492e565b6001600160a01b031681526020016112f660608c0160408d0161492e565b6001600160a01b0316815230602082015260400161131a60808c0160608d016150ff565b60020b815260200161133260a08c0160808d016150ff565b60020b815260a0808c0135602083015260c08c0135604083015260e08c013560608301526101008c01356080830152016113706101608c018c614eee565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250613324565b9299509097509550925090506113fa6113cc6101408a016101208b0161492e565b601080546001600160b01b0319811660016001600160b01b0392831690810190921617909155985088613503565b6000806114333061141160808d0160608e016150ff565b61142160a08e0160808f016150ff565b6001600160a01b03881692919061360c565b5050925092505060006114b08560405180606001604052808e604001602081019061145e919061492e565b6001600160a01b031681526020018e600001602081019061147f919061492e565b6001600160a01b031681526020018e60200160208101906114a0919061492e565b6001600160a01b031690526136ab565b905060405180610140016040528060006001600160581b0316815260200160006001600160a01b03168152602001826001600160501b031681526020018c606001602081019061150091906150ff565b60020b815260200161151860a08e0160808f016150ff565b60020b81526020018a6001600160801b0316815260200184815260200183815260200160006001600160801b0316815260200160006001600160801b0316815250600f60008c815260200190815260200160002060008201518160000160006101000a8154816001600160581b0302191690836001600160581b03160217905550602082015181600001600b6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a8154816001600160501b0302191690836001600160501b03160217905550606082015181600101600a6101000a81548162ffffff021916908360020b62ffffff160217905550608082015181600101600d6101000a81548162ffffff021916908360020b62ffffff16021790555060a08201518160010160106101000a8154816001600160801b0302191690836001600160801b0316021790555060c0820151816002015560e082015181600301556101008201518160040160006101000a8154816001600160801b0302191690836001600160801b031602179055506101208201518160040160106101000a8154816001600160801b0302191690836001600160801b03160217905550905050896000805160206157cc833981519152858b8b8b8a60405161170995949392919061511c565b60405180910390a25050505050509193509193565b60008061172a83613783565b90506001600160a01b0381166108815760405162461bcd60e51b815260040161027d90615155565b600061177d7f000000000000000000000000000000000000000000000000000000000000000061379e565b9050828110156117cb5760405162461bcd60e51b815260206004820152601960248201527824b739bab33334b1b4b2b73a102ba730ba34bb32aa37b5b2b760391b604482015260640161027d565b8015610a5757604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561183357600080fd5b505af1158015611847573d6000803e3d6000fd5b50505050610a5782826131f0565b600a546001600160a01b0316338114600083156118d7576000858152600b60205260409020546001600160a01b038481169116146118d05760405162461bcd60e51b81526020600482015260186024820152774e6f7420617070726f76656420666f72206661726d696e6760401b604482015260640161027d565b50816118fc565b81806118f957506000858152600c60205260409020546001600160a01b031633145b91505b8161193e5760405162461bcd60e51b815260206004820152601260248201527127b7363c902330b936b4b733a1b2b73a32b960711b604482015260640161027d565b6000948552600c602052604090942080546001600160a01b0319166001600160a01b0390951694909417909355505050565b60006001600160a01b0382166119da5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161027d565b506001600160a01b031660009081526003602052604090205490565b6000856001600160a01b0316876001600160a01b031610611a295760405162461bcd60e51b815260040161027d90615187565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038616611ace5760405163d9a641e160e01b81526001600160a01b0382169063d9a641e190611a86908b908b906004016151b8565b602060405180830381865afa158015611aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac791906151d2565b9150611b42565b6040516308f68db360e21b81526001600160a01b038216906323da36cc90611afe9089908c908c906004016151ef565b602060405180830381865afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3f91906151d2565b91505b6001600160a01b038216611be4576001600160a01b038616611bdf5760405163190c9ae360e11b81526001600160a01b0382169063321935c690611b90908b908b9089908990600401615212565b6020604051808303816000875af1158015611baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd391906151d2565b9150611bdf828661380e565b611c17565b6000611bf8836001600160a01b0316613868565b9050806001600160a01b0316600003611c1557611c15838761380e565b505b509695505050505050565b83421115611c635760405162461bcd60e51b815260206004820152600e60248201526d14195c9b5a5d08195e1c1a5c995960921b604482015260640161027d565b6000611c6d610dec565b6000878152600f6020526040902080546001600160581b0319811660016001600160581b03928316908101909216179091556000805160206157ec83398151915290899089906040805160208101959095526001600160a01b03909316928401929092526060830152608082015260a0810187905260c00160405160208183030381529060405280519060200120604051602001611d2292919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506000611d458761171e565b9050806001600160a01b0316886001600160a01b031603611da45760405162461bcd60e51b815260206004820152601960248201527820b8383937bb30b6103a379031bab93932b73a1037bbb732b960391b604482015260640161027d565b611dad816138d8565b15611e7657604080516020810186905280820185905260f887901b6001600160f81b0319166060820152815160418183030181526061820192839052630b135d3f60e11b909252611e71916001600160a01b03841691631626ba7e91611e189187919060650161525e565b602060405180830381865afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190615277565b6001600160e01b031916631626ba7e60e01b146138e7565b611f40565b6040805160008082526020820180845285905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611eca573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611f215760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015260640161027d565b611f3e826001600160a01b0316826001600160a01b0316146138e7565b505b611f4a8888612aac565b5050505050505050565b82611f5e81612b26565b60008315611f8357600a546001600160a01b03848116911614611f8057600080fd5b50815b6000948552600b602052604090942080546001600160a01b0319166001600160a01b0390951694909417909355505050565b60606001805461089690614e88565b6000818152600f6020526040812060018101548291829182918291600160501b8104600290810b92600160681b830490910b916001600160801b03600160801b820416918591829182918291906001600160501b031680830361205c5760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081d1bdad95b88125160821b604482015260640161027d565b6000600e6000836001600160501b03166001600160501b0316815260200190815260200160002090508260000160009054906101000a90046001600160581b031683600001600b9054906101000a90046001600160a01b03168260010160009054906101000a90046001600160a01b03168360020160009054906101000a90046001600160a01b03168460000160009054906101000a90046001600160a01b03168e8e8e8a600201548b600301548c60040160009054906101000a90046001600160801b03168d60040160109054906101000a90046001600160801b03169e509e509e509e509e509e509e509e509e509e509e509e5050505091939597999b5091939597999b565b61216f338383613923565b5050565b60001961217f876139ed565b10156121935761219386868686868661108e565b505050505050565b6060816001600160401b038111156121b5576121b5614c5b565b6040519080825280602002602001820160405280156121e857816020015b60608152602001906001900390816121d35790505b50905060005b828110156122b4576000803086868581811061220c5761220c6150da565b905060200281019061221e9190614eee565b60405161222c929190615294565b600060405180830381855af49150503d8060008114612267576040519150601f19603f3d011682016040523d82523d6000602084013e61226c565b606091505b50915091508161228c57600081511161228457600080fd5b805181602001fd5b8084848151811061229f5761229f6150da565b602090810291909101015250506001016121ee565b5092915050565b6122c53383612e52565b6122e15760405162461bcd60e51b815260040161027d90614f94565b6122ed84848484613a1e565b50505050565b846122fd876139ed565b1015612193576121938686868686866126be565b606061231c82612a84565b60405163e9dc637560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e9dc63759061236a90309086906004016152a4565b600060405180830381865afa158015612387573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261088191908101906152bd565b60006123ba8461379e565b9050828110156124015760405162461bcd60e51b815260206004820152601260248201527124b739bab33334b1b4b2b73a103a37b5b2b760711b604482015260640161027d565b80156122ed576122ed848383613a51565b60008060008360a0013561242581612b6b565b6000600f60008760000135815260200190815260200160002090506000600e60008360010160009054906101000a90046001600160501b03166001600160501b03166001600160501b031681526020019081526020016000209050600082600101600a9054906101000a900460020b9050600083600101600d9054906101000a900460020b905060008460010160109054906101000a90046001600160801b031690506000806125a56040518061016001604052808860010160009054906101000a90046001600160a01b03166001600160a01b031681526020018860020160009054906101000a90046001600160a01b03166001600160a01b031681526020018860000160009054906101000a90046001600160a01b03166001600160a01b03168152602001306001600160a01b031681526020018760020b81526020018660020b81526020018e6020013581526020018e6040013581526020018e6060013581526020018e6080013581526020018e8060c001906113709190614eee565b929e50909c509a50925090506000806125c28985308a8a8a612cae565b915091508082176001600160801b031660001461260e57600489018054600160801b6001600160801b03808316860181166001600160801b031990931683178290048116850116021790555b8c85018960010160106101000a8154816001600160801b0302191690836001600160801b031602179055508d600001356000805160206157cc833981519152848f8f8f8960405161266395949392919061511c565b60405180910390a261267f8e356001600160801b038f16612d28565b505050505050505050509193909250565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60405163d505accf60e01b8152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c481018290526001600160a01b0387169063d505accf9060e4016110e9565b600080823561272381612b26565b60006127356060860160408701614ed1565b6001600160801b03161180612762575060006127576080860160608701614ed1565b6001600160801b0316115b61276b57600080fd5b60008061277e604087016020880161492e565b6001600160a01b0316146127a15761279c604086016020870161492e565b6127a3565b305b85356000908152600f602052604081206001810154929350916127ce906001600160501b0316612bb1565b60018301546004840154919250600160501b8104600290810b92600160681b830490910b916001600160801b03600160801b918290048116928082169290041682156128675760408051808201909152600381526203078360ec1b6020820152612849906001600160a01b0388169087908790600090612c29565b505060008061285c8989308a8a8a612cae565b940193929092019150505b600080836001600160801b03168e60400160208101906128879190614ed1565b6001600160801b0316116128ad578d60400160208101906128a89190614ed1565b6128af565b835b836001600160801b03168f60600160208101906128cc9190614ed1565b6001600160801b0316116128f2578e60600160208101906128ed9190614ed1565b6128f4565b835b6040516309e3d67b60e31b81526001600160a01b038d8116600483015260028b810b60248401528a900b60448301526001600160801b0380851660648401528316608483015292945090925090891690634f1eb3d89060a40160408051808303816000875af115801561296b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298f919061533e565b8386036001600160801b039081168487038216600160801b026001600160801b0319161760048d01556040519281169f50169c508e35907f40d0efd1a53d60ecbf40971b9daf7dc90178c3aadc7aab1765632738fa8b8f0190612a1c908d90869086906001600160a01b039390931683526001600160801b03918216602084015216604082015260600190565b60405180910390a25050505050505050505050915091565b60006001600160e01b031982166380ac58cd60e01b1480612a6557506001600160e01b03198216635b5e139f60e01b145b8061088157506301ffc9a760e01b6001600160e01b0319831614610881565b612a8d81613b54565b612aa95760405162461bcd60e51b815260040161027d90615155565b50565b6000818152600f602052604090208054600160581b600160f81b031916600160581b6001600160a01b038516908102919091179091558190612aed8261171e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612b303382612e52565b612aa95760405162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015260640161027d565b80421115612aa95760405162461bcd60e51b8152602060048201526013602482015272151c985b9cd858dd1a5bdb881d1bdbc81bdb19606a1b604482015260640161027d565b6001600160501b0381166000908152600e60209081526040808320815160608101835281546001600160a01b039081168252600183015481169482019490945260029091015490921690820152610881907f000000000000000000000000000000000000000000000000000000000000000090613b71565b600080866001600160a01b0316633b3bc70e878787876040518563ffffffff1660e01b8152600401612c5e949392919061536d565b60408051808303816000875af1158015612c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca091906153a0565b915091509550959350505050565b6000808080612cc86001600160a01b038a1689898961360c565b50509250925050612ced8a600201548303866001600160801b0316600160801b613c9a565b9350612d0d8a600301548203866001600160801b0316600160801b613c9a565b60028b01929092556003909901989098555096945050505050565b6000828152600c60205260409020546001600160a01b031680612d4a57505050565b600a546001600160a01b031680612d615750505050565b806001600160a01b0316826001600160a01b0316036122ed57604051626e65c960e41b815260048101859052602481018490526001600160a01b038216906306e65c9090604401600060405180830381600087803b158015612dc257600080fd5b505af1925050508015612dd3575060015b6122ed57612ddf6153c4565b806308c379a003612e2f5750612df36153df565b80612dfe5750612e48565b60405185907f4f27462fbdc9bce16bb573a06acba6b27394e151da96ce8098d8e29a6dc8d64b90600090a2506122ed565b634e487b7103612e4857612e41615468565b90612dfe57505b3d6000803e3d6000fd5b600080612e5e8361171e565b9050806001600160a01b0316846001600160a01b03161480612e855750612e858185612690565b80612ea95750836001600160a01b0316612e9e84610919565b6001600160a01b0316145b949350505050565b826001600160a01b0316612ec48261171e565b6001600160a01b031614612eea5760405162461bcd60e51b815260040161027d90615488565b6001600160a01b038216612f4c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161027d565b612f598383836001613d33565b826001600160a01b0316612f6c8261171e565b6001600160a01b031614612f925760405162461bcd60e51b815260040161027d90615488565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652600385528386208054600019019055908716808652838620805460010190558686526002909452828520805490921684179091559051849360008051602061580c83398151915291a4505050565b600061301c8383613b71565b9050336001600160a01b038216146108815760405162461bcd60e51b815260206004820152601a602482015279496e76616c69642063616c6c6572206f662063616c6c6261636b60301b604482015260640161027d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161480156130b45750804710155b156131c4577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561311457600080fd5b505af1158015613128573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925061317b9150859085906004016152a4565b6020604051808303816000875af115801561319a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131be91906150bd565b506122ed565b306001600160a01b038416036131e4576131df848383613a51565b6122ed565b6122ed84848484613d86565b604080516000808252602082019092526001600160a01b03841690839060405161321a91906154cd565b60006040518083038185875af1925050503d8060008114613257576040519150601f19603f3d011682016040523d82523d6000602084013e61325c565b606091505b5050905080610a575760405162461bcd60e51b815260206004820152600360248201526253544560e81b604482015260640161027d565b600061329e8261171e565b90506132ae816000846001613d33565b6132b78261171e565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b03851680855260038452828520805460001901905587855260029093528184208054909116905551929350849260008051602061580c833981519152908390a45050565b600080600080600080604051806060016040528088604001516001600160a01b0316815260200188600001516001600160a01b0316815260200188602001516001600160a01b0316815250905061339b7f000000000000000000000000000000000000000000000000000000000000000082613b71565b915060006133b1836001600160a01b0316613868565b905060006133c28960800151613e88565b905060006133d38a60a00151613e88565b90506133ea8383838d60c001518e60e00151614163565b9850505050816001600160a01b031663aafe29c03389606001518a608001518b60a001518b6040518060600160405280898152602001336001600160a01b031681526020018f610140015181525060405160200161344891906154e9565b6040516020818303038152906040526040518763ffffffff1660e01b81526004016134789695949392919061553f565b6060604051808303816000875af1158015613497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134bb9190615598565b6101008a0151909750919550935084108015906134dd57508661012001518310155b6134f95760405162461bcd60e51b815260040161027d90614f34565b5091939590929450565b6001600160a01b0382166135595760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161027d565b61356281613b54565b1561357f5760405162461bcd60e51b815260040161027d906155c6565b61358d600083836001613d33565b61359681613b54565b156135b35760405162461bcd60e51b815260040161027d906155c6565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b03191684179055518392919060008051602061580c833981519152908290a45050565b6000808080806001600160a01b03891663514ea4bf62ffffff808916908a1660188c811b91909117901b176040518263ffffffff1660e01b815260040161365591815260200190565b60a060405180830381865afa158015613672573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061369691906155fc565b94509450945094509450945094509450945094565b6001600160a01b0382166000908152600d60205260408120546001600160501b03169081900361088157506010805460016001600160501b03600160b01b8084048216838101909216026001600160b01b03909316929092179092556001600160a01b039384166000908152600d6020908152604080832080546001600160501b03191685179055838352600e825291829020855181549088166001600160a01b0319918216178255918601519481018054958816958316959095179094559301516002909201805492909416919092161790915590565b6000908152600260205260409020546001600160a01b031690565b6040516370a0823160e01b81526000906001600160a01b038316906370a08231906137cd90309060040161474e565b602060405180830381865afa1580156137ea573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190615653565b60405163f637731d60e01b81526001600160a01b0383169063f637731d9061383a90849060040161474e565b600060405180830381600087803b15801561385457600080fd5b505af1158015612193573d6000803e3d6000fd5b6000816001600160a01b031663e76c01e46040518163ffffffff1660e01b815260040160c060405180830381865afa1580156138a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138cc919061567e565b50939695505050505050565b6001600160a01b03163b151590565b80612aa95760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015260640161027d565b816001600160a01b0316836001600160a01b0316036139805760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b604482015260640161027d565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b604051636eb1769f60e11b81526000906001600160a01b0383169063dd62ed3e906137cd90339030906004016151b8565b613a29848484612eb1565b613a3584848484614227565b6122ed5760405162461bcd60e51b815260040161027d906156fd565b600080846001600160a01b031663a9059cbb60e01b8585604051602401613a799291906152a4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051613ab791906154cd565b6000604051808303816000865af19150503d8060008114613af4576040519150601f19603f3d011682016040523d82523d6000602084013e613af9565b606091505b5091509150818015613b23575080511580613b23575080806020019051810190613b2391906150bd565b610f9a5760405162461bcd60e51b815260206004820152600260248201526114d560f21b604482015260640161027d565b600080613b6083613783565b6001600160a01b0316141592915050565b600081604001516001600160a01b031682602001516001600160a01b031610613bac5760405162461bcd60e51b815260040161027d90615187565b815183906001600160a01b031615613bed5782516020808501516040808701519051613bd99493016151ef565b604051602081830303815290604052613c15565b6020808401516040808601519051613c0593016151b8565b6040516020818303038152906040525b8051602091820120604051613c7b93927f62441ebe4e4315cf3d49d5957f94d66b253dbabe7006f34ad7f70947e60bf15c91016001600160f81b0319815260609390931b6001600160601b03191660018401526015830191909152603582015260550190565b60408051601f1981840301815291905280516020909101209392505050565b60008383028160001985870982811083820303915050808411613cbc57600080fd5b80600003613ccf57508290049050611087565b8385870960008581038616958690049560026003880281188089028203028089028203028089028203028089028203028089028203028089029091030291819003819004600101858411909403939093029190930391909104170290509392505050565b6001600160a01b03841615613d7a576000828152600f602090815260408083208054600160581b600160f81b0319169055600b909152902080546001600160a01b03191690555b6122ed84848484614327565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691613dea91906154cd565b6000604051808303816000865af19150503d8060008114613e27576040519150601f19603f3d011682016040523d82523d6000602084013e613e2c565b606091505b5091509150818015613e56575080511580613e56575080806020019051810190613e5691906150bd565b6121935760405162461bcd60e51b815260206004820152600360248201526229aa2360e91b604482015260640161027d565b6000600282900b60171d62ffffff818401821816620d89e8811115613ec057604051633c10250f60e01b815260040160405180910390fd5b600160801b6001821615613ee157506ffffcb933bd6fad37aa2d162d1a5940015b6002821615613f00576ffff97272373d413259a46990580e213a0260801c5b6004821615613f1f576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613f3e576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613f5d576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613f7c576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613f9b576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613fba576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613fda576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613ffa576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561401a576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561403a576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561405a576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561407a576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561409a576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156140ba576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156140db576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156140fb576e5d6af8dedb81196699c329225ee6040260801c5b6204000082106141415762040000821615614124576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615614141576b048a170391f7dc42444e8fa20260801c5b60008560020b131561415257600019045b63ffffffff0160201c949350505050565b6000836001600160a01b0316856001600160a01b03161115614183579293925b846001600160a01b0316866001600160a01b0316116141ae576141a7858585614454565b905061421e565b836001600160a01b0316866001600160a01b031610156142105760006141d5878686614454565b905060006141e48789866144b7565b9050806001600160801b0316826001600160801b0316106142055780614207565b815b9250505061421e565b61421b8585846144b7565b90505b95945050505050565b600061423b846001600160a01b03166138d8565b1561431c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061427290339089908890889060040161574f565b6020604051808303816000875af19250505080156142ad575060408051601f3d908101601f191682019092526142aa91810190615277565b60015b614302573d8080156142db576040519150601f19603f3d011682016040523d82523d6000602084013e6142e0565b606091505b5080516000036122845760405162461bcd60e51b815260040161027d906156fd565b6001600160e01b031916630a85bd0160e11b149050612ea9565b506001949350505050565b60018111156143965760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b606482015260840161027d565b816001600160a01b0385166143f2576143ed81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b614415565b836001600160a01b0316856001600160a01b0316146144155761441585826144f4565b6001600160a01b0384166144315761442c81614591565b610f9a565b846001600160a01b0316846001600160a01b031614610f9a57610f9a8482614640565b6000826001600160a01b0316846001600160a01b03161115614474579192915b6000614497856001600160a01b0316856001600160a01b0316600160601b613c9a565b905061421e6144b284838888036001600160a01b0316613c9a565b614684565b6000826001600160a01b0316846001600160a01b031611156144d7579192915b612ea96144b283600160601b8787036001600160a01b0316613c9a565b6000600161450184611970565b61450b9190615782565b60008381526007602052604090205490915080821461455e576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906145a390600190615782565b600083815260096020526040812054600880549394509092849081106145cb576145cb6150da565b9060005260206000200154905080600883815481106145ec576145ec6150da565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061462457614624615795565b6001900381819060005260206000200160009055905550505050565b600061464b83611970565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b806001600160801b038116811461469a57600080fd5b919050565b6001600160e01b031981168114612aa957600080fd5b6000602082840312156146c757600080fd5b81356110878161469f565b60005b838110156146ed5781810151838201526020016146d5565b50506000910152565b6000815180845261470e8160208601602086016146d2565b601f01601f19169290920160200192915050565b60208152600061108760208301846146f6565b60006020828403121561474757600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114612aa957600080fd5b803561469a81614762565b6000806040838503121561479557600080fd5b82356147a081614762565b946020939093013593505050565b6000602082840312156147c057600080fd5b81356001600160401b038111156147d657600080fd5b820160c0818503121561108757600080fd5b6000806000606084860312156147fd57600080fd5b833561480881614762565b9250602084013561481881614762565b929592945050506040919091013590565b60008083601f84011261483b57600080fd5b5081356001600160401b0381111561485257600080fd5b60208301915083602082850101111561486a57600080fd5b9250929050565b6000806000806060858703121561488757600080fd5b843593506020850135925060408501356001600160401b038111156148ab57600080fd5b6148b787828801614829565b95989497509550505050565b60ff81168114612aa957600080fd5b60008060008060008060c087890312156148eb57600080fd5b86356148f681614762565b955060208701359450604087013593506060870135614914816148c3565b9598949750929560808101359460a0909101359350915050565b60006020828403121561494057600080fd5b813561108781614762565b60006020828403121561495d57600080fd5b81356001600160401b0381111561497357600080fd5b8201610180818503121561108757600080fd5b6001600160801b03169052565b600080604083850312156149a657600080fd5b8235915060208301356149b881614762565b809150509250929050565b8015158114612aa957600080fd5b600080604083850312156149e457600080fd5b8235915060208301356149b8816149c3565b60008060008060008060a08789031215614a0f57600080fd5b8635614a1a81614762565b95506020870135614a2a81614762565b94506040870135614a3a81614762565b93506060870135614a4a81614762565b925060808701356001600160401b03811115614a6557600080fd5b614a7189828a01614829565b979a9699509497509295939492505050565b600080600060608486031215614a9857600080fd5b833592506020840135614aaa816149c3565b91506040840135614aba81614762565b809150509250925092565b6001600160581b038d1681526001600160a01b038c811660208301528b811660408301528a8116606083015289166080820152600288810b60a083015287900b60c08201526101808101614b1c60e0830188614986565b8561010083015284610120830152614b38610140830185614986565b614b46610160830184614986565b9d9c50505050505050505050505050565b60008060408385031215614b6a57600080fd5b8235614b7581614762565b915060208301356149b8816149c3565b60008060208385031215614b9857600080fd5b82356001600160401b0380821115614baf57600080fd5b818501915085601f830112614bc357600080fd5b813581811115614bd257600080fd5b8660208260051b8501011115614be757600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614c4e57603f19888603018452614c3c8583516146f6565b94509285019290850190600101614c20565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b606081016001600160401b0381118282101715614c9057614c90614c5b565b60405250565b601f8201601f191681016001600160401b0381118282101715614cbb57614cbb614c5b565b6040525050565b60006001600160401b03821115614cdb57614cdb614c5b565b50601f01601f191660200190565b600082601f830112614cfa57600080fd5b8135614d0581614cc2565b604051614d128282614c96565b828152856020848701011115614d2757600080fd5b82602086016020830137600092810160200192909252509392505050565b60008060008060808587031215614d5b57600080fd5b8435614d6681614762565b93506020850135614d7681614762565b92506040850135915060608501356001600160401b03811115614d9857600080fd5b614da487828801614ce9565b91505092959194509250565b600080600060608486031215614dc557600080fd5b8335614dd081614762565b9250602084013591506040840135614aba81614762565b600060208284031215614df957600080fd5b81356001600160401b03811115614e0f57600080fd5b820160e0818503121561108757600080fd5b6001600160801b039390931683526020830191909152604082015260600190565b60008060408385031215614e5557600080fd5b8235614e6081614762565b915060208301356149b881614762565b600060808284031215614e8257600080fd5b50919050565b600181811c90821680614e9c57607f821691505b602082108103614e8257634e487b7160e01b600052602260045260246000fd5b6001600160801b0381168114612aa957600080fd5b600060208284031215614ee357600080fd5b813561108781614ebc565b6000808335601e19843603018112614f0557600080fd5b8301803591506001600160401b03821115614f1f57600080fd5b60200191503681900382131561486a57600080fd5b602080825260149082015273507269636520736c69707061676520636865636b60601b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b8201614f8d57614f8d614f62565b5060000390565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b600060208284031215614ff357600080fd5b81356001600160401b038082111561500a57600080fd5b9083019081850360a081121561501f57600080fd5b60405161502b81614c71565b606082121561503957600080fd5b604051915061504782614c71565b833561505281614762565b8252602084013561506281614762565b6020830152604084013561507581614762565b604083015281815261508960608501614777565b602082015260808401359150828211156150a257600080fd5b6150ae87838601614ce9565b60408201529695505050505050565b6000602082840312156150cf57600080fd5b8151611087816149c3565b634e487b7160e01b600052603260045260246000fd5b8060020b8114612aa957600080fd5b60006020828403121561511157600080fd5b8135611087816150f0565b6001600160801b039586168152939094166020840152604083019190915260608201526001600160a01b03909116608082015260a00190565b602080825260189082015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604082015260600190565b602080825260179082015276496e76616c6964206f72646572206f6620746f6b656e7360481b604082015260600190565b6001600160a01b0392831681529116602082015260400190565b6000602082840312156151e457600080fd5b815161108781614762565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b0385811682528416602082015260606040820181905281018290526000828460808401376000608084840101526080601f19601f850116830101905095945050505050565b828152604060208201526000612ea960408301846146f6565b60006020828403121561528957600080fd5b81516110878161469f565b8183823760009101908152919050565b6001600160a01b03929092168252602082015260400190565b6000602082840312156152cf57600080fd5b81516001600160401b038111156152e557600080fd5b8201601f810184136152f657600080fd5b805161530181614cc2565b60405161530e8282614c96565b82815286602084860101111561532357600080fd5b6153348360208301602087016146d2565b9695505050505050565b6000806040838503121561535157600080fd5b825161535c81614ebc565b60208401519092506149b881614ebc565b8460020b81528360020b602082015260018060801b038316604082015260806060820152600061421b60808301846146f6565b600080604083850312156153b357600080fd5b505080516020909101519092909150565b600060033d1115610f1c5760046000803e5060005160e01c90565b600060443d10156153ed5790565b6040516003193d81016004833e81513d6001600160401b03808311602484018310171561541c57505050505090565b82850191508151818111156154345750505050505090565b843d870101602082850101111561544e5750505050505090565b61545d60208286010187614c96565b509095945050505050565b60008060233d1115615484576020600460003e50506000516001905b9091565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b600082516154df8184602087016146d2565b9190910192915050565b602081526000825160018060a01b038082511660208501528060208301511660408501528060408301511660608501528060208601511660808501525050604083015160a080840152612ea960c08401826146f6565b6001600160a01b03878116825286166020820152600285810b604083015284900b60608201526001600160801b038316608082015260c060a0820181905260009061558c908301846146f6565b98975050505050505050565b6000806000606084860312156155ad57600080fd5b83519250602084015191506040840151614aba81614ebc565b6020808252601c908201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b604082015260600190565b600080600080600060a0868803121561561457600080fd5b855194506020860151935060408601519250606086015161563481614ebc565b608087015190925061564581614ebc565b809150509295509295909350565b60006020828403121561566557600080fd5b5051919050565b805161ffff8116811461469a57600080fd5b60008060008060008060c0878903121561569757600080fd5b86516156a281614762565b60208801519096506156b3816150f0565b94506156c16040880161566c565b935060608701516156d1816148c3565b92506156df6080880161566c565b915060a08701516156ef816149c3565b809150509295509295509295565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061421b908301846146f6565b8181038181111561088157610881614f62565b634e487b7160e01b600052603160045260246000fdfeff0e0466f109fcf4f5660899d8847c592e1e8dea30ffbe040704b23ad381d7628a82de7fe9b33e0e6bca0e26f5bd14a74f1164ffe236d50e0a36c3ea70f2b81449ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9adddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c6343000814000a",
  "deployedBytecode": "0x6080604052600436106102115760003560e01c806301ffc9a71461028d57806306fdde03146102c2578063081812fc146102e4578063095ea7b31461031157806318160ddd14610331578063238f510e1461035057806323b872dd146103785780632d0b22de146103985780632f745c59146103ce57806330adf81f146103ee5780633119049a146104105780633644e515146104445780633dd657c514610459578063418652701461047957806342842e0e1461048157806342966c68146104a1578063430c2081146104b45780634659a494146104d45780634d10862d146104e75780634f6ccce714610507578063560482ce146105275780636352211e1461056257806369bc35b214610582578063702275151461059557806370a08231146105b557806372426eb1146105d55780637ac2ff7b146105e8578063832f630a146105fb5780638af3ac851461060e57806395d89b411461064257806399fbab8814610657578063a22cb4651461068f578063a4a78f0c146106af578063ac9650d8146106c2578063b227aa79146106e2578063b88d4fde14610704578063c2e3140a14610724578063c45a015514610737578063c87b56dd1461076b578063dd56e5d81461078b578063df2ab5bb146107ab578063dfb9239a146107be578063e7ce18a3146107e0578063e985e9c514610816578063f3995c6714610836578063fc6f78651461084957600080fd5b3661028857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102865760405162461bcd60e51b815260206004820152601060248201526f2737ba102ba730ba34bb32aa37b5b2b760811b60448201526064015b60405180910390fd5b005b600080fd5b34801561029957600080fd5b506102ad6102a83660046146b5565b61085c565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102d7610887565b6040516102b99190614722565b3480156102f057600080fd5b506103046102ff366004614735565b610919565b6040516102b9919061474e565b34801561031d57600080fd5b5061028661032c366004614782565b610947565b34801561033d57600080fd5b506008545b6040519081526020016102b9565b61036361035e3660046147ae565b610a5c565b604080519283526020830191909152016102b9565b34801561038457600080fd5b506102866103933660046147e8565b610d25565b3480156103a457600080fd5b506103046103b3366004614735565b600b602052600090815260409020546001600160a01b031681565b3480156103da57600080fd5b506103426103e9366004614782565b610d56565b3480156103fa57600080fd5b506103426000805160206157ec83398151915281565b34801561041c57600080fd5b506103047f000000000000000000000000000000000000000000000000000000000000000081565b34801561045057600080fd5b50610342610dec565b34801561046557600080fd5b50610286610474366004614871565b610f1f565b610286610fa1565b34801561048d57600080fd5b5061028661049c3660046147e8565b610fb3565b6102866104af366004614735565b610fce565b3480156104c057600080fd5b506102ad6104cf366004614782565b611072565b6102866104e23660046148d2565b61108e565b3480156104f357600080fd5b5061028661050236600461492e565b611123565b34801561051357600080fd5b50610342610522366004614735565b6111ea565b61053a61053536600461494b565b61127d565b604080519485526001600160801b0390931660208501529183015260608201526080016102b9565b34801561056e57600080fd5b5061030461057d366004614735565b61171e565b610286610590366004614993565b611752565b3480156105a157600080fd5b506102866105b03660046149d1565b611855565b3480156105c157600080fd5b506103426105d036600461492e565b611970565b6103046105e33660046149f6565b6119f6565b6102866105f63660046148d2565b611c22565b610286610609366004614a83565b611f54565b34801561061a57600080fd5b506103047f000000000000000000000000000000000000000000000000000000000000000081565b34801561064e57600080fd5b506102d7611fb5565b34801561066357600080fd5b50610677610672366004614735565b611fc4565b6040516102b99c9b9a99989796959493929190614ac5565b34801561069b57600080fd5b506102866106aa366004614b57565b612164565b6102866106bd3660046148d2565b612173565b6106d56106d0366004614b85565b61219b565b6040516102b99190614bf9565b3480156106ee57600080fd5b506103426000805160206157ac83398151915281565b34801561071057600080fd5b5061028661071f366004614d45565b6122bb565b6102866107323660046148d2565b6122f3565b34801561074357600080fd5b506103047f000000000000000000000000000000000000000000000000000000000000000081565b34801561077757600080fd5b506102d7610786366004614735565b612311565b34801561079757600080fd5b50600a54610304906001600160a01b031681565b6102866107b9366004614db0565b6123af565b6107d16107cc366004614de7565b612412565b6040516102b993929190614e21565b3480156107ec57600080fd5b506103046107fb366004614735565b600c602052600090815260409020546001600160a01b031681565b34801561082257600080fd5b506102ad610831366004614e42565b612690565b6102866108443660046148d2565b6126be565b610363610857366004614e70565b612715565b60006001600160e01b0319821663780e9d6360e01b1480610881575061088182612a34565b92915050565b60606000805461089690614e88565b80601f01602080910402602001604051908101604052809291908181526020018280546108c290614e88565b801561090f5780601f106108e45761010080835404028352916020019161090f565b820191906000526020600020905b8154815290600101906020018083116108f257829003601f168201915b5050505050905090565b600061092482612a84565b506000908152600f6020526040902054600160581b90046001600160a01b031690565b60006109528261171e565b9050806001600160a01b0316836001600160a01b0316036109bf5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161027d565b336001600160a01b03821614806109db57506109db8133612690565b610a4d5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161027d565b610a578383612aac565b505050565b6000808235610a6a81612b26565b8360800135610a7881612b6b565b6000610a8a6040870160208801614ed1565b6001600160801b031611610a9d57600080fd5b84356000908152600f6020908152604091829020600181015490926001600160501b03821692600160501b8304600290810b93600160681b810490910b92600160801b9091046001600160801b031691610afb918c01908c01614ed1565b6001600160801b0316816001600160801b03161015610b1957600080fd5b6000610b2485612bb1565b9050610b9684848d6020016020810190610b3e9190614ed1565b8e8060a00190610b4e9190614eee565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506001600160a01b03881695949392915050612c29565b909a50985060408b01358a10801590610bb357508a606001358910155b610bcf5760405162461bcd60e51b815260040161027d90614f34565b600080610be0888430898989612cae565b91509150818c018860040160008282829054906101000a90046001600160801b03160192506101000a8154816001600160801b0302191690836001600160801b03160217905550808b018860040160108282829054906101000a90046001600160801b03160192506101000a8154816001600160801b0302191690836001600160801b031602179055508c6020016020810190610c7d9190614ed1565b6001890180546001600160801b039287038316600160801b02921691909117905550508a357f26f6a048ee9138f2c0ce266f322cb99228e8d619ae2bff30c67f8dcf9d2377b4610cd360408e0160208f01614ed1565b8c8c604051610ce493929190614e21565b60405180910390a2610d188b35610d0160408e0160208f01614ed1565b6001600160801b0316610d1390614f78565b612d28565b5050505050505050915091565b610d2f3382612e52565b610d4b5760405162461bcd60e51b815260040161027d90614f94565b610a57838383612eb1565b6000610d6183611970565b8210610dc35760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161027d565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610e4557507f000000000000000000000000000000000000000000000000000000000000000046145b15610e6f57507f000000000000000000000000000000000000000000000000000000000000000090565b610f17604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b905090565b90565b6000610f2d82840184614fe1565b9050610f5d7f00000000000000000000000000000000000000000000000000000000000000008260000151613010565b508415610f7c57610f7c81600001516020015182602001513388613073565b8315610f9a57610f9a81600001516040015182602001513387613073565b5050505050565b4715610fb157610fb133476131f0565b565b610a57838383604051806020016040528060008152506122bb565b80610fd881612b26565b6000828152600f6020526040902060048101546001820154600160801b8083046001600160801b03908116938116919092049190911617171561101a57600080fd5b6000838152600f6020908152604080832080546001600160f81b0319168155600181018490556002810184905560038101849055600401839055600c909152902080546001600160a01b0319169055610a5783613293565b600061107d82612a84565b6110878383612e52565b9392505050565b6040516323f2ebc360e21b815233600482015230602482015260448101869052606481018590526001608482015260ff841660a482015260c4810183905260e481018290526001600160a01b03871690638fcbaf0c90610104015b600060405180830381600087803b15801561110357600080fd5b505af1158015611117573d6000803e3d6000fd5b50505050505050505050565b60405163e8ae2b6960e01b81526000805160206157ac83398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e8ae2b6990604401602060405180830381865afa15801561119b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bf91906150bd565b6111c857600080fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60006111f560085490565b82106112585760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161027d565b6008828154811061126b5761126b6150da565b90600052602060002001549050919050565b60008060008084610140013561129281612b6b565b6000806113ab6040518061016001604052808a60000160208101906112b7919061492e565b6001600160a01b031681526020018a60200160208101906112d8919061492e565b6001600160a01b031681526020016112f660608c0160408d0161492e565b6001600160a01b0316815230602082015260400161131a60808c0160608d016150ff565b60020b815260200161133260a08c0160808d016150ff565b60020b815260a0808c0135602083015260c08c0135604083015260e08c013560608301526101008c01356080830152016113706101608c018c614eee565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250613324565b9299509097509550925090506113fa6113cc6101408a016101208b0161492e565b601080546001600160b01b0319811660016001600160b01b0392831690810190921617909155985088613503565b6000806114333061141160808d0160608e016150ff565b61142160a08e0160808f016150ff565b6001600160a01b03881692919061360c565b5050925092505060006114b08560405180606001604052808e604001602081019061145e919061492e565b6001600160a01b031681526020018e600001602081019061147f919061492e565b6001600160a01b031681526020018e60200160208101906114a0919061492e565b6001600160a01b031690526136ab565b905060405180610140016040528060006001600160581b0316815260200160006001600160a01b03168152602001826001600160501b031681526020018c606001602081019061150091906150ff565b60020b815260200161151860a08e0160808f016150ff565b60020b81526020018a6001600160801b0316815260200184815260200183815260200160006001600160801b0316815260200160006001600160801b0316815250600f60008c815260200190815260200160002060008201518160000160006101000a8154816001600160581b0302191690836001600160581b03160217905550602082015181600001600b6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a8154816001600160501b0302191690836001600160501b03160217905550606082015181600101600a6101000a81548162ffffff021916908360020b62ffffff160217905550608082015181600101600d6101000a81548162ffffff021916908360020b62ffffff16021790555060a08201518160010160106101000a8154816001600160801b0302191690836001600160801b0316021790555060c0820151816002015560e082015181600301556101008201518160040160006101000a8154816001600160801b0302191690836001600160801b031602179055506101208201518160040160106101000a8154816001600160801b0302191690836001600160801b03160217905550905050896000805160206157cc833981519152858b8b8b8a60405161170995949392919061511c565b60405180910390a25050505050509193509193565b60008061172a83613783565b90506001600160a01b0381166108815760405162461bcd60e51b815260040161027d90615155565b600061177d7f000000000000000000000000000000000000000000000000000000000000000061379e565b9050828110156117cb5760405162461bcd60e51b815260206004820152601960248201527824b739bab33334b1b4b2b73a102ba730ba34bb32aa37b5b2b760391b604482015260640161027d565b8015610a5757604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561183357600080fd5b505af1158015611847573d6000803e3d6000fd5b50505050610a5782826131f0565b600a546001600160a01b0316338114600083156118d7576000858152600b60205260409020546001600160a01b038481169116146118d05760405162461bcd60e51b81526020600482015260186024820152774e6f7420617070726f76656420666f72206661726d696e6760401b604482015260640161027d565b50816118fc565b81806118f957506000858152600c60205260409020546001600160a01b031633145b91505b8161193e5760405162461bcd60e51b815260206004820152601260248201527127b7363c902330b936b4b733a1b2b73a32b960711b604482015260640161027d565b6000948552600c602052604090942080546001600160a01b0319166001600160a01b0390951694909417909355505050565b60006001600160a01b0382166119da5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161027d565b506001600160a01b031660009081526003602052604090205490565b6000856001600160a01b0316876001600160a01b031610611a295760405162461bcd60e51b815260040161027d90615187565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038616611ace5760405163d9a641e160e01b81526001600160a01b0382169063d9a641e190611a86908b908b906004016151b8565b602060405180830381865afa158015611aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac791906151d2565b9150611b42565b6040516308f68db360e21b81526001600160a01b038216906323da36cc90611afe9089908c908c906004016151ef565b602060405180830381865afa158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3f91906151d2565b91505b6001600160a01b038216611be4576001600160a01b038616611bdf5760405163190c9ae360e11b81526001600160a01b0382169063321935c690611b90908b908b9089908990600401615212565b6020604051808303816000875af1158015611baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd391906151d2565b9150611bdf828661380e565b611c17565b6000611bf8836001600160a01b0316613868565b9050806001600160a01b0316600003611c1557611c15838761380e565b505b509695505050505050565b83421115611c635760405162461bcd60e51b815260206004820152600e60248201526d14195c9b5a5d08195e1c1a5c995960921b604482015260640161027d565b6000611c6d610dec565b6000878152600f6020526040902080546001600160581b0319811660016001600160581b03928316908101909216179091556000805160206157ec83398151915290899089906040805160208101959095526001600160a01b03909316928401929092526060830152608082015260a0810187905260c00160405160208183030381529060405280519060200120604051602001611d2292919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506000611d458761171e565b9050806001600160a01b0316886001600160a01b031603611da45760405162461bcd60e51b815260206004820152601960248201527820b8383937bb30b6103a379031bab93932b73a1037bbb732b960391b604482015260640161027d565b611dad816138d8565b15611e7657604080516020810186905280820185905260f887901b6001600160f81b0319166060820152815160418183030181526061820192839052630b135d3f60e11b909252611e71916001600160a01b03841691631626ba7e91611e189187919060650161525e565b602060405180830381865afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190615277565b6001600160e01b031916631626ba7e60e01b146138e7565b611f40565b6040805160008082526020820180845285905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611eca573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611f215760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015260640161027d565b611f3e826001600160a01b0316826001600160a01b0316146138e7565b505b611f4a8888612aac565b5050505050505050565b82611f5e81612b26565b60008315611f8357600a546001600160a01b03848116911614611f8057600080fd5b50815b6000948552600b602052604090942080546001600160a01b0319166001600160a01b0390951694909417909355505050565b60606001805461089690614e88565b6000818152600f6020526040812060018101548291829182918291600160501b8104600290810b92600160681b830490910b916001600160801b03600160801b820416918591829182918291906001600160501b031680830361205c5760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081d1bdad95b88125160821b604482015260640161027d565b6000600e6000836001600160501b03166001600160501b0316815260200190815260200160002090508260000160009054906101000a90046001600160581b031683600001600b9054906101000a90046001600160a01b03168260010160009054906101000a90046001600160a01b03168360020160009054906101000a90046001600160a01b03168460000160009054906101000a90046001600160a01b03168e8e8e8a600201548b600301548c60040160009054906101000a90046001600160801b03168d60040160109054906101000a90046001600160801b03169e509e509e509e509e509e509e509e509e509e509e509e5050505091939597999b5091939597999b565b61216f338383613923565b5050565b60001961217f876139ed565b10156121935761219386868686868661108e565b505050505050565b6060816001600160401b038111156121b5576121b5614c5b565b6040519080825280602002602001820160405280156121e857816020015b60608152602001906001900390816121d35790505b50905060005b828110156122b4576000803086868581811061220c5761220c6150da565b905060200281019061221e9190614eee565b60405161222c929190615294565b600060405180830381855af49150503d8060008114612267576040519150601f19603f3d011682016040523d82523d6000602084013e61226c565b606091505b50915091508161228c57600081511161228457600080fd5b805181602001fd5b8084848151811061229f5761229f6150da565b602090810291909101015250506001016121ee565b5092915050565b6122c53383612e52565b6122e15760405162461bcd60e51b815260040161027d90614f94565b6122ed84848484613a1e565b50505050565b846122fd876139ed565b1015612193576121938686868686866126be565b606061231c82612a84565b60405163e9dc637560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e9dc63759061236a90309086906004016152a4565b600060405180830381865afa158015612387573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261088191908101906152bd565b60006123ba8461379e565b9050828110156124015760405162461bcd60e51b815260206004820152601260248201527124b739bab33334b1b4b2b73a103a37b5b2b760711b604482015260640161027d565b80156122ed576122ed848383613a51565b60008060008360a0013561242581612b6b565b6000600f60008760000135815260200190815260200160002090506000600e60008360010160009054906101000a90046001600160501b03166001600160501b03166001600160501b031681526020019081526020016000209050600082600101600a9054906101000a900460020b9050600083600101600d9054906101000a900460020b905060008460010160109054906101000a90046001600160801b031690506000806125a56040518061016001604052808860010160009054906101000a90046001600160a01b03166001600160a01b031681526020018860020160009054906101000a90046001600160a01b03166001600160a01b031681526020018860000160009054906101000a90046001600160a01b03166001600160a01b03168152602001306001600160a01b031681526020018760020b81526020018660020b81526020018e6020013581526020018e6040013581526020018e6060013581526020018e6080013581526020018e8060c001906113709190614eee565b929e50909c509a50925090506000806125c28985308a8a8a612cae565b915091508082176001600160801b031660001461260e57600489018054600160801b6001600160801b03808316860181166001600160801b031990931683178290048116850116021790555b8c85018960010160106101000a8154816001600160801b0302191690836001600160801b031602179055508d600001356000805160206157cc833981519152848f8f8f8960405161266395949392919061511c565b60405180910390a261267f8e356001600160801b038f16612d28565b505050505050505050509193909250565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60405163d505accf60e01b8152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c481018290526001600160a01b0387169063d505accf9060e4016110e9565b600080823561272381612b26565b60006127356060860160408701614ed1565b6001600160801b03161180612762575060006127576080860160608701614ed1565b6001600160801b0316115b61276b57600080fd5b60008061277e604087016020880161492e565b6001600160a01b0316146127a15761279c604086016020870161492e565b6127a3565b305b85356000908152600f602052604081206001810154929350916127ce906001600160501b0316612bb1565b60018301546004840154919250600160501b8104600290810b92600160681b830490910b916001600160801b03600160801b918290048116928082169290041682156128675760408051808201909152600381526203078360ec1b6020820152612849906001600160a01b0388169087908790600090612c29565b505060008061285c8989308a8a8a612cae565b940193929092019150505b600080836001600160801b03168e60400160208101906128879190614ed1565b6001600160801b0316116128ad578d60400160208101906128a89190614ed1565b6128af565b835b836001600160801b03168f60600160208101906128cc9190614ed1565b6001600160801b0316116128f2578e60600160208101906128ed9190614ed1565b6128f4565b835b6040516309e3d67b60e31b81526001600160a01b038d8116600483015260028b810b60248401528a900b60448301526001600160801b0380851660648401528316608483015292945090925090891690634f1eb3d89060a40160408051808303816000875af115801561296b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298f919061533e565b8386036001600160801b039081168487038216600160801b026001600160801b0319161760048d01556040519281169f50169c508e35907f40d0efd1a53d60ecbf40971b9daf7dc90178c3aadc7aab1765632738fa8b8f0190612a1c908d90869086906001600160a01b039390931683526001600160801b03918216602084015216604082015260600190565b60405180910390a25050505050505050505050915091565b60006001600160e01b031982166380ac58cd60e01b1480612a6557506001600160e01b03198216635b5e139f60e01b145b8061088157506301ffc9a760e01b6001600160e01b0319831614610881565b612a8d81613b54565b612aa95760405162461bcd60e51b815260040161027d90615155565b50565b6000818152600f602052604090208054600160581b600160f81b031916600160581b6001600160a01b038516908102919091179091558190612aed8261171e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612b303382612e52565b612aa95760405162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015260640161027d565b80421115612aa95760405162461bcd60e51b8152602060048201526013602482015272151c985b9cd858dd1a5bdb881d1bdbc81bdb19606a1b604482015260640161027d565b6001600160501b0381166000908152600e60209081526040808320815160608101835281546001600160a01b039081168252600183015481169482019490945260029091015490921690820152610881907f000000000000000000000000000000000000000000000000000000000000000090613b71565b600080866001600160a01b0316633b3bc70e878787876040518563ffffffff1660e01b8152600401612c5e949392919061536d565b60408051808303816000875af1158015612c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca091906153a0565b915091509550959350505050565b6000808080612cc86001600160a01b038a1689898961360c565b50509250925050612ced8a600201548303866001600160801b0316600160801b613c9a565b9350612d0d8a600301548203866001600160801b0316600160801b613c9a565b60028b01929092556003909901989098555096945050505050565b6000828152600c60205260409020546001600160a01b031680612d4a57505050565b600a546001600160a01b031680612d615750505050565b806001600160a01b0316826001600160a01b0316036122ed57604051626e65c960e41b815260048101859052602481018490526001600160a01b038216906306e65c9090604401600060405180830381600087803b158015612dc257600080fd5b505af1925050508015612dd3575060015b6122ed57612ddf6153c4565b806308c379a003612e2f5750612df36153df565b80612dfe5750612e48565b60405185907f4f27462fbdc9bce16bb573a06acba6b27394e151da96ce8098d8e29a6dc8d64b90600090a2506122ed565b634e487b7103612e4857612e41615468565b90612dfe57505b3d6000803e3d6000fd5b600080612e5e8361171e565b9050806001600160a01b0316846001600160a01b03161480612e855750612e858185612690565b80612ea95750836001600160a01b0316612e9e84610919565b6001600160a01b0316145b949350505050565b826001600160a01b0316612ec48261171e565b6001600160a01b031614612eea5760405162461bcd60e51b815260040161027d90615488565b6001600160a01b038216612f4c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161027d565b612f598383836001613d33565b826001600160a01b0316612f6c8261171e565b6001600160a01b031614612f925760405162461bcd60e51b815260040161027d90615488565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652600385528386208054600019019055908716808652838620805460010190558686526002909452828520805490921684179091559051849360008051602061580c83398151915291a4505050565b600061301c8383613b71565b9050336001600160a01b038216146108815760405162461bcd60e51b815260206004820152601a602482015279496e76616c69642063616c6c6572206f662063616c6c6261636b60301b604482015260640161027d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161480156130b45750804710155b156131c4577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561311457600080fd5b505af1158015613128573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925061317b9150859085906004016152a4565b6020604051808303816000875af115801561319a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131be91906150bd565b506122ed565b306001600160a01b038416036131e4576131df848383613a51565b6122ed565b6122ed84848484613d86565b604080516000808252602082019092526001600160a01b03841690839060405161321a91906154cd565b60006040518083038185875af1925050503d8060008114613257576040519150601f19603f3d011682016040523d82523d6000602084013e61325c565b606091505b5050905080610a575760405162461bcd60e51b815260206004820152600360248201526253544560e81b604482015260640161027d565b600061329e8261171e565b90506132ae816000846001613d33565b6132b78261171e565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b03851680855260038452828520805460001901905587855260029093528184208054909116905551929350849260008051602061580c833981519152908390a45050565b600080600080600080604051806060016040528088604001516001600160a01b0316815260200188600001516001600160a01b0316815260200188602001516001600160a01b0316815250905061339b7f000000000000000000000000000000000000000000000000000000000000000082613b71565b915060006133b1836001600160a01b0316613868565b905060006133c28960800151613e88565b905060006133d38a60a00151613e88565b90506133ea8383838d60c001518e60e00151614163565b9850505050816001600160a01b031663aafe29c03389606001518a608001518b60a001518b6040518060600160405280898152602001336001600160a01b031681526020018f610140015181525060405160200161344891906154e9565b6040516020818303038152906040526040518763ffffffff1660e01b81526004016134789695949392919061553f565b6060604051808303816000875af1158015613497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134bb9190615598565b6101008a0151909750919550935084108015906134dd57508661012001518310155b6134f95760405162461bcd60e51b815260040161027d90614f34565b5091939590929450565b6001600160a01b0382166135595760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161027d565b61356281613b54565b1561357f5760405162461bcd60e51b815260040161027d906155c6565b61358d600083836001613d33565b61359681613b54565b156135b35760405162461bcd60e51b815260040161027d906155c6565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b03191684179055518392919060008051602061580c833981519152908290a45050565b6000808080806001600160a01b03891663514ea4bf62ffffff808916908a1660188c811b91909117901b176040518263ffffffff1660e01b815260040161365591815260200190565b60a060405180830381865afa158015613672573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061369691906155fc565b94509450945094509450945094509450945094565b6001600160a01b0382166000908152600d60205260408120546001600160501b03169081900361088157506010805460016001600160501b03600160b01b8084048216838101909216026001600160b01b03909316929092179092556001600160a01b039384166000908152600d6020908152604080832080546001600160501b03191685179055838352600e825291829020855181549088166001600160a01b0319918216178255918601519481018054958816958316959095179094559301516002909201805492909416919092161790915590565b6000908152600260205260409020546001600160a01b031690565b6040516370a0823160e01b81526000906001600160a01b038316906370a08231906137cd90309060040161474e565b602060405180830381865afa1580156137ea573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190615653565b60405163f637731d60e01b81526001600160a01b0383169063f637731d9061383a90849060040161474e565b600060405180830381600087803b15801561385457600080fd5b505af1158015612193573d6000803e3d6000fd5b6000816001600160a01b031663e76c01e46040518163ffffffff1660e01b815260040160c060405180830381865afa1580156138a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138cc919061567e565b50939695505050505050565b6001600160a01b03163b151590565b80612aa95760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015260640161027d565b816001600160a01b0316836001600160a01b0316036139805760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b604482015260640161027d565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b604051636eb1769f60e11b81526000906001600160a01b0383169063dd62ed3e906137cd90339030906004016151b8565b613a29848484612eb1565b613a3584848484614227565b6122ed5760405162461bcd60e51b815260040161027d906156fd565b600080846001600160a01b031663a9059cbb60e01b8585604051602401613a799291906152a4565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051613ab791906154cd565b6000604051808303816000865af19150503d8060008114613af4576040519150601f19603f3d011682016040523d82523d6000602084013e613af9565b606091505b5091509150818015613b23575080511580613b23575080806020019051810190613b2391906150bd565b610f9a5760405162461bcd60e51b815260206004820152600260248201526114d560f21b604482015260640161027d565b600080613b6083613783565b6001600160a01b0316141592915050565b600081604001516001600160a01b031682602001516001600160a01b031610613bac5760405162461bcd60e51b815260040161027d90615187565b815183906001600160a01b031615613bed5782516020808501516040808701519051613bd99493016151ef565b604051602081830303815290604052613c15565b6020808401516040808601519051613c0593016151b8565b6040516020818303038152906040525b8051602091820120604051613c7b93927f62441ebe4e4315cf3d49d5957f94d66b253dbabe7006f34ad7f70947e60bf15c91016001600160f81b0319815260609390931b6001600160601b03191660018401526015830191909152603582015260550190565b60408051601f1981840301815291905280516020909101209392505050565b60008383028160001985870982811083820303915050808411613cbc57600080fd5b80600003613ccf57508290049050611087565b8385870960008581038616958690049560026003880281188089028203028089028203028089028203028089028203028089028203028089029091030291819003819004600101858411909403939093029190930391909104170290509392505050565b6001600160a01b03841615613d7a576000828152600f602090815260408083208054600160581b600160f81b0319169055600b909152902080546001600160a01b03191690555b6122ed84848484614327565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691613dea91906154cd565b6000604051808303816000865af19150503d8060008114613e27576040519150601f19603f3d011682016040523d82523d6000602084013e613e2c565b606091505b5091509150818015613e56575080511580613e56575080806020019051810190613e5691906150bd565b6121935760405162461bcd60e51b815260206004820152600360248201526229aa2360e91b604482015260640161027d565b6000600282900b60171d62ffffff818401821816620d89e8811115613ec057604051633c10250f60e01b815260040160405180910390fd5b600160801b6001821615613ee157506ffffcb933bd6fad37aa2d162d1a5940015b6002821615613f00576ffff97272373d413259a46990580e213a0260801c5b6004821615613f1f576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613f3e576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613f5d576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613f7c576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613f9b576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613fba576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613fda576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613ffa576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561401a576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561403a576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561405a576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561407a576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561409a576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156140ba576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156140db576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156140fb576e5d6af8dedb81196699c329225ee6040260801c5b6204000082106141415762040000821615614124576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615614141576b048a170391f7dc42444e8fa20260801c5b60008560020b131561415257600019045b63ffffffff0160201c949350505050565b6000836001600160a01b0316856001600160a01b03161115614183579293925b846001600160a01b0316866001600160a01b0316116141ae576141a7858585614454565b905061421e565b836001600160a01b0316866001600160a01b031610156142105760006141d5878686614454565b905060006141e48789866144b7565b9050806001600160801b0316826001600160801b0316106142055780614207565b815b9250505061421e565b61421b8585846144b7565b90505b95945050505050565b600061423b846001600160a01b03166138d8565b1561431c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061427290339089908890889060040161574f565b6020604051808303816000875af19250505080156142ad575060408051601f3d908101601f191682019092526142aa91810190615277565b60015b614302573d8080156142db576040519150601f19603f3d011682016040523d82523d6000602084013e6142e0565b606091505b5080516000036122845760405162461bcd60e51b815260040161027d906156fd565b6001600160e01b031916630a85bd0160e11b149050612ea9565b506001949350505050565b60018111156143965760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b606482015260840161027d565b816001600160a01b0385166143f2576143ed81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b614415565b836001600160a01b0316856001600160a01b0316146144155761441585826144f4565b6001600160a01b0384166144315761442c81614591565b610f9a565b846001600160a01b0316846001600160a01b031614610f9a57610f9a8482614640565b6000826001600160a01b0316846001600160a01b03161115614474579192915b6000614497856001600160a01b0316856001600160a01b0316600160601b613c9a565b905061421e6144b284838888036001600160a01b0316613c9a565b614684565b6000826001600160a01b0316846001600160a01b031611156144d7579192915b612ea96144b283600160601b8787036001600160a01b0316613c9a565b6000600161450184611970565b61450b9190615782565b60008381526007602052604090205490915080821461455e576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906145a390600190615782565b600083815260096020526040812054600880549394509092849081106145cb576145cb6150da565b9060005260206000200154905080600883815481106145ec576145ec6150da565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061462457614624615795565b6001900381819060005260206000200160009055905550505050565b600061464b83611970565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b806001600160801b038116811461469a57600080fd5b919050565b6001600160e01b031981168114612aa957600080fd5b6000602082840312156146c757600080fd5b81356110878161469f565b60005b838110156146ed5781810151838201526020016146d5565b50506000910152565b6000815180845261470e8160208601602086016146d2565b601f01601f19169290920160200192915050565b60208152600061108760208301846146f6565b60006020828403121561474757600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114612aa957600080fd5b803561469a81614762565b6000806040838503121561479557600080fd5b82356147a081614762565b946020939093013593505050565b6000602082840312156147c057600080fd5b81356001600160401b038111156147d657600080fd5b820160c0818503121561108757600080fd5b6000806000606084860312156147fd57600080fd5b833561480881614762565b9250602084013561481881614762565b929592945050506040919091013590565b60008083601f84011261483b57600080fd5b5081356001600160401b0381111561485257600080fd5b60208301915083602082850101111561486a57600080fd5b9250929050565b6000806000806060858703121561488757600080fd5b843593506020850135925060408501356001600160401b038111156148ab57600080fd5b6148b787828801614829565b95989497509550505050565b60ff81168114612aa957600080fd5b60008060008060008060c087890312156148eb57600080fd5b86356148f681614762565b955060208701359450604087013593506060870135614914816148c3565b9598949750929560808101359460a0909101359350915050565b60006020828403121561494057600080fd5b813561108781614762565b60006020828403121561495d57600080fd5b81356001600160401b0381111561497357600080fd5b8201610180818503121561108757600080fd5b6001600160801b03169052565b600080604083850312156149a657600080fd5b8235915060208301356149b881614762565b809150509250929050565b8015158114612aa957600080fd5b600080604083850312156149e457600080fd5b8235915060208301356149b8816149c3565b60008060008060008060a08789031215614a0f57600080fd5b8635614a1a81614762565b95506020870135614a2a81614762565b94506040870135614a3a81614762565b93506060870135614a4a81614762565b925060808701356001600160401b03811115614a6557600080fd5b614a7189828a01614829565b979a9699509497509295939492505050565b600080600060608486031215614a9857600080fd5b833592506020840135614aaa816149c3565b91506040840135614aba81614762565b809150509250925092565b6001600160581b038d1681526001600160a01b038c811660208301528b811660408301528a8116606083015289166080820152600288810b60a083015287900b60c08201526101808101614b1c60e0830188614986565b8561010083015284610120830152614b38610140830185614986565b614b46610160830184614986565b9d9c50505050505050505050505050565b60008060408385031215614b6a57600080fd5b8235614b7581614762565b915060208301356149b8816149c3565b60008060208385031215614b9857600080fd5b82356001600160401b0380821115614baf57600080fd5b818501915085601f830112614bc357600080fd5b813581811115614bd257600080fd5b8660208260051b8501011115614be757600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614c4e57603f19888603018452614c3c8583516146f6565b94509285019290850190600101614c20565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b606081016001600160401b0381118282101715614c9057614c90614c5b565b60405250565b601f8201601f191681016001600160401b0381118282101715614cbb57614cbb614c5b565b6040525050565b60006001600160401b03821115614cdb57614cdb614c5b565b50601f01601f191660200190565b600082601f830112614cfa57600080fd5b8135614d0581614cc2565b604051614d128282614c96565b828152856020848701011115614d2757600080fd5b82602086016020830137600092810160200192909252509392505050565b60008060008060808587031215614d5b57600080fd5b8435614d6681614762565b93506020850135614d7681614762565b92506040850135915060608501356001600160401b03811115614d9857600080fd5b614da487828801614ce9565b91505092959194509250565b600080600060608486031215614dc557600080fd5b8335614dd081614762565b9250602084013591506040840135614aba81614762565b600060208284031215614df957600080fd5b81356001600160401b03811115614e0f57600080fd5b820160e0818503121561108757600080fd5b6001600160801b039390931683526020830191909152604082015260600190565b60008060408385031215614e5557600080fd5b8235614e6081614762565b915060208301356149b881614762565b600060808284031215614e8257600080fd5b50919050565b600181811c90821680614e9c57607f821691505b602082108103614e8257634e487b7160e01b600052602260045260246000fd5b6001600160801b0381168114612aa957600080fd5b600060208284031215614ee357600080fd5b813561108781614ebc565b6000808335601e19843603018112614f0557600080fd5b8301803591506001600160401b03821115614f1f57600080fd5b60200191503681900382131561486a57600080fd5b602080825260149082015273507269636520736c69707061676520636865636b60601b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b8201614f8d57614f8d614f62565b5060000390565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b600060208284031215614ff357600080fd5b81356001600160401b038082111561500a57600080fd5b9083019081850360a081121561501f57600080fd5b60405161502b81614c71565b606082121561503957600080fd5b604051915061504782614c71565b833561505281614762565b8252602084013561506281614762565b6020830152604084013561507581614762565b604083015281815261508960608501614777565b602082015260808401359150828211156150a257600080fd5b6150ae87838601614ce9565b60408201529695505050505050565b6000602082840312156150cf57600080fd5b8151611087816149c3565b634e487b7160e01b600052603260045260246000fd5b8060020b8114612aa957600080fd5b60006020828403121561511157600080fd5b8135611087816150f0565b6001600160801b039586168152939094166020840152604083019190915260608201526001600160a01b03909116608082015260a00190565b602080825260189082015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604082015260600190565b602080825260179082015276496e76616c6964206f72646572206f6620746f6b656e7360481b604082015260600190565b6001600160a01b0392831681529116602082015260400190565b6000602082840312156151e457600080fd5b815161108781614762565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b0385811682528416602082015260606040820181905281018290526000828460808401376000608084840101526080601f19601f850116830101905095945050505050565b828152604060208201526000612ea960408301846146f6565b60006020828403121561528957600080fd5b81516110878161469f565b8183823760009101908152919050565b6001600160a01b03929092168252602082015260400190565b6000602082840312156152cf57600080fd5b81516001600160401b038111156152e557600080fd5b8201601f810184136152f657600080fd5b805161530181614cc2565b60405161530e8282614c96565b82815286602084860101111561532357600080fd5b6153348360208301602087016146d2565b9695505050505050565b6000806040838503121561535157600080fd5b825161535c81614ebc565b60208401519092506149b881614ebc565b8460020b81528360020b602082015260018060801b038316604082015260806060820152600061421b60808301846146f6565b600080604083850312156153b357600080fd5b505080516020909101519092909150565b600060033d1115610f1c5760046000803e5060005160e01c90565b600060443d10156153ed5790565b6040516003193d81016004833e81513d6001600160401b03808311602484018310171561541c57505050505090565b82850191508151818111156154345750505050505090565b843d870101602082850101111561544e5750505050505090565b61545d60208286010187614c96565b509095945050505050565b60008060233d1115615484576020600460003e50506000516001905b9091565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b600082516154df8184602087016146d2565b9190910192915050565b602081526000825160018060a01b038082511660208501528060208301511660408501528060408301511660608501528060208601511660808501525050604083015160a080840152612ea960c08401826146f6565b6001600160a01b03878116825286166020820152600285810b604083015284900b60608201526001600160801b038316608082015260c060a0820181905260009061558c908301846146f6565b98975050505050505050565b6000806000606084860312156155ad57600080fd5b83519250602084015191506040840151614aba81614ebc565b6020808252601c908201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b604082015260600190565b600080600080600060a0868803121561561457600080fd5b855194506020860151935060408601519250606086015161563481614ebc565b608087015190925061564581614ebc565b809150509295509295909350565b60006020828403121561566557600080fd5b5051919050565b805161ffff8116811461469a57600080fd5b60008060008060008060c0878903121561569757600080fd5b86516156a281614762565b60208801519096506156b3816150f0565b94506156c16040880161566c565b935060608701516156d1816148c3565b92506156df6080880161566c565b915060a08701516156ef816149c3565b809150509295509295509295565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061421b908301846146f6565b8181038181111561088157610881614f62565b634e487b7160e01b600052603160045260246000fdfeff0e0466f109fcf4f5660899d8847c592e1e8dea30ffbe040704b23ad381d7628a82de7fe9b33e0e6bca0e26f5bd14a74f1164ffe236d50e0a36c3ea70f2b81449ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9adddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c6343000814000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
