{
  "_format": "hh-sol-artifact-1",
  "contractName": "NonfungiblePositionManager",
  "sourceName": "contracts/NonfungiblePositionManager.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_factory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_WETH9",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_tokenDescriptor_",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "T",
      "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"
        },
        {
          "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": "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": "PERMIT_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "WETH9",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "baseURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "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": "uint24",
          "name": "fee",
          "type": "uint24"
        },
        {
          "internalType": "uint160",
          "name": "sqrtPriceX96",
          "type": "uint160"
        }
      ],
      "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": "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": "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": "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": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token0",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1",
              "type": "address"
            },
            {
              "internalType": "uint24",
              "name": "fee",
              "type": "uint24"
            },
            {
              "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": "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": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "positions",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "nonce",
          "type": "uint96"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        },
        {
          "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": "refundETH",
      "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": "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": [],
      "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": "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": "amount0Owed",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1Owed",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "uniswapV3MintCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "unwrapWETH9",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x610120604052760100000000000000000000000000000000000000000001600d553480156200002d57600080fd5b50604051620061b7380380620061b783398101604081905262000050916200013f565b82826040518060400160405280601b81526020017f556e697377617020563320506f736974696f6e73204e46542d563100000000008152506040518060400160405280600a815260200169554e492d56332d504f5360b01b815250604051806040016040528060018152602001603160f81b81525082828160009081620000d891906200022e565b506001620000e782826200022e565b5050835160209485012060805250805192019190912060a052506001600160a01b0391821660c052811660e052166101005250620002fa9050565b80516001600160a01b03811681146200013a57600080fd5b919050565b6000806000606084860312156200015557600080fd5b620001608462000122565b9250620001706020850162000122565b9150620001806040850162000122565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001b457607f821691505b602082108103620001d557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200022957600081815260208120601f850160051c81016020861015620002045750805b601f850160051c820191505b81811015620002255782815560010162000210565b5050505b505050565b81516001600160401b038111156200024a576200024a62000189565b62000262816200025b84546200019f565b84620001db565b602080601f8311600181146200029a5760008415620002815750858301515b600019600386901b1c1916600185901b17855562000225565b600085815260208120601f198616915b82811015620002cb57888601518255948401946001909101908401620002aa565b5085821015620002ea5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051615e16620003a16000396000612e11015260008181610299015281816105f001528181611a6701528181611b6101528181614479015281816144bf015261456d0152600081816107b901528181610ce7015281816110f5015281816111bb01528181612e9d015281816131a90152613af40152600081816105250152611e330152600081816105040152611e120152615e166000f3fe6080604052600436106102895760003560e01c80636352211e11610153578063ac9650d8116100cb578063d34879971161007f578063e985e9c511610064578063e985e9c51461082e578063f3995c6714610877578063fc6f78651461088a57600080fd5b8063d3487997146107fb578063df2ab5bb1461081b57600080fd5b8063c2e3140a116100b0578063c2e3140a14610794578063c45a0155146107a7578063c87b56dd146107db57600080fd5b8063ac9650d814610754578063b88d4fde1461077457600080fd5b8063883164561161012257806399fbab881161010757806399fbab88146106e9578063a22cb46514610721578063a4a78f0c1461074157600080fd5b8063883164561461069957806395d89b41146106d457600080fd5b80636352211e146106325780636c0360eb1461065257806370a08231146106665780637ac2ff7b1461068657600080fd5b806323b872dd1161020157806342966c68116101b557806349404b7c1161019a57806349404b7c146105cb5780634aa4a4fc146105de5780634f6ccce71461061257600080fd5b806342966c68146105a55780634659a494146105b857600080fd5b806330adf81f116101e657806330adf81f1461049b5780633644e515146104cf57806342842e0e1461058557600080fd5b806323b872dd1461045b5780632f745c591461047b57600080fd5b80630c49ccbe1161025857806313ead5621161023d57806313ead562146103f157806318160ddd14610404578063219f5d171461042357600080fd5b80630c49ccbe146103c157806312210e8a146103e957600080fd5b806301ffc9a71461031257806306fdde0314610347578063081812fc14610369578063095ea7b3146103a157600080fd5b3661030d57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461030b5760405162461bcd60e51b815260206004820152600960248201527f4e6f74205745544839000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561031e57600080fd5b5061033261032d366004615150565b61089d565b60405190151581526020015b60405180910390f35b34801561035357600080fd5b5061035c6108e1565b60405161033e91906151c5565b34801561037557600080fd5b506103896103843660046151d8565b610973565b6040516001600160a01b03909116815260200161033e565b3480156103ad57600080fd5b5061030b6103bc366004615206565b610a29565b6103d46103cf366004615232565b610b5a565b6040805192835260208301919091520161033e565b61030b611078565b6103896103ff36600461525d565b61108a565b34801561041057600080fd5b506008545b60405190815260200161033e565b6104366104313660046152b7565b6113a1565b604080516001600160801b03909416845260208401929092529082015260600161033e565b34801561046757600080fd5b5061030b6104763660046152c9565b61170f565b34801561048757600080fd5b50610415610496366004615206565b611796565b3480156104a757600080fd5b506104157f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b3480156104db57600080fd5b5061041560007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000046604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b34801561059157600080fd5b5061030b6105a03660046152c9565b61183e565b61030b6105b33660046151d8565b611859565b61030b6105c6366004615319565b611988565b61030b6105d9366004615375565b611a36565b3480156105ea57600080fd5b506103897f000000000000000000000000000000000000000000000000000000000000000081565b34801561061e57600080fd5b5061041561062d3660046151d8565b611bcf565b34801561063e57600080fd5b5061038961064d3660046151d8565b611c73565b34801561065e57600080fd5b50606061035c565b34801561067257600080fd5b506104156106813660046153a5565b611cfe565b61030b610694366004615319565b611d98565b6106ac6106a73660046153c2565b61227f565b604080519485526001600160801b03909316602085015291830152606082015260800161033e565b3480156106e057600080fd5b5061035c612817565b3480156106f557600080fd5b506107096107043660046151d8565b612826565b60405161033e9c9b9a999897969594939291906153d5565b34801561072d57600080fd5b5061030b61073c366004615489565b612a7f565b61030b61074f366004615319565b612a8e565b6107676107623660046154b7565b612b35565b60405161033e919061552c565b34801561078057600080fd5b5061030b61078f36600461561b565b612c8d565b61030b6107a2366004615319565b612d1b565b3480156107b357600080fd5b506103897f000000000000000000000000000000000000000000000000000000000000000081565b3480156107e757600080fd5b5061035c6107f63660046151d8565b612db8565b34801561080757600080fd5b5061030b6108163660046156ca565b612e88565b61030b61082936600461574a565b612f06565b34801561083a57600080fd5b5061033261084936600461578c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61030b610885366004615319565b612fed565b6103d46108983660046157ba565b61305d565b60006001600160e01b031982167f780e9d630000000000000000000000000000000000000000000000000000000014806108db57506108db826135bd565b92915050565b6060600080546108f0906157cc565b80601f016020809104026020016040519081016040528092919081815260200182805461091c906157cc565b80156109695780601f1061093e57610100808354040283529160200191610969565b820191906000526020600020905b81548152906001019060200180831161094c57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109fd5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610302565b506000908152600c60205260409020546c0100000000000000000000000090046001600160a01b031690565b6000610a3482611c73565b9050806001600160a01b0316836001600160a01b031603610abd5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610302565b336001600160a01b0382161480610ad95750610ad98133610849565b610b4b5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610302565b610b558383613658565b505050565b6000808235610b6933826136dc565b610bb55760405162461bcd60e51b815260206004820152600c60248201527f4e6f7420617070726f76656400000000000000000000000000000000000000006044820152606401610302565b608084013580421115610c0a5760405162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c64000000000000000000000000006044820152606401610302565b6000610c1c6040870160208801615815565b6001600160801b031611610c2f57600080fd5b84356000908152600c602090815260409182902060018101549092600160801b9091046001600160801b031691610c6a918901908901615815565b6001600160801b0316816001600160801b03161015610c8857600080fd5b60018281015469ffffffffffffffffffff166000908152600b60209081526040808320815160608101835281546001600160a01b039081168252919095015490811692850192909252600160a01b90910462ffffff1690830152610d0c7f0000000000000000000000000000000000000000000000000000000000000000836137e3565b60018501549091506001600160a01b0382169063a34123a7906a01000000000000000000008104600290810b91600160681b9004900b610d5260408e0160208f01615815565b6040516001600160e01b031960e086901b168152600293840b60048201529190920b60248201526001600160801b03909116604482015260640160408051808303816000875af1158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190615832565b909850965060408901358810801590610deb575088606001358710155b610e375760405162461bcd60e51b815260206004820152601460248201527f507269636520736c69707061676520636865636b0000000000000000000000006044820152606401610302565b6001840154600090610e679030906a01000000000000000000008104600290810b91600160681b9004900b6138e4565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b8152600401610e9a91815260200190565b60a060405180830381865afa158015610eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edb9190615856565b50509250925050610f09876002015483610ef591906158ce565b876001600160801b0316600160801b613938565b610f13908c6158e5565b600488018054600090610f309084906001600160801b03166158e5565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550610f67876003015482610ef591906158ce565b610f71908b6158e5565b600488018054601090610f95908490600160801b90046001600160801b03166158e5565b82546001600160801b039182166101009390930a9283029190920219909116179055506002870182905560038701819055610fd660408d0160208e01615815565b610fe09087615910565b8760010160106101000a8154816001600160801b0302191690836001600160801b031602179055508b600001357f26f6a048ee9138f2c0ce266f322cb99228e8d619ae2bff30c67f8dcf9d2377b48d60200160208101906110419190615815565b604080516001600160801b039092168252602082018f905281018d90526060015b60405180910390a2505050505050505050915091565b47156110885761108833476139ea565b565b6000836001600160a01b0316856001600160a01b0316106110aa57600080fd5b6040517f1698ee820000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152858116602483015262ffffff851660448301527f00000000000000000000000000000000000000000000000000000000000000001690631698ee8290606401602060405180830381865afa15801561113c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111609190615938565b90506001600160a01b0381166112a5576040517fa16712950000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152858116602483015262ffffff851660448301527f0000000000000000000000000000000000000000000000000000000000000000169063a1671295906064016020604051808303816000875af1158015611204573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112289190615938565b6040517ff637731d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529192509082169063f637731d90602401600060405180830381600087803b15801561128857600080fd5b505af115801561129c573d6000803e3d6000fd5b50505050611399565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa1580156112e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113099190615976565b5050505050509050806001600160a01b0316600003611397576040517ff637731d0000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015283169063f637731d90602401600060405180830381600087803b15801561137e57600080fd5b505af1158015611392573d6000803e3d6000fd5b505050505b505b949350505050565b6000808060a0840135804211156113fa5760405162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c64000000000000000000000000006044820152606401610302565b84356000908152600c6020908152604080832060018082015469ffffffffffffffffffff81168652600b855283862084516060808201875282546001600160a01b039081168352929094015480831682890190815262ffffff600160a01b9092048216838901908152885161014081018a528451861681529151909416818a01529251168287015230828501526a01000000000000000000008304600290810b608080850191909152600160681b909404900b60a0830152958c013560c0820152938b013560e0850152908a013561010084015289013561012083015292906114e290613aa7565b6001870154939a509198509650915060009061151c9030906a01000000000000000000008104600290810b91600160681b9004900b6138e4565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b815260040161154f91815260200190565b60a060405180830381865afa15801561156c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115909190615856565b505092509250506115c78660020154836115aa91906158ce565b60018801546001600160801b03600160801b918290041690613938565b6004870180546000906115e49084906001600160801b03166158e5565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555061161b8660030154826115aa91906158ce565b60048701805460109061163f908490600160801b90046001600160801b03166158e5565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550818660020181905550808660030181905550898660010160108282829054906101000a90046001600160801b031661169b91906158e5565b82546101009290920a6001600160801b0381810219909316918316021790915560408051918d168252602082018c905281018a90528c3591507f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f9060600160405180910390a2505050505050509193909250565b61171933826136dc565b61178b5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610302565b610b55838383613d2f565b60006117a183611cfe565b82106118155760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610302565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b610b5583838360405180602001604052806000815250612c8d565b8061186433826136dc565b6118b05760405162461bcd60e51b815260206004820152600c60248201527f4e6f7420617070726f76656400000000000000000000000000000000000000006044820152606401610302565b6000828152600c602052604090206001810154600160801b90046001600160801b03161580156118eb575060048101546001600160801b0316155b801561190957506004810154600160801b90046001600160801b0316155b6119555760405162461bcd60e51b815260206004820152600b60248201527f4e6f7420636c65617265640000000000000000000000000000000000000000006044820152606401610302565b6000838152600c6020526040812081815560018101829055600281018290556003810182905560040155610b5583613f14565b6040517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101869052606481018590526001608482015260ff841660a482015260c4810183905260e481018290526001600160a01b03871690638fcbaf0c90610104015b600060405180830381600087803b158015611a1657600080fd5b505af1158015611a2a573d6000803e3d6000fd5b50505050505050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ada9190615a08565b905082811015611b2c5760405162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e7420574554483900000000000000000000000000006044820152606401610302565b8015610b55576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015611bad57600080fd5b505af1158015611bc1573d6000803e3d6000fd5b50505050610b5582826139ea565b6000611bda60085490565b8210611c4e5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610302565b60088281548110611c6157611c61615a21565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806108db5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610302565b60006001600160a01b038216611d7c5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610302565b506001600160a01b031660009081526003602052604090205490565b83421115611de85760405162461bcd60e51b815260206004820152600e60248201527f5065726d697420657870697265640000000000000000000000000000000000006044820152606401610302565b6000611e9360007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000046604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad8888611ebf81613fc8565b6040805160208101959095526001600160a01b03909316928401929092526060830152608082015260a0810187905260c00160405160208183030381529060405280519060200120604051602001611f499291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506000611f6c87611c73565b9050806001600160a01b0316886001600160a01b031603611ff55760405162461bcd60e51b815260206004820152602760248201527f4552433732315065726d69743a20617070726f76616c20746f2063757272656e60448201527f74206f776e6572000000000000000000000000000000000000000000000000006064820152608401610302565b6001600160a01b0381163b1561215157604080516020810186905280820185905260f887901b7fff000000000000000000000000000000000000000000000000000000000000001660608201528151604181830301815260618201928390527f1626ba7e000000000000000000000000000000000000000000000000000000009092526001600160a01b03831691631626ba7e91612097918691606501615a37565b602060405180830381865afa1580156120b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d89190615a50565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916631626ba7e60e01b1461214c5760405162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a656400000000000000000000000000000000000000006044820152606401610302565b61226b565b6040805160008082526020820180845285905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156121a5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166122085760405162461bcd60e51b815260206004820152601160248201527f496e76616c6964207369676e61747572650000000000000000000000000000006044820152606401610302565b816001600160a01b0316816001600160a01b0316146122695760405162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a656400000000000000000000000000000000000000006044820152606401610302565b505b6122758888613658565b5050505050505050565b6000808080610140850135804211156122da5760405162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c64000000000000000000000000006044820152606401610302565b6040805161014081019091526000906123a690806122fb60208b018b6153a5565b6001600160a01b0316815260200189602001602081019061231c91906153a5565b6001600160a01b0316815260200161233a60608b0160408c01615a6d565b62ffffff16815230602082015260400161235a60808b0160608c01615a88565b60020b815260200161237260a08b0160808c01615a88565b60020b81526020018960a0013581526020018960c0013581526020018960e001358152602001896101000135815250613aa7565b9297509095509350905061244f6123c561014089016101208a016153a5565b600d805475ffffffffffffffffffffffffffffffffffffffffffff169060006123ed83615aa5565b91906101000a81548175ffffffffffffffffffffffffffffffffffffffffffff021916908375ffffffffffffffffffffffffffffffffffffffffffff16021790555075ffffffffffffffffffffffffffffffffffffffffffff16975087614034565b600061247a3061246560808b0160608c01615a88565b61247560a08c0160808d01615a88565b6138e4565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b81526004016124ad91815260200190565b60a060405180830381865afa1580156124ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ee9190615856565b5050925092505060006125678560405180606001604052808e600001602081019061251991906153a5565b6001600160a01b031681526020018e602001602081019061253a91906153a5565b6001600160a01b031681526020018e604001602081019061255b9190615a6d565b62ffffff16905261418f565b905060405180610140016040528060006bffffffffffffffffffffffff16815260200160006001600160a01b031681526020018269ffffffffffffffffffff1681526020018c60600160208101906125bf9190615a88565b60020b81526020016125d760a08e0160808f01615a88565b60020b81526020018a6001600160801b0316815260200184815260200183815260200160006001600160801b0316815260200160006001600160801b0316815250600c60008c815260200190815260200160002060008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550606082015181600101600a6101000a81548162ffffff021916908360020b62ffffff160217905550608082015181600101600d6101000a81548162ffffff021916908360020b62ffffff16021790555060a08201518160010160106101000a8154816001600160801b0302191690836001600160801b0316021790555060c0820151816002015560e082015181600301556101008201518160040160006101000a8154816001600160801b0302191690836001600160801b031602179055506101208201518160040160106101000a8154816001600160801b0302191690836001600160801b03160217905550905050897f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f8a8a8a604051612802939291906001600160801b039390931683526020830191909152604082015260600190565b60405180910390a25050505050509193509193565b6060600180546108f0906157cc565b6000818152600c6020908152604080832081516101408101835281546bffffffffffffffffffffffff811682526001600160a01b036c010000000000000000000000009091041693810193909352600181015469ffffffffffffffffffff81169284018390526a01000000000000000000008104600290810b6060860152600160681b8204810b60808601526001600160801b03600160801b92839004811660a08701529083015460c0860152600383015460e08601526004909201548083166101008601520416610120830152829182918291829182918291829182918291829182919082036129595760405162461bcd60e51b815260206004820152601060248201527f496e76616c696420746f6b656e204944000000000000000000000000000000006044820152606401610302565b6000600b6000836040015169ffffffffffffffffffff1669ffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160149054906101000a900462ffffff1662ffffff1662ffffff1681525050905081600001518260200151826000015183602001518460400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001519d509d509d509d509d509d509d509d509d509d509d509d50505091939597999b5091939597999b565b612a8a3383836142df565b5050565b6040517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152600019906001600160a01b0388169063dd62ed3e90604401602060405180830381865afa158015612af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b199190615a08565b1015612b2d57612b2d868686868686611988565b505050505050565b60608167ffffffffffffffff811115612b5057612b506155ac565b604051908082528060200260200182016040528015612b8357816020015b6060815260200190600190039081612b6e5790505b50905060005b82811015612c865760008030868685818110612ba757612ba7615a21565b9050602002810190612bb99190615ada565b604051612bc7929190615b46565b600060405180830381855af49150503d8060008114612c02576040519150601f19603f3d011682016040523d82523d6000602084013e612c07565b606091505b509150915081612c5357604481511015612c2057600080fd5b60048101905080806020019051810190612c3a9190615b56565b60405162461bcd60e51b815260040161030291906151c5565b80848481518110612c6657612c66615a21565b602002602001018190525050508080612c7e90615bc4565b915050612b89565b5092915050565b612c9733836136dc565b612d095760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610302565b612d15848484846143cb565b50505050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015285906001600160a01b0388169063dd62ed3e90604401602060405180830381865afa158015612d80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da49190615a08565b1015612b2d57612b2d868686868686612fed565b6000818152600260205260409020546060906001600160a01b0316612ddc57600080fd5b6040517fe9dc6375000000000000000000000000000000000000000000000000000000008152306004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e9dc637590604401600060405180830381865afa158015612e60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108db9190810190615b56565b6000612e9682840184615bde565b9050612ec67f00000000000000000000000000000000000000000000000000000000000000008260000151614454565b508415612ee1578051516020820151612ee191903388614477565b8315612eff57612eff81600001516020015182602001513387614477565b5050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015612f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8a9190615a08565b905082811015612fdc5760405162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e7420746f6b656e00000000000000000000000000006044820152606401610302565b8015612d1557612d15848383614610565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c481018290526001600160a01b0387169063d505accf9060e4016119fc565b600080823561306c33826136dc565b6130b85760405162461bcd60e51b815260206004820152600c60248201527f4e6f7420617070726f76656400000000000000000000000000000000000000006044820152606401610302565b60006130ca6060860160408701615815565b6001600160801b031611806130f7575060006130ec6080860160608701615815565b6001600160801b0316115b61310057600080fd5b60008061311360408701602088016153a5565b6001600160a01b0316146131365761313160408601602087016153a5565b613138565b305b85356000908152600c6020908152604080832060018082015469ffffffffffffffffffff168552600b8452828520835160608101855281546001600160a01b039081168252919092015490811694820194909452600160a01b90930462ffffff1691830191909152929350906131ce7f0000000000000000000000000000000000000000000000000000000000000000836137e3565b600484015460018501549192506001600160801b0380821692600160801b92839004821692900416156133bf5760018501546040517fa34123a70000000000000000000000000000000000000000000000000000000081526a01000000000000000000008204600290810b6004830152600160681b90920490910b6024820152600060448201526001600160a01b0384169063a34123a79060640160408051808303816000875af1158015613287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ab9190615832565b5050600185015460009081906001600160a01b0386169063514ea4bf906132f09030906a01000000000000000000008104600290810b91600160681b9004900b6138e4565b6040518263ffffffff1660e01b815260040161330e91815260200190565b60a060405180830381865afa15801561332b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334f9190615856565b5050925092505061338687600201548361336991906158ce565b60018901546001600160801b03600160801b918290041690613938565b61339090856158e5565b93506133a587600301548261336991906158ce565b6133af90846158e5565b6002880192909255600387015590505b6000806001600160801b0384166133dc60608e0160408f01615815565b6001600160801b0316116133ff576133fa60608d0160408e01615815565b613401565b835b836001600160801b03168d606001602081019061341e9190615815565b6001600160801b0316116134415761343c60808e0160608f01615815565b613443565b835b60018901546040517f4f1eb3d80000000000000000000000000000000000000000000000000000000081526001600160a01b038c811660048301526a01000000000000000000008304600290810b6024840152600160681b90930490920b60448201526001600160801b03808516606483015283166084820152929450909250861690634f1eb3d89060a40160408051808303816000875af11580156134ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135119190615c9d565b6001600160801b039182169c5016995061352b8285615910565b6135358285615910565b6001600160801b03918216908216600160801b027fffffffffffffffffffffffffffffffff0000000000000000000000000000000016176004890155604080516001600160a01b038b1681528483166020820152918316908201528c35907f40d0efd1a53d60ecbf40971b9daf7dc90178c3aadc7aab1765632738fa8b8f0190606001611062565b60006001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061362057506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806108db57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316146108db565b6000818152600c6020526040902080546bffffffffffffffffffffffff166c010000000000000000000000006001600160a01b0385169081029190911790915581906136a382611c73565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166137665760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610302565b600061377183611c73565b9050806001600160a01b0316846001600160a01b031614806137b857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806113995750836001600160a01b03166137d184610973565b6001600160a01b031614949350505050565b600081602001516001600160a01b031682600001516001600160a01b03161061380b57600080fd5b815160208084015160408086015181516001600160a01b0395861681860152949092168482015262ffffff90911660608085019190915281518085038201815260808501909252815191909201207fff0000000000000000000000000000000000000000000000000000000000000060a08401529085901b6bffffffffffffffffffffffff191660a183015260b58201527fa598dd2fba360510c5a8f02f44423a4468e902df5857dbce3ca162a43a3a31ff60d582015260f50160408051601f1981840301815291905280516020909101209392505050565b6040516bffffffffffffffffffffffff19606085901b16602082015260e883811b603483015282901b6037820152600090603a016040516020818303038152906040528051906020012090505b9392505050565b6000808060001985870985870292508281108382030391505080600003613971576000841161396657600080fd5b508290049050613931565b80841161397d57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b604080516000808252602082019092526001600160a01b038416908390604051613a149190615ccc565b60006040518083038185875af1925050503d8060008114613a51576040519150601f19603f3d011682016040523d82523d6000602084013e613a56565b606091505b5050905080610b555760405162461bcd60e51b815260206004820152600360248201527f53544500000000000000000000000000000000000000000000000000000000006044820152606401610302565b6000806000806000604051806060016040528087600001516001600160a01b0316815260200187602001516001600160a01b03168152602001876040015162ffffff168152509050613b197f0000000000000000000000000000000000000000000000000000000000000000826137e3565b91506000826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015613b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7f9190615976565b50505050505090506000613b968860800151614752565b90506000613ba78960a00151614752565b9050613bbe8383838c60c001518d60e00151614a8e565b9750505050816001600160a01b0316633c8a7d8d876060015188608001518960a00151896040518060400160405280888152602001336001600160a01b0316815250604051602001613c4b9190815180516001600160a01b03908116835260208083015182168185015260409283015162ffffff1692840192909252920151909116606082015260800190565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401613c7a959493929190615ce8565b60408051808303816000875af1158015613c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cbc9190615832565b61010088015191955093508410801590613cdb57508561012001518310155b613d275760405162461bcd60e51b815260206004820152601460248201527f507269636520736c69707061676520636865636b0000000000000000000000006044820152606401610302565b509193509193565b826001600160a01b0316613d4282611c73565b6001600160a01b031614613dbe5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610302565b6001600160a01b038216613e395760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610302565b613e44838383614b52565b613e4f600082613658565b6001600160a01b0383166000908152600360205260408120805460019290613e789084906158ce565b90915550506001600160a01b0382166000908152600360205260408120805460019290613ea6908490615d36565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000613f1f82611c73565b9050613f2d81600084614b52565b613f38600083613658565b6001600160a01b0381166000908152600360205260408120805460019290613f619084906158ce565b9091555050600082815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000818152600c6020526040812080546bffffffffffffffffffffffff169082613ff183615d4e565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff169050919050565b6001600160a01b03821661408a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610302565b6000818152600260205260409020546001600160a01b0316156140ef5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610302565b6140fb60008383614b52565b6001600160a01b0382166000908152600360205260408120805460019290614124908490615d36565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160a01b0382166000908152600a602052604081205469ffffffffffffffffffff16908190036108db57600d8054760100000000000000000000000000000000000000000000900469ffffffffffffffffffff169060166141f283615d6f565b82546101009290920a69ffffffffffffffffffff8181021990931691831602179091556001600160a01b039485166000908152600a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169486169485179055928252600b8152908290208551815473ffffffffffffffffffffffffffffffffffffffff1916908816178155908501516001919091018054959092015195167fffffffffffffffffff000000000000000000000000000000000000000000000090941693909317600160a01b62ffffff90951694909402939093179091555090565b816001600160a01b0316836001600160a01b0316036143405760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610302565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6143d6848484613d2f565b6143e284848484614c0a565b612d155760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610302565b600061446083836137e3565b9050336001600160a01b038216146108db57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161480156144b85750804710155b156145e4577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561451857600080fd5b505af115801561452c573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303816000875af11580156145ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145de9190615d8e565b50612d15565b306001600160a01b03841603614604576145ff848383614610565b612d15565b612d1584848484614d90565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052915160009283929087169161469a9190615ccc565b6000604051808303816000865af19150503d80600081146146d7576040519150601f19603f3d011682016040523d82523d6000602084013e6146dc565b606091505b50915091508180156147065750805115806147065750808060200190518101906147069190615d8e565b612eff5760405162461bcd60e51b815260206004820152600260248201527f53540000000000000000000000000000000000000000000000000000000000006044820152606401610302565b60008060008360020b12614769578260020b614771565b8260020b6000035b9050620d89e88111156147b0576040517f2bc80f3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816001166000036147c757600160801b6147d9565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561480d576ffff97272373d413259a46990580e213a0260801c5b600482161561482c576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561484b576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561486a576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615614889576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156148a8576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156148c7576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156148e7576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615614907576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615614927576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615614947576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615614967576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615614987576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156149a7576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156149c7576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156149e8576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615614a08576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615614a27576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615614a44576b048a170391f7dc42444e8fa20260801c5b60008460020b1315614a65578060001981614a6157614a61615dab565b0490505b640100000000810615614a79576001614a7c565b60005b60ff16602082901c0192505050919050565b6000836001600160a01b0316856001600160a01b03161115614aae579293925b846001600160a01b0316866001600160a01b031611614ad957614ad2858585614eda565b9050614b49565b836001600160a01b0316866001600160a01b03161015614b3b576000614b00878686614eda565b90506000614b0f878986614f46565b9050806001600160801b0316826001600160801b031610614b305780614b32565b815b92505050614b49565b614b46858584614f46565b90505b95945050505050565b6001600160a01b038316614bad57614ba881600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b614bd0565b816001600160a01b0316836001600160a01b031614614bd057614bd08382614f8c565b6001600160a01b038216614be757610b5581615029565b826001600160a01b0316826001600160a01b031614610b5557610b5582826150d8565b60006001600160a01b0384163b15614d88576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290614c67903390899088908890600401615dc1565b6020604051808303816000875af1925050508015614ca2575060408051601f3d908101601f19168201909252614c9f91810190615a50565b60015b614d55573d808015614cd0576040519150601f19603f3d011682016040523d82523d6000602084013e614cd5565b606091505b508051600003614d4d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610302565b805181602001fd5b6001600160e01b0319167f150b7a0200000000000000000000000000000000000000000000000000000000149050611399565b506001611399565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790529151600092839290881691614e229190615ccc565b6000604051808303816000865af19150503d8060008114614e5f576040519150601f19603f3d011682016040523d82523d6000602084013e614e64565b606091505b5091509150818015614e8e575080511580614e8e575080806020019051810190614e8e9190615d8e565b612b2d5760405162461bcd60e51b815260206004820152600360248201527f53544600000000000000000000000000000000000000000000000000000000006044820152606401610302565b6000826001600160a01b0316846001600160a01b03161115614efa579192915b6000614f26856001600160a01b0316856001600160a01b03166c01000000000000000000000000613938565b9050614b49614f4184838888036001600160a01b0316613938565b61511c565b6000826001600160a01b0316846001600160a01b03161115614f66579192915b611399614f41836c010000000000000000000000008787036001600160a01b0316613938565b60006001614f9984611cfe565b614fa391906158ce565b600083815260076020526040902054909150808214614ff6576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061503b906001906158ce565b6000838152600960205260408120546008805493945090928490811061506357615063615a21565b90600052602060002001549050806008838154811061508457615084615a21565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806150bc576150bc615df3565b6001900381819060005260206000200160009055905550505050565b60006150e383611cfe565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b806001600160801b038116811461513257600080fd5b919050565b6001600160e01b03198116811461514d57600080fd5b50565b60006020828403121561516257600080fd5b813561393181615137565b60005b83811015615188578181015183820152602001615170565b83811115612d155750506000910152565b600081518084526151b181602086016020860161516d565b601f01601f19169290920160200192915050565b6020815260006139316020830184615199565b6000602082840312156151ea57600080fd5b5035919050565b6001600160a01b038116811461514d57600080fd5b6000806040838503121561521957600080fd5b8235615224816151f1565b946020939093013593505050565b600060a0828403121561524457600080fd5b50919050565b803562ffffff8116811461513257600080fd5b6000806000806080858703121561527357600080fd5b843561527e816151f1565b9350602085013561528e816151f1565b925061529c6040860161524a565b915060608501356152ac816151f1565b939692955090935050565b600060c0828403121561524457600080fd5b6000806000606084860312156152de57600080fd5b83356152e9816151f1565b925060208401356152f9816151f1565b929592945050506040919091013590565b60ff8116811461514d57600080fd5b60008060008060008060c0878903121561533257600080fd5b863561533d816151f1565b95506020870135945060408701359350606087013561535b8161530a565b9598949750929560808101359460a0909101359350915050565b6000806040838503121561538857600080fd5b82359150602083013561539a816151f1565b809150509250929050565b6000602082840312156153b757600080fd5b8135613931816151f1565b6000610160828403121561524457600080fd5b6bffffffffffffffffffffffff8d1681526001600160a01b038c811660208301528b811660408301528a16606082015262ffffff89166080820152600288810b60a083015287900b60c082015261018081016001600160801b03871660e0830152856101008301528461012083015261545a6101408301856001600160801b03169052565b6001600160801b0383166101608301529d9c50505050505050505050505050565b801515811461514d57600080fd5b6000806040838503121561549c57600080fd5b82356154a7816151f1565b9150602083013561539a8161547b565b600080602083850312156154ca57600080fd5b823567ffffffffffffffff808211156154e257600080fd5b818501915085601f8301126154f657600080fd5b81358181111561550557600080fd5b8660208260051b850101111561551a57600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561559f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261558d858351615199565b94509285019290850190600101615553565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156155eb576155eb6155ac565b604052919050565b600067ffffffffffffffff82111561560d5761560d6155ac565b50601f01601f191660200190565b6000806000806080858703121561563157600080fd5b843561563c816151f1565b9350602085013561564c816151f1565b925060408501359150606085013567ffffffffffffffff81111561566f57600080fd5b8501601f8101871361568057600080fd5b803561569361568e826155f3565b6155c2565b8181528860208385010111156156a857600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b600080600080606085870312156156e057600080fd5b8435935060208501359250604085013567ffffffffffffffff8082111561570657600080fd5b818701915087601f83011261571a57600080fd5b81358181111561572957600080fd5b88602082850101111561573b57600080fd5b95989497505060200194505050565b60008060006060848603121561575f57600080fd5b833561576a816151f1565b9250602084013591506040840135615781816151f1565b809150509250925092565b6000806040838503121561579f57600080fd5b82356157aa816151f1565b9150602083013561539a816151f1565b60006080828403121561524457600080fd5b600181811c908216806157e057607f821691505b60208210810361524457634e487b7160e01b600052602260045260246000fd5b6001600160801b038116811461514d57600080fd5b60006020828403121561582757600080fd5b813561393181615800565b6000806040838503121561584557600080fd5b505080516020909101519092909150565b600080600080600060a0868803121561586e57600080fd5b855161587981615800565b809550506020860151935060408601519250606086015161589981615800565b60808701519092506158aa81615800565b809150509295509295909350565b634e487b7160e01b600052601160045260246000fd5b6000828210156158e0576158e06158b8565b500390565b60006001600160801b03808316818516808303821115615907576159076158b8565b01949350505050565b60006001600160801b0383811690831681811015615930576159306158b8565b039392505050565b60006020828403121561594a57600080fd5b8151613931816151f1565b8060020b811461514d57600080fd5b805161ffff8116811461513257600080fd5b600080600080600080600060e0888a03121561599157600080fd5b875161599c816151f1565b60208901519097506159ad81615955565b95506159bb60408901615964565b94506159c960608901615964565b93506159d760808901615964565b925060a08801516159e78161530a565b60c08901519092506159f88161547b565b8091505092959891949750929550565b600060208284031215615a1a57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b8281526040602082015260006113996040830184615199565b600060208284031215615a6257600080fd5b815161393181615137565b600060208284031215615a7f57600080fd5b6139318261524a565b600060208284031215615a9a57600080fd5b813561393181615955565b600075ffffffffffffffffffffffffffffffffffffffffffff808316818103615ad057615ad06158b8565b6001019392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615b0f57600080fd5b83018035915067ffffffffffffffff821115615b2a57600080fd5b602001915036819003821315615b3f57600080fd5b9250929050565b8183823760009101908152919050565b600060208284031215615b6857600080fd5b815167ffffffffffffffff811115615b7f57600080fd5b8201601f81018413615b9057600080fd5b8051615b9e61568e826155f3565b818152856020838501011115615bb357600080fd5b614b4982602083016020860161516d565b60006000198203615bd757615bd76158b8565b5060010190565b60008183036080811215615bf157600080fd5b6040516040810167ffffffffffffffff8282108183111715615c1557615c156155ac565b816040526060841215615c2757600080fd5b60a0830193508184108185111715615c4157615c416155ac565b508260405284359250615c53836151f1565b918252602084013591615c65836151f1565b826060830152615c776040860161524a565b6080830152815260608401359150615c8e826151f1565b60208101919091529392505050565b60008060408385031215615cb057600080fd5b8251615cbb81615800565b602084015190925061539a81615800565b60008251615cde81846020870161516d565b9190910192915050565b6001600160a01b03861681528460020b60208201528360020b60408201526001600160801b038316606082015260a060808201526000615d2b60a0830184615199565b979650505050505050565b60008219821115615d4957615d496158b8565b500190565b60006bffffffffffffffffffffffff808316818103615ad057615ad06158b8565b600069ffffffffffffffffffff808316818103615ad057615ad06158b8565b600060208284031215615da057600080fd5b81516139318161547b565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b03808716835280861660208401525083604083015260806060830152614b466080830184615199565b634e487b7160e01b600052603160045260246000fdfea164736f6c634300080f000a",
  "deployedBytecode": "0x6080604052600436106102895760003560e01c80636352211e11610153578063ac9650d8116100cb578063d34879971161007f578063e985e9c511610064578063e985e9c51461082e578063f3995c6714610877578063fc6f78651461088a57600080fd5b8063d3487997146107fb578063df2ab5bb1461081b57600080fd5b8063c2e3140a116100b0578063c2e3140a14610794578063c45a0155146107a7578063c87b56dd146107db57600080fd5b8063ac9650d814610754578063b88d4fde1461077457600080fd5b8063883164561161012257806399fbab881161010757806399fbab88146106e9578063a22cb46514610721578063a4a78f0c1461074157600080fd5b8063883164561461069957806395d89b41146106d457600080fd5b80636352211e146106325780636c0360eb1461065257806370a08231146106665780637ac2ff7b1461068657600080fd5b806323b872dd1161020157806342966c68116101b557806349404b7c1161019a57806349404b7c146105cb5780634aa4a4fc146105de5780634f6ccce71461061257600080fd5b806342966c68146105a55780634659a494146105b857600080fd5b806330adf81f116101e657806330adf81f1461049b5780633644e515146104cf57806342842e0e1461058557600080fd5b806323b872dd1461045b5780632f745c591461047b57600080fd5b80630c49ccbe1161025857806313ead5621161023d57806313ead562146103f157806318160ddd14610404578063219f5d171461042357600080fd5b80630c49ccbe146103c157806312210e8a146103e957600080fd5b806301ffc9a71461031257806306fdde0314610347578063081812fc14610369578063095ea7b3146103a157600080fd5b3661030d57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461030b5760405162461bcd60e51b815260206004820152600960248201527f4e6f74205745544839000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561031e57600080fd5b5061033261032d366004615150565b61089d565b60405190151581526020015b60405180910390f35b34801561035357600080fd5b5061035c6108e1565b60405161033e91906151c5565b34801561037557600080fd5b506103896103843660046151d8565b610973565b6040516001600160a01b03909116815260200161033e565b3480156103ad57600080fd5b5061030b6103bc366004615206565b610a29565b6103d46103cf366004615232565b610b5a565b6040805192835260208301919091520161033e565b61030b611078565b6103896103ff36600461525d565b61108a565b34801561041057600080fd5b506008545b60405190815260200161033e565b6104366104313660046152b7565b6113a1565b604080516001600160801b03909416845260208401929092529082015260600161033e565b34801561046757600080fd5b5061030b6104763660046152c9565b61170f565b34801561048757600080fd5b50610415610496366004615206565b611796565b3480156104a757600080fd5b506104157f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b3480156104db57600080fd5b5061041560007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000046604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b34801561059157600080fd5b5061030b6105a03660046152c9565b61183e565b61030b6105b33660046151d8565b611859565b61030b6105c6366004615319565b611988565b61030b6105d9366004615375565b611a36565b3480156105ea57600080fd5b506103897f000000000000000000000000000000000000000000000000000000000000000081565b34801561061e57600080fd5b5061041561062d3660046151d8565b611bcf565b34801561063e57600080fd5b5061038961064d3660046151d8565b611c73565b34801561065e57600080fd5b50606061035c565b34801561067257600080fd5b506104156106813660046153a5565b611cfe565b61030b610694366004615319565b611d98565b6106ac6106a73660046153c2565b61227f565b604080519485526001600160801b03909316602085015291830152606082015260800161033e565b3480156106e057600080fd5b5061035c612817565b3480156106f557600080fd5b506107096107043660046151d8565b612826565b60405161033e9c9b9a999897969594939291906153d5565b34801561072d57600080fd5b5061030b61073c366004615489565b612a7f565b61030b61074f366004615319565b612a8e565b6107676107623660046154b7565b612b35565b60405161033e919061552c565b34801561078057600080fd5b5061030b61078f36600461561b565b612c8d565b61030b6107a2366004615319565b612d1b565b3480156107b357600080fd5b506103897f000000000000000000000000000000000000000000000000000000000000000081565b3480156107e757600080fd5b5061035c6107f63660046151d8565b612db8565b34801561080757600080fd5b5061030b6108163660046156ca565b612e88565b61030b61082936600461574a565b612f06565b34801561083a57600080fd5b5061033261084936600461578c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61030b610885366004615319565b612fed565b6103d46108983660046157ba565b61305d565b60006001600160e01b031982167f780e9d630000000000000000000000000000000000000000000000000000000014806108db57506108db826135bd565b92915050565b6060600080546108f0906157cc565b80601f016020809104026020016040519081016040528092919081815260200182805461091c906157cc565b80156109695780601f1061093e57610100808354040283529160200191610969565b820191906000526020600020905b81548152906001019060200180831161094c57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109fd5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610302565b506000908152600c60205260409020546c0100000000000000000000000090046001600160a01b031690565b6000610a3482611c73565b9050806001600160a01b0316836001600160a01b031603610abd5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610302565b336001600160a01b0382161480610ad95750610ad98133610849565b610b4b5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610302565b610b558383613658565b505050565b6000808235610b6933826136dc565b610bb55760405162461bcd60e51b815260206004820152600c60248201527f4e6f7420617070726f76656400000000000000000000000000000000000000006044820152606401610302565b608084013580421115610c0a5760405162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c64000000000000000000000000006044820152606401610302565b6000610c1c6040870160208801615815565b6001600160801b031611610c2f57600080fd5b84356000908152600c602090815260409182902060018101549092600160801b9091046001600160801b031691610c6a918901908901615815565b6001600160801b0316816001600160801b03161015610c8857600080fd5b60018281015469ffffffffffffffffffff166000908152600b60209081526040808320815160608101835281546001600160a01b039081168252919095015490811692850192909252600160a01b90910462ffffff1690830152610d0c7f0000000000000000000000000000000000000000000000000000000000000000836137e3565b60018501549091506001600160a01b0382169063a34123a7906a01000000000000000000008104600290810b91600160681b9004900b610d5260408e0160208f01615815565b6040516001600160e01b031960e086901b168152600293840b60048201529190920b60248201526001600160801b03909116604482015260640160408051808303816000875af1158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190615832565b909850965060408901358810801590610deb575088606001358710155b610e375760405162461bcd60e51b815260206004820152601460248201527f507269636520736c69707061676520636865636b0000000000000000000000006044820152606401610302565b6001840154600090610e679030906a01000000000000000000008104600290810b91600160681b9004900b6138e4565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b8152600401610e9a91815260200190565b60a060405180830381865afa158015610eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edb9190615856565b50509250925050610f09876002015483610ef591906158ce565b876001600160801b0316600160801b613938565b610f13908c6158e5565b600488018054600090610f309084906001600160801b03166158e5565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550610f67876003015482610ef591906158ce565b610f71908b6158e5565b600488018054601090610f95908490600160801b90046001600160801b03166158e5565b82546001600160801b039182166101009390930a9283029190920219909116179055506002870182905560038701819055610fd660408d0160208e01615815565b610fe09087615910565b8760010160106101000a8154816001600160801b0302191690836001600160801b031602179055508b600001357f26f6a048ee9138f2c0ce266f322cb99228e8d619ae2bff30c67f8dcf9d2377b48d60200160208101906110419190615815565b604080516001600160801b039092168252602082018f905281018d90526060015b60405180910390a2505050505050505050915091565b47156110885761108833476139ea565b565b6000836001600160a01b0316856001600160a01b0316106110aa57600080fd5b6040517f1698ee820000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152858116602483015262ffffff851660448301527f00000000000000000000000000000000000000000000000000000000000000001690631698ee8290606401602060405180830381865afa15801561113c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111609190615938565b90506001600160a01b0381166112a5576040517fa16712950000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152858116602483015262ffffff851660448301527f0000000000000000000000000000000000000000000000000000000000000000169063a1671295906064016020604051808303816000875af1158015611204573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112289190615938565b6040517ff637731d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529192509082169063f637731d90602401600060405180830381600087803b15801561128857600080fd5b505af115801561129c573d6000803e3d6000fd5b50505050611399565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa1580156112e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113099190615976565b5050505050509050806001600160a01b0316600003611397576040517ff637731d0000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015283169063f637731d90602401600060405180830381600087803b15801561137e57600080fd5b505af1158015611392573d6000803e3d6000fd5b505050505b505b949350505050565b6000808060a0840135804211156113fa5760405162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c64000000000000000000000000006044820152606401610302565b84356000908152600c6020908152604080832060018082015469ffffffffffffffffffff81168652600b855283862084516060808201875282546001600160a01b039081168352929094015480831682890190815262ffffff600160a01b9092048216838901908152885161014081018a528451861681529151909416818a01529251168287015230828501526a01000000000000000000008304600290810b608080850191909152600160681b909404900b60a0830152958c013560c0820152938b013560e0850152908a013561010084015289013561012083015292906114e290613aa7565b6001870154939a509198509650915060009061151c9030906a01000000000000000000008104600290810b91600160681b9004900b6138e4565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b815260040161154f91815260200190565b60a060405180830381865afa15801561156c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115909190615856565b505092509250506115c78660020154836115aa91906158ce565b60018801546001600160801b03600160801b918290041690613938565b6004870180546000906115e49084906001600160801b03166158e5565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555061161b8660030154826115aa91906158ce565b60048701805460109061163f908490600160801b90046001600160801b03166158e5565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550818660020181905550808660030181905550898660010160108282829054906101000a90046001600160801b031661169b91906158e5565b82546101009290920a6001600160801b0381810219909316918316021790915560408051918d168252602082018c905281018a90528c3591507f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f9060600160405180910390a2505050505050509193909250565b61171933826136dc565b61178b5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610302565b610b55838383613d2f565b60006117a183611cfe565b82106118155760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610302565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b610b5583838360405180602001604052806000815250612c8d565b8061186433826136dc565b6118b05760405162461bcd60e51b815260206004820152600c60248201527f4e6f7420617070726f76656400000000000000000000000000000000000000006044820152606401610302565b6000828152600c602052604090206001810154600160801b90046001600160801b03161580156118eb575060048101546001600160801b0316155b801561190957506004810154600160801b90046001600160801b0316155b6119555760405162461bcd60e51b815260206004820152600b60248201527f4e6f7420636c65617265640000000000000000000000000000000000000000006044820152606401610302565b6000838152600c6020526040812081815560018101829055600281018290556003810182905560040155610b5583613f14565b6040517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101869052606481018590526001608482015260ff841660a482015260c4810183905260e481018290526001600160a01b03871690638fcbaf0c90610104015b600060405180830381600087803b158015611a1657600080fd5b505af1158015611a2a573d6000803e3d6000fd5b50505050505050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ada9190615a08565b905082811015611b2c5760405162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e7420574554483900000000000000000000000000006044820152606401610302565b8015610b55576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015611bad57600080fd5b505af1158015611bc1573d6000803e3d6000fd5b50505050610b5582826139ea565b6000611bda60085490565b8210611c4e5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610302565b60088281548110611c6157611c61615a21565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806108db5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610302565b60006001600160a01b038216611d7c5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610302565b506001600160a01b031660009081526003602052604090205490565b83421115611de85760405162461bcd60e51b815260206004820152600e60248201527f5065726d697420657870697265640000000000000000000000000000000000006044820152606401610302565b6000611e9360007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000046604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad8888611ebf81613fc8565b6040805160208101959095526001600160a01b03909316928401929092526060830152608082015260a0810187905260c00160405160208183030381529060405280519060200120604051602001611f499291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506000611f6c87611c73565b9050806001600160a01b0316886001600160a01b031603611ff55760405162461bcd60e51b815260206004820152602760248201527f4552433732315065726d69743a20617070726f76616c20746f2063757272656e60448201527f74206f776e6572000000000000000000000000000000000000000000000000006064820152608401610302565b6001600160a01b0381163b1561215157604080516020810186905280820185905260f887901b7fff000000000000000000000000000000000000000000000000000000000000001660608201528151604181830301815260618201928390527f1626ba7e000000000000000000000000000000000000000000000000000000009092526001600160a01b03831691631626ba7e91612097918691606501615a37565b602060405180830381865afa1580156120b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d89190615a50565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916631626ba7e60e01b1461214c5760405162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a656400000000000000000000000000000000000000006044820152606401610302565b61226b565b6040805160008082526020820180845285905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156121a5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166122085760405162461bcd60e51b815260206004820152601160248201527f496e76616c6964207369676e61747572650000000000000000000000000000006044820152606401610302565b816001600160a01b0316816001600160a01b0316146122695760405162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a656400000000000000000000000000000000000000006044820152606401610302565b505b6122758888613658565b5050505050505050565b6000808080610140850135804211156122da5760405162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c64000000000000000000000000006044820152606401610302565b6040805161014081019091526000906123a690806122fb60208b018b6153a5565b6001600160a01b0316815260200189602001602081019061231c91906153a5565b6001600160a01b0316815260200161233a60608b0160408c01615a6d565b62ffffff16815230602082015260400161235a60808b0160608c01615a88565b60020b815260200161237260a08b0160808c01615a88565b60020b81526020018960a0013581526020018960c0013581526020018960e001358152602001896101000135815250613aa7565b9297509095509350905061244f6123c561014089016101208a016153a5565b600d805475ffffffffffffffffffffffffffffffffffffffffffff169060006123ed83615aa5565b91906101000a81548175ffffffffffffffffffffffffffffffffffffffffffff021916908375ffffffffffffffffffffffffffffffffffffffffffff16021790555075ffffffffffffffffffffffffffffffffffffffffffff16975087614034565b600061247a3061246560808b0160608c01615a88565b61247560a08c0160808d01615a88565b6138e4565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b81526004016124ad91815260200190565b60a060405180830381865afa1580156124ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ee9190615856565b5050925092505060006125678560405180606001604052808e600001602081019061251991906153a5565b6001600160a01b031681526020018e602001602081019061253a91906153a5565b6001600160a01b031681526020018e604001602081019061255b9190615a6d565b62ffffff16905261418f565b905060405180610140016040528060006bffffffffffffffffffffffff16815260200160006001600160a01b031681526020018269ffffffffffffffffffff1681526020018c60600160208101906125bf9190615a88565b60020b81526020016125d760a08e0160808f01615a88565b60020b81526020018a6001600160801b0316815260200184815260200183815260200160006001600160801b0316815260200160006001600160801b0316815250600c60008c815260200190815260200160002060008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550606082015181600101600a6101000a81548162ffffff021916908360020b62ffffff160217905550608082015181600101600d6101000a81548162ffffff021916908360020b62ffffff16021790555060a08201518160010160106101000a8154816001600160801b0302191690836001600160801b0316021790555060c0820151816002015560e082015181600301556101008201518160040160006101000a8154816001600160801b0302191690836001600160801b031602179055506101208201518160040160106101000a8154816001600160801b0302191690836001600160801b03160217905550905050897f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f8a8a8a604051612802939291906001600160801b039390931683526020830191909152604082015260600190565b60405180910390a25050505050509193509193565b6060600180546108f0906157cc565b6000818152600c6020908152604080832081516101408101835281546bffffffffffffffffffffffff811682526001600160a01b036c010000000000000000000000009091041693810193909352600181015469ffffffffffffffffffff81169284018390526a01000000000000000000008104600290810b6060860152600160681b8204810b60808601526001600160801b03600160801b92839004811660a08701529083015460c0860152600383015460e08601526004909201548083166101008601520416610120830152829182918291829182918291829182918291829182919082036129595760405162461bcd60e51b815260206004820152601060248201527f496e76616c696420746f6b656e204944000000000000000000000000000000006044820152606401610302565b6000600b6000836040015169ffffffffffffffffffff1669ffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160149054906101000a900462ffffff1662ffffff1662ffffff1681525050905081600001518260200151826000015183602001518460400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001519d509d509d509d509d509d509d509d509d509d509d509d50505091939597999b5091939597999b565b612a8a3383836142df565b5050565b6040517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152600019906001600160a01b0388169063dd62ed3e90604401602060405180830381865afa158015612af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b199190615a08565b1015612b2d57612b2d868686868686611988565b505050505050565b60608167ffffffffffffffff811115612b5057612b506155ac565b604051908082528060200260200182016040528015612b8357816020015b6060815260200190600190039081612b6e5790505b50905060005b82811015612c865760008030868685818110612ba757612ba7615a21565b9050602002810190612bb99190615ada565b604051612bc7929190615b46565b600060405180830381855af49150503d8060008114612c02576040519150601f19603f3d011682016040523d82523d6000602084013e612c07565b606091505b509150915081612c5357604481511015612c2057600080fd5b60048101905080806020019051810190612c3a9190615b56565b60405162461bcd60e51b815260040161030291906151c5565b80848481518110612c6657612c66615a21565b602002602001018190525050508080612c7e90615bc4565b915050612b89565b5092915050565b612c9733836136dc565b612d095760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610302565b612d15848484846143cb565b50505050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015285906001600160a01b0388169063dd62ed3e90604401602060405180830381865afa158015612d80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da49190615a08565b1015612b2d57612b2d868686868686612fed565b6000818152600260205260409020546060906001600160a01b0316612ddc57600080fd5b6040517fe9dc6375000000000000000000000000000000000000000000000000000000008152306004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e9dc637590604401600060405180830381865afa158015612e60573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108db9190810190615b56565b6000612e9682840184615bde565b9050612ec67f00000000000000000000000000000000000000000000000000000000000000008260000151614454565b508415612ee1578051516020820151612ee191903388614477565b8315612eff57612eff81600001516020015182602001513387614477565b5050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015612f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8a9190615a08565b905082811015612fdc5760405162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e7420746f6b656e00000000000000000000000000006044820152606401610302565b8015612d1557612d15848383614610565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c481018290526001600160a01b0387169063d505accf9060e4016119fc565b600080823561306c33826136dc565b6130b85760405162461bcd60e51b815260206004820152600c60248201527f4e6f7420617070726f76656400000000000000000000000000000000000000006044820152606401610302565b60006130ca6060860160408701615815565b6001600160801b031611806130f7575060006130ec6080860160608701615815565b6001600160801b0316115b61310057600080fd5b60008061311360408701602088016153a5565b6001600160a01b0316146131365761313160408601602087016153a5565b613138565b305b85356000908152600c6020908152604080832060018082015469ffffffffffffffffffff168552600b8452828520835160608101855281546001600160a01b039081168252919092015490811694820194909452600160a01b90930462ffffff1691830191909152929350906131ce7f0000000000000000000000000000000000000000000000000000000000000000836137e3565b600484015460018501549192506001600160801b0380821692600160801b92839004821692900416156133bf5760018501546040517fa34123a70000000000000000000000000000000000000000000000000000000081526a01000000000000000000008204600290810b6004830152600160681b90920490910b6024820152600060448201526001600160a01b0384169063a34123a79060640160408051808303816000875af1158015613287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ab9190615832565b5050600185015460009081906001600160a01b0386169063514ea4bf906132f09030906a01000000000000000000008104600290810b91600160681b9004900b6138e4565b6040518263ffffffff1660e01b815260040161330e91815260200190565b60a060405180830381865afa15801561332b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334f9190615856565b5050925092505061338687600201548361336991906158ce565b60018901546001600160801b03600160801b918290041690613938565b61339090856158e5565b93506133a587600301548261336991906158ce565b6133af90846158e5565b6002880192909255600387015590505b6000806001600160801b0384166133dc60608e0160408f01615815565b6001600160801b0316116133ff576133fa60608d0160408e01615815565b613401565b835b836001600160801b03168d606001602081019061341e9190615815565b6001600160801b0316116134415761343c60808e0160608f01615815565b613443565b835b60018901546040517f4f1eb3d80000000000000000000000000000000000000000000000000000000081526001600160a01b038c811660048301526a01000000000000000000008304600290810b6024840152600160681b90930490920b60448201526001600160801b03808516606483015283166084820152929450909250861690634f1eb3d89060a40160408051808303816000875af11580156134ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135119190615c9d565b6001600160801b039182169c5016995061352b8285615910565b6135358285615910565b6001600160801b03918216908216600160801b027fffffffffffffffffffffffffffffffff0000000000000000000000000000000016176004890155604080516001600160a01b038b1681528483166020820152918316908201528c35907f40d0efd1a53d60ecbf40971b9daf7dc90178c3aadc7aab1765632738fa8b8f0190606001611062565b60006001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061362057506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806108db57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316146108db565b6000818152600c6020526040902080546bffffffffffffffffffffffff166c010000000000000000000000006001600160a01b0385169081029190911790915581906136a382611c73565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166137665760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610302565b600061377183611c73565b9050806001600160a01b0316846001600160a01b031614806137b857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806113995750836001600160a01b03166137d184610973565b6001600160a01b031614949350505050565b600081602001516001600160a01b031682600001516001600160a01b03161061380b57600080fd5b815160208084015160408086015181516001600160a01b0395861681860152949092168482015262ffffff90911660608085019190915281518085038201815260808501909252815191909201207fff0000000000000000000000000000000000000000000000000000000000000060a08401529085901b6bffffffffffffffffffffffff191660a183015260b58201527fa598dd2fba360510c5a8f02f44423a4468e902df5857dbce3ca162a43a3a31ff60d582015260f50160408051601f1981840301815291905280516020909101209392505050565b6040516bffffffffffffffffffffffff19606085901b16602082015260e883811b603483015282901b6037820152600090603a016040516020818303038152906040528051906020012090505b9392505050565b6000808060001985870985870292508281108382030391505080600003613971576000841161396657600080fd5b508290049050613931565b80841161397d57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b604080516000808252602082019092526001600160a01b038416908390604051613a149190615ccc565b60006040518083038185875af1925050503d8060008114613a51576040519150601f19603f3d011682016040523d82523d6000602084013e613a56565b606091505b5050905080610b555760405162461bcd60e51b815260206004820152600360248201527f53544500000000000000000000000000000000000000000000000000000000006044820152606401610302565b6000806000806000604051806060016040528087600001516001600160a01b0316815260200187602001516001600160a01b03168152602001876040015162ffffff168152509050613b197f0000000000000000000000000000000000000000000000000000000000000000826137e3565b91506000826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015613b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7f9190615976565b50505050505090506000613b968860800151614752565b90506000613ba78960a00151614752565b9050613bbe8383838c60c001518d60e00151614a8e565b9750505050816001600160a01b0316633c8a7d8d876060015188608001518960a00151896040518060400160405280888152602001336001600160a01b0316815250604051602001613c4b9190815180516001600160a01b03908116835260208083015182168185015260409283015162ffffff1692840192909252920151909116606082015260800190565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401613c7a959493929190615ce8565b60408051808303816000875af1158015613c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cbc9190615832565b61010088015191955093508410801590613cdb57508561012001518310155b613d275760405162461bcd60e51b815260206004820152601460248201527f507269636520736c69707061676520636865636b0000000000000000000000006044820152606401610302565b509193509193565b826001600160a01b0316613d4282611c73565b6001600160a01b031614613dbe5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610302565b6001600160a01b038216613e395760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610302565b613e44838383614b52565b613e4f600082613658565b6001600160a01b0383166000908152600360205260408120805460019290613e789084906158ce565b90915550506001600160a01b0382166000908152600360205260408120805460019290613ea6908490615d36565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000613f1f82611c73565b9050613f2d81600084614b52565b613f38600083613658565b6001600160a01b0381166000908152600360205260408120805460019290613f619084906158ce565b9091555050600082815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000818152600c6020526040812080546bffffffffffffffffffffffff169082613ff183615d4e565b91906101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506bffffffffffffffffffffffff169050919050565b6001600160a01b03821661408a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610302565b6000818152600260205260409020546001600160a01b0316156140ef5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610302565b6140fb60008383614b52565b6001600160a01b0382166000908152600360205260408120805460019290614124908490615d36565b9091555050600081815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160a01b0382166000908152600a602052604081205469ffffffffffffffffffff16908190036108db57600d8054760100000000000000000000000000000000000000000000900469ffffffffffffffffffff169060166141f283615d6f565b82546101009290920a69ffffffffffffffffffff8181021990931691831602179091556001600160a01b039485166000908152600a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169486169485179055928252600b8152908290208551815473ffffffffffffffffffffffffffffffffffffffff1916908816178155908501516001919091018054959092015195167fffffffffffffffffff000000000000000000000000000000000000000000000090941693909317600160a01b62ffffff90951694909402939093179091555090565b816001600160a01b0316836001600160a01b0316036143405760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610302565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6143d6848484613d2f565b6143e284848484614c0a565b612d155760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610302565b600061446083836137e3565b9050336001600160a01b038216146108db57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161480156144b85750804710155b156145e4577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561451857600080fd5b505af115801561452c573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303816000875af11580156145ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145de9190615d8e565b50612d15565b306001600160a01b03841603614604576145ff848383614610565b612d15565b612d1584848484614d90565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052915160009283929087169161469a9190615ccc565b6000604051808303816000865af19150503d80600081146146d7576040519150601f19603f3d011682016040523d82523d6000602084013e6146dc565b606091505b50915091508180156147065750805115806147065750808060200190518101906147069190615d8e565b612eff5760405162461bcd60e51b815260206004820152600260248201527f53540000000000000000000000000000000000000000000000000000000000006044820152606401610302565b60008060008360020b12614769578260020b614771565b8260020b6000035b9050620d89e88111156147b0576040517f2bc80f3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816001166000036147c757600160801b6147d9565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561480d576ffff97272373d413259a46990580e213a0260801c5b600482161561482c576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561484b576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561486a576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615614889576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156148a8576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156148c7576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156148e7576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615614907576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615614927576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615614947576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615614967576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615614987576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156149a7576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156149c7576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156149e8576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615614a08576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615614a27576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615614a44576b048a170391f7dc42444e8fa20260801c5b60008460020b1315614a65578060001981614a6157614a61615dab565b0490505b640100000000810615614a79576001614a7c565b60005b60ff16602082901c0192505050919050565b6000836001600160a01b0316856001600160a01b03161115614aae579293925b846001600160a01b0316866001600160a01b031611614ad957614ad2858585614eda565b9050614b49565b836001600160a01b0316866001600160a01b03161015614b3b576000614b00878686614eda565b90506000614b0f878986614f46565b9050806001600160801b0316826001600160801b031610614b305780614b32565b815b92505050614b49565b614b46858584614f46565b90505b95945050505050565b6001600160a01b038316614bad57614ba881600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b614bd0565b816001600160a01b0316836001600160a01b031614614bd057614bd08382614f8c565b6001600160a01b038216614be757610b5581615029565b826001600160a01b0316826001600160a01b031614610b5557610b5582826150d8565b60006001600160a01b0384163b15614d88576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290614c67903390899088908890600401615dc1565b6020604051808303816000875af1925050508015614ca2575060408051601f3d908101601f19168201909252614c9f91810190615a50565b60015b614d55573d808015614cd0576040519150601f19603f3d011682016040523d82523d6000602084013e614cd5565b606091505b508051600003614d4d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610302565b805181602001fd5b6001600160e01b0319167f150b7a0200000000000000000000000000000000000000000000000000000000149050611399565b506001611399565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790529151600092839290881691614e229190615ccc565b6000604051808303816000865af19150503d8060008114614e5f576040519150601f19603f3d011682016040523d82523d6000602084013e614e64565b606091505b5091509150818015614e8e575080511580614e8e575080806020019051810190614e8e9190615d8e565b612b2d5760405162461bcd60e51b815260206004820152600360248201527f53544600000000000000000000000000000000000000000000000000000000006044820152606401610302565b6000826001600160a01b0316846001600160a01b03161115614efa579192915b6000614f26856001600160a01b0316856001600160a01b03166c01000000000000000000000000613938565b9050614b49614f4184838888036001600160a01b0316613938565b61511c565b6000826001600160a01b0316846001600160a01b03161115614f66579192915b611399614f41836c010000000000000000000000008787036001600160a01b0316613938565b60006001614f9984611cfe565b614fa391906158ce565b600083815260076020526040902054909150808214614ff6576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061503b906001906158ce565b6000838152600960205260408120546008805493945090928490811061506357615063615a21565b90600052602060002001549050806008838154811061508457615084615a21565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806150bc576150bc615df3565b6001900381819060005260206000200160009055905550505050565b60006150e383611cfe565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b806001600160801b038116811461513257600080fd5b919050565b6001600160e01b03198116811461514d57600080fd5b50565b60006020828403121561516257600080fd5b813561393181615137565b60005b83811015615188578181015183820152602001615170565b83811115612d155750506000910152565b600081518084526151b181602086016020860161516d565b601f01601f19169290920160200192915050565b6020815260006139316020830184615199565b6000602082840312156151ea57600080fd5b5035919050565b6001600160a01b038116811461514d57600080fd5b6000806040838503121561521957600080fd5b8235615224816151f1565b946020939093013593505050565b600060a0828403121561524457600080fd5b50919050565b803562ffffff8116811461513257600080fd5b6000806000806080858703121561527357600080fd5b843561527e816151f1565b9350602085013561528e816151f1565b925061529c6040860161524a565b915060608501356152ac816151f1565b939692955090935050565b600060c0828403121561524457600080fd5b6000806000606084860312156152de57600080fd5b83356152e9816151f1565b925060208401356152f9816151f1565b929592945050506040919091013590565b60ff8116811461514d57600080fd5b60008060008060008060c0878903121561533257600080fd5b863561533d816151f1565b95506020870135945060408701359350606087013561535b8161530a565b9598949750929560808101359460a0909101359350915050565b6000806040838503121561538857600080fd5b82359150602083013561539a816151f1565b809150509250929050565b6000602082840312156153b757600080fd5b8135613931816151f1565b6000610160828403121561524457600080fd5b6bffffffffffffffffffffffff8d1681526001600160a01b038c811660208301528b811660408301528a16606082015262ffffff89166080820152600288810b60a083015287900b60c082015261018081016001600160801b03871660e0830152856101008301528461012083015261545a6101408301856001600160801b03169052565b6001600160801b0383166101608301529d9c50505050505050505050505050565b801515811461514d57600080fd5b6000806040838503121561549c57600080fd5b82356154a7816151f1565b9150602083013561539a8161547b565b600080602083850312156154ca57600080fd5b823567ffffffffffffffff808211156154e257600080fd5b818501915085601f8301126154f657600080fd5b81358181111561550557600080fd5b8660208260051b850101111561551a57600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561559f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261558d858351615199565b94509285019290850190600101615553565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156155eb576155eb6155ac565b604052919050565b600067ffffffffffffffff82111561560d5761560d6155ac565b50601f01601f191660200190565b6000806000806080858703121561563157600080fd5b843561563c816151f1565b9350602085013561564c816151f1565b925060408501359150606085013567ffffffffffffffff81111561566f57600080fd5b8501601f8101871361568057600080fd5b803561569361568e826155f3565b6155c2565b8181528860208385010111156156a857600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b600080600080606085870312156156e057600080fd5b8435935060208501359250604085013567ffffffffffffffff8082111561570657600080fd5b818701915087601f83011261571a57600080fd5b81358181111561572957600080fd5b88602082850101111561573b57600080fd5b95989497505060200194505050565b60008060006060848603121561575f57600080fd5b833561576a816151f1565b9250602084013591506040840135615781816151f1565b809150509250925092565b6000806040838503121561579f57600080fd5b82356157aa816151f1565b9150602083013561539a816151f1565b60006080828403121561524457600080fd5b600181811c908216806157e057607f821691505b60208210810361524457634e487b7160e01b600052602260045260246000fd5b6001600160801b038116811461514d57600080fd5b60006020828403121561582757600080fd5b813561393181615800565b6000806040838503121561584557600080fd5b505080516020909101519092909150565b600080600080600060a0868803121561586e57600080fd5b855161587981615800565b809550506020860151935060408601519250606086015161589981615800565b60808701519092506158aa81615800565b809150509295509295909350565b634e487b7160e01b600052601160045260246000fd5b6000828210156158e0576158e06158b8565b500390565b60006001600160801b03808316818516808303821115615907576159076158b8565b01949350505050565b60006001600160801b0383811690831681811015615930576159306158b8565b039392505050565b60006020828403121561594a57600080fd5b8151613931816151f1565b8060020b811461514d57600080fd5b805161ffff8116811461513257600080fd5b600080600080600080600060e0888a03121561599157600080fd5b875161599c816151f1565b60208901519097506159ad81615955565b95506159bb60408901615964565b94506159c960608901615964565b93506159d760808901615964565b925060a08801516159e78161530a565b60c08901519092506159f88161547b565b8091505092959891949750929550565b600060208284031215615a1a57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b8281526040602082015260006113996040830184615199565b600060208284031215615a6257600080fd5b815161393181615137565b600060208284031215615a7f57600080fd5b6139318261524a565b600060208284031215615a9a57600080fd5b813561393181615955565b600075ffffffffffffffffffffffffffffffffffffffffffff808316818103615ad057615ad06158b8565b6001019392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615b0f57600080fd5b83018035915067ffffffffffffffff821115615b2a57600080fd5b602001915036819003821315615b3f57600080fd5b9250929050565b8183823760009101908152919050565b600060208284031215615b6857600080fd5b815167ffffffffffffffff811115615b7f57600080fd5b8201601f81018413615b9057600080fd5b8051615b9e61568e826155f3565b818152856020838501011115615bb357600080fd5b614b4982602083016020860161516d565b60006000198203615bd757615bd76158b8565b5060010190565b60008183036080811215615bf157600080fd5b6040516040810167ffffffffffffffff8282108183111715615c1557615c156155ac565b816040526060841215615c2757600080fd5b60a0830193508184108185111715615c4157615c416155ac565b508260405284359250615c53836151f1565b918252602084013591615c65836151f1565b826060830152615c776040860161524a565b6080830152815260608401359150615c8e826151f1565b60208101919091529392505050565b60008060408385031215615cb057600080fd5b8251615cbb81615800565b602084015190925061539a81615800565b60008251615cde81846020870161516d565b9190910192915050565b6001600160a01b03861681528460020b60208201528360020b60408201526001600160801b038316606082015260a060808201526000615d2b60a0830184615199565b979650505050505050565b60008219821115615d4957615d496158b8565b500190565b60006bffffffffffffffffffffffff808316818103615ad057615ad06158b8565b600069ffffffffffffffffffff808316818103615ad057615ad06158b8565b600060208284031215615da057600080fd5b81516139318161547b565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b03808716835280861660208401525083604083015260806060830152614b466080830184615199565b634e487b7160e01b600052603160045260246000fdfea164736f6c634300080f000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
