{
  "_format": "hh-sol-artifact-1",
  "contractName": "SummaSwapV3Manager",
  "sourceName": "contracts/mainContracts/SummaSwapV3Manager.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"
    },
    {
      "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": "_newOwner",
          "type": "address"
        }
      ],
      "name": "OwnerChanged",
      "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": [],
      "name": "_tokenDescriptor",
      "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": [
        {
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "changeOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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 ISummaSwapV3Manager.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 ISummaSwapV3Manager.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 ISummaSwapV3Manager.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": "bool",
              "name": "isLimt",
              "type": "bool"
            }
          ],
          "internalType": "struct ISummaSwapV3Manager.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": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "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": "address",
          "name": "tokenDescriptor",
          "type": "address"
        }
      ],
      "name": "setTokenDescriptor",
      "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": "summaSwapV3MintCallback",
      "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": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "unwrapWETH9",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x610100604052600e80546001600160b01b0319166001176001600160b01b0316600160b01b1790553480156200003457600080fd5b5060405162007c2938038062007c298339810160408190526200005791620002d6565b82826040518060400160405280601d81526020017f53756d6d615377617020563320506f736974696f6e73204e46542d56310000008152506040518060400160405280600a81526020016953554d2d56332d504f5360b01b815250604051806040016040528060018152602001603160f81b8152508282620000e66301ffc9a760e01b620001b260201b60201c565b8151620000fb9060069060208501906200020d565b508051620001119060079060208401906200020d565b50620001246380ac58cd60e01b620001b2565b62000136635b5e139f60e01b620001b2565b6200014863780e9d6360e01b620001b2565b50508251602093840120608052805192019190912060a052506001600160601b0319606092831b811660c052911b1660e052600a80546001600160a01b03199081163317909155600f80546001600160a01b03939093169290911691909117905550620003569050565b6001600160e01b03198082161415620001e85760405162461bcd60e51b8152600401620001df906200031f565b60405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000245576000855562000290565b82601f106200026057805160ff191683800117855562000290565b8280016001018555821562000290579182015b828111156200029057825182559160200191906001019062000273565b506200029e929150620002a2565b5090565b5b808211156200029e5760008155600101620002a3565b80516001600160a01b0381168114620002d157600080fd5b919050565b600080600060608486031215620002eb578283fd5b620002f684620002b9565b92506200030660208501620002b9565b91506200031660408501620002b9565b90509250925092565b6020808252601c908201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604082015260600190565b60805160a05160c05160601c60e05160601c61784c620003dd600039806102f25280611e475280611f7152806120065280614b405280614ba05280614c21525080610c765280610f9d5280611227528061130a528061192c52806124b05280612f5652806137945280613b1852806145aa525080611bd9525080611bb8525061784c6000f3fe6080604052600436106102d55760003560e01c806370a0823111610179578063ac9650d8116100d6578063c87b56dd1161008a578063eb44fea411610064578063eb44fea4146107cf578063f3995c67146107f2578063fc6f78651461080557610380565b8063c87b56dd1461077c578063df2ab5bb1461079c578063e985e9c5146107af57610380565b8063b88d4fde116100bb578063b88d4fde14610734578063c2e3140a14610754578063c45a01551461076757610380565b8063ac9650d8146106f4578063b6dc7ea31461071457610380565b806395d89b411161012d578063a22cb46511610112578063a22cb465146106a1578063a4a78f0c146106c1578063a6f9dae1146106d457610380565b806395d89b411461065457806399fbab881461066957610380565b806384e6f2171161015e57806384e6f2171461060a578063866b2e441461061f5780638da5cb5b1461063f57610380565b806370a08231146105d75780637ac2ff7b146105f757610380565b80632f745c59116102325780634659a494116101e65780634f6ccce7116101c05780634f6ccce7146105825780636352211e146105a25780636c0360eb146105c257610380565b80634659a4941461054757806349404b7c1461055a5780634aa4a4fc1461056d57610380565b80633644e515116102175780633644e515146104ff57806342842e0e1461051457806342966c681461053457610380565b80632f745c59146104ca57806330adf81f146104ea57610380565b806312210e8a1161028957806318160ddd1161026e57806318160ddd14610466578063219f5d171461048857806323b872dd146104aa57610380565b806312210e8a1461044b57806313ead5621461045357610380565b8063081812fc116102ba578063081812fc146103dd578063095ea7b31461040a5780630c49ccbe1461042a57610380565b806301ffc9a71461038557806306fdde03146103bb57610380565b36610380573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461037e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b34801561039157600080fd5b506103a56103a036600461664d565b610818565b6040516103b29190616da4565b60405180910390f35b3480156103c757600080fd5b506103d0610853565b6040516103b29190616eb6565b3480156103e957600080fd5b506103fd6103f8366004616957565b610907565b6040516103b29190616b19565b34801561041657600080fd5b5061037e6104253660046164fb565b61098a565b61043d610438366004616722565b610a8a565b6040516103b2929190617533565b61037e61119e565b6103fd61046136600461638e565b6111b0565b34801561047257600080fd5b5061047b611557565b6040516103b29190616daf565b61049b610496366004616733565b611568565b6040516103b2939291906174dc565b3480156104b657600080fd5b5061037e6104c53660046163e7565b611ae5565b3480156104d657600080fd5b5061047b6104e53660046164fb565b611b37565b3480156104f657600080fd5b5061047b611b6f565b34801561050b57600080fd5b5061047b611b93565b34801561052057600080fd5b5061037e61052f3660046163e7565b611c30565b61037e610542366004616957565b611c4b565b61037e610555366004616567565b611d83565b61037e61056836600461696f565b611e43565b34801561057957600080fd5b506103fd612004565b34801561058e57600080fd5b5061047b61059d366004616957565b612028565b3480156105ae57600080fd5b506103fd6105bd366004616957565b61203e565b3480156105ce57600080fd5b506103d0612066565b3480156105e357600080fd5b5061047b6105f236600461631e565b61206b565b61037e610605366004616567565b6120e8565b34801561061657600080fd5b506103fd61247f565b34801561062b57600080fd5b5061037e61063a3660046169b6565b61249b565b34801561064b57600080fd5b506103fd612519565b34801561066057600080fd5b506103d0612535565b34801561067557600080fd5b50610689610684366004616957565b6125b4565b6040516103b29c9b9a99989796959493929190617541565b3480156106ad57600080fd5b5061037e6106bc3660046164ce565b612878565b61037e6106cf366004616567565b6129b2565b3480156106e057600080fd5b5061037e6106ef36600461631e565b612a8f565b6107076107023660046165c2565b612c06565b6040516103b29190616d26565b34801561072057600080fd5b5061037e61072f36600461631e565b612d60565b34801561074057600080fd5b5061037e61074f366004616427565b612e46565b61037e610762366004616567565b612e9f565b34801561077357600080fd5b506103fd612f54565b34801561078857600080fd5b506103d0610797366004616957565b612f78565b61037e6107aa366004616526565b613056565b3480156107bb57600080fd5b506103a56107ca366004616356565b61316d565b6107e26107dd3660046167ef565b6131a8565b6040516103b29493929190617506565b61037e610800366004616567565b61390d565b61043d61081336600461670b565b6139a5565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526020819052604090205460ff165b919050565b60068054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108fd5780601f106108d2576101008083540402835291602001916108fd565b820191906000526020600020905b8154815290600101906020018083116108e057829003601f168201915b5050505050905090565b600061091282613ffc565b610951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890617276565b60405180910390fd5b506000908152600d60205260409020546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1690565b60006109958261203e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109489061739e565b8073ffffffffffffffffffffffffffffffffffffffff16610a1c614009565b73ffffffffffffffffffffffffffffffffffffffff161480610a455750610a45816107ca614009565b610a7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890617150565b610a85838361400d565b505050565b6000808235610a9933826140ab565b610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906171ad565b836080013580610add614176565b1115610b4a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b6000610b5c6040870160208801616801565b6fffffffffffffffffffffffffffffffff1611610b7857600080fd5b84356000908152600d6020908152604091829020600181015490927001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff1691610bc9918901908901616801565b6fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff161015610bf957600080fd5b60018281015469ffffffffffffffffffff166000908152600c602090815260408083208151606081018352815473ffffffffffffffffffffffffffffffffffffffff90811682529190950154908116928501929092527401000000000000000000000000000000000000000090910462ffffff1690830152610c9b7f00000000000000000000000000000000000000000000000000000000000000008361417a565b600185015490915073ffffffffffffffffffffffffffffffffffffffff82169063a34123a7906a01000000000000000000008104600290810b916d01000000000000000000000000009004900b610cf860408e0160208f01616801565b6040518463ffffffff1660e01b8152600401610d1693929190616e4e565b6040805180830381600087803b158015610d2f57600080fd5b505af1158015610d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d679190616993565b909850965060408901358810801590610d84575088606001358710155b610dba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890617330565b6001840154600090610df49030906a01000000000000000000008104600290810b916d01000000000000000000000000009004900b6142b0565b90506000808373ffffffffffffffffffffffffffffffffffffffff1663514ea4bf846040518263ffffffff1660e01b8152600401610e329190616daf565b60a06040518083038186803b158015610e4a57600080fd5b505afa158015610e5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e82919061684b565b50509250925050610ebd87600201548303876fffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061431d565b6004880180547fffffffffffffffffffffffffffffffff000000000000000000000000000000008116928e016fffffffffffffffffffffffffffffffff9182160181169290921790556003880154610f2c9190830390881670010000000000000000000000000000000061431d565b8a018760040160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055508187600201819055508087600301819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633e7954c46040518163ffffffff1660e01b815260040160206040518083038186803b15801561100157600080fd5b505afa158015611015573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611039919061633a565b73ffffffffffffffffffffffffffffffffffffffff1663190d46f6858960010160109054906101000a90046fffffffffffffffffffffffffffffffff168f600001358b600101600a9054906101000a900460020b8c600101600d9054906101000a900460020b6040518663ffffffff1660e01b81526004016110bf959493929190616c9a565b600060405180830381600087803b1580156110d957600080fd5b505af11580156110ed573d6000803e3d6000fd5b506111029250505060408d0160208e01616801565b86038760010160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055508b600001357f26f6a048ee9138f2c0ce266f322cb99228e8d619ae2bff30c67f8dcf9d2377b48d60200160208101906111779190616801565b8d8d604051611188939291906174dc565b60405180910390a2505050505050505050915091565b47156111ae576111ae33476143ea565b565b60008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16106111ea57600080fd5b6040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631698ee829061126090889088908890600401616b79565b60206040518083038186803b15801561127857600080fd5b505afa15801561128c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b0919061633a565b905073ffffffffffffffffffffffffffffffffffffffff8116611421576040517fa167129500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a16712959061134390889088908890600401616b79565b602060405180830381600087803b15801561135d57600080fd5b505af1158015611371573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611395919061633a565b6040517ff637731d00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff82169063f637731d906113ea908590600401616b19565b600060405180830381600087803b15801561140457600080fd5b505af1158015611418573d6000803e3d6000fd5b5050505061154f565b60008173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561146957600080fd5b505afa15801561147d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a191906168ac565b50505050505090508073ffffffffffffffffffffffffffffffffffffffff166000141561154d576040517ff637731d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063f637731d9061151a908690600401616b19565b600060405180830381600087803b15801561153457600080fd5b505af1158015611548573d6000803e3d6000fd5b505050505b505b949350505050565b60006115636002614538565b905090565b60008060008360a001358061157b614176565b11156115e857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b84356000908152600d6020908152604080832060018082015469ffffffffffffffffffff81168652600c8552838620845160608082018752825473ffffffffffffffffffffffffffffffffffffffff9081168352929094015480831682890190815262ffffff740100000000000000000000000000000000000000009092048216838901908152885161014081018a528451861681529151909416818a01529251168287015230828501526a01000000000000000000008304600290810b810b6080808501919091526d0100000000000000000000000000909404810b900b60a0830152958c013560c0820152938b013560e0850152908a013561010084015289013561012083015292906116fc90614543565b6001870154939a50919850965091506000906117409030906a01000000000000000000008104600290810b916d01000000000000000000000000009004900b6142b0565b90506000808373ffffffffffffffffffffffffffffffffffffffff1663514ea4bf846040518263ffffffff1660e01b815260040161177e9190616daf565b60a06040518083038186803b15801561179657600080fd5b505afa1580156117aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ce919061684b565b50509250925050611829866002015483038760010160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061431d565b6004870180546fffffffffffffffffffffffffffffffff80821690930183167fffffffffffffffffffffffffffffffff000000000000000000000000000000009091161790556003870154600188015461189e929184039170010000000000000000000000000000000091829004169061431d565b600480880180546fffffffffffffffffffffffffffffffff700100000000000000000000000000000000808304821690950181169094029316929092179091556002870183905560038701829055604080517f3e7954c4000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692633e7954c492808201926020929091829003018186803b15801561197057600080fd5b505afa158015611984573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a8919061633a565b73ffffffffffffffffffffffffffffffffffffffff1663190d46f6858860010160109054906101000a90046fffffffffffffffffffffffffffffffff168e600001358a600101600a9054906101000a900460020b8b600101600d9054906101000a900460020b6040518663ffffffff1660e01b8152600401611a2e959493929190616c9a565b600060405180830381600087803b158015611a4857600080fd5b505af1158015611a5c573d6000803e3d6000fd5b5050506001870180546fffffffffffffffffffffffffffffffff70010000000000000000000000000000000080830482168f018216029116179055506040518b35907f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f90611acf908d908d908d906174dc565b60405180910390a2505050505050509193909250565b611af6611af0614009565b826140ab565b611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906173fb565b610a858383836147d9565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260408120611b669083614976565b90505b92915050565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611c00614982565b30604051602001611c15959493929190616e7d565b60405160208183030381529060405280519060200120905090565b610a8583838360405180602001604052806000815250612e46565b80611c5633826140ab565b611c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906171ad565b6000828152600d60205260409020600181015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16158015611ce6575060048101546fffffffffffffffffffffffffffffffff16155b8015611d1a5750600481015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16155b611d50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890617458565b6000838152600d6020526040812081815560018101829055600281018290556003810182905560040155610a8583614986565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b158015611e2357600080fd5b505af1158015611e37573d6000803e3d6000fd5b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ecc57600080fd5b505afa158015611ee0573d6000803e3d6000fd5b505050506040513d6020811015611ef657600080fd5b5051905082811015611f6957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610a85577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611fe257600080fd5b505af1158015611ff6573d6000803e3d6000fd5b50505050610a8582826143ea565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080612036600284614a8b565b509392505050565b6000611b69826040518060600160405280602981526020016177f56029913960029190614aa9565b606090565b600073ffffffffffffffffffffffffffffffffffffffff82166120ba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906171e4565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020611b6990614538565b836120f1614176565b1115612129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906170bc565b6000612133611b93565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad888861215f81614ab6565b89604051602001612174959493929190616db8565b6040516020818303038152906040528051906020012060405160200161219b929190616ae3565b60405160208183030381529060405280519060200120905060006121be8761203e565b90508073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890616f94565b61222f81614b08565b15612345578073ffffffffffffffffffffffffffffffffffffffff16631626ba7e8386868960405160200161226693929190616a98565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612292929190616df1565b60206040518083038186803b1580156122aa57600080fd5b505afa1580156122be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e29190616669565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916631626ba7e60e01b14612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890616ec9565b61246b565b60006001838787876040516000815260200160405260405161236a9493929190616e0a565b6020604051602081039080840390855afa15801561238c573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612404576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890617085565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890616ec9565b505b612475888861400d565b5050505050505050565b600f5473ffffffffffffffffffffffffffffffffffffffff1681565b60006124a982840184616744565b90506124d97f00000000000000000000000000000000000000000000000000000000000000008260000151614b0e565b5084156124f45780515160208201516124f491903388614b3e565b83156125125761251281600001516020015182602001513387614b3e565b5050505050565b600a5473ffffffffffffffffffffffffffffffffffffffff1681565b60078054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108fd5780601f106108d2576101008083540402835291602001916108fd565b6000818152600d6020908152604080832081516101408101835281546bffffffffffffffffffffffff8116825273ffffffffffffffffffffffffffffffffffffffff6c010000000000000000000000009091041693810193909352600181015469ffffffffffffffffffff81169284018390526a01000000000000000000008104600290810b810b810b60608601526d01000000000000000000000000008204810b810b810b60808601526fffffffffffffffffffffffffffffffff70010000000000000000000000000000000092839004811660a08701529083015460c0860152600383015460e086015260049092015480831661010086015204166101208301528291829182918291829182918291829182918291829190612704576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890617367565b6000600c6000836040015169ffffffffffffffffffff1669ffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160149054906101000a900462ffffff1662ffffff1662ffffff1681525050905081600001518260200151826000015183602001518460400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001519d509d509d509d509d509d509d509d509d509d509d509d50505091939597999b5091939597999b565b612880614009565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109489061704e565b80600560006128f2614009565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155612961614009565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129a69190616da4565b60405180910390a35050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015612a4757600080fd5b505afa158015612a5b573d6000803e3d6000fd5b505050506040513d6020811015612a7157600080fd5b50511015612a8757612a87868686868686611d83565b505050505050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314612b1557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116612b9757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41646472657373206d757374206e6f74206265206e756c6c0000000000000000604482015290519081900360640190fd5b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf3690600090a250565b60608167ffffffffffffffff81118015612c1f57600080fd5b50604051908082528060200260200182016040528015612c5357816020015b6060815260200190600190039081612c3e5790505b50905060005b82811015612d595760008030868685818110612c7157fe5b9050602002810190612c8391906175ed565b604051612c91929190616ad3565b600060405180830381855af49150503d8060008114612ccc576040519150601f19603f3d011682016040523d82523d6000602084013e612cd1565b606091505b509150915081612d3757604481511015612cea57600080fd5b60048101905080806020019051810190612d0491906166a1565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109489190616eb6565b80848481518110612d4457fe5b60209081029190910101525050600101612c59565b5092915050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314612de657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615612e4357600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b612e57612e51614009565b836140ab565b612e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906173fb565b612e9984848484614d1c565b50505050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015612f1457600080fd5b505afa158015612f28573d6000803e3d6000fd5b505050506040513d6020811015612f3e57600080fd5b50511015612a8757612a8786868686868661390d565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060612f8382613ffc565b612f8c57600080fd5b600f546040517fe9dc637500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9dc637590612fe49030908690600401616e28565b60006040518083038186803b158015612ffc57600080fd5b505afa158015613010573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611b6991908101906166a1565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156130bf57600080fd5b505afa1580156130d3573d6000803e3d6000fd5b505050506040513d60208110156130e957600080fd5b505190508281101561315c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015612e9957612e99848383614d69565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b600080600080846101400135806131bd614176565b111561322a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b604080516101408101909152600090613310908061324b60208b018b61631e565b73ffffffffffffffffffffffffffffffffffffffff168152602001896020016020810190613279919061631e565b73ffffffffffffffffffffffffffffffffffffffff1681526020016132a460608b0160408c0161693d565b62ffffff1681523060208201526040016132c460808b0160608c01616685565b60020b81526020016132dc60a08b0160808c01616685565b60020b81526020018960a0013581526020018960c0013581526020018960e001358152602001896101000135815250614543565b9297509095509350905061338461332f61014089016101208a0161631e565b600e80547fffffffffffffffffffff000000000000000000000000000000000000000000008116600175ffffffffffffffffffffffffffffffffffffffffffff92831690810190921617909155975087614f3e565b60006133af3061339a60808b0160608c01616685565b6133aa60a08c0160808d01616685565b6142b0565b90506000808373ffffffffffffffffffffffffffffffffffffffff1663514ea4bf846040518263ffffffff1660e01b81526004016133ed9190616daf565b60a06040518083038186803b15801561340557600080fd5b505afa158015613419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343d919061684b565b5050925092505060006134d08560405180606001604052808e6000016020810190613468919061631e565b73ffffffffffffffffffffffffffffffffffffffff1681526020018e6020016020810190613496919061631e565b73ffffffffffffffffffffffffffffffffffffffff1681526020018e60400160208101906134c4919061693d565b62ffffff16905261505d565b90506040518061014001604052808c6101600160208101906134f29190616631565b6134fd576000613500565b60015b60ff1681526000602082015269ffffffffffffffffffff831660408201526060908101906135349060808f01908f01616685565b60020b815260200161354c60a08e0160808f01616685565b60020b81526020018a6fffffffffffffffffffffffffffffffff16815260200184815260200183815260200160006fffffffffffffffffffffffffffffffff16815260200160006fffffffffffffffffffffffffffffffff16815250600d60008c815260200190815260200160002060008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550606082015181600101600a6101000a81548162ffffff021916908360020b62ffffff160217905550608082015181600101600d6101000a81548162ffffff021916908360020b62ffffff16021790555060a08201518160010160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c0820151816002015560e082015181600301556101008201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506101208201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633e7954c46040518163ffffffff1660e01b815260040160206040518083038186803b1580156137f857600080fd5b505afa15801561380c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613830919061633a565b73ffffffffffffffffffffffffffffffffffffffff166370dfb307868c8e60600160208101906138609190616685565b8f60800160208101906138739190616685565b6040518563ffffffff1660e01b81526004016138929493929190616ced565b600060405180830381600087803b1580156138ac57600080fd5b505af11580156138c0573d6000803e3d6000fd5b50505050897f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f8a8a8a6040516138f8939291906174dc565b60405180910390a25050505050509193509193565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b158015611e2357600080fd5b60008082356139b433826140ab565b6139ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906171ad565b60006139fc6060860160408701616801565b6fffffffffffffffffffffffffffffffff161180613a3b57506000613a276080860160608701616801565b6fffffffffffffffffffffffffffffffff16115b613a4457600080fd5b600080613a57604087016020880161631e565b73ffffffffffffffffffffffffffffffffffffffff1614613a8757613a82604086016020870161631e565b613a89565b305b85356000908152600d6020908152604080832060018082015469ffffffffffffffffffff168552600c84528285208351606081018552815473ffffffffffffffffffffffffffffffffffffffff90811682529190920154908116948201949094527401000000000000000000000000000000000000000090930462ffffff169183019190915292935090613b3d7f00000000000000000000000000000000000000000000000000000000000000008361417a565b600484015460018501549192506fffffffffffffffffffffffffffffffff808216927001000000000000000000000000000000009283900482169290041615613ddc5760018501546040517fa34123a700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169163a34123a791613c01916a01000000000000000000008104600290810b926d0100000000000000000000000000909204900b90600090600401616e4e565b6040805180830381600087803b158015613c1a57600080fd5b505af1158015613c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c529190616993565b50506001850154600090819073ffffffffffffffffffffffffffffffffffffffff86169063514ea4bf90613cae9030906a01000000000000000000008104600290810b916d01000000000000000000000000009004900b6142b0565b6040518263ffffffff1660e01b8152600401613cca9190616daf565b60a06040518083038186803b158015613ce257600080fd5b505afa158015613cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d1a919061684b565b50509250925050613d75876002015483038860010160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061431d565b84019350613dcd876003015482038860010160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061431d565b60028801929092556003870155015b6000806fffffffffffffffffffffffffffffffff8416613e0260608e0160408f01616801565b6fffffffffffffffffffffffffffffffff1611613e2e57613e2960608d0160408e01616801565b613e30565b835b836fffffffffffffffffffffffffffffffff168d6060016020810190613e569190616801565b6fffffffffffffffffffffffffffffffff1611613e8257613e7d60808e0160608f01616801565b613e84565b835b60018901546040517f4f1eb3d800000000000000000000000000000000000000000000000000000000815292945090925073ffffffffffffffffffffffffffffffffffffffff871691634f1eb3d891613f0e918c916a01000000000000000000008104600290810b926d0100000000000000000000000000909204900b9088908890600401616c07565b6040805180830381600087803b158015613f2757600080fd5b505af1158015613f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5f919061681d565b6004890180547fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffffffffffffffffffff918216700100000000000000000000000000000000878a0384160217168689038216179091556040519281169d50169a508c35907f40d0efd1a53d60ecbf40971b9daf7dc90178c3aadc7aab1765632738fa8b8f0190611188908b9086908690616c5a565b6000611b696002836151d8565b3390565b6000818152600d6020526040902080546bffffffffffffffffffffffff166c0100000000000000000000000073ffffffffffffffffffffffffffffffffffffffff85169081029190911790915581906140658261203e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006140b682613ffc565b6140ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906170f3565b60006140f78361203e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061416657508373ffffffffffffffffffffffffffffffffffffffff1661414e84610907565b73ffffffffffffffffffffffffffffffffffffffff16145b8061154f575061154f818561316d565b4290565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16106141bc57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527faf8dc78ed6578b2701c317308cd8f379451229b6bbeb4ce4c214d96aeb334f7b60d5808301919091528251808303909101815260f5909101909152805191012090565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b16602080830191909152600285810b60e890811b60348501529085900b901b60378301528251601a818403018152603a90920190925280519101205b9392505050565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870986860292508281109083900303905080614371576000841161436657600080fd5b508290049050614316565b80841161437d57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061446157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614424565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146144c3576040519150601f19603f3d011682016040523d82523d6000602084013e6144c8565b606091505b5050905080610a8557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000611b69826151e4565b60008060008060006040518060600160405280876000015173ffffffffffffffffffffffffffffffffffffffff168152602001876020015173ffffffffffffffffffffffffffffffffffffffff168152602001876040015162ffffff1681525090506145cf7f00000000000000000000000000000000000000000000000000000000000000008261417a565b915060008273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561461957600080fd5b505afa15801561462d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061465191906168ac565b5050505050509050600061466888608001516151e8565b905060006146798960a001516151e8565b90506146908383838c60c001518d60e0015161557b565b97505050508173ffffffffffffffffffffffffffffffffffffffff16633c8a7d8d876060015188608001518960a001518960405180604001604052808881526020013373ffffffffffffffffffffffffffffffffffffffff168152506040516020016146fc919061748f565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161472b959493929190616bae565b6040805180830381600087803b15801561474457600080fd5b505af1158015614758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061477c9190616993565b6101008801519195509350841080159061479b57508561012001518310155b6147d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890617330565b509193509193565b8273ffffffffffffffffffffffffffffffffffffffff166147f98261203e565b73ffffffffffffffffffffffffffffffffffffffff1614614846576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906172d3565b73ffffffffffffffffffffffffffffffffffffffff8216614893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890616ff1565b61489e838383610a85565b6148a960008261400d565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604090206148d8908261569f565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902061490890826156ab565b50614915600282846156b7565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000611b6683836156da565b4690565b60006149918261203e565b905061499f81600084610a85565b6149aa60008361400d565b60008281526008602052604090205460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600184161502019091160415614a06576000828152600860205260408120614a0691616296565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260409020614a35908361569f565b50614a41600283615758565b50604051829060009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000808080614a9a8686615764565b909450925050505b9250929050565b600061154f8484846157f9565b6000908152600d6020526040902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000811660016bffffffffffffffffffffffff9283169081019092161790915590565b3b151590565b6000614b1a838361417a565b90503373ffffffffffffffffffffffffffffffffffffffff821614611b6957600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015614b995750804710155b15614ce2577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015614c0657600080fd5b505af1158015614c1a573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015614cb057600080fd5b505af1158015614cc4573d6000803e3d6000fd5b505050506040513d6020811015614cda57600080fd5b50612e999050565b73ffffffffffffffffffffffffffffffffffffffff8316301415614d1057614d0b848383614d69565b612e99565b612e99848484846158dd565b614d278484846147d9565b614d3384848484615aba565b612e99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890616f00565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310614e3e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614e01565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614ea0576040519150601f19603f3d011682016040523d82523d6000602084013e614ea5565b606091505b5091509150818015614ed3575080511580614ed35750808060200190516020811015614ed057600080fd5b50515b61251257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216614f8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890617241565b614f9481613ffc565b15614fcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890616f5d565b614fd760008383610a85565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902061500690826156ab565b50615013600282846156b7565b50604051819073ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600b602052604090205469ffffffffffffffffffff1680611b695750600e8054600169ffffffffffffffffffff76010000000000000000000000000000000000000000000080840482168381019092160275ffffffffffffffffffffffffffffffffffffffffffff9093169290921790925573ffffffffffffffffffffffffffffffffffffffff8085166000908152600b6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffff000000000000000000001686179055848352600c825291829020865181549085167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617825591870151950180549287015162ffffff1674010000000000000000000000000000000000000000027fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff969094169290911691909117939093161790915592915050565b6000611b668383615c27565b5490565b60008060008360020b126151ff578260020b615207565b8260020b6000035b9050620d89e881111561527b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f5400000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006001821661529c577001000000000000000000000000000000006152ae565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156152e2576ffff97272373d413259a46990580e213a0260801c5b6004821615615301576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615615320576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561533f576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561535e576fff973b41fa98c081472e6896dfb254c00260801c5b604082161561537d576fff2ea16466c96a3843ec78b326b528610260801c5b608082161561539c576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156153bc576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156153dc576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156153fc576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561541c576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561543c576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561545c576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561547c576f70d869a156d2a1b890bb3df62baf32f70260801c5b61800082161561549c576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156154bd576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156154dd576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156154fc576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615615519576b048a170391f7dc42444e8fa20260801c5b60008460020b131561555257807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8161554e57fe5b0490505b640100000000810615615566576001615569565b60005b60ff16602082901c0192505050919050565b60008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1611156155b5579293925b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16116155fa576155f3858585615c3f565b9050615696565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16101561568857600061563b878686615c3f565b9050600061564a878986615cec565b9050806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff161061567d578061567f565b815b92505050615696565b615693858584615cec565b90505b95945050505050565b6000611b668383615d59565b6000611b668383615e3d565b600061154f848473ffffffffffffffffffffffffffffffffffffffff8516615e87565b81546000908210615736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061777b6022913960400191505060405180910390fd5b82600001828154811061574557fe5b9060005260206000200154905092915050565b6000611b668383615f1e565b8154600090819083106157c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061781e6022913960400191505060405180910390fd5b60008460000184815481106157d357fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816158ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561587357818101518382015260200161585b565b50505050905090810190601f1680156158a05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508460000160018203815481106158c157fe5b9060005260206000209060020201600101549150509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b602083106159ba57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161597d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114615a1c576040519150601f19603f3d011682016040523d82523d6000602084013e615a21565b606091505b5091509150818015615a4f575080511580615a4f5750808060200190516020811015615a4c57600080fd5b50515b612a8757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000615adb8473ffffffffffffffffffffffffffffffffffffffff16614b08565b615ae75750600161154f565b6000615bbf7f150b7a0200000000000000000000000000000000000000000000000000000000615b15614009565b888787604051602401615b2b9493929190616b3a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405180606001604052806032815260200161779d6032913973ffffffffffffffffffffffffffffffffffffffff8816919061602e565b9050600081806020019051810190615bd79190616669565b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001492505050949350505050565b60009081526001919091016020526040902054151590565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115615c79579192915b6000615cbf8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000061431d565b9050615696615ce7848388880373ffffffffffffffffffffffffffffffffffffffff1661431d565b61603d565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115615d26579192915b61154f615ce7836c0100000000000000000000000087870373ffffffffffffffffffffffffffffffffffffffff1661431d565b60008181526001830160205260408120548015615e335783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083019190810190600090879083908110615daa57fe5b9060005260206000200154905080876000018481548110615dc757fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080615df757fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611b69565b6000915050611b69565b6000615e498383615c27565b615e7f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611b69565b506000611b69565b600082815260018401602052604081205480615eec575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055614316565b82856000016001830381548110615eff57fe5b9060005260206000209060020201600101819055506000915050614316565b60008181526001830160205260408120548015615e335783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083019190810190600090879083908110615f6f57fe5b9060005260206000209060020201905080876000018481548110615f8f57fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080615fce57fe5b6000828152602080822060027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9094019384020182815560019081018390559290935588815289820190925260408220919091559450611b699350505050565b606061154f848460008561605c565b806fffffffffffffffffffffffffffffffff8116811461084e57600080fd5b6060824710156160b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806177cf6026913960400191505060405180910390fd5b6160c085614b08565b61612b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061619457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101616157565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146161f6576040519150601f19603f3d011682016040523d82523d6000602084013e6161fb565b606091505b509150915061620b828286616216565b979650505050505050565b60608315616225575081614316565b8251156162355782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561587357818101518382015260200161585b565b50805460018160011615610100020316600290046000825580601f106162bc5750612e43565b601f016020900490600052602060002090810190612e4391905b808211156162ea57600081556001016162d6565b5090565b803561084e816176e0565b805161ffff8116811461084e57600080fd5b803562ffffff8116811461084e57600080fd5b60006020828403121561632f578081fd5b8135614316816176e0565b60006020828403121561634b578081fd5b8151614316816176e0565b60008060408385031215616368578081fd5b8235616373816176e0565b91506020830135616383816176e0565b809150509250929050565b600080600080608085870312156163a3578182fd5b84356163ae816176e0565b935060208501356163be816176e0565b92506163cc6040860161630b565b915060608501356163dc816176e0565b939692955090935050565b6000806000606084860312156163fb578081fd5b8335616406816176e0565b92506020840135616416816176e0565b929592945050506040919091013590565b6000806000806080858703121561643c578182fd5b8435616447816176e0565b93506020850135616457816176e0565b925060408501359150606085013567ffffffffffffffff811115616479578182fd5b8501601f81018713616489578182fd5b803561649c61649782617674565b617650565b8181528860208385010111156164b0578384fd5b81602084016020830137908101602001929092525092959194509250565b600080604083850312156164e0578182fd5b82356164eb816176e0565b9150602083013561638381617702565b6000806040838503121561650d578182fd5b8235616518816176e0565b946020939093013593505050565b60008060006060848603121561653a578081fd5b8335616545816176e0565b925060208401359150604084013561655c816176e0565b809150509250925092565b60008060008060008060c0878903121561657f578384fd5b863561658a816176e0565b9550602087013594506040870135935060608701356165a88161776b565b9598949750929560808101359460a0909101359350915050565b600080602083850312156165d4578182fd5b823567ffffffffffffffff808211156165eb578384fd5b818501915085601f8301126165fe578384fd5b81358181111561660c578485fd5b866020808302850101111561661f578485fd5b60209290920196919550909350505050565b600060208284031215616642578081fd5b813561431681617702565b60006020828403121561665e578081fd5b813561431681617710565b60006020828403121561667a578081fd5b815161431681617710565b600060208284031215616696578081fd5b81356143168161773e565b6000602082840312156166b2578081fd5b815167ffffffffffffffff8111156166c8578182fd5b8201601f810184136166d8578182fd5b80516166e661649782617674565b8181528560208385010111156166fa578384fd5b6156968260208301602086016176b4565b60006080828403121561671c578081fd5b50919050565b600060a0828403121561671c578081fd5b600060c0828403121561671c578081fd5b60008183036080811215616756578182fd5b6040516040810167ffffffffffffffff828210818311171561677457fe5b816040526060841215616785578485fd5b60a083019350818410818511171561679957fe5b5082604052843592506167ab836176e0565b9182526020840135916167bd836176e0565b8260608301526167cf6040860161630b565b608083015281526167e2606085016162ee565b6020820152949350505050565b6000610180828403121561671c578081fd5b600060208284031215616812578081fd5b81356143168161774d565b6000806040838503121561682f578182fd5b825161683a8161774d565b60208401519092506163838161774d565b600080600080600060a08688031215616862578283fd5b855161686d8161774d565b809550506020860151935060408601519250606086015161688d8161774d565b608087015190925061689e8161774d565b809150509295509295909350565b600080600080600080600060e0888a0312156168c6578485fd5b87516168d1816176e0565b60208901519097506168e28161773e565b95506168f0604089016162f9565b94506168fe606089016162f9565b935061690c608089016162f9565b925060a088015161691c8161776b565b60c089015190925061692d81617702565b8091505092959891949750929550565b60006020828403121561694e578081fd5b611b668261630b565b600060208284031215616968578081fd5b5035919050565b60008060408385031215616981578182fd5b823591506020830135616383816176e0565b600080604083850312156169a5578182fd5b505080516020909101519092909150565b600080600080606085870312156169cb578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156169f0578384fd5b818701915087601f830112616a03578384fd5b813581811115616a11578485fd5b886020828501011115616a22578485fd5b95989497505060200194505050565b60008151808452616a498160208601602086016176b4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b6fffffffffffffffffffffffffffffffff169052565b928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b6000828483379101908152919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526156936080830184616a31565b73ffffffffffffffffffffffffffffffffffffffff938416815291909216602082015262ffffff909116604082015260600190565b600073ffffffffffffffffffffffffffffffffffffffff871682528560020b60208301528460020b60408301526fffffffffffffffffffffffffffffffff8416606083015260a0608083015261620b60a0830184616a31565b73ffffffffffffffffffffffffffffffffffffffff959095168552600293840b60208601529190920b60408401526fffffffffffffffffffffffffffffffff918216606084015216608082015260a00190565b73ffffffffffffffffffffffffffffffffffffffff9390931683526fffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b73ffffffffffffffffffffffffffffffffffffffff9590951685526fffffffffffffffffffffffffffffffff9390931660208501526040840191909152600290810b60608401520b608082015260a00190565b73ffffffffffffffffffffffffffffffffffffffff9490941684526020840192909252600290810b60408401520b606082015260800190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015616d97577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452616d85858351616a31565b94509285019290850190600101616d4b565b5092979650505050505050565b901515815260200190565b90815260200190565b94855273ffffffffffffffffffffffffffffffffffffffff93909316602085015260408401919091526060830152608082015260a00190565b60008382526040602083015261154f6040830184616a31565b93845260ff9290921660208401526040830152606082015260800190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600293840b81529190920b60208201526fffffffffffffffffffffffffffffffff909116604082015260600190565b94855260208501939093526040840191909152606083015273ffffffffffffffffffffffffffffffffffffffff16608082015260a00190565b600060208252611b666020830184616a31565b6020808252600c908201527f556e617574686f72697a65640000000000000000000000000000000000000000604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527f63656976657220696d706c656d656e7465720000000000000000000000000000606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526027908201527f4552433732315065726d69743a20617070726f76616c20746f2063757272656e60408201527f74206f776e657200000000000000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460408201527f7265737300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b60208082526011908201527f496e76616c6964207369676e6174757265000000000000000000000000000000604082015260600190565b6020808252600e908201527f5065726d69742065787069726564000000000000000000000000000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252600c908201527f4e6f7420617070726f7665640000000000000000000000000000000000000000604082015260600190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560408201527f726f206164647265737300000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606082015260800190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201527f73206e6f74206f776e0000000000000000000000000000000000000000000000606082015260800190565b60208082526014908201527f507269636520736c69707061676520636865636b000000000000000000000000604082015260600190565b60208082526010908201527f496e76616c696420746f6b656e20494400000000000000000000000000000000604082015260600190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560408201527f7200000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60408201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606082015260800190565b6020808252600b908201527f4e6f7420636c6561726564000000000000000000000000000000000000000000604082015260600190565b8151805173ffffffffffffffffffffffffffffffffffffffff908116835260208083015182168185015260409283015162ffffff1692840192909252920151909116606082015260800190565b6fffffffffffffffffffffffffffffffff9390931683526020830191909152604082015260600190565b9384526fffffffffffffffffffffffffffffffff9290921660208401526040830152606082015260800190565b918252602082015260400190565b6bffffffffffffffffffffffff8d16815273ffffffffffffffffffffffffffffffffffffffff8c811660208301528b811660408301528a16606082015262ffffff89166080820152600288900b60a082015261018081016175a560c0830189616a7b565b6175b260e0830188616a82565b85610100830152846101208301526175ce610140830185616a82565b6175dc610160830184616a82565b9d9c50505050505050505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112617621578283fd5b83018035915067ffffffffffffffff82111561763b578283fd5b602001915036819003821315614aa257600080fd5b60405181810167ffffffffffffffff8111828210171561766c57fe5b604052919050565b600067ffffffffffffffff82111561768857fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110156176cf5781810151838201526020016176b7565b83811115612e995750506000910152565b73ffffffffffffffffffffffffffffffffffffffff81168114612e4357600080fd5b8015158114612e4357600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081168114612e4357600080fd5b8060020b8114612e4357600080fd5b6fffffffffffffffffffffffffffffffff81168114612e4357600080fd5b60ff81168114612e4357600080fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e6473a164736f6c6343000706000a",
  "deployedBytecode": "0x6080604052600436106102d55760003560e01c806370a0823111610179578063ac9650d8116100d6578063c87b56dd1161008a578063eb44fea411610064578063eb44fea4146107cf578063f3995c67146107f2578063fc6f78651461080557610380565b8063c87b56dd1461077c578063df2ab5bb1461079c578063e985e9c5146107af57610380565b8063b88d4fde116100bb578063b88d4fde14610734578063c2e3140a14610754578063c45a01551461076757610380565b8063ac9650d8146106f4578063b6dc7ea31461071457610380565b806395d89b411161012d578063a22cb46511610112578063a22cb465146106a1578063a4a78f0c146106c1578063a6f9dae1146106d457610380565b806395d89b411461065457806399fbab881461066957610380565b806384e6f2171161015e57806384e6f2171461060a578063866b2e441461061f5780638da5cb5b1461063f57610380565b806370a08231146105d75780637ac2ff7b146105f757610380565b80632f745c59116102325780634659a494116101e65780634f6ccce7116101c05780634f6ccce7146105825780636352211e146105a25780636c0360eb146105c257610380565b80634659a4941461054757806349404b7c1461055a5780634aa4a4fc1461056d57610380565b80633644e515116102175780633644e515146104ff57806342842e0e1461051457806342966c681461053457610380565b80632f745c59146104ca57806330adf81f146104ea57610380565b806312210e8a1161028957806318160ddd1161026e57806318160ddd14610466578063219f5d171461048857806323b872dd146104aa57610380565b806312210e8a1461044b57806313ead5621461045357610380565b8063081812fc116102ba578063081812fc146103dd578063095ea7b31461040a5780630c49ccbe1461042a57610380565b806301ffc9a71461038557806306fdde03146103bb57610380565b36610380573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461037e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742057455448390000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b34801561039157600080fd5b506103a56103a036600461664d565b610818565b6040516103b29190616da4565b60405180910390f35b3480156103c757600080fd5b506103d0610853565b6040516103b29190616eb6565b3480156103e957600080fd5b506103fd6103f8366004616957565b610907565b6040516103b29190616b19565b34801561041657600080fd5b5061037e6104253660046164fb565b61098a565b61043d610438366004616722565b610a8a565b6040516103b2929190617533565b61037e61119e565b6103fd61046136600461638e565b6111b0565b34801561047257600080fd5b5061047b611557565b6040516103b29190616daf565b61049b610496366004616733565b611568565b6040516103b2939291906174dc565b3480156104b657600080fd5b5061037e6104c53660046163e7565b611ae5565b3480156104d657600080fd5b5061047b6104e53660046164fb565b611b37565b3480156104f657600080fd5b5061047b611b6f565b34801561050b57600080fd5b5061047b611b93565b34801561052057600080fd5b5061037e61052f3660046163e7565b611c30565b61037e610542366004616957565b611c4b565b61037e610555366004616567565b611d83565b61037e61056836600461696f565b611e43565b34801561057957600080fd5b506103fd612004565b34801561058e57600080fd5b5061047b61059d366004616957565b612028565b3480156105ae57600080fd5b506103fd6105bd366004616957565b61203e565b3480156105ce57600080fd5b506103d0612066565b3480156105e357600080fd5b5061047b6105f236600461631e565b61206b565b61037e610605366004616567565b6120e8565b34801561061657600080fd5b506103fd61247f565b34801561062b57600080fd5b5061037e61063a3660046169b6565b61249b565b34801561064b57600080fd5b506103fd612519565b34801561066057600080fd5b506103d0612535565b34801561067557600080fd5b50610689610684366004616957565b6125b4565b6040516103b29c9b9a99989796959493929190617541565b3480156106ad57600080fd5b5061037e6106bc3660046164ce565b612878565b61037e6106cf366004616567565b6129b2565b3480156106e057600080fd5b5061037e6106ef36600461631e565b612a8f565b6107076107023660046165c2565b612c06565b6040516103b29190616d26565b34801561072057600080fd5b5061037e61072f36600461631e565b612d60565b34801561074057600080fd5b5061037e61074f366004616427565b612e46565b61037e610762366004616567565b612e9f565b34801561077357600080fd5b506103fd612f54565b34801561078857600080fd5b506103d0610797366004616957565b612f78565b61037e6107aa366004616526565b613056565b3480156107bb57600080fd5b506103a56107ca366004616356565b61316d565b6107e26107dd3660046167ef565b6131a8565b6040516103b29493929190617506565b61037e610800366004616567565b61390d565b61043d61081336600461670b565b6139a5565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526020819052604090205460ff165b919050565b60068054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108fd5780601f106108d2576101008083540402835291602001916108fd565b820191906000526020600020905b8154815290600101906020018083116108e057829003601f168201915b5050505050905090565b600061091282613ffc565b610951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890617276565b60405180910390fd5b506000908152600d60205260409020546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1690565b60006109958261203e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109489061739e565b8073ffffffffffffffffffffffffffffffffffffffff16610a1c614009565b73ffffffffffffffffffffffffffffffffffffffff161480610a455750610a45816107ca614009565b610a7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890617150565b610a85838361400d565b505050565b6000808235610a9933826140ab565b610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906171ad565b836080013580610add614176565b1115610b4a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b6000610b5c6040870160208801616801565b6fffffffffffffffffffffffffffffffff1611610b7857600080fd5b84356000908152600d6020908152604091829020600181015490927001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff1691610bc9918901908901616801565b6fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff161015610bf957600080fd5b60018281015469ffffffffffffffffffff166000908152600c602090815260408083208151606081018352815473ffffffffffffffffffffffffffffffffffffffff90811682529190950154908116928501929092527401000000000000000000000000000000000000000090910462ffffff1690830152610c9b7f00000000000000000000000000000000000000000000000000000000000000008361417a565b600185015490915073ffffffffffffffffffffffffffffffffffffffff82169063a34123a7906a01000000000000000000008104600290810b916d01000000000000000000000000009004900b610cf860408e0160208f01616801565b6040518463ffffffff1660e01b8152600401610d1693929190616e4e565b6040805180830381600087803b158015610d2f57600080fd5b505af1158015610d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d679190616993565b909850965060408901358810801590610d84575088606001358710155b610dba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890617330565b6001840154600090610df49030906a01000000000000000000008104600290810b916d01000000000000000000000000009004900b6142b0565b90506000808373ffffffffffffffffffffffffffffffffffffffff1663514ea4bf846040518263ffffffff1660e01b8152600401610e329190616daf565b60a06040518083038186803b158015610e4a57600080fd5b505afa158015610e5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e82919061684b565b50509250925050610ebd87600201548303876fffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061431d565b6004880180547fffffffffffffffffffffffffffffffff000000000000000000000000000000008116928e016fffffffffffffffffffffffffffffffff9182160181169290921790556003880154610f2c9190830390881670010000000000000000000000000000000061431d565b8a018760040160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055508187600201819055508087600301819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633e7954c46040518163ffffffff1660e01b815260040160206040518083038186803b15801561100157600080fd5b505afa158015611015573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611039919061633a565b73ffffffffffffffffffffffffffffffffffffffff1663190d46f6858960010160109054906101000a90046fffffffffffffffffffffffffffffffff168f600001358b600101600a9054906101000a900460020b8c600101600d9054906101000a900460020b6040518663ffffffff1660e01b81526004016110bf959493929190616c9a565b600060405180830381600087803b1580156110d957600080fd5b505af11580156110ed573d6000803e3d6000fd5b506111029250505060408d0160208e01616801565b86038760010160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055508b600001357f26f6a048ee9138f2c0ce266f322cb99228e8d619ae2bff30c67f8dcf9d2377b48d60200160208101906111779190616801565b8d8d604051611188939291906174dc565b60405180910390a2505050505050505050915091565b47156111ae576111ae33476143ea565b565b60008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16106111ea57600080fd5b6040517f1698ee8200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690631698ee829061126090889088908890600401616b79565b60206040518083038186803b15801561127857600080fd5b505afa15801561128c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b0919061633a565b905073ffffffffffffffffffffffffffffffffffffffff8116611421576040517fa167129500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a16712959061134390889088908890600401616b79565b602060405180830381600087803b15801561135d57600080fd5b505af1158015611371573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611395919061633a565b6040517ff637731d00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff82169063f637731d906113ea908590600401616b19565b600060405180830381600087803b15801561140457600080fd5b505af1158015611418573d6000803e3d6000fd5b5050505061154f565b60008173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561146957600080fd5b505afa15801561147d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a191906168ac565b50505050505090508073ffffffffffffffffffffffffffffffffffffffff166000141561154d576040517ff637731d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063f637731d9061151a908690600401616b19565b600060405180830381600087803b15801561153457600080fd5b505af1158015611548573d6000803e3d6000fd5b505050505b505b949350505050565b60006115636002614538565b905090565b60008060008360a001358061157b614176565b11156115e857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b84356000908152600d6020908152604080832060018082015469ffffffffffffffffffff81168652600c8552838620845160608082018752825473ffffffffffffffffffffffffffffffffffffffff9081168352929094015480831682890190815262ffffff740100000000000000000000000000000000000000009092048216838901908152885161014081018a528451861681529151909416818a01529251168287015230828501526a01000000000000000000008304600290810b810b6080808501919091526d0100000000000000000000000000909404810b900b60a0830152958c013560c0820152938b013560e0850152908a013561010084015289013561012083015292906116fc90614543565b6001870154939a50919850965091506000906117409030906a01000000000000000000008104600290810b916d01000000000000000000000000009004900b6142b0565b90506000808373ffffffffffffffffffffffffffffffffffffffff1663514ea4bf846040518263ffffffff1660e01b815260040161177e9190616daf565b60a06040518083038186803b15801561179657600080fd5b505afa1580156117aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ce919061684b565b50509250925050611829866002015483038760010160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061431d565b6004870180546fffffffffffffffffffffffffffffffff80821690930183167fffffffffffffffffffffffffffffffff000000000000000000000000000000009091161790556003870154600188015461189e929184039170010000000000000000000000000000000091829004169061431d565b600480880180546fffffffffffffffffffffffffffffffff700100000000000000000000000000000000808304821690950181169094029316929092179091556002870183905560038701829055604080517f3e7954c4000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692633e7954c492808201926020929091829003018186803b15801561197057600080fd5b505afa158015611984573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a8919061633a565b73ffffffffffffffffffffffffffffffffffffffff1663190d46f6858860010160109054906101000a90046fffffffffffffffffffffffffffffffff168e600001358a600101600a9054906101000a900460020b8b600101600d9054906101000a900460020b6040518663ffffffff1660e01b8152600401611a2e959493929190616c9a565b600060405180830381600087803b158015611a4857600080fd5b505af1158015611a5c573d6000803e3d6000fd5b5050506001870180546fffffffffffffffffffffffffffffffff70010000000000000000000000000000000080830482168f018216029116179055506040518b35907f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f90611acf908d908d908d906174dc565b60405180910390a2505050505050509193909250565b611af6611af0614009565b826140ab565b611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906173fb565b610a858383836147d9565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260408120611b669083614976565b90505b92915050565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611c00614982565b30604051602001611c15959493929190616e7d565b60405160208183030381529060405280519060200120905090565b610a8583838360405180602001604052806000815250612e46565b80611c5633826140ab565b611c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906171ad565b6000828152600d60205260409020600181015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16158015611ce6575060048101546fffffffffffffffffffffffffffffffff16155b8015611d1a5750600481015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16155b611d50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890617458565b6000838152600d6020526040812081815560018101829055600281018290556003810182905560040155610a8583614986565b604080517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e48101839052905173ffffffffffffffffffffffffffffffffffffffff881691638fcbaf0c9161010480830192600092919082900301818387803b158015611e2357600080fd5b505af1158015611e37573d6000803e3d6000fd5b50505050505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ecc57600080fd5b505afa158015611ee0573d6000803e3d6000fd5b505050506040513d6020811015611ef657600080fd5b5051905082811015611f6957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e742057455448390000000000000000000000000000604482015290519081900360640190fd5b8015610a85577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611fe257600080fd5b505af1158015611ff6573d6000803e3d6000fd5b50505050610a8582826143ea565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080612036600284614a8b565b509392505050565b6000611b69826040518060600160405280602981526020016177f56029913960029190614aa9565b606090565b600073ffffffffffffffffffffffffffffffffffffffff82166120ba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906171e4565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020611b6990614538565b836120f1614176565b1115612129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906170bc565b6000612133611b93565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad888861215f81614ab6565b89604051602001612174959493929190616db8565b6040516020818303038152906040528051906020012060405160200161219b929190616ae3565b60405160208183030381529060405280519060200120905060006121be8761203e565b90508073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890616f94565b61222f81614b08565b15612345578073ffffffffffffffffffffffffffffffffffffffff16631626ba7e8386868960405160200161226693929190616a98565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401612292929190616df1565b60206040518083038186803b1580156122aa57600080fd5b505afa1580156122be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e29190616669565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916631626ba7e60e01b14612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890616ec9565b61246b565b60006001838787876040516000815260200160405260405161236a9493929190616e0a565b6020604051602081039080840390855afa15801561238c573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612404576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890617085565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890616ec9565b505b612475888861400d565b5050505050505050565b600f5473ffffffffffffffffffffffffffffffffffffffff1681565b60006124a982840184616744565b90506124d97f00000000000000000000000000000000000000000000000000000000000000008260000151614b0e565b5084156124f45780515160208201516124f491903388614b3e565b83156125125761251281600001516020015182602001513387614b3e565b5050505050565b600a5473ffffffffffffffffffffffffffffffffffffffff1681565b60078054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108fd5780601f106108d2576101008083540402835291602001916108fd565b6000818152600d6020908152604080832081516101408101835281546bffffffffffffffffffffffff8116825273ffffffffffffffffffffffffffffffffffffffff6c010000000000000000000000009091041693810193909352600181015469ffffffffffffffffffff81169284018390526a01000000000000000000008104600290810b810b810b60608601526d01000000000000000000000000008204810b810b810b60808601526fffffffffffffffffffffffffffffffff70010000000000000000000000000000000092839004811660a08701529083015460c0860152600383015460e086015260049092015480831661010086015204166101208301528291829182918291829182918291829182918291829190612704576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890617367565b6000600c6000836040015169ffffffffffffffffffff1669ffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160149054906101000a900462ffffff1662ffffff1662ffffff1681525050905081600001518260200151826000015183602001518460400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001519d509d509d509d509d509d509d509d509d509d509d509d50505091939597999b5091939597999b565b612880614009565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109489061704e565b80600560006128f2614009565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155612961614009565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129a69190616da4565b60405180910390a35050565b604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015612a4757600080fd5b505afa158015612a5b573d6000803e3d6000fd5b505050506040513d6020811015612a7157600080fd5b50511015612a8757612a87868686868686611d83565b505050505050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314612b1557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116612b9757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41646472657373206d757374206e6f74206265206e756c6c0000000000000000604482015290519081900360640190fd5b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf3690600090a250565b60608167ffffffffffffffff81118015612c1f57600080fd5b50604051908082528060200260200182016040528015612c5357816020015b6060815260200190600190039081612c3e5790505b50905060005b82811015612d595760008030868685818110612c7157fe5b9050602002810190612c8391906175ed565b604051612c91929190616ad3565b600060405180830381855af49150503d8060008114612ccc576040519150601f19603f3d011682016040523d82523d6000602084013e612cd1565b606091505b509150915081612d3757604481511015612cea57600080fd5b60048101905080806020019051810190612d0491906166a1565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109489190616eb6565b80848481518110612d4457fe5b60209081029190910101525050600101612c59565b5092915050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314612de657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d757374206265206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615612e4357600f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555b50565b612e57612e51614009565b836140ab565b612e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906173fb565b612e9984848484614d1c565b50505050565b604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201529051869173ffffffffffffffffffffffffffffffffffffffff89169163dd62ed3e91604480820192602092909190829003018186803b158015612f1457600080fd5b505afa158015612f28573d6000803e3d6000fd5b505050506040513d6020811015612f3e57600080fd5b50511015612a8757612a8786868686868661390d565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060612f8382613ffc565b612f8c57600080fd5b600f546040517fe9dc637500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9dc637590612fe49030908690600401616e28565b60006040518083038186803b158015612ffc57600080fd5b505afa158015613010573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611b6991908101906166a1565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156130bf57600080fd5b505afa1580156130d3573d6000803e3d6000fd5b505050506040513d60208110156130e957600080fd5b505190508281101561315c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e73756666696369656e7420746f6b656e0000000000000000000000000000604482015290519081900360640190fd5b8015612e9957612e99848383614d69565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b600080600080846101400135806131bd614176565b111561322a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c6400000000000000000000000000604482015290519081900360640190fd5b604080516101408101909152600090613310908061324b60208b018b61631e565b73ffffffffffffffffffffffffffffffffffffffff168152602001896020016020810190613279919061631e565b73ffffffffffffffffffffffffffffffffffffffff1681526020016132a460608b0160408c0161693d565b62ffffff1681523060208201526040016132c460808b0160608c01616685565b60020b81526020016132dc60a08b0160808c01616685565b60020b81526020018960a0013581526020018960c0013581526020018960e001358152602001896101000135815250614543565b9297509095509350905061338461332f61014089016101208a0161631e565b600e80547fffffffffffffffffffff000000000000000000000000000000000000000000008116600175ffffffffffffffffffffffffffffffffffffffffffff92831690810190921617909155975087614f3e565b60006133af3061339a60808b0160608c01616685565b6133aa60a08c0160808d01616685565b6142b0565b90506000808373ffffffffffffffffffffffffffffffffffffffff1663514ea4bf846040518263ffffffff1660e01b81526004016133ed9190616daf565b60a06040518083038186803b15801561340557600080fd5b505afa158015613419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343d919061684b565b5050925092505060006134d08560405180606001604052808e6000016020810190613468919061631e565b73ffffffffffffffffffffffffffffffffffffffff1681526020018e6020016020810190613496919061631e565b73ffffffffffffffffffffffffffffffffffffffff1681526020018e60400160208101906134c4919061693d565b62ffffff16905261505d565b90506040518061014001604052808c6101600160208101906134f29190616631565b6134fd576000613500565b60015b60ff1681526000602082015269ffffffffffffffffffff831660408201526060908101906135349060808f01908f01616685565b60020b815260200161354c60a08e0160808f01616685565b60020b81526020018a6fffffffffffffffffffffffffffffffff16815260200184815260200183815260200160006fffffffffffffffffffffffffffffffff16815260200160006fffffffffffffffffffffffffffffffff16815250600d60008c815260200190815260200160002060008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550606082015181600101600a6101000a81548162ffffff021916908360020b62ffffff160217905550608082015181600101600d6101000a81548162ffffff021916908360020b62ffffff16021790555060a08201518160010160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060c0820151816002015560e082015181600301556101008201518160040160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506101208201518160040160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633e7954c46040518163ffffffff1660e01b815260040160206040518083038186803b1580156137f857600080fd5b505afa15801561380c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613830919061633a565b73ffffffffffffffffffffffffffffffffffffffff166370dfb307868c8e60600160208101906138609190616685565b8f60800160208101906138739190616685565b6040518563ffffffff1660e01b81526004016138929493929190616ced565b600060405180830381600087803b1580156138ac57600080fd5b505af11580156138c0573d6000803e3d6000fd5b50505050897f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f8a8a8a6040516138f8939291906174dc565b60405180910390a25050505050509193509193565b604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c48101839052905173ffffffffffffffffffffffffffffffffffffffff88169163d505accf9160e480830192600092919082900301818387803b158015611e2357600080fd5b60008082356139b433826140ab565b6139ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906171ad565b60006139fc6060860160408701616801565b6fffffffffffffffffffffffffffffffff161180613a3b57506000613a276080860160608701616801565b6fffffffffffffffffffffffffffffffff16115b613a4457600080fd5b600080613a57604087016020880161631e565b73ffffffffffffffffffffffffffffffffffffffff1614613a8757613a82604086016020870161631e565b613a89565b305b85356000908152600d6020908152604080832060018082015469ffffffffffffffffffff168552600c84528285208351606081018552815473ffffffffffffffffffffffffffffffffffffffff90811682529190920154908116948201949094527401000000000000000000000000000000000000000090930462ffffff169183019190915292935090613b3d7f00000000000000000000000000000000000000000000000000000000000000008361417a565b600484015460018501549192506fffffffffffffffffffffffffffffffff808216927001000000000000000000000000000000009283900482169290041615613ddc5760018501546040517fa34123a700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169163a34123a791613c01916a01000000000000000000008104600290810b926d0100000000000000000000000000909204900b90600090600401616e4e565b6040805180830381600087803b158015613c1a57600080fd5b505af1158015613c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c529190616993565b50506001850154600090819073ffffffffffffffffffffffffffffffffffffffff86169063514ea4bf90613cae9030906a01000000000000000000008104600290810b916d01000000000000000000000000009004900b6142b0565b6040518263ffffffff1660e01b8152600401613cca9190616daf565b60a06040518083038186803b158015613ce257600080fd5b505afa158015613cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d1a919061684b565b50509250925050613d75876002015483038860010160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061431d565b84019350613dcd876003015482038860010160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061431d565b60028801929092556003870155015b6000806fffffffffffffffffffffffffffffffff8416613e0260608e0160408f01616801565b6fffffffffffffffffffffffffffffffff1611613e2e57613e2960608d0160408e01616801565b613e30565b835b836fffffffffffffffffffffffffffffffff168d6060016020810190613e569190616801565b6fffffffffffffffffffffffffffffffff1611613e8257613e7d60808e0160608f01616801565b613e84565b835b60018901546040517f4f1eb3d800000000000000000000000000000000000000000000000000000000815292945090925073ffffffffffffffffffffffffffffffffffffffff871691634f1eb3d891613f0e918c916a01000000000000000000008104600290810b926d0100000000000000000000000000909204900b9088908890600401616c07565b6040805180830381600087803b158015613f2757600080fd5b505af1158015613f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5f919061681d565b6004890180547fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffffffffffffffffffff918216700100000000000000000000000000000000878a0384160217168689038216179091556040519281169d50169a508c35907f40d0efd1a53d60ecbf40971b9daf7dc90178c3aadc7aab1765632738fa8b8f0190611188908b9086908690616c5a565b6000611b696002836151d8565b3390565b6000818152600d6020526040902080546bffffffffffffffffffffffff166c0100000000000000000000000073ffffffffffffffffffffffffffffffffffffffff85169081029190911790915581906140658261203e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006140b682613ffc565b6140ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906170f3565b60006140f78361203e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061416657508373ffffffffffffffffffffffffffffffffffffffff1661414e84610907565b73ffffffffffffffffffffffffffffffffffffffff16145b8061154f575061154f818561316d565b4290565b6000816020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16106141bc57600080fd5b508051602080830151604093840151845173ffffffffffffffffffffffffffffffffffffffff94851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660a183015260b58201939093527faf8dc78ed6578b2701c317308cd8f379451229b6bbeb4ce4c214d96aeb334f7b60d5808301919091528251808303909101815260f5909101909152805191012090565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b16602080830191909152600285810b60e890811b60348501529085900b901b60378301528251601a818403018152603a90920190925280519101205b9392505050565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870986860292508281109083900303905080614371576000841161436657600080fd5b508290049050614316565b80841161437d57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b6020831061446157805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614424565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146144c3576040519150601f19603f3d011682016040523d82523d6000602084013e6144c8565b606091505b5050905080610a8557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354450000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000611b69826151e4565b60008060008060006040518060600160405280876000015173ffffffffffffffffffffffffffffffffffffffff168152602001876020015173ffffffffffffffffffffffffffffffffffffffff168152602001876040015162ffffff1681525090506145cf7f00000000000000000000000000000000000000000000000000000000000000008261417a565b915060008273ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561461957600080fd5b505afa15801561462d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061465191906168ac565b5050505050509050600061466888608001516151e8565b905060006146798960a001516151e8565b90506146908383838c60c001518d60e0015161557b565b97505050508173ffffffffffffffffffffffffffffffffffffffff16633c8a7d8d876060015188608001518960a001518960405180604001604052808881526020013373ffffffffffffffffffffffffffffffffffffffff168152506040516020016146fc919061748f565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161472b959493929190616bae565b6040805180830381600087803b15801561474457600080fd5b505af1158015614758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061477c9190616993565b6101008801519195509350841080159061479b57508561012001518310155b6147d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890617330565b509193509193565b8273ffffffffffffffffffffffffffffffffffffffff166147f98261203e565b73ffffffffffffffffffffffffffffffffffffffff1614614846576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610948906172d3565b73ffffffffffffffffffffffffffffffffffffffff8216614893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890616ff1565b61489e838383610a85565b6148a960008261400d565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604090206148d8908261569f565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902061490890826156ab565b50614915600282846156b7565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000611b6683836156da565b4690565b60006149918261203e565b905061499f81600084610a85565b6149aa60008361400d565b60008281526008602052604090205460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600184161502019091160415614a06576000828152600860205260408120614a0691616296565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260409020614a35908361569f565b50614a41600283615758565b50604051829060009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000808080614a9a8686615764565b909450925050505b9250929050565b600061154f8484846157f9565b6000908152600d6020526040902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000811660016bffffffffffffffffffffffff9283169081019092161790915590565b3b151590565b6000614b1a838361417a565b90503373ffffffffffffffffffffffffffffffffffffffff821614611b6957600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015614b995750804710155b15614ce2577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015614c0657600080fd5b505af1158015614c1a573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015614cb057600080fd5b505af1158015614cc4573d6000803e3d6000fd5b505050506040513d6020811015614cda57600080fd5b50612e999050565b73ffffffffffffffffffffffffffffffffffffffff8316301415614d1057614d0b848383614d69565b612e99565b612e99848484846158dd565b614d278484846147d9565b614d3384848484615aba565b612e99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890616f00565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251825160009485949389169392918291908083835b60208310614e3e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614e01565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614ea0576040519150601f19603f3d011682016040523d82523d6000602084013e614ea5565b606091505b5091509150818015614ed3575080511580614ed35750808060200190516020811015614ed057600080fd5b50515b61251257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f5354000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216614f8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890617241565b614f9481613ffc565b15614fcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094890616f5d565b614fd760008383610a85565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902061500690826156ab565b50615013600282846156b7565b50604051819073ffffffffffffffffffffffffffffffffffffffff8416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600b602052604090205469ffffffffffffffffffff1680611b695750600e8054600169ffffffffffffffffffff76010000000000000000000000000000000000000000000080840482168381019092160275ffffffffffffffffffffffffffffffffffffffffffff9093169290921790925573ffffffffffffffffffffffffffffffffffffffff8085166000908152600b6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffff000000000000000000001686179055848352600c825291829020865181549085167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617825591870151950180549287015162ffffff1674010000000000000000000000000000000000000000027fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff969094169290911691909117939093161790915592915050565b6000611b668383615c27565b5490565b60008060008360020b126151ff578260020b615207565b8260020b6000035b9050620d89e881111561527b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f5400000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006001821661529c577001000000000000000000000000000000006152ae565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156152e2576ffff97272373d413259a46990580e213a0260801c5b6004821615615301576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615615320576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561533f576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561535e576fff973b41fa98c081472e6896dfb254c00260801c5b604082161561537d576fff2ea16466c96a3843ec78b326b528610260801c5b608082161561539c576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156153bc576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156153dc576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156153fc576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561541c576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561543c576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561545c576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561547c576f70d869a156d2a1b890bb3df62baf32f70260801c5b61800082161561549c576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156154bd576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156154dd576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156154fc576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615615519576b048a170391f7dc42444e8fa20260801c5b60008460020b131561555257807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8161554e57fe5b0490505b640100000000810615615566576001615569565b60005b60ff16602082901c0192505050919050565b60008373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1611156155b5579293925b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16116155fa576155f3858585615c3f565b9050615696565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16101561568857600061563b878686615c3f565b9050600061564a878986615cec565b9050806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff161061567d578061567f565b815b92505050615696565b615693858584615cec565b90505b95945050505050565b6000611b668383615d59565b6000611b668383615e3d565b600061154f848473ffffffffffffffffffffffffffffffffffffffff8516615e87565b81546000908210615736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061777b6022913960400191505060405180910390fd5b82600001828154811061574557fe5b9060005260206000200154905092915050565b6000611b668383615f1e565b8154600090819083106157c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061781e6022913960400191505060405180910390fd5b60008460000184815481106157d357fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816158ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561587357818101518382015260200161585b565b50505050905090810190601f1680156158a05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b508460000160018203815481106158c157fe5b9060005260206000209060020201600101549150509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b602083106159ba57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161597d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114615a1c576040519150601f19603f3d011682016040523d82523d6000602084013e615a21565b606091505b5091509150818015615a4f575080511580615a4f5750808060200190516020811015615a4c57600080fd5b50515b612a8757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f5354460000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000615adb8473ffffffffffffffffffffffffffffffffffffffff16614b08565b615ae75750600161154f565b6000615bbf7f150b7a0200000000000000000000000000000000000000000000000000000000615b15614009565b888787604051602401615b2b9493929190616b3a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405180606001604052806032815260200161779d6032913973ffffffffffffffffffffffffffffffffffffffff8816919061602e565b9050600081806020019051810190615bd79190616669565b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001492505050949350505050565b60009081526001919091016020526040902054151590565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115615c79579192915b6000615cbf8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000061431d565b9050615696615ce7848388880373ffffffffffffffffffffffffffffffffffffffff1661431d565b61603d565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115615d26579192915b61154f615ce7836c0100000000000000000000000087870373ffffffffffffffffffffffffffffffffffffffff1661431d565b60008181526001830160205260408120548015615e335783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083019190810190600090879083908110615daa57fe5b9060005260206000200154905080876000018481548110615dc757fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080615df757fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611b69565b6000915050611b69565b6000615e498383615c27565b615e7f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611b69565b506000611b69565b600082815260018401602052604081205480615eec575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055614316565b82856000016001830381548110615eff57fe5b9060005260206000209060020201600101819055506000915050614316565b60008181526001830160205260408120548015615e335783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083019190810190600090879083908110615f6f57fe5b9060005260206000209060020201905080876000018481548110615f8f57fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080615fce57fe5b6000828152602080822060027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9094019384020182815560019081018390559290935588815289820190925260408220919091559450611b699350505050565b606061154f848460008561605c565b806fffffffffffffffffffffffffffffffff8116811461084e57600080fd5b6060824710156160b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806177cf6026913960400191505060405180910390fd5b6160c085614b08565b61612b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061619457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101616157565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146161f6576040519150601f19603f3d011682016040523d82523d6000602084013e6161fb565b606091505b509150915061620b828286616216565b979650505050505050565b60608315616225575081614316565b8251156162355782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561587357818101518382015260200161585b565b50805460018160011615610100020316600290046000825580601f106162bc5750612e43565b601f016020900490600052602060002090810190612e4391905b808211156162ea57600081556001016162d6565b5090565b803561084e816176e0565b805161ffff8116811461084e57600080fd5b803562ffffff8116811461084e57600080fd5b60006020828403121561632f578081fd5b8135614316816176e0565b60006020828403121561634b578081fd5b8151614316816176e0565b60008060408385031215616368578081fd5b8235616373816176e0565b91506020830135616383816176e0565b809150509250929050565b600080600080608085870312156163a3578182fd5b84356163ae816176e0565b935060208501356163be816176e0565b92506163cc6040860161630b565b915060608501356163dc816176e0565b939692955090935050565b6000806000606084860312156163fb578081fd5b8335616406816176e0565b92506020840135616416816176e0565b929592945050506040919091013590565b6000806000806080858703121561643c578182fd5b8435616447816176e0565b93506020850135616457816176e0565b925060408501359150606085013567ffffffffffffffff811115616479578182fd5b8501601f81018713616489578182fd5b803561649c61649782617674565b617650565b8181528860208385010111156164b0578384fd5b81602084016020830137908101602001929092525092959194509250565b600080604083850312156164e0578182fd5b82356164eb816176e0565b9150602083013561638381617702565b6000806040838503121561650d578182fd5b8235616518816176e0565b946020939093013593505050565b60008060006060848603121561653a578081fd5b8335616545816176e0565b925060208401359150604084013561655c816176e0565b809150509250925092565b60008060008060008060c0878903121561657f578384fd5b863561658a816176e0565b9550602087013594506040870135935060608701356165a88161776b565b9598949750929560808101359460a0909101359350915050565b600080602083850312156165d4578182fd5b823567ffffffffffffffff808211156165eb578384fd5b818501915085601f8301126165fe578384fd5b81358181111561660c578485fd5b866020808302850101111561661f578485fd5b60209290920196919550909350505050565b600060208284031215616642578081fd5b813561431681617702565b60006020828403121561665e578081fd5b813561431681617710565b60006020828403121561667a578081fd5b815161431681617710565b600060208284031215616696578081fd5b81356143168161773e565b6000602082840312156166b2578081fd5b815167ffffffffffffffff8111156166c8578182fd5b8201601f810184136166d8578182fd5b80516166e661649782617674565b8181528560208385010111156166fa578384fd5b6156968260208301602086016176b4565b60006080828403121561671c578081fd5b50919050565b600060a0828403121561671c578081fd5b600060c0828403121561671c578081fd5b60008183036080811215616756578182fd5b6040516040810167ffffffffffffffff828210818311171561677457fe5b816040526060841215616785578485fd5b60a083019350818410818511171561679957fe5b5082604052843592506167ab836176e0565b9182526020840135916167bd836176e0565b8260608301526167cf6040860161630b565b608083015281526167e2606085016162ee565b6020820152949350505050565b6000610180828403121561671c578081fd5b600060208284031215616812578081fd5b81356143168161774d565b6000806040838503121561682f578182fd5b825161683a8161774d565b60208401519092506163838161774d565b600080600080600060a08688031215616862578283fd5b855161686d8161774d565b809550506020860151935060408601519250606086015161688d8161774d565b608087015190925061689e8161774d565b809150509295509295909350565b600080600080600080600060e0888a0312156168c6578485fd5b87516168d1816176e0565b60208901519097506168e28161773e565b95506168f0604089016162f9565b94506168fe606089016162f9565b935061690c608089016162f9565b925060a088015161691c8161776b565b60c089015190925061692d81617702565b8091505092959891949750929550565b60006020828403121561694e578081fd5b611b668261630b565b600060208284031215616968578081fd5b5035919050565b60008060408385031215616981578182fd5b823591506020830135616383816176e0565b600080604083850312156169a5578182fd5b505080516020909101519092909150565b600080600080606085870312156169cb578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156169f0578384fd5b818701915087601f830112616a03578384fd5b813581811115616a11578485fd5b886020828501011115616a22578485fd5b95989497505060200194505050565b60008151808452616a498160208601602086016176b4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60020b9052565b6fffffffffffffffffffffffffffffffff169052565b928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b6000828483379101908152919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526156936080830184616a31565b73ffffffffffffffffffffffffffffffffffffffff938416815291909216602082015262ffffff909116604082015260600190565b600073ffffffffffffffffffffffffffffffffffffffff871682528560020b60208301528460020b60408301526fffffffffffffffffffffffffffffffff8416606083015260a0608083015261620b60a0830184616a31565b73ffffffffffffffffffffffffffffffffffffffff959095168552600293840b60208601529190920b60408401526fffffffffffffffffffffffffffffffff918216606084015216608082015260a00190565b73ffffffffffffffffffffffffffffffffffffffff9390931683526fffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b73ffffffffffffffffffffffffffffffffffffffff9590951685526fffffffffffffffffffffffffffffffff9390931660208501526040840191909152600290810b60608401520b608082015260a00190565b73ffffffffffffffffffffffffffffffffffffffff9490941684526020840192909252600290810b60408401520b606082015260800190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015616d97577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452616d85858351616a31565b94509285019290850190600101616d4b565b5092979650505050505050565b901515815260200190565b90815260200190565b94855273ffffffffffffffffffffffffffffffffffffffff93909316602085015260408401919091526060830152608082015260a00190565b60008382526040602083015261154f6040830184616a31565b93845260ff9290921660208401526040830152606082015260800190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b600293840b81529190920b60208201526fffffffffffffffffffffffffffffffff909116604082015260600190565b94855260208501939093526040840191909152606083015273ffffffffffffffffffffffffffffffffffffffff16608082015260a00190565b600060208252611b666020830184616a31565b6020808252600c908201527f556e617574686f72697a65640000000000000000000000000000000000000000604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527f63656976657220696d706c656d656e7465720000000000000000000000000000606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526027908201527f4552433732315065726d69743a20617070726f76616c20746f2063757272656e60408201527f74206f776e657200000000000000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460408201527f7265737300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b60208082526011908201527f496e76616c6964207369676e6174757265000000000000000000000000000000604082015260600190565b6020808252600e908201527f5065726d69742065787069726564000000000000000000000000000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252600c908201527f4e6f7420617070726f7665640000000000000000000000000000000000000000604082015260600190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560408201527f726f206164647265737300000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201527f697374656e7420746f6b656e0000000000000000000000000000000000000000606082015260800190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201527f73206e6f74206f776e0000000000000000000000000000000000000000000000606082015260800190565b60208082526014908201527f507269636520736c69707061676520636865636b000000000000000000000000604082015260600190565b60208082526010908201527f496e76616c696420746f6b656e20494400000000000000000000000000000000604082015260600190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560408201527f7200000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60408201527f776e6572206e6f7220617070726f766564000000000000000000000000000000606082015260800190565b6020808252600b908201527f4e6f7420636c6561726564000000000000000000000000000000000000000000604082015260600190565b8151805173ffffffffffffffffffffffffffffffffffffffff908116835260208083015182168185015260409283015162ffffff1692840192909252920151909116606082015260800190565b6fffffffffffffffffffffffffffffffff9390931683526020830191909152604082015260600190565b9384526fffffffffffffffffffffffffffffffff9290921660208401526040830152606082015260800190565b918252602082015260400190565b6bffffffffffffffffffffffff8d16815273ffffffffffffffffffffffffffffffffffffffff8c811660208301528b811660408301528a16606082015262ffffff89166080820152600288900b60a082015261018081016175a560c0830189616a7b565b6175b260e0830188616a82565b85610100830152846101208301526175ce610140830185616a82565b6175dc610160830184616a82565b9d9c50505050505050505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112617621578283fd5b83018035915067ffffffffffffffff82111561763b578283fd5b602001915036819003821315614aa257600080fd5b60405181810167ffffffffffffffff8111828210171561766c57fe5b604052919050565b600067ffffffffffffffff82111561768857fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b838110156176cf5781810151838201526020016176b7565b83811115612e995750506000910152565b73ffffffffffffffffffffffffffffffffffffffff81168114612e4357600080fd5b8015158114612e4357600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081168114612e4357600080fd5b8060020b8114612e4357600080fd5b6fffffffffffffffffffffffffffffffff81168114612e4357600080fd5b60ff81168114612e4357600080fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e6473a164736f6c6343000706000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
