{
  "_format": "hh-sol-artifact-1",
  "contractName": "BalancerV2BoostedSwapper",
  "sourceName": "contracts/swap/BalancerV2BoostedSwapper.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "who",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "what",
          "type": "bytes4"
        },
        {
          "internalType": "uint256[]",
          "name": "how",
          "type": "uint256[]"
        }
      ],
      "name": "AuthSenderNotAllowed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "BytesOutOfBounds",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "a",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "aInflated",
          "type": "uint256"
        }
      ],
      "name": "FixedPointDivInternal",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "a",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "b",
          "type": "uint256"
        }
      ],
      "name": "FixedPointMulOverflow",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FixedPointZeroDivision",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAcceptanceInputLengthMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAcceptanceTokenZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskAmountZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskConnectorZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskGasNotInitialized",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "gasPrice",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskGasPriceLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "date",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidAllowedDate",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidAllowedWindow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidFrequency",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        }
      ],
      "name": "TaskInvalidFrequencyMode",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidThresholdInput",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "TaskInvalidVolumeLimitInput",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskPaused",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "priorityFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskPriorityFeeLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "connectorId",
          "type": "bytes32"
        }
      ],
      "name": "TaskSameBalanceConnectors",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "slippage",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "TaskSlippageAboveMax",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskSlippageAboveOne",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "smartVault",
          "type": "address"
        }
      ],
      "name": "TaskSmartVaultPriceOracleNotSet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskThresholdTokenZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "currentTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiration",
          "type": "uint256"
        }
      ],
      "name": "TaskTimeLockActive",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "TaskTokenNotAllowed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTokenOutNotSet",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "TaskTokenThresholdNotMet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTokenZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "txCost",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        }
      ],
      "name": "TaskTxCostLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskTxCostLimitPctAboveOne",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "txCostPct",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "TaskTxCostLimitPctExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskUnpaused",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "volume",
          "type": "uint256"
        }
      ],
      "name": "TaskVolumeLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TaskVolumeLimitTokenZero",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "name": "BalanceConnectorsSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "connector",
          "type": "address"
        }
      ],
      "name": "ConnectorSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "CustomMaxSlippageSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "CustomTokenOutSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "CustomTokenThresholdSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "CustomVolumeLimitSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "DefaultMaxSlippageSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "DefaultTokenOutSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "DefaultTokenThresholdSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        }
      ],
      "name": "DefaultVolumeLimitSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Executed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "GasLimitsSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        }
      ],
      "name": "TimeLockAllowedAtSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "TimeLockSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "added",
          "type": "bool"
        }
      ],
      "name": "TokensAcceptanceListSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "acceptanceType",
          "type": "uint8"
        }
      ],
      "name": "TokensAcceptanceTypeSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "EXECUTION_TYPE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "authorizer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenIn",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "slippage",
          "type": "uint256"
        }
      ],
      "name": "call",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "connector",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "customMaxSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "customTokenOut",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "customTokenThreshold",
      "outputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "customVolumeLimit",
      "outputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accrued",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nextResetTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultMaxSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultTokenOut",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultTokenThreshold",
      "outputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultVolumeLimit",
      "outputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accrued",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nextResetTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getBalanceConnectors",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getGasLimits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "gasPriceLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "priorityFeeLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txCostLimitPct",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getMaxSlippage",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getTaskAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTimeLock",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getTokenOut",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getTokenThreshold",
      "outputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTokensSource",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getVolumeLimit",
      "outputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accrued",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "period",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nextResetTime",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "connector",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenOut",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "maxSlippage",
                  "type": "uint256"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenOut",
                      "type": "address"
                    }
                  ],
                  "internalType": "struct BaseSwapTask.CustomTokenOut[]",
                  "name": "customTokensOut",
                  "type": "tuple[]"
                },
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "token",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "maxSlippage",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct BaseSwapTask.CustomMaxSlippage[]",
                  "name": "customMaxSlippages",
                  "type": "tuple[]"
                },
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "address",
                          "name": "smartVault",
                          "type": "address"
                        },
                        {
                          "internalType": "bytes32",
                          "name": "previousBalanceConnectorId",
                          "type": "bytes32"
                        },
                        {
                          "internalType": "bytes32",
                          "name": "nextBalanceConnectorId",
                          "type": "bytes32"
                        }
                      ],
                      "internalType": "struct BaseTask.BaseConfig",
                      "name": "baseConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint256",
                          "name": "gasPriceLimit",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "priorityFeeLimit",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "txCostLimit",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "txCostLimitPct",
                          "type": "uint256"
                        }
                      ],
                      "internalType": "struct GasLimitedTask.GasLimitConfig",
                      "name": "gasLimitConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "uint8",
                          "name": "mode",
                          "type": "uint8"
                        },
                        {
                          "internalType": "uint256",
                          "name": "frequency",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "allowedAt",
                          "type": "uint256"
                        },
                        {
                          "internalType": "uint256",
                          "name": "window",
                          "type": "uint256"
                        }
                      ],
                      "internalType": "struct TimeLockedTask.TimeLockConfig",
                      "name": "timeLockConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
                          "name": "acceptanceType",
                          "type": "uint8"
                        },
                        {
                          "internalType": "address[]",
                          "name": "tokens",
                          "type": "address[]"
                        }
                      ],
                      "internalType": "struct TokenIndexedTask.TokenIndexConfig",
                      "name": "tokenIndexConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "internalType": "uint256",
                              "name": "min",
                              "type": "uint256"
                            },
                            {
                              "internalType": "uint256",
                              "name": "max",
                              "type": "uint256"
                            }
                          ],
                          "internalType": "struct TokenThresholdTask.Threshold",
                          "name": "defaultThreshold",
                          "type": "tuple"
                        },
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "components": [
                                {
                                  "internalType": "address",
                                  "name": "token",
                                  "type": "address"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "min",
                                  "type": "uint256"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "max",
                                  "type": "uint256"
                                }
                              ],
                              "internalType": "struct TokenThresholdTask.Threshold",
                              "name": "threshold",
                              "type": "tuple"
                            }
                          ],
                          "internalType": "struct TokenThresholdTask.CustomThresholdConfig[]",
                          "name": "customThresholdConfigs",
                          "type": "tuple[]"
                        }
                      ],
                      "internalType": "struct TokenThresholdTask.TokenThresholdConfig",
                      "name": "tokenThresholdConfig",
                      "type": "tuple"
                    },
                    {
                      "components": [
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "internalType": "uint256",
                              "name": "amount",
                              "type": "uint256"
                            },
                            {
                              "internalType": "uint256",
                              "name": "period",
                              "type": "uint256"
                            }
                          ],
                          "internalType": "struct VolumeLimitedTask.VolumeLimitParams",
                          "name": "defaultVolumeLimit",
                          "type": "tuple"
                        },
                        {
                          "components": [
                            {
                              "internalType": "address",
                              "name": "token",
                              "type": "address"
                            },
                            {
                              "components": [
                                {
                                  "internalType": "address",
                                  "name": "token",
                                  "type": "address"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "amount",
                                  "type": "uint256"
                                },
                                {
                                  "internalType": "uint256",
                                  "name": "period",
                                  "type": "uint256"
                                }
                              ],
                              "internalType": "struct VolumeLimitedTask.VolumeLimitParams",
                              "name": "volumeLimit",
                              "type": "tuple"
                            }
                          ],
                          "internalType": "struct VolumeLimitedTask.CustomVolumeLimitConfig[]",
                          "name": "customVolumeLimitConfigs",
                          "type": "tuple[]"
                        }
                      ],
                      "internalType": "struct VolumeLimitedTask.VolumeLimitConfig",
                      "name": "volumeLimitConfig",
                      "type": "tuple"
                    }
                  ],
                  "internalType": "struct Task.TaskConfig",
                  "name": "taskConfig",
                  "type": "tuple"
                }
              ],
              "internalType": "struct BaseSwapTask.BaseSwapConfig",
              "name": "baseSwapConfig",
              "type": "tuple"
            }
          ],
          "internalType": "struct BalancerV2BptSwapper.BalancerV2BptSwapConfig",
          "name": "config",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isPaused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "isTokenAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "previous",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "next",
          "type": "bytes32"
        }
      ],
      "name": "setBalanceConnectors",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newConnector",
          "type": "address"
        }
      ],
      "name": "setConnector",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "setCustomMaxSlippage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "setCustomTokenOut",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "setCustomTokenThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limitAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limitPeriod",
          "type": "uint256"
        }
      ],
      "name": "setCustomVolumeLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "maxSlippage",
          "type": "uint256"
        }
      ],
      "name": "setDefaultMaxSlippage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenOut",
          "type": "address"
        }
      ],
      "name": "setDefaultTokenOut",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "thresholdToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "min",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "max",
          "type": "uint256"
        }
      ],
      "name": "setDefaultTokenThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "limitToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "limitAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "limitPeriod",
          "type": "uint256"
        }
      ],
      "name": "setDefaultVolumeLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newGasPriceLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newPriorityFeeLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newTxCostLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newTxCostLimitPct",
          "type": "uint256"
        }
      ],
      "name": "setGasLimits",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "mode",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "frequency",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "allowedAt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "window",
          "type": "uint256"
        }
      ],
      "name": "setTimeLock",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "bool[]",
          "name": "added",
          "type": "bool[]"
        }
      ],
      "name": "setTokensAcceptanceList",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "newTokensAcceptanceType",
          "type": "uint8"
        }
      ],
      "name": "setTokensAcceptanceType",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "smartVault",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokensAcceptanceType",
      "outputs": [
        {
          "internalType": "enum ITokenIndexedTask.TokensAcceptanceType",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61567b80620000f36000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c80636aacaad811610186578063a5900c4d116100e3578063d09edf3111610097578063d86483e111610071578063d86483e1146107b0578063e6b5be98146107c3578063f9eaee0d146107d657600080fd5b8063d09edf3114610771578063d3feb6021461078a578063d45a76cf1461079d57600080fd5b8063b96e422c116100c8578063b96e422c14610744578063c267621e1461074d578063c47590e41461075e57600080fd5b8063a5900c4d146106cd578063b187bd261461072757600080fd5b806390333ba81161013a578063a0c3774f1161011f578063a0c3774f14610674578063a2c4564414610687578063a33741771461069a57600080fd5b806390333ba8146106425780639eebe7cd1461065557600080fd5b806383f3084f1161016b57806383f3084f146106145780638456cb59146106275780638a5215861461062f57600080fd5b80636aacaad8146105b55780637125590a1461060157600080fd5b8063423a4b401161023f5780635064d83a116101f35780635ea54eee116101cd5780635ea54eee1461054d578063635600861461057957806363e133bc1461058c57600080fd5b80635064d83a146104e757806351a424b1146104fa5780635670e2ce1461053257600080fd5b8063445780991161022457806344578099146104745780634a45a3a81461049f5780634fd49efd146104d457600080fd5b8063423a4b401461044757806342d4693e1461045a57600080fd5b80632384c32d1161029657806330eae5721161027b57806330eae572146104195780633b191c971461042c5780633f4ba83a1461043f57600080fd5b80632384c32d146103f35780632be5f0c71461040657600080fd5b8063119a5e96116102c7578063119a5e961461030b578063219723841461033c578063221a8c681461034f57600080fd5b80630fe105e8146102e357806310188aef146102f8575b600080fd5b6102f66102f136600461462e565b6107e9565b005b6102f6610306366004614687565b610822565b61031361084f565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b6102f661034a366004614823565b610886565b6103c161035d366004614687565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610333565b6102f66104013660046148e7565b610936565b6102f661041436600461492d565b610965565b6102f6610427366004614975565b610990565b6102f661043a366004614e68565b6109cd565b6102f6610af3565b6102f66104553660046148e7565b610b7a565b600f546104679060ff1681565b6040516103339190614f8d565b610487610482366004614687565b610ba9565b6040516001600160a01b039091168152602001610333565b6104c67f76456852b329dfb8372f4dbf77fd89fe3650d6ac874449ff011ea624b4c258b781565b604051908152602001610333565b600154610487906001600160a01b031681565b6102f66104f5366004614fb5565b610df0565b61050d610508366004614687565b611010565b604080516001600160a01b039094168452602084019290925290820152606001610333565b60025460035460408051928352602083019190915201610333565b600654600754600854600954604080519485526020850193909352918301526060820152608001610333565b6102f6610587366004614687565b611039565b61048761059a366004614687565b601f602052600090815260409020546001600160a01b031681565b6103c16040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6102f661060f366004614fea565b611062565b601c54610487906001600160a01b031681565b6102f661108d565b601d54610487906001600160a01b031681565b6102f6610650366004614fb5565b6110ff565b6104c6610663366004614687565b602080526000908152604090205481565b6104c6610682366004614687565b611132565b6102f661069536600461500c565b6111c9565b61050d604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61050d6106db366004614687565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6004546107349060ff1681565b6040519015158152602001610333565b6104c6601e5481565b6001546001600160a01b0316610487565b6102f661076c366004615025565b6111f2565b600054610487906201000090046001600160a01b031681565b6102f6610798366004614fb5565b61121d565b6103c16107ab366004614687565b61124a565b6104c66107be366004614687565b6112b9565b6102f66107d1366004615051565b6112e8565b6107346107e4366004614687565b611317565b6107f88460ff1684848461134c565b61080f336000356001600160e01b031916836113f7565b61081b8585858561143e565b5050505050565b61082b816116e3565b610842336000356001600160e01b031916836113f7565b61084b826116f7565b5050565b600a5460009081908190819060ff16600281111561086f5761086f614f77565b600b54600c54600e54935093509350935090919293565b61089c336000356001600160e01b031916611781565b80518251146108d7576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156109315761091f8382815181106108f8576108f8615083565b602002602001015183838151811061091257610912615083565b602002602001015161179d565b80610929816150af565b9150506108da565b505050565b61094284848484611847565b610959336000356001600160e01b031916836113f7565b61081b858585856118b0565b61096f8282611969565b610986336000356001600160e01b031916836113f7565b61093183836119e1565b6109ad8160018111156109a5576109a5614f77565b60ff16611a68565b6109c4336000356001600160e01b031916836113f7565b61084b82611aaf565b600054610100900460ff16158080156109ed5750600054600160ff909116105b80610a075750303b158015610a07575060005460ff166001145b610a7e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610aa1576000805461ff0019166101001790555b610aaa82611b0c565b801561084b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610b09336000356001600160e01b031916611781565b60045460ff16610b45576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610b8684848484611847565b610b9d336000356001600160e01b031916836113f7565b61081b85858585611b7c565b600080610bb583611c3c565b90506001600160a01b03811615610bcc5792915050565b6000836001600160a01b03166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3091906150c8565b90506000846001600160a01b03166382687a566040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9691906150c8565b90506000601c60009054906101000a90046001600160a01b03166001600160a01b03166310c0a1576040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ced573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1191906150e1565b6040517ff94d4668000000000000000000000000000000000000000000000000000000008152600481018590529091506000906001600160a01b0383169063f94d466890602401600060405180830381865afa158015610d75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d9d9190810190615159565b5050905082600014610dc95780600081518110610dbc57610dbc615083565b6020026020010151610de5565b80600181518110610ddc57610ddc615083565b60200260200101515b979650505050505050565b610dfb838383611c78565b610e12336000356001600160e01b031916836113f7565b82600003610e2657610e2384611132565b92505b610e31848484611d0a565b6000610e3c85610ba9565b90506000610e4a8683611d15565b90506000610e73610e6386670de0b6b3a7640000615227565b610e6d8885611d21565b90611d21565b9050600063be1b4c4960e01b888589858c6001600160a01b03166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee591906150c8565b60408051600080825260208201908152818301909252610f0d9695949392916064820161527e565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506000926001600160a01b0391821692631cff79cd92610fa7921690869060040161535a565b6000604051808303816000875af1158015610fc6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fee919081019061537c565b90506110058989898861100086611d94565b611da1565b505050505050505050565b60008060008061101f85611dae565b805160208201516040909201519097919650945092505050565b611042816116e3565b611059336000356001600160e01b031916836113f7565b61084b82611e39565b61106c8282611e83565b611083336000356001600160e01b031916836113f7565b6109318383611edd565b6110a3336000356001600160e01b031916611781565b60045460ff16156110c75760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b61110a838383611c78565b611121336000356001600160e01b031916836113f7565b61112c848484611f60565b50505050565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa15801561119f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c391906150c8565b92915050565b6111d281611a68565b6111e9336000356001600160e01b031916836113f7565b61084b82611fb6565b6111fc8282612014565b611213336000356001600160e01b031916836113f7565b6109318383612071565b611228838383611c78565b61123f336000356001600160e01b031916836113f7565b61112c84848461210b565b60008060008060008061125c87612167565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b038116600090815260208052604081205480156112dd57806112e1565b601e545b9392505050565b6112f48484848461134c565b61130b336000356001600160e01b031916836113f7565b61081b8585858561219b565b600080611325601084612236565b90506001600f5460ff16600181111561134057611340614f77565b146111c35780156112e1565b60408051600480825260a0820190925260609160208201608080368337019050509050848160008151811061138357611383615083565b60200260200101818152505083816001815181106113a3576113a3615083565b60200260200101818152505082816002815181106113c3576113c3615083565b60200260200101818152505081816003815181106113e3576113e3615083565b602002602001018181525050949350505050565b611402838383612258565b610931578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610a7593929190615440565b60ff84166114ef5760008111806114555750600082115b156114ea57826000036114875760405163bea499cb60e01b815260ff8516600482015260248101849052604401610a75565b80158061149357508281115b156114bd57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610a75565b816000036114ea57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b61164c565b8260000361151c5760405163bea499cb60e01b815260ff8516600482015260248101849052604401610a75565b80158061153457506115316224ea0084615472565b81115b1561155e57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610a75565b8160000361158b57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b60001960ff8516016115cd57601c6115a2836122ee565b11156114ea57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b60011960ff851601611615576115e282612305565b6115eb836122ee565b146114ea57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610a75565b8360ff16600281111561166157611661614f77565b600a805460ff1916600183600281111561167d5761167d614f77565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b60606111c3826001600160a01b0316611a68565b6001600160a01b038116611737576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b60408051600081526020810190915261084b90839083906113f7565b6001600160a01b0382166117dd576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806117f2576117ed601083612328565b6117fd565b6117fd60108361233d565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c8260405161183b911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b03168160008151811061188757611887615083565b602002602001018181525050836001600160a01b0316816001815181106113a3576113a3615083565b6001600160a01b0384166118f0576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061191490848484612352565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b0316816000815181106119a6576119a6615083565b602002602001018181525050816001600160a01b0316816001815181106119cf576119cf615083565b60200260200101818152505092915050565b6001600160a01b038216611a0857604051636070789160e11b815260040160405180910390fd5b6001600160a01b038281166000818152601f602090815260409182902080546001600160a01b0319169486169485179055905192835290917fbc16ba530cb55504440780f3299eeddb2fa4e53e1c0157065dd7c3186acbe4f7910161183b565b604080516001808252818301909252606091602080830190803683370190505090508181600081518110611a9e57611a9e615083565b602002602001018181525050919050565b600f805482919060ff191660018381811115611acd57611acd614f77565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a81604051611b019190614f8d565b60405180910390a150565b600054610100900460ff16611b655760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051611b7090612422565b611b7981612491565b50565b6001600160a01b038416611bbc576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b60205260409020611be0908484846124ea565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611c2e929190918252602082015260400190565b60405180910390a350505050565b6001600160a01b038082166000908152601f60205260408120549091168015611c6557806112e1565b601d546001600160a01b03169392505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611cb757611cb7615083565b6020026020010181815250508281600181518110611cd757611cd7615083565b6020026020010181815250508181600281518110611cf757611cf7615083565b6020026020010181815250509392505050565b610931838383612649565b60006112e18383612750565b60008282028315801590611d44575082848281611d4057611d40615489565b0414155b15611d6c57604051637472527d60e11b81526004810185905260248101849052604401610a75565b8015611d8957670de0b6b3a7640000600019820104600101611d8c565b60005b949350505050565b60006111c382600061294f565b61081b85858585856129ac565b611ddb604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611e045780611e07565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b601d80546001600160a01b0319166001600160a01b0383169081179091556040517fc602525ddc64aed298026bfa5d65c18e59363c878dfc0c2794cf734659975a4590600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611eba57611eba615083565b6020026020010181815250508160001c816001815181106119cf576119cf615083565b8082148015611eeb57508115155b15611f25576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610a75565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b611f6d60168484846124ea565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a7640000811115611fdf5760405163c2b0b62d60e01b815260040160405180910390fd5b601e8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf890602001611b01565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b03168160008151811061205157612051615083565b60200260200101818152505081816001815181106119cf576119cf615083565b6001600160a01b03821661209857604051636070789160e11b815260040160405180910390fd5b670de0b6b3a76400008111156120c15760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b0382166000818152602080805260409182902084905590518381527f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed3910161183b565b6121186012848484612352565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b60205260408120805491929091161561219257806112e1565b60169392505050565b670de0b6b3a76400008111156121dd576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d691906080016116d5565b6001600160a01b038116600090815260018301602052604081205415156112e1565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906328522895906122ad90879030908890889060040161549f565b602060405180830381865afa1580156122ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8c91906154e5565b6000611d8c6123006201518084615502565b6129c0565b600080806123196123006201518086615502565b5091509150611d8c8282612a5c565b60006112e1836001600160a01b038416612ae2565b60006112e1836001600160a01b038416612bdc565b60006001600160a01b038416158015612369575082155b8015612373575081155b905060006001600160a01b0385161580159061239757508215806123975750838310155b9050811580156123a5575080155b156123f5576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610a75565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b600054610100900460ff1661247b5760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6124888160a00151612c2b565b611b7981612cd8565b600054610100900460ff16611b795760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b60006001600160a01b038416158015612501575082155b801561250b575081155b905060006001600160a01b038516158015906125275750600084115b80156125335750600083115b905081158015612541575080155b15612591576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610a75565b600386018390556001860184905581156125b8576000600287018190556004870155612624565b85600401546000036125df57600060028701556125d58342615516565b6004870155612624565b85546001600160a01b0386811691161461262457855460009061260b906001600160a01b031687611d15565b600288015490915061261d9082612e33565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b6126538383612e90565b6001600160a01b03831661267a57604051636070789160e11b815260040160405180910390fd5b816000036126b4576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006126bf84610ba9565b6001600160a01b0316036126ff576040517f9a79b62c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061270a846112b9565b90508082111561112c576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610a75565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ca91906150e1565b90506001600160a01b03811661281b576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610a75565b6000612825612ed6565b905080516000146128b657816001600160a01b031663355efdd961284887612f56565b61285187612f56565b846040518463ffffffff1660e01b815260040161287093929190615529565b602060405180830381865afa15801561288d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b191906150c8565b612946565b816001600160a01b031663ac41865a6128ce87612f56565b6128d787612f56565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612922573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294691906150c8565b95945050505050565b600061295c826020615516565b835110156129a35782516040517f9b722da7000000000000000000000000000000000000000000000000000000008152610a75918491600401918252602082015260400190565b50016020015190565b6129b68282612f8a565b61081b8585613010565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f8460500281612a1d57612a1d615489565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b60008160011480612a6d5750816003145b80612a785750816005145b80612a835750816007145b80612a8e5750816008145b80612a99575081600a145b80612aa4575081600c145b15612ab15750601f6111c3565b81600214612ac15750601e6111c3565b612aca83613038565b612ad557601c612ad8565b601d5b60ff169392505050565b60008181526001830160205260408120548015612bcb576000612b06600183615227565b8554909150600090612b1a90600190615227565b9050818114612b7f576000866000018281548110612b3a57612b3a615083565b9060005260206000200154905080876000018481548110612b5d57612b5d615083565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612b9057612b90615555565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506111c3565b60009150506111c3565b5092915050565b6000818152600183016020526040812054612c23575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556111c3565b5060006111c3565b600054610100900460ff16612c845760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051612c8f90613074565b612c97613144565b612ca481602001516131a7565b612cb18160400151613209565b612cbe816060015161326b565b612ccb81608001516132cd565b611b708160a0015161332f565b600054610100900460ff16612d315760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051612d3c906116f7565b612d498160200151611e39565b612d568160400151611fb6565b60005b816060015151811015612dc457612db282606001518281518110612d7f57612d7f615083565b60200260200101516000015183606001518381518110612da157612da1615083565b6020026020010151602001516119e1565b80612dbc816150af565b915050612d59565b5060005b81608001515181101561084b57612e2182608001518281518110612dee57612dee615083565b60200260200101516000015183608001518381518110612e1057612e10615083565b602002602001015160200151612071565b80612e2b816150af565b915050612dc8565b60008282028315801590612e56575082848281612e5257612e52615489565b0414155b15612e7e57604051637472527d60e11b81526004810185905260248101849052604401610a75565b670de0b6b3a764000090049392505050565b612e9a8282613391565b612ea4828261339b565b612eae82826133bf565b612eb882826134ab565b612ec2828261369a565b612ecc82826136e4565b61084b82826137d1565b60606000612ee26138e7565b905036811115612f0057505060408051600081526020810190915290565b8067ffffffffffffffff811115612f1957612f196146a4565b6040519080825280601f01601f191660200182016040528015612f43576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614612f8257816111c3565b6111c3613902565b6003541561084b576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b158015612ff457600080fd5b505af1158015613008573d6000803e3d6000fd5b505050505050565b61301a828261398e565b6130248282613a30565b61302e8282613a52565b61084b8282613c91565b600061304560048361556b565b15801561305b575061305860648361556b565b15155b806111c3575061306d6101908361556b565b1592915050565b600054610100900460ff166130cd5760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b61313b81600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015613112573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061313691906150e1565b613cbe565b611b7981613d20565b600054610100900460ff1661319d5760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6131a5613dae565b565b600054610100900460ff166132005760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b611b7981613e07565b600054610100900460ff166132625760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b611b7981613e7c565b600054610100900460ff166132c45760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b611b7981613ef1565b600054610100900460ff166133265760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b611b7981613f9f565b600054610100900460ff166133885760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b611b798161407d565b61084b828261415b565b60045460ff161561084b5760405163181e462560e31b815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806133fe575081513a11155b9050806134435781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610a75565b60208201511561112c576000613459483a615227565b6020840151909150811115806130085760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610a75918491600401918252602082015260400190565b600a54600b54600c54600e5460ff90931692428211156134e75760405163013ce60b60e01b815242600482015260248101839052604401610a75565b60008460028111156134fb576134fb614f77565b036135b4578260000361351057505050505050565b8060000361352a576135228342615516565b600d55613008565b60006135368342615227565b905060006135448583615502565b905060006135528683615472565b61355c9084615227565b9050838111156135885760405163013ce60b60e01b815242600482015260248101869052604401610a75565b85613594836001615516565b61359e9190615472565b6135a89086615516565b600d5550613008915050565b8142101580156135cd57506135c98183615516565b4211155b156135dc5761352282846141ae565b600060018560028111156135f2576135f2614f77565b146136055761360042612305565b61360e565b61360e836122ee565b9050600061361c8483614246565b9050804210156136485760405163013ce60b60e01b815242600482015260248101829052604401610a75565b60006136548483615516565b905042811080156136815760405163013ce60b60e01b815242600482015260248101839052604401610a75565b61368b83886141ae565b600d5550505050505050505050565b6136a382611317565b61084b576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610a75565b60006136ef83611dae565b80519091506001600160a01b031661370657505050565b6000836001600160a01b031682600001516001600160a01b0316146137425761373d613736858460000151611d15565b8490612e33565b613744565b825b905060008260200151821015801561376c57506040830151158061376c575082604001518211155b90508061081b578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610a75565b60006137dc83612167565b6040805160a08101825282546001600160a01b03168082526001840154602083015260028401549282019290925260038301546060820152600490920154608083015290915061382b57505050565b6000836001600160a01b031682600001516001600160a01b0316146138605761385b613736858460000151611d15565b613862565b825b905060008260800151421061387857600061387e565b82604001515b6138889083615516565b9050826020015181111561081b57825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610a75565b600060243610156138f85750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa158015613965573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061398991906150e1565b905090565b600061399983612167565b80549091506001600160a01b03166139b057505050565b80546000906001600160a01b038581169116146139e65781546139e1906137369086906001600160a01b0316611d15565b6139e8565b825b905081600401544210613a1157600060028301556003820154613a0b9042615516565b60048301555b80826002016000828254613a259190615516565b909155505050505050565b600d54600003613a3e575050565b613a49600d54614265565b50506000600d55565b600554600003613a8e576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554613ac79190615227565b90506000613ad53a83615472565b90506000836040015160001480613af0575083604001518211155b905080613b3a578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610a75929190918252602082015260400190565b6000600555606084015115801590613b525750600085115b15613008576000613c25306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bbe91906150e1565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1f91906150e1565b88611d15565b90506000613c338483611d21565b90506000613c41828961429a565b905086606001518111156110055760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610a75918391600401918252602082015260400190565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff16613d175760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b611b7981614363565b600054610100900460ff16613d795760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051600180546001600160a01b0319166001600160a01b0390921691909117905560208101516040820151611b799190611edd565b600054610100900460ff166131a55760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b600054610100900460ff16613e605760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b611b79816000015182602001518360400151846060015161219b565b600054610100900460ff16613ed55760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b611b79816000015182602001518360400151846060015161143e565b600054610100900460ff16613f4a5760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051613f5590611aaf565b60005b81602001515181101561084b57613f8d82602001518281518110613f7e57613f7e615083565b6020026020010151600161179d565b80613f97816150af565b915050613f58565b600054610100900460ff16613ff85760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b805180516020820151604083015161401192919061210b565b60005b8260200151518110156109315760008360200151828151811061403957614039615083565b6020026020010151905060008160200151905061406882600001518260000151836020015184604001516118b0565b50508080614075906150af565b915050614014565b600054610100900460ff166140d65760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b80518051602082015160408301516140ef929190611f60565b60005b8260200151518110156109315760008360200151828151811061411757614117615083565b602002602001015190506000816020015190506141468260000151826000015183602001518460400151611b7c565b50508080614153906150af565b9150506140f2565b6002541561084b5760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401612fda565b6000806000806141bd866143fc565b9194509250905060006141d08684615516565b905060006141df600c8361556b565b905060006141ee600c84615502565b6141f89087615516565b905060006002600a5460ff16600281111561421557614215614f77565b14614220578461422a565b61422a8284612a5c565b90506142388a83858461441b565b9a9950505050505050505050565b6000806000614254426143fc565b50915091506129468583838761441b565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad06490602001611b01565b6000816000036142d6576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036142e6575060006111c3565b670de0b6b3a76400008381029084828161430257614302615489565b0414614344576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610a75565b82600182038161435657614356615489565b0460010191505092915050565b600054610100900460ff166143bc5760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000808061440e6201518085046129c0565b9196909550909350915050565b600061294684848461442c89614443565b6144358a614461565b61443e8b61447d565b61448a565b600080614453620151808461556b565b90506112e1610e1082615502565b600080614470610e108461556b565b90506112e1603c82615502565b60006111c3603c8361556b565b600081614498603c85615472565b6144a4610e1087615472565b620151806144b38b8b8b6144db565b6144bd9190615472565b6144c79190615516565b6144d19190615516565b610de59190615516565b60006107b28410156144ec57600080fd5b838383600062253d8c60046064600c614506600e8861557f565b614510919061559f565b61451c886113246155cd565b61452691906155cd565b614530919061559f565b61453b9060036155f5565b614545919061559f565b600c80614553600e8861557f565b61455d919061559f565b61456890600c6155f5565b61457360028861557f565b61457d919061557f565b6145899061016f6155f5565b614593919061559f565b6004600c6145a2600e8961557f565b6145ac919061559f565b6145b8896112c06155cd565b6145c291906155cd565b6145ce906105b56155f5565b6145d8919061559f565b6145e4617d4b8761557f565b6145ee91906155cd565b6145f891906155cd565b614602919061557f565b61460c919061557f565b98975050505050505050565b803560ff8116811461462957600080fd5b919050565b6000806000806080858703121561464457600080fd5b61464d85614618565b966020860135965060408601359560600135945092505050565b6001600160a01b0381168114611b7957600080fd5b803561462981614667565b60006020828403121561469957600080fd5b81356112e181614667565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156146dd576146dd6146a4565b60405290565b6040516080810167ffffffffffffffff811182821017156146dd576146dd6146a4565b60405160c0810167ffffffffffffffff811182821017156146dd576146dd6146a4565b6040516020810167ffffffffffffffff811182821017156146dd576146dd6146a4565b604051601f8201601f1916810167ffffffffffffffff81118282101715614775576147756146a4565b604052919050565b600067ffffffffffffffff821115614797576147976146a4565b5060051b60200190565b600082601f8301126147b257600080fd5b813560206147c76147c28361477d565b61474c565b82815260059290921b840181019181810190868411156147e657600080fd5b8286015b8481101561480a5780356147fd81614667565b83529183019183016147ea565b509695505050505050565b8015158114611b7957600080fd5b6000806040838503121561483657600080fd5b823567ffffffffffffffff8082111561484e57600080fd5b61485a868387016147a1565b935060209150818501358181111561487157600080fd5b85019050601f8101861361488457600080fd5b80356148926147c28261477d565b81815260059190911b820183019083810190888311156148b157600080fd5b928401925b828410156148d85783356148c981614815565b825292840192908401906148b6565b80955050505050509250929050565b600080600080608085870312156148fd57600080fd5b843561490881614667565b9350602085013561491881614667565b93969395505050506040820135916060013590565b6000806040838503121561494057600080fd5b823561494b81614667565b9150602083013561495b81614667565b809150509250929050565b80356002811061462957600080fd5b60006020828403121561498757600080fd5b6112e182614966565b600082601f8301126149a157600080fd5b813560206149b16147c28361477d565b82815260069290921b840181019181810190868411156149d057600080fd5b8286015b8481101561480a57604081890312156149ed5760008081fd5b6149f56146ba565b8135614a0081614667565b815281850135614a0f81614667565b818601528352918301916040016149d4565b600082601f830112614a3257600080fd5b81356020614a426147c28361477d565b82815260069290921b84018101918181019086841115614a6157600080fd5b8286015b8481101561480a5760408189031215614a7e5760008081fd5b614a866146ba565b8135614a9181614667565b81528185013585820152835291830191604001614a65565b600060608284031215614abb57600080fd5b6040516060810181811067ffffffffffffffff82111715614ade57614ade6146a4565b6040529050808235614aef81614667565b8082525060208301356020820152604083013560408201525092915050565b600060808284031215614b2057600080fd5b614b286146e3565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b600060808284031215614b6457600080fd5b614b6c6146e3565b9050614b7782614618565b815260208201356020820152604082013560408201526060820135606082015292915050565b600060408284031215614baf57600080fd5b614bb76146ba565b9050614bc282614966565b8152602082013567ffffffffffffffff811115614bde57600080fd5b614bea848285016147a1565b60208301525092915050565b600060808284031215614c0857600080fd5b614c106146ba565b90508135614c1d81614667565b8152614c2c8360208401614aa9565b602082015292915050565b60006080808385031215614c4a57600080fd5b614c526146ba565b9150614c5e8484614aa9565b8252606083013567ffffffffffffffff811115614c7a57600080fd5b8301601f81018513614c8b57600080fd5b80356020614c9b6147c28361477d565b82815260079290921b83018101918181019088841115614cba57600080fd5b938201935b83851015614ce057614cd18986614bf6565b82529385019390820190614cbf565b808388015250505050505092915050565b60006080808385031215614d0457600080fd5b614d0c6146ba565b9150614d188484614aa9565b8252606083013567ffffffffffffffff811115614d3457600080fd5b8301601f81018513614d4557600080fd5b80356020614d556147c28361477d565b82815260079290921b83018101918181019088841115614d7457600080fd5b938201935b83851015614ce057614d8b8986614bf6565b82529385019390820190614d79565b60006101c08284031215614dad57600080fd5b614db5614706565b9050614dc18383614aa9565b8152614dd08360608401614b0e565b6020820152614de28360e08401614b52565b604082015261016082013567ffffffffffffffff80821115614e0357600080fd5b614e0f85838601614b9d565b6060840152610180840135915080821115614e2957600080fd5b614e3585838601614c37565b60808401526101a0840135915080821115614e4f57600080fd5b50614e5c84828501614cf1565b60a08301525092915050565b600060208284031215614e7a57600080fd5b813567ffffffffffffffff80821115614e9257600080fd5b9083019060208286031215614ea657600080fd5b614eae614729565b823582811115614ebd57600080fd5b929092019160c08387031215614ed257600080fd5b614eda614706565b614ee38461467c565b8152614ef16020850161467c565b602082015260408401356040820152606084013583811115614f1257600080fd5b614f1e88828701614990565b606083015250608084013583811115614f3657600080fd5b614f4288828701614a21565b60808301525060a084013583811115614f5a57600080fd5b614f6688828701614d9a565b60a083015250815295945050505050565b634e487b7160e01b600052602160045260246000fd5b6020810160028310614faf57634e487b7160e01b600052602160045260246000fd5b91905290565b600080600060608486031215614fca57600080fd5b8335614fd581614667565b95602085013595506040909401359392505050565b60008060408385031215614ffd57600080fd5b50508035926020909101359150565b60006020828403121561501e57600080fd5b5035919050565b6000806040838503121561503857600080fd5b823561504381614667565b946020939093013593505050565b6000806000806080858703121561506757600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016150c1576150c1615099565b5060010190565b6000602082840312156150da57600080fd5b5051919050565b6000602082840312156150f357600080fd5b81516112e181614667565b600082601f83011261510f57600080fd5b8151602061511f6147c28361477d565b82815260059290921b8401810191818101908684111561513e57600080fd5b8286015b8481101561480a5780518352918301918301615142565b60008060006060848603121561516e57600080fd5b835167ffffffffffffffff8082111561518657600080fd5b818601915086601f83011261519a57600080fd5b815160206151aa6147c28361477d565b82815260059290921b8401810191818101908a8411156151c957600080fd5b948201945b838610156151f05785516151e181614667565b825294820194908201906151ce565b9189015191975090935050508082111561520957600080fd5b50615216868287016150fe565b925050604084015190509250925092565b818103818111156111c3576111c3615099565b600081518084526020808501945080840160005b838110156152735781516001600160a01b03168752958201959082019060010161524e565b509495945050505050565b600060e082016001600160a01b03808b1684526020818b168186015289604086015288606086015287608086015260e060a0860152829150865180845261010086019250818801935060005b818110156152e6578451845293820193928201926001016152ca565b50505083810360c08501526152fb818661523a565b9b9a5050505050505050505050565b60005b8381101561532557818101518382015260200161530d565b50506000910152565b6000815180845261534681602086016020860161530a565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201526000611d8c604083018461532e565b60006020828403121561538e57600080fd5b815167ffffffffffffffff808211156153a657600080fd5b818401915084601f8301126153ba57600080fd5b8151818111156153cc576153cc6146a4565b6153df601f8201601f191660200161474c565b91508082528560208285010111156153f657600080fd5b61540781602084016020860161530a565b50949350505050565b600081518084526020808501945080840160005b8381101561527357815187529582019590820190600101615424565b6001600160a01b03841681526001600160e01b0319831660208201526060604082015260006129466060830184615410565b80820281158282048414176111c3576111c3615099565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b0380871683528086166020840152506001600160e01b031984166040830152608060608301526154db6080830184615410565b9695505050505050565b6000602082840312156154f757600080fd5b81516112e181614815565b60008261551157615511615489565b500490565b808201808211156111c3576111c3615099565b60006001600160a01b03808616835280851660208401525060606040830152612946606083018461532e565b634e487b7160e01b600052603160045260246000fd5b60008261557a5761557a615489565b500690565b8181036000831280158383131683831282161715612bd557612bd5615099565b6000826155ae576155ae615489565b600160ff1b8214600019841416156155c8576155c8615099565b500590565b80820182811260008312801582168215821617156155ed576155ed615099565b505092915050565b80820260008212600160ff1b8414161561561157615611615099565b81810583148215176111c3576111c361509956fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a264697066735822122000ed40909e787d7d16b02d7986cb51040fd3fee6307a92a1c4e83dc56fdd264864736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102de5760003560e01c80636aacaad811610186578063a5900c4d116100e3578063d09edf3111610097578063d86483e111610071578063d86483e1146107b0578063e6b5be98146107c3578063f9eaee0d146107d657600080fd5b8063d09edf3114610771578063d3feb6021461078a578063d45a76cf1461079d57600080fd5b8063b96e422c116100c8578063b96e422c14610744578063c267621e1461074d578063c47590e41461075e57600080fd5b8063a5900c4d146106cd578063b187bd261461072757600080fd5b806390333ba81161013a578063a0c3774f1161011f578063a0c3774f14610674578063a2c4564414610687578063a33741771461069a57600080fd5b806390333ba8146106425780639eebe7cd1461065557600080fd5b806383f3084f1161016b57806383f3084f146106145780638456cb59146106275780638a5215861461062f57600080fd5b80636aacaad8146105b55780637125590a1461060157600080fd5b8063423a4b401161023f5780635064d83a116101f35780635ea54eee116101cd5780635ea54eee1461054d578063635600861461057957806363e133bc1461058c57600080fd5b80635064d83a146104e757806351a424b1146104fa5780635670e2ce1461053257600080fd5b8063445780991161022457806344578099146104745780634a45a3a81461049f5780634fd49efd146104d457600080fd5b8063423a4b401461044757806342d4693e1461045a57600080fd5b80632384c32d1161029657806330eae5721161027b57806330eae572146104195780633b191c971461042c5780633f4ba83a1461043f57600080fd5b80632384c32d146103f35780632be5f0c71461040657600080fd5b8063119a5e96116102c7578063119a5e961461030b578063219723841461033c578063221a8c681461034f57600080fd5b80630fe105e8146102e357806310188aef146102f8575b600080fd5b6102f66102f136600461462e565b6107e9565b005b6102f6610306366004614687565b610822565b61031361084f565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b6102f661034a366004614823565b610886565b6103c161035d366004614687565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610333565b6102f66104013660046148e7565b610936565b6102f661041436600461492d565b610965565b6102f6610427366004614975565b610990565b6102f661043a366004614e68565b6109cd565b6102f6610af3565b6102f66104553660046148e7565b610b7a565b600f546104679060ff1681565b6040516103339190614f8d565b610487610482366004614687565b610ba9565b6040516001600160a01b039091168152602001610333565b6104c67f76456852b329dfb8372f4dbf77fd89fe3650d6ac874449ff011ea624b4c258b781565b604051908152602001610333565b600154610487906001600160a01b031681565b6102f66104f5366004614fb5565b610df0565b61050d610508366004614687565b611010565b604080516001600160a01b039094168452602084019290925290820152606001610333565b60025460035460408051928352602083019190915201610333565b600654600754600854600954604080519485526020850193909352918301526060820152608001610333565b6102f6610587366004614687565b611039565b61048761059a366004614687565b601f602052600090815260409020546001600160a01b031681565b6103c16040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b6102f661060f366004614fea565b611062565b601c54610487906001600160a01b031681565b6102f661108d565b601d54610487906001600160a01b031681565b6102f6610650366004614fb5565b6110ff565b6104c6610663366004614687565b602080526000908152604090205481565b6104c6610682366004614687565b611132565b6102f661069536600461500c565b6111c9565b61050d604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b61050d6106db366004614687565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b6004546107349060ff1681565b6040519015158152602001610333565b6104c6601e5481565b6001546001600160a01b0316610487565b6102f661076c366004615025565b6111f2565b600054610487906201000090046001600160a01b031681565b6102f6610798366004614fb5565b61121d565b6103c16107ab366004614687565b61124a565b6104c66107be366004614687565b6112b9565b6102f66107d1366004615051565b6112e8565b6107346107e4366004614687565b611317565b6107f88460ff1684848461134c565b61080f336000356001600160e01b031916836113f7565b61081b8585858561143e565b5050505050565b61082b816116e3565b610842336000356001600160e01b031916836113f7565b61084b826116f7565b5050565b600a5460009081908190819060ff16600281111561086f5761086f614f77565b600b54600c54600e54935093509350935090919293565b61089c336000356001600160e01b031916611781565b80518251146108d7576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156109315761091f8382815181106108f8576108f8615083565b602002602001015183838151811061091257610912615083565b602002602001015161179d565b80610929816150af565b9150506108da565b505050565b61094284848484611847565b610959336000356001600160e01b031916836113f7565b61081b858585856118b0565b61096f8282611969565b610986336000356001600160e01b031916836113f7565b61093183836119e1565b6109ad8160018111156109a5576109a5614f77565b60ff16611a68565b6109c4336000356001600160e01b031916836113f7565b61084b82611aaf565b600054610100900460ff16158080156109ed5750600054600160ff909116105b80610a075750303b158015610a07575060005460ff166001145b610a7e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015610aa1576000805461ff0019166101001790555b610aaa82611b0c565b801561084b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610b09336000356001600160e01b031916611781565b60045460ff16610b45576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805460ff191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610b8684848484611847565b610b9d336000356001600160e01b031916836113f7565b61081b85858585611b7c565b600080610bb583611c3c565b90506001600160a01b03811615610bcc5792915050565b6000836001600160a01b03166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3091906150c8565b90506000846001600160a01b03166382687a566040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9691906150c8565b90506000601c60009054906101000a90046001600160a01b03166001600160a01b03166310c0a1576040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ced573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1191906150e1565b6040517ff94d4668000000000000000000000000000000000000000000000000000000008152600481018590529091506000906001600160a01b0383169063f94d466890602401600060405180830381865afa158015610d75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d9d9190810190615159565b5050905082600014610dc95780600081518110610dbc57610dbc615083565b6020026020010151610de5565b80600181518110610ddc57610ddc615083565b60200260200101515b979650505050505050565b610dfb838383611c78565b610e12336000356001600160e01b031916836113f7565b82600003610e2657610e2384611132565b92505b610e31848484611d0a565b6000610e3c85610ba9565b90506000610e4a8683611d15565b90506000610e73610e6386670de0b6b3a7640000615227565b610e6d8885611d21565b90611d21565b9050600063be1b4c4960e01b888589858c6001600160a01b03166338fff2d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee591906150c8565b60408051600080825260208201908152818301909252610f0d9695949392916064820161527e565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990941693909317909252600154601c5492517f1cff79cd0000000000000000000000000000000000000000000000000000000081529193506000926001600160a01b0391821692631cff79cd92610fa7921690869060040161535a565b6000604051808303816000875af1158015610fc6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fee919081019061537c565b90506110058989898861100086611d94565b611da1565b505050505050505050565b60008060008061101f85611dae565b805160208201516040909201519097919650945092505050565b611042816116e3565b611059336000356001600160e01b031916836113f7565b61084b82611e39565b61106c8282611e83565b611083336000356001600160e01b031916836113f7565b6109318383611edd565b6110a3336000356001600160e01b031916611781565b60045460ff16156110c75760405163181e462560e31b815260040160405180910390fd5b6004805460ff191660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b61110a838383611c78565b611121336000356001600160e01b031916836113f7565b61112c848484611f60565b50505050565b6001546002546040517ebc489400000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b038381166024830152600092169062bc489490604401602060405180830381865afa15801561119f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c391906150c8565b92915050565b6111d281611a68565b6111e9336000356001600160e01b031916836113f7565b61084b82611fb6565b6111fc8282612014565b611213336000356001600160e01b031916836113f7565b6109318383612071565b611228838383611c78565b61123f336000356001600160e01b031916836113f7565b61112c84848461210b565b60008060008060008061125c87612167565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b6001600160a01b038116600090815260208052604081205480156112dd57806112e1565b601e545b9392505050565b6112f48484848461134c565b61130b336000356001600160e01b031916836113f7565b61081b8585858561219b565b600080611325601084612236565b90506001600f5460ff16600181111561134057611340614f77565b146111c35780156112e1565b60408051600480825260a0820190925260609160208201608080368337019050509050848160008151811061138357611383615083565b60200260200101818152505083816001815181106113a3576113a3615083565b60200260200101818152505082816002815181106113c3576113c3615083565b60200260200101818152505081816003815181106113e3576113e3615083565b602002602001018181525050949350505050565b611402838383612258565b610931578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610a7593929190615440565b60ff84166114ef5760008111806114555750600082115b156114ea57826000036114875760405163bea499cb60e01b815260ff8516600482015260248101849052604401610a75565b80158061149357508281115b156114bd57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610a75565b816000036114ea57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b61164c565b8260000361151c5760405163bea499cb60e01b815260ff8516600482015260248101849052604401610a75565b80158061153457506115316224ea0084615472565b81115b1561155e57604051639e12fccf60e01b815260ff8516600482015260248101829052604401610a75565b8160000361158b57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b60001960ff8516016115cd57601c6115a2836122ee565b11156114ea57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b60011960ff851601611615576115e282612305565b6115eb836122ee565b146114ea57604051635686bf5960e11b815260ff8516600482015260248101839052604401610a75565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610a75565b8360ff16600281111561166157611661614f77565b600a805460ff1916600183600281111561167d5761167d614f77565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b60606111c3826001600160a01b0316611a68565b6001600160a01b038116611737576040517f05579e5400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80546001600160a01b0319166001600160a01b0383169081179091556040517f47fc0d82886e91fbb050eba4ff32c0c0d7fa2b4efffceba283e42975d9c894ff90600090a250565b60408051600081526020810190915261084b90839083906113f7565b6001600160a01b0382166117dd576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806117f2576117ed601083612328565b6117fd565b6117fd60108361233d565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c8260405161183b911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b03168160008151811061188757611887615083565b602002602001018181525050836001600160a01b0316816001815181106113a3576113a3615083565b6001600160a01b0384166118f0576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061191490848484612352565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b0316816000815181106119a6576119a6615083565b602002602001018181525050816001600160a01b0316816001815181106119cf576119cf615083565b60200260200101818152505092915050565b6001600160a01b038216611a0857604051636070789160e11b815260040160405180910390fd5b6001600160a01b038281166000818152601f602090815260409182902080546001600160a01b0319169486169485179055905192835290917fbc16ba530cb55504440780f3299eeddb2fa4e53e1c0157065dd7c3186acbe4f7910161183b565b604080516001808252818301909252606091602080830190803683370190505090508181600081518110611a9e57611a9e615083565b602002602001018181525050919050565b600f805482919060ff191660018381811115611acd57611acd614f77565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a81604051611b019190614f8d565b60405180910390a150565b600054610100900460ff16611b655760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051611b7090612422565b611b7981612491565b50565b6001600160a01b038416611bbc576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b60205260409020611be0908484846124ea565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e14488484604051611c2e929190918252602082015260400190565b60405180910390a350505050565b6001600160a01b038082166000908152601f60205260408120549091168015611c6557806112e1565b601d546001600160a01b03169392505050565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611cb757611cb7615083565b6020026020010181815250508281600181518110611cd757611cd7615083565b6020026020010181815250508181600281518110611cf757611cf7615083565b6020026020010181815250509392505050565b610931838383612649565b60006112e18383612750565b60008282028315801590611d44575082848281611d4057611d40615489565b0414155b15611d6c57604051637472527d60e11b81526004810185905260248101849052604401610a75565b8015611d8957670de0b6b3a7640000600019820104600101611d8c565b60005b949350505050565b60006111c382600061294f565b61081b85858585856129ac565b611ddb604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b038083166000908152601560205260409020805490911615611e045780611e07565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b601d80546001600160a01b0319166001600160a01b0383169081179091556040517fc602525ddc64aed298026bfa5d65c18e59363c878dfc0c2794cf734659975a4590600090a250565b60408051600280825260608083018452926020830190803683370190505090508260001c81600081518110611eba57611eba615083565b6020026020010181815250508160001c816001815181106119cf576119cf615083565b8082148015611eeb57508115155b15611f25576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610a75565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b611f6d60168484846124ea565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b670de0b6b3a7640000811115611fdf5760405163c2b0b62d60e01b815260040160405180910390fd5b601e8190556040518181527f9d7fb23d29de0d70dcfe20a01c58666eefae48719fb87d134888f2aa0ceb8cf890602001611b01565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b03168160008151811061205157612051615083565b60200260200101818152505081816001815181106119cf576119cf615083565b6001600160a01b03821661209857604051636070789160e11b815260040160405180910390fd5b670de0b6b3a76400008111156120c15760405163c2b0b62d60e01b815260040160405180910390fd5b6001600160a01b0382166000818152602080805260409182902084905590518381527f25248fa26970dc87f28fbed41688b6d37840ba02ef39849728307257033f1ed3910161183b565b6121186012848484612352565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d3459060600160405180910390a1505050565b6001600160a01b038082166000908152601b60205260408120805491929091161561219257806112e1565b60169392505050565b670de0b6b3a76400008111156121dd576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d691906080016116d5565b6001600160a01b038116600090815260018301602052604081205415156112e1565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906328522895906122ad90879030908890889060040161549f565b602060405180830381865afa1580156122ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8c91906154e5565b6000611d8c6123006201518084615502565b6129c0565b600080806123196123006201518086615502565b5091509150611d8c8282612a5c565b60006112e1836001600160a01b038416612ae2565b60006112e1836001600160a01b038416612bdc565b60006001600160a01b038416158015612369575082155b8015612373575081155b905060006001600160a01b0385161580159061239757508215806123975750838310155b9050811580156123a5575080155b156123f5576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610a75565b505083546001600160a01b0319166001600160a01b03939093169290921783556001830155600290910155565b600054610100900460ff1661247b5760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6124888160a00151612c2b565b611b7981612cd8565b600054610100900460ff16611b795760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b60006001600160a01b038416158015612501575082155b801561250b575081155b905060006001600160a01b038516158015906125275750600084115b80156125335750600083115b905081158015612541575080155b15612591576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610a75565b600386018390556001860184905581156125b8576000600287018190556004870155612624565b85600401546000036125df57600060028701556125d58342615516565b6004870155612624565b85546001600160a01b0386811691161461262457855460009061260b906001600160a01b031687611d15565b600288015490915061261d9082612e33565b6002880155505b505083546001600160a01b0319166001600160a01b0393909316929092179092555050565b6126538383612e90565b6001600160a01b03831661267a57604051636070789160e11b815260040160405180910390fd5b816000036126b4576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006126bf84610ba9565b6001600160a01b0316036126ff576040517f9a79b62c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061270a846112b9565b90508082111561112c576040517fb56ce4490000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610a75565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ca91906150e1565b90506001600160a01b03811661281b576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610a75565b6000612825612ed6565b905080516000146128b657816001600160a01b031663355efdd961284887612f56565b61285187612f56565b846040518463ffffffff1660e01b815260040161287093929190615529565b602060405180830381865afa15801561288d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b191906150c8565b612946565b816001600160a01b031663ac41865a6128ce87612f56565b6128d787612f56565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612922573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294691906150c8565b95945050505050565b600061295c826020615516565b835110156129a35782516040517f9b722da7000000000000000000000000000000000000000000000000000000008152610a75918491600401918252602082015260400190565b50016020015190565b6129b68282612f8a565b61081b8585613010565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f8460500281612a1d57612a1d615489565b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b60008160011480612a6d5750816003145b80612a785750816005145b80612a835750816007145b80612a8e5750816008145b80612a99575081600a145b80612aa4575081600c145b15612ab15750601f6111c3565b81600214612ac15750601e6111c3565b612aca83613038565b612ad557601c612ad8565b601d5b60ff169392505050565b60008181526001830160205260408120548015612bcb576000612b06600183615227565b8554909150600090612b1a90600190615227565b9050818114612b7f576000866000018281548110612b3a57612b3a615083565b9060005260206000200154905080876000018481548110612b5d57612b5d615083565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612b9057612b90615555565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506111c3565b60009150506111c3565b5092915050565b6000818152600183016020526040812054612c23575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556111c3565b5060006111c3565b600054610100900460ff16612c845760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051612c8f90613074565b612c97613144565b612ca481602001516131a7565b612cb18160400151613209565b612cbe816060015161326b565b612ccb81608001516132cd565b611b708160a0015161332f565b600054610100900460ff16612d315760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051612d3c906116f7565b612d498160200151611e39565b612d568160400151611fb6565b60005b816060015151811015612dc457612db282606001518281518110612d7f57612d7f615083565b60200260200101516000015183606001518381518110612da157612da1615083565b6020026020010151602001516119e1565b80612dbc816150af565b915050612d59565b5060005b81608001515181101561084b57612e2182608001518281518110612dee57612dee615083565b60200260200101516000015183608001518381518110612e1057612e10615083565b602002602001015160200151612071565b80612e2b816150af565b915050612dc8565b60008282028315801590612e56575082848281612e5257612e52615489565b0414155b15612e7e57604051637472527d60e11b81526004810185905260248101849052604401610a75565b670de0b6b3a764000090049392505050565b612e9a8282613391565b612ea4828261339b565b612eae82826133bf565b612eb882826134ab565b612ec2828261369a565b612ecc82826136e4565b61084b82826137d1565b60606000612ee26138e7565b905036811115612f0057505060408051600081526020810190915290565b8067ffffffffffffffff811115612f1957612f196146a4565b6040519080825280601f01601f191660200182016040528015612f43576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614612f8257816111c3565b6111c3613902565b6003541561084b576001805460035460405163eb056bbb60e01b815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b158015612ff457600080fd5b505af1158015613008573d6000803e3d6000fd5b505050505050565b61301a828261398e565b6130248282613a30565b61302e8282613a52565b61084b8282613c91565b600061304560048361556b565b15801561305b575061305860648361556b565b15155b806111c3575061306d6101908361556b565b1592915050565b600054610100900460ff166130cd5760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b61313b81600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa158015613112573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061313691906150e1565b613cbe565b611b7981613d20565b600054610100900460ff1661319d5760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b6131a5613dae565b565b600054610100900460ff166132005760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b611b7981613e07565b600054610100900460ff166132625760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b611b7981613e7c565b600054610100900460ff166132c45760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b611b7981613ef1565b600054610100900460ff166133265760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b611b7981613f9f565b600054610100900460ff166133885760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b611b798161407d565b61084b828261415b565b60045460ff161561084b5760405163181e462560e31b815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806133fe575081513a11155b9050806134435781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610a75565b60208201511561112c576000613459483a615227565b6020840151909150811115806130085760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610a75918491600401918252602082015260400190565b600a54600b54600c54600e5460ff90931692428211156134e75760405163013ce60b60e01b815242600482015260248101839052604401610a75565b60008460028111156134fb576134fb614f77565b036135b4578260000361351057505050505050565b8060000361352a576135228342615516565b600d55613008565b60006135368342615227565b905060006135448583615502565b905060006135528683615472565b61355c9084615227565b9050838111156135885760405163013ce60b60e01b815242600482015260248101869052604401610a75565b85613594836001615516565b61359e9190615472565b6135a89086615516565b600d5550613008915050565b8142101580156135cd57506135c98183615516565b4211155b156135dc5761352282846141ae565b600060018560028111156135f2576135f2614f77565b146136055761360042612305565b61360e565b61360e836122ee565b9050600061361c8483614246565b9050804210156136485760405163013ce60b60e01b815242600482015260248101829052604401610a75565b60006136548483615516565b905042811080156136815760405163013ce60b60e01b815242600482015260248101839052604401610a75565b61368b83886141ae565b600d5550505050505050505050565b6136a382611317565b61084b576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610a75565b60006136ef83611dae565b80519091506001600160a01b031661370657505050565b6000836001600160a01b031682600001516001600160a01b0316146137425761373d613736858460000151611d15565b8490612e33565b613744565b825b905060008260200151821015801561376c57506040830151158061376c575082604001518211155b90508061081b578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610a75565b60006137dc83612167565b6040805160a08101825282546001600160a01b03168082526001840154602083015260028401549282019290925260038301546060820152600490920154608083015290915061382b57505050565b6000836001600160a01b031682600001516001600160a01b0316146138605761385b613736858460000151611d15565b613862565b825b905060008260800151421061387857600061387e565b82604001515b6138889083615516565b9050826020015181111561081b57825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610a75565b600060243610156138f85750600090565b50601f1936013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa158015613965573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061398991906150e1565b905090565b600061399983612167565b80549091506001600160a01b03166139b057505050565b80546000906001600160a01b038581169116146139e65781546139e1906137369086906001600160a01b0316611d15565b6139e8565b825b905081600401544210613a1157600060028301556003820154613a0b9042615516565b60048301555b80826002016000828254613a259190615516565b909155505050505050565b600d54600003613a3e575050565b613a49600d54614265565b50506000600d55565b600554600003613a8e576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554613ac79190615227565b90506000613ad53a83615472565b90506000836040015160001480613af0575083604001518211155b905080613b3a578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610a75929190918252602082015260400190565b6000600555606084015115801590613b525750600085115b15613008576000613c25306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bbe91906150e1565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1f91906150e1565b88611d15565b90506000613c338483611d21565b90506000613c41828961429a565b905086606001518111156110055760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610a75918391600401918252602082015260400190565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b600054610100900460ff16613d175760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b611b7981614363565b600054610100900460ff16613d795760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051600180546001600160a01b0319166001600160a01b0390921691909117905560208101516040820151611b799190611edd565b600054610100900460ff166131a55760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b600054610100900460ff16613e605760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b611b79816000015182602001518360400151846060015161219b565b600054610100900460ff16613ed55760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b611b79816000015182602001518360400151846060015161143e565b600054610100900460ff16613f4a5760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b8051613f5590611aaf565b60005b81602001515181101561084b57613f8d82602001518281518110613f7e57613f7e615083565b6020026020010151600161179d565b80613f97816150af565b915050613f58565b600054610100900460ff16613ff85760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b805180516020820151604083015161401192919061210b565b60005b8260200151518110156109315760008360200151828151811061403957614039615083565b6020026020010151905060008160200151905061406882600001518260000151836020015184604001516118b0565b50508080614075906150af565b915050614014565b600054610100900460ff166140d65760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b80518051602082015160408301516140ef929190611f60565b60005b8260200151518110156109315760008360200151828151811061411757614117615083565b602002602001015190506000816020015190506141468260000151826000015183602001518460400151611b7c565b50508080614153906150af565b9150506140f2565b6002541561084b5760015460025460405163eb056bbb60e01b815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb90608401612fda565b6000806000806141bd866143fc565b9194509250905060006141d08684615516565b905060006141df600c8361556b565b905060006141ee600c84615502565b6141f89087615516565b905060006002600a5460ff16600281111561421557614215614f77565b14614220578461422a565b61422a8284612a5c565b90506142388a83858461441b565b9a9950505050505050505050565b6000806000614254426143fc565b50915091506129468583838761441b565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad06490602001611b01565b6000816000036142d6576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036142e6575060006111c3565b670de0b6b3a76400008381029084828161430257614302615489565b0414614344576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610a75565b82600182038161435657614356615489565b0460010191505092915050565b600054610100900460ff166143bc5760405162461bcd60e51b815260206004820152602b602482015260008051602061562683398151915260448201526a6e697469616c697a696e6760a81b6064820152608401610a75565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b6000808061440e6201518085046129c0565b9196909550909350915050565b600061294684848461442c89614443565b6144358a614461565b61443e8b61447d565b61448a565b600080614453620151808461556b565b90506112e1610e1082615502565b600080614470610e108461556b565b90506112e1603c82615502565b60006111c3603c8361556b565b600081614498603c85615472565b6144a4610e1087615472565b620151806144b38b8b8b6144db565b6144bd9190615472565b6144c79190615516565b6144d19190615516565b610de59190615516565b60006107b28410156144ec57600080fd5b838383600062253d8c60046064600c614506600e8861557f565b614510919061559f565b61451c886113246155cd565b61452691906155cd565b614530919061559f565b61453b9060036155f5565b614545919061559f565b600c80614553600e8861557f565b61455d919061559f565b61456890600c6155f5565b61457360028861557f565b61457d919061557f565b6145899061016f6155f5565b614593919061559f565b6004600c6145a2600e8961557f565b6145ac919061559f565b6145b8896112c06155cd565b6145c291906155cd565b6145ce906105b56155f5565b6145d8919061559f565b6145e4617d4b8761557f565b6145ee91906155cd565b6145f891906155cd565b614602919061557f565b61460c919061557f565b98975050505050505050565b803560ff8116811461462957600080fd5b919050565b6000806000806080858703121561464457600080fd5b61464d85614618565b966020860135965060408601359560600135945092505050565b6001600160a01b0381168114611b7957600080fd5b803561462981614667565b60006020828403121561469957600080fd5b81356112e181614667565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156146dd576146dd6146a4565b60405290565b6040516080810167ffffffffffffffff811182821017156146dd576146dd6146a4565b60405160c0810167ffffffffffffffff811182821017156146dd576146dd6146a4565b6040516020810167ffffffffffffffff811182821017156146dd576146dd6146a4565b604051601f8201601f1916810167ffffffffffffffff81118282101715614775576147756146a4565b604052919050565b600067ffffffffffffffff821115614797576147976146a4565b5060051b60200190565b600082601f8301126147b257600080fd5b813560206147c76147c28361477d565b61474c565b82815260059290921b840181019181810190868411156147e657600080fd5b8286015b8481101561480a5780356147fd81614667565b83529183019183016147ea565b509695505050505050565b8015158114611b7957600080fd5b6000806040838503121561483657600080fd5b823567ffffffffffffffff8082111561484e57600080fd5b61485a868387016147a1565b935060209150818501358181111561487157600080fd5b85019050601f8101861361488457600080fd5b80356148926147c28261477d565b81815260059190911b820183019083810190888311156148b157600080fd5b928401925b828410156148d85783356148c981614815565b825292840192908401906148b6565b80955050505050509250929050565b600080600080608085870312156148fd57600080fd5b843561490881614667565b9350602085013561491881614667565b93969395505050506040820135916060013590565b6000806040838503121561494057600080fd5b823561494b81614667565b9150602083013561495b81614667565b809150509250929050565b80356002811061462957600080fd5b60006020828403121561498757600080fd5b6112e182614966565b600082601f8301126149a157600080fd5b813560206149b16147c28361477d565b82815260069290921b840181019181810190868411156149d057600080fd5b8286015b8481101561480a57604081890312156149ed5760008081fd5b6149f56146ba565b8135614a0081614667565b815281850135614a0f81614667565b818601528352918301916040016149d4565b600082601f830112614a3257600080fd5b81356020614a426147c28361477d565b82815260069290921b84018101918181019086841115614a6157600080fd5b8286015b8481101561480a5760408189031215614a7e5760008081fd5b614a866146ba565b8135614a9181614667565b81528185013585820152835291830191604001614a65565b600060608284031215614abb57600080fd5b6040516060810181811067ffffffffffffffff82111715614ade57614ade6146a4565b6040529050808235614aef81614667565b8082525060208301356020820152604083013560408201525092915050565b600060808284031215614b2057600080fd5b614b286146e3565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b600060808284031215614b6457600080fd5b614b6c6146e3565b9050614b7782614618565b815260208201356020820152604082013560408201526060820135606082015292915050565b600060408284031215614baf57600080fd5b614bb76146ba565b9050614bc282614966565b8152602082013567ffffffffffffffff811115614bde57600080fd5b614bea848285016147a1565b60208301525092915050565b600060808284031215614c0857600080fd5b614c106146ba565b90508135614c1d81614667565b8152614c2c8360208401614aa9565b602082015292915050565b60006080808385031215614c4a57600080fd5b614c526146ba565b9150614c5e8484614aa9565b8252606083013567ffffffffffffffff811115614c7a57600080fd5b8301601f81018513614c8b57600080fd5b80356020614c9b6147c28361477d565b82815260079290921b83018101918181019088841115614cba57600080fd5b938201935b83851015614ce057614cd18986614bf6565b82529385019390820190614cbf565b808388015250505050505092915050565b60006080808385031215614d0457600080fd5b614d0c6146ba565b9150614d188484614aa9565b8252606083013567ffffffffffffffff811115614d3457600080fd5b8301601f81018513614d4557600080fd5b80356020614d556147c28361477d565b82815260079290921b83018101918181019088841115614d7457600080fd5b938201935b83851015614ce057614d8b8986614bf6565b82529385019390820190614d79565b60006101c08284031215614dad57600080fd5b614db5614706565b9050614dc18383614aa9565b8152614dd08360608401614b0e565b6020820152614de28360e08401614b52565b604082015261016082013567ffffffffffffffff80821115614e0357600080fd5b614e0f85838601614b9d565b6060840152610180840135915080821115614e2957600080fd5b614e3585838601614c37565b60808401526101a0840135915080821115614e4f57600080fd5b50614e5c84828501614cf1565b60a08301525092915050565b600060208284031215614e7a57600080fd5b813567ffffffffffffffff80821115614e9257600080fd5b9083019060208286031215614ea657600080fd5b614eae614729565b823582811115614ebd57600080fd5b929092019160c08387031215614ed257600080fd5b614eda614706565b614ee38461467c565b8152614ef16020850161467c565b602082015260408401356040820152606084013583811115614f1257600080fd5b614f1e88828701614990565b606083015250608084013583811115614f3657600080fd5b614f4288828701614a21565b60808301525060a084013583811115614f5a57600080fd5b614f6688828701614d9a565b60a083015250815295945050505050565b634e487b7160e01b600052602160045260246000fd5b6020810160028310614faf57634e487b7160e01b600052602160045260246000fd5b91905290565b600080600060608486031215614fca57600080fd5b8335614fd581614667565b95602085013595506040909401359392505050565b60008060408385031215614ffd57600080fd5b50508035926020909101359150565b60006020828403121561501e57600080fd5b5035919050565b6000806040838503121561503857600080fd5b823561504381614667565b946020939093013593505050565b6000806000806080858703121561506757600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016150c1576150c1615099565b5060010190565b6000602082840312156150da57600080fd5b5051919050565b6000602082840312156150f357600080fd5b81516112e181614667565b600082601f83011261510f57600080fd5b8151602061511f6147c28361477d565b82815260059290921b8401810191818101908684111561513e57600080fd5b8286015b8481101561480a5780518352918301918301615142565b60008060006060848603121561516e57600080fd5b835167ffffffffffffffff8082111561518657600080fd5b818601915086601f83011261519a57600080fd5b815160206151aa6147c28361477d565b82815260059290921b8401810191818101908a8411156151c957600080fd5b948201945b838610156151f05785516151e181614667565b825294820194908201906151ce565b9189015191975090935050508082111561520957600080fd5b50615216868287016150fe565b925050604084015190509250925092565b818103818111156111c3576111c3615099565b600081518084526020808501945080840160005b838110156152735781516001600160a01b03168752958201959082019060010161524e565b509495945050505050565b600060e082016001600160a01b03808b1684526020818b168186015289604086015288606086015287608086015260e060a0860152829150865180845261010086019250818801935060005b818110156152e6578451845293820193928201926001016152ca565b50505083810360c08501526152fb818661523a565b9b9a5050505050505050505050565b60005b8381101561532557818101518382015260200161530d565b50506000910152565b6000815180845261534681602086016020860161530a565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201526000611d8c604083018461532e565b60006020828403121561538e57600080fd5b815167ffffffffffffffff808211156153a657600080fd5b818401915084601f8301126153ba57600080fd5b8151818111156153cc576153cc6146a4565b6153df601f8201601f191660200161474c565b91508082528560208285010111156153f657600080fd5b61540781602084016020860161530a565b50949350505050565b600081518084526020808501945080840160005b8381101561527357815187529582019590820190600101615424565b6001600160a01b03841681526001600160e01b0319831660208201526060604082015260006129466060830184615410565b80820281158282048414176111c3576111c3615099565b634e487b7160e01b600052601260045260246000fd5b60006001600160a01b0380871683528086166020840152506001600160e01b031984166040830152608060608301526154db6080830184615410565b9695505050505050565b6000602082840312156154f757600080fd5b81516112e181614815565b60008261551157615511615489565b500490565b808201808211156111c3576111c3615099565b60006001600160a01b03808616835280851660208401525060606040830152612946606083018461532e565b634e487b7160e01b600052603160045260246000fd5b60008261557a5761557a615489565b500690565b8181036000831280158383131683831282161715612bd557612bd5615099565b6000826155ae576155ae615489565b600160ff1b8214600019841416156155c8576155c8615099565b500590565b80820182811260008312801582168215821617156155ed576155ed615099565b505092915050565b80820260008212600160ff1b8414161561561157615611615099565b81810583148215176111c3576111c361509956fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a264697066735822122000ed40909e787d7d16b02d7986cb51040fd3fee6307a92a1c4e83dc56fdd264864736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
