{
  "_format": "hh-sol-artifact-1",
  "contractName": "MigrateERC4626CFL",
  "sourceName": "contracts/MigrateERC4626CFL.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "destinationCFL_",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "destination",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Borrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "destination",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "CashOutPayout",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int256",
          "name": "currentDebt",
          "type": "int256"
        }
      ],
      "name": "DebtChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "name": "Deposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "oldDebt",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "currentDebt",
          "type": "int256"
        }
      ],
      "name": "RepayDebt",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract SignedQuoteRiskModule",
          "name": "newRiskModule",
          "type": "address"
        }
      ],
      "name": "RiskModuleChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "name": "Withdraw",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "BORROWER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "CHANGE_RM_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "CUSTOMER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "GUARDIAN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LP_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MIGRATE_NFTS_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "OWN_POLICY_CREATOR_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "POLICY_CREATOR_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "REPLACER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "RESOLVER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "asset",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "destination",
          "type": "address"
        }
      ],
      "name": "borrow",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "destination",
          "type": "address"
        }
      ],
      "name": "cashOutPayouts",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "name": "convertToAssets",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        }
      ],
      "name": "convertToShares",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentDebt",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "deposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "destinationCFL",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        },
        {
          "internalType": "contract SignedQuoteRiskModule",
          "name": "riskModule_",
          "type": "address"
        },
        {
          "internalType": "contract IERC20Upgradeable",
          "name": "asset_",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "maxDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "maxMint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "maxRedeem",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "maxWithdraw",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "policyIds",
          "type": "uint256[]"
        }
      ],
      "name": "migratePolicies",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "payout",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "premium",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "lossProb",
          "type": "uint256[]"
        },
        {
          "internalType": "uint40[]",
          "name": "expiration",
          "type": "uint40[]"
        },
        {
          "internalType": "bytes32[]",
          "name": "policyData",
          "type": "bytes32[]"
        },
        {
          "internalType": "bytes32[]",
          "name": "quoteSignatureR",
          "type": "bytes32[]"
        },
        {
          "internalType": "bytes32[]",
          "name": "quoteSignatureVS",
          "type": "bytes32[]"
        },
        {
          "internalType": "uint40[]",
          "name": "quoteValidUntil",
          "type": "uint40[]"
        }
      ],
      "name": "newPoliciesInBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "riskModules",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "payout",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "premium",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "lossProb",
          "type": "uint256[]"
        },
        {
          "internalType": "uint40[]",
          "name": "expiration",
          "type": "uint40[]"
        },
        {
          "internalType": "bytes32[]",
          "name": "policyData",
          "type": "bytes32[]"
        },
        {
          "internalType": "uint256[]",
          "name": "bucketId",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes32[]",
          "name": "quoteSignatureR",
          "type": "bytes32[]"
        },
        {
          "internalType": "bytes32[]",
          "name": "quoteSignatureVS",
          "type": "bytes32[]"
        },
        {
          "internalType": "uint40[]",
          "name": "quoteValidUntil",
          "type": "uint40[]"
        }
      ],
      "name": "newPoliciesInBatchWithRm",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "premium",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lossProb",
          "type": "uint256"
        },
        {
          "internalType": "uint40",
          "name": "expiration",
          "type": "uint40"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "policyData",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureR",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureVS",
          "type": "bytes32"
        },
        {
          "internalType": "uint40",
          "name": "quoteValidUntil",
          "type": "uint40"
        }
      ],
      "name": "newPolicy",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "policyId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "riskModule_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "premium",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lossProb",
          "type": "uint256"
        },
        {
          "internalType": "uint40",
          "name": "expiration",
          "type": "uint40"
        },
        {
          "internalType": "address",
          "name": "onBehalfOf",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "bucketId",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "policyData",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureR",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureVS",
          "type": "bytes32"
        },
        {
          "internalType": "uint40",
          "name": "quoteValidUntil",
          "type": "uint40"
        }
      ],
      "name": "newPolicyOnBehalfOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "policyId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "riskModule_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "premium",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lossProb",
          "type": "uint256"
        },
        {
          "internalType": "uint40",
          "name": "expiration",
          "type": "uint40"
        },
        {
          "internalType": "bytes32",
          "name": "policyData",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "bucketId",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureR",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureVS",
          "type": "bytes32"
        },
        {
          "internalType": "uint40",
          "name": "quoteValidUntil",
          "type": "uint40"
        }
      ],
      "name": "newPolicyWithRm",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "policyId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "onPayoutReceived",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "onPolicyExpired",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "onPolicyReplaced",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        }
      ],
      "name": "previewDeposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "name": "previewMint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "shares",
          "type": "uint256"
        }
      ],
      "name": "previewRedeem",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        }
      ],
      "name": "previewWithdraw",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "redeem",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "repayDebt",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData",
          "name": "oldPolicy",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "premium",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lossProb",
          "type": "uint256"
        },
        {
          "internalType": "uint40",
          "name": "expiration",
          "type": "uint40"
        },
        {
          "internalType": "bytes32",
          "name": "policyData",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "bucketId",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureR",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "quoteSignatureVS",
          "type": "bytes32"
        },
        {
          "internalType": "uint40",
          "name": "quoteValidUntil",
          "type": "uint40"
        }
      ],
      "name": "replacePolicy",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "policyId",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData[]",
          "name": "policy",
          "type": "tuple[]"
        },
        {
          "internalType": "uint256[]",
          "name": "payout",
          "type": "uint256[]"
        }
      ],
      "name": "resolvePoliciesInBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData",
          "name": "policy",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        }
      ],
      "name": "resolvePolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srScr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "ensuroCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "partnerCommission",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "jrCoc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "srCoc",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData",
          "name": "policy",
          "type": "tuple"
        },
        {
          "internalType": "bool",
          "name": "customerWon",
          "type": "bool"
        }
      ],
      "name": "resolvePolicyFullPayout",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "riskModule",
      "outputs": [
        {
          "internalType": "contract SignedQuoteRiskModule",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract SignedQuoteRiskModule",
          "name": "riskModule_",
          "type": "address"
        }
      ],
      "name": "setRiskModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalAssets",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assets",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "withdraw",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60c0604052306080523480156200001557600080fd5b506040516200556038038062005560833981016040819052620000389162000115565b6200004262000054565b6001600160a01b031660a05262000147565b600054610100900460ff1615620000c15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161462000113576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000602082840312156200012857600080fd5b81516001600160a01b03811681146200014057600080fd5b9392505050565b60805160a0516153d06200019060003960008181610c600152611a7e015260008181611267015281816112a7015281816114d40152818161151401526115a301526153d06000f3fe6080604052600436106103fa5760003560e01c8063759076e511610213578063b7ee7d0111610123578063d905777e116100ab578063e5ef6f4b1161007a578063e5ef6f4b14610ca4578063e888b16714610cc4578063e8e617b714610ce4578063ef8b30f714610b6e578063ffa600e314610d0e57600080fd5b8063d905777e14610c0e578063dd62ed3e14610c2e578063de0e341b14610c4e578063e1d3945014610c8257600080fd5b8063c6e6f592116100f2578063c6e6f59214610b6e578063ce96cb7714610b8e578063d3fba1a214610bae578063d547741f14610bce578063d6281d3e14610bee57600080fd5b8063b7ee7d0114610b0e578063ba08765214610b2e578063c1d278cf14610b4e578063c63d75b6146107c357600080fd5b806395d89b41116101a6578063a457c2d711610175578063a457c2d714610a5a578063a9059cbb14610a7a578063af0e7e0c14610a9a578063b3d7f6b914610ace578063b460af9414610aee57600080fd5b806395d89b41146109f157806398e7863514610a065780639ed1a98514610a26578063a217fddf14610a4557600080fd5b806382ff9c8c116101e257806382ff9c8c146109715780638f15b4141461099157806391d14854146109b157806394bf804d146109d157600080fd5b8063759076e5146108e557806378b86fbf146108fb57806378fab2601461092f5780637a702b3c1461095157600080fd5b80632f2ff15d1161030e57806345f739ff116102a157806352d1902d1161027057806352d1902d1461083a5780635ee0c7dd1461084f5780636b09de451461086f5780636e553f651461088f57806370a08231146108af57600080fd5b806345f739ff146107e55780634b3fd148146108075780634cdad506146104db5780634f1ef2861461082757600080fd5b80633659cfe6116102dd5780633659cfe61461075057806338d52e0f1461077057806339509351146107a3578063402d267d146107c357600080fd5b80632f2ff15d146106b5578063313ce567146106d55780633256657f146106fc57806336568abe1461073057600080fd5b80630a28a4771161039157806318160ddd1161036057806318160ddd146105e8578063204d7923146105fd57806323b872dd14610631578063248a9ca31461065157806324ea54f41461068157600080fd5b80630a28a4771461051b5780630abf6b601461053b5780630e7b949e1461056f578063150b7a02146105a357600080fd5b806305918a79116103cd57806305918a791461049957806306fdde03146104b957806307a2d13a146104db578063095ea7b3146104fb57600080fd5b806301e1d114146103ff57806301ffc9a71461042757806302a2e3bb1461045757806304f6f5b214610477575b600080fd5b34801561040b57600080fd5b50610414610d2e565b6040519081526020015b60405180910390f35b34801561043357600080fd5b50610447610442366004613f19565b610d72565b604051901515815260200161041e565b34801561046357600080fd5b50610414610472366004613f72565b610db8565b34801561048357600080fd5b50610497610492366004614011565b610e2f565b005b3480156104a557600080fd5b506104146104b436600461402e565b610fd8565b3480156104c557600080fd5b506104ce6110ab565b60405161041e91906140d2565b3480156104e757600080fd5b506104146104f6366004614105565b61113d565b34801561050757600080fd5b5061044761051636600461411e565b61114a565b34801561052757600080fd5b50610414610536366004614105565b611162565b34801561054757600080fd5b506104147f54371fd80f4f86e64c2b0cfb7152ea6c6649b1b07a69bd719c7da8bd4f65902881565b34801561057b57600080fd5b506104147f2344277e405079ec07749d374ba0b5862a4e45a6a05ac889dbb4a991c6f9354d81565b3480156105af57600080fd5b506105cf6105be36600461414a565b630a85bd0160e11b95945050505050565b6040516001600160e01b0319909116815260200161041e565b3480156105f457600080fd5b5060fd54610414565b34801561060957600080fd5b506104147f288a15c4a15d470e4cd9cad2f113b91206b520c26dbd3dd74627f0c057baa19c81565b34801561063d57600080fd5b5061044761064c3660046141e9565b61116f565b34801561065d57600080fd5b5061041461066c366004614105565b60009081526065602052604090206001015490565b34801561068d57600080fd5b506104147f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504181565b3480156106c157600080fd5b506104976106d036600461422a565b611195565b3480156106e157600080fd5b506106ea6111bf565b60405160ff909116815260200161041e565b34801561070857600080fd5b506104147f65148e5fc86c78934a61be40b7d689d70c62f4628997659546a93c8fb80c2c1681565b34801561073c57600080fd5b5061049761074b36600461422a565b6111df565b34801561075c57600080fd5b5061049761076b366004614011565b61125d565b34801561077c57600080fd5b5061012d546001600160a01b03165b6040516001600160a01b03909116815260200161041e565b3480156107af57600080fd5b506104476107be36600461411e565b61133c565b3480156107cf57600080fd5b506104146107de366004614011565b5060001990565b3480156107f157600080fd5b5061041460008051602061537b83398151915281565b34801561081357600080fd5b5061049761082236600461422a565b61135e565b6104976108353660046142f9565b6114ca565b34801561084657600080fd5b50610414611596565b34801561085b57600080fd5b506105cf61086a36600461435d565b611649565b34801561087b57600080fd5b5061049761088a366004614105565b61165a565b34801561089b57600080fd5b506104146108aa36600461422a565b6116f5565b3480156108bb57600080fd5b506104146108ca366004614011565b6001600160a01b0316600090815260fb602052604090205490565b3480156108f157600080fd5b5061016054610414565b34801561090757600080fd5b506104147f996bbdfe02e380a7d57d331edc0b802eeb8b44fb25af615058afab9a18e8a02381565b34801561093b57600080fd5b506104146000805160206152f483398151915281565b34801561095d57600080fd5b5061049761096c3660046143bc565b611723565b34801561097d57600080fd5b5061041461098c3660046143e9565b6117b1565b34801561099d57600080fd5b506104976109ac36600461449a565b6118b3565b3480156109bd57600080fd5b506104476109cc36600461422a565b6119cc565b3480156109dd57600080fd5b506104146109ec36600461422a565b6119f7565b3480156109fd57600080fd5b506104ce611a1b565b348015610a1257600080fd5b50610497610a213660046145b2565b611a2a565b348015610a3257600080fd5b5061015f546001600160a01b031661078b565b348015610a5157600080fd5b50610414600081565b348015610a6657600080fd5b50610447610a7536600461411e565b611b38565b348015610a8657600080fd5b50610447610a9536600461411e565b611bbe565b348015610aa657600080fd5b506104147f13413a37e797fdcf9481024e55772fdede41168298ffead0664159cf5d07455581565b348015610ada57600080fd5b50610414610ae9366004614105565b611bcc565b348015610afa57600080fd5b50610414610b093660046145e7565b611bd9565b348015610b1a57600080fd5b50610414610b29366004614629565b611c07565b348015610b3a57600080fd5b50610414610b493660046145e7565b611d5b565b348015610b5a57600080fd5b50610497610b69366004614769565b611d80565b348015610b7a57600080fd5b50610414610b89366004614105565b611eea565b348015610b9a57600080fd5b50610414610ba9366004614011565b611ef7565b348015610bba57600080fd5b50610497610bc93660046148f4565b611f12565b348015610bda57600080fd5b50610497610be936600461422a565b612005565b348015610bfa57600080fd5b506105cf610c0936600461435d565b61202a565b348015610c1a57600080fd5b50610414610c29366004614011565b6120c2565b348015610c3a57600080fd5b50610414610c4936600461498c565b6120db565b348015610c5a57600080fd5b5061078b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610c8e57600080fd5b5061041460008051602061535b83398151915281565b348015610cb057600080fd5b50610497610cbf3660046149ba565b612106565b348015610cd057600080fd5b50610497610cdf36600461422a565b6122ca565b348015610cf057600080fd5b506105cf610cff3660046141e9565b63e8e617b760e01b9392505050565b348015610d1a57600080fd5b50610497610d29366004614b08565b6124b2565b600080610d39612509565b90506000610160541215610d645761016054610d5490614b4d565b610d5e9082614b69565b91505090565b61016054610d5e9082614b7c565b60006001600160e01b03198216633ece0a8960e01b1480610da357506001600160e01b03198216635ee0c7dd60e01b145b80610db25750610db28261257d565b92915050565b60007f54371fd80f4f86e64c2b0cfb7152ea6c6649b1b07a69bd719c7da8bd4f659028610de4816125b2565b6000610dee612509565b9050610e038e8e8e8e8e8e8e8e8e8e8e6125bc565b50610e1e610e0f612509565b610e199083614b69565b6126e0565b50509b9a5050505050505050505050565b7f996bbdfe02e380a7d57d331edc0b802eeb8b44fb25af615058afab9a18e8a023610e59816125b2565b6001600160a01b038216610e885760405162461bcd60e51b8152600401610e7f90614b8f565b60405180910390fd5b610e90612732565b6001600160a01b0316826001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efb9190614bec565b6001600160a01b031614610f825760405162461bcd60e51b815260206004820152604260248201527f4552433436323643617368466c6f774c656e6465723a206e6577207269736b4d60448201527f6f64756c65206d7573742062656c6f6e6720746f207468652073616d6520706f6064820152611bdb60f21b608482015260a401610e7f565b61015f80546001600160a01b0319166001600160a01b0384169081179091556040519081527fd4208580168eba30c1d9ae9fa910d2dba68e0ef5a8badee2d4e27c9d3d4a39039060200160405180910390a15050565b600060008051602061537b833981519152610ff2816125b2565b6000610ffc612509565b905061101161015f546001600160a01b031690565b6001600160a01b03166305918a798d8d8d8d308d8d8d8d6040518a63ffffffff1660e01b815260040161104c99989796959493929190614c09565b6020604051808303816000875af115801561106b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108f9190614c5b565b925061109c610e0f612509565b50509998505050505050505050565b606060fe80546110ba90614c74565b80601f01602080910402602001604051908101604052809291908181526020018280546110e690614c74565b80156111335780601f1061110857610100808354040283529160200191611133565b820191906000526020600020905b81548152906001019060200180831161111657829003601f168201915b5050505050905090565b6000610db28260006127a1565b6000336111588185856127db565b5060019392505050565b6000610db28260016128ff565b60003361117d85828561292f565b6111888585856129a3565b60019150505b9392505050565b6000828152606560205260409020600101546111b0816125b2565b6111ba8383612b4e565b505050565b60008061012d546111da9190600160a01b900460ff16614ca8565b905090565b6001600160a01b038116331461124f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610e7f565b6112598282612bd4565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036112a55760405162461bcd60e51b8152600401610e7f90614cc1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112ee600080516020615314833981519152546001600160a01b031690565b6001600160a01b0316146113145760405162461bcd60e51b8152600401610e7f90614d0d565b61131d81612c3b565b6040805160008082526020820190925261133991839190612c65565b50565b60003361115881858561134f83836120db565b6113599190614b7c565b6127db565b7f2344277e405079ec07749d374ba0b5862a4e45a6a05ac889dbb4a991c6f9354d611388816125b2565b82611391612509565b10156113fb5760405162461bcd60e51b815260206004820152603360248201527f4552433436323643617368466c6f774c656e6465723a204e6f7420656e6f7567604482015272682062616c616e636520746f20626f72726f7760681b6064820152608401610e7f565b611404836126e0565b61140c612dd0565b60405163a9059cbb60e01b81526001600160a01b03848116600483015260248201869052919091169063a9059cbb906044016020604051808303816000875af115801561145d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114819190614d59565b50816001600160a01b03167fcbc04eca7e9da35cb1393a6135a199ca52e450d5e9251cbd99f7847d33a36750846040516114bd91815260200190565b60405180910390a2505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036115125760405162461bcd60e51b8152600401610e7f90614cc1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661155b600080516020615314833981519152546001600160a01b031690565b6001600160a01b0316146115815760405162461bcd60e51b8152600401610e7f90614d0d565b61158a82612c3b565b61125982826001612c65565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116365760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610e7f565b5060008051602061531483398151915290565b635ee0c7dd60e01b5b949350505050565b600019810361167d576000610160541361167557600061167a565b610160545b90505b6101605461168a82612e17565b6116a9333084611698612dd0565b6001600160a01b0316929190612e2a565b6101605460408051848152602081018490529081019190915233907f5970ab368b41592b8ee398793f9f4032529294b5a1244e1b2b59fd6629d0e79b9060600160405180910390a25050565b600060008051602061535b83398151915261170f816125b2565b6117198484612e95565b91505b5092915050565b6000805160206152f483398151915261173b816125b2565b61174d61018084016101608501614011565b6001600160a01b0316637a702b3c84846040518363ffffffff1660e01b815260040161177a929190614e42565b600060405180830381600087803b15801561179457600080fd5b505af11580156117a8573d6000803e3d6000fd5b50505050505050565b60007f13413a37e797fdcf9481024e55772fdede41168298ffead0664159cf5d0745556117dd816125b2565b60006117e7612509565b90506117fb6101808e016101608f01614011565b6001600160a01b03166382ff9c8c8e8e8e8e8e8e8e8e8e8e6040518b63ffffffff1660e01b81526004016118389a99989796959493929190614e5f565b6020604051808303816000875af1158015611857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187b9190614c5b565b92506000611887612509565b6118919083614b69565b905080156118a2576118a2816126e0565b5050509a9950505050505050505050565b600054610100900460ff16158080156118d35750600054600160ff909116105b806118ed5750303b1580156118ed575060005460ff166001145b6119505760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610e7f565b6000805460ff191660011790558015611973576000805461ff0019166101001790555b61197f85858585612eaf565b80156119c5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600060008051602061535b833981519152611a11816125b2565b6117198484612f75565b606060ff80546110ba90614c74565b7f65148e5fc86c78934a61be40b7d689d70c62f4628997659546a93c8fb80c2c16611a54816125b2565b6000611a5e612732565b905060005b8351811015611b3257816001600160a01b03166342842e0e307f0000000000000000000000000000000000000000000000000000000000000000878581518110611aaf57611aaf614ec3565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015611b0957600080fd5b505af1158015611b1d573d6000803e3d6000fd5b5050505080611b2b90614ed9565b9050611a63565b50505050565b60003381611b4682866120db565b905083811015611ba65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e7f565b611bb382868684036127db565b506001949350505050565b6000336111588185856129a3565b6000610db28260016127a1565b600060008051602061535b833981519152611bf3816125b2565b611bfe858585612f8f565b95945050505050565b600060008051602061537b833981519152611c21816125b2565b6000611c2b612509565b90506000198703611cbc578c6001600160a01b03166305918a798d8d8d8d308e8d8d8d6040518a63ffffffff1660e01b8152600401611c7299989796959493929190614c09565b6020604051808303816000875af1158015611c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb59190614c5b565b9250611d40565b8c6001600160a01b031663766dbc568d8d8d8d308e8e8e8e8e6040518b63ffffffff1660e01b8152600401611cfa9a99989796959493929190614ef2565b6020604051808303816000875af1158015611d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3d9190614c5b565b92505b611d4b610e0f612509565b50509a9950505050505050505050565b600060008051602061535b833981519152611d75816125b2565b611bfe858585613003565b60008051602061537b833981519152611d98816125b2565b6000611da2612509565b905060005b8b51811015611ed057611ebd8d8281518110611dc557611dc5614ec3565b60200260200101518d8381518110611ddf57611ddf614ec3565b60200260200101518d8481518110611df957611df9614ec3565b60200260200101518d8581518110611e1357611e13614ec3565b60200260200101518d8681518110611e2d57611e2d614ec3565b6020026020010151308d8881518110611e4857611e48614ec3565b60200260200101518f8981518110611e6257611e62614ec3565b60200260200101518e8a81518110611e7c57611e7c614ec3565b60200260200101518e8b81518110611e9657611e96614ec3565b60200260200101518e8c81518110611eb057611eb0614ec3565b60200260200101516125bc565b5080611ec881614ed9565b915050611da7565b50611edc610e0f612509565b505050505050505050505050565b6000610db28260006128ff565b6000610db2611f0583613077565b611f0d612509565b61309b565b6000805160206152f4833981519152611f2a816125b2565b60005b82518110156119c557848482818110611f4857611f48614ec3565b90506101c00201610160016020810190611f629190614011565b6001600160a01b0316637a702b3c868684818110611f8257611f82614ec3565b90506101c00201858481518110611f9b57611f9b614ec3565b60200260200101516040518363ffffffff1660e01b8152600401611fc0929190614e42565b600060405180830381600087803b158015611fda57600080fd5b505af1158015611fee573d6000803e3d6000fd5b505050508080611ffd90614ed9565b915050611f2d565b600082815260656020526040902060010154612020816125b2565b6111ba8383612bd4565b6000612034612732565b6001600160a01b0316336001600160a01b0316146120a85760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792074686520506f6c696379506f6f6c2073686f756c642063616c6c2060448201526a1d1a1a5cc81b595d1a1bd960aa1b6064820152608401610e7f565b6120b182612e17565b50636b140e9f60e11b949350505050565b6000610db26120d0836130b1565b611f0d610b89612509565b6001600160a01b03918216600090815260fc6020908152604080832093909416825291909152205490565b60008051602061537b83398151915261211e816125b2565b6000612128612509565b9050600061213f61015f546001600160a01b031690565b905060005b8b518110156122a757816001600160a01b03166305918a798d838151811061216e5761216e614ec3565b60200260200101518d848151811061218857612188614ec3565b60200260200101518d85815181106121a2576121a2614ec3565b60200260200101518d86815181106121bc576121bc614ec3565b6020026020010151308e88815181106121d7576121d7614ec3565b60200260200101518e89815181106121f1576121f1614ec3565b60200260200101518e8a8151811061220b5761220b614ec3565b60200260200101518e8b8151811061222557612225614ec3565b60200260200101516040518a63ffffffff1660e01b815260040161225199989796959493929190614c09565b6020604051808303816000875af1158015612270573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122949190614c5b565b508061229f81614ed9565b915050612144565b506122bd6122b3612509565b610e199084614b69565b5050505050505050505050565b7f288a15c4a15d470e4cd9cad2f113b91206b520c26dbd3dd74627f0c057baa19c6122f4816125b2565b60006101605412801561231357506101605461230f90614b4d565b8313155b61237c5760405162461bcd60e51b815260206004820152603460248201527f4552433436323643617368466c6f774c656e6465723a20616d6f756e74206d756044820152731cdd081899481b195cdcc81d1a185b881919589d60621b6064820152608401610e7f565b82612385612509565b10156123f05760405162461bcd60e51b815260206004820152603460248201527f4552433436323643617368466c6f774c656e6465723a204e6f7420656e6f75676044820152731a0818985b185b98d9481d1bc818d85cda1bdd5d60621b6064820152608401610e7f565b6123f9836126e0565b612401612dd0565b60405163a9059cbb60e01b81526001600160a01b03848116600483015260248201869052919091169063a9059cbb906044016020604051808303816000875af1158015612452573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124769190614d59565b50816001600160a01b03167fe2a52c6ceabaf7f3fc3f521853d811e633371d1a7d9d4678b585ac2348ee0d8f846040516114bd91815260200190565b6000805160206152f48339815191526124ca816125b2565b6124dc61018084016101608501614011565b6001600160a01b031663ffa600e384846040518363ffffffff1660e01b815260040161177a929190614f4d565b6000612513612dd0565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015612559573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da9190614c5b565b60006001600160e01b03198216637965db0b60e01b1480610db257506301ffc9a760e01b6001600160e01b0319831614610db2565b61133981336130cf565b6000600019860361264d576040516305918a7960e01b81526001600160a01b038d16906305918a7990612603908e908e908e908e908e908d908d908d908d90600401614c09565b6020604051808303816000875af1158015612622573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126469190614c5b565b90506126d1565b604051633b36de2b60e11b81526001600160a01b038d169063766dbc569061268b908e908e908e908e908e908d908f908e908e908e90600401614ef2565b6020604051808303816000875af11580156126aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ce9190614c5b565b90505b9b9a5050505050505050505050565b8061016060008282546126f39190614f6c565b9091555050610160546040519081527fc7f3c2106cf3d0f81736749a1583b800014a964dc37d2f0eb8216c1b852317289060200160405180910390a150565b61015f5460408051634d15eb0360e01b815290516000926001600160a01b031691634d15eb039160048083019260209291908290030181865afa15801561277d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da9190614bec565b600061118e6127ae610d2e565b6127b9906001614b7c565b6127c56000600a615078565b60fd546127d29190614b7c565b85919085613128565b6001600160a01b03831661283d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e7f565b6001600160a01b03821661289e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e7f565b6001600160a01b03838116600081815260fc602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061118e61290f82600a615078565b60fd5461291c9190614b7c565b612924610d2e565b6127d2906001614b7c565b600061293b84846120db565b90506000198114611b3257818110156129965760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610e7f565b611b3284848484036127db565b6001600160a01b038316612a075760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e7f565b6001600160a01b038216612a695760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e7f565b6001600160a01b038316600090815260fb602052604090205481811015612ae15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610e7f565b6001600160a01b03808516600081815260fb602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612b419086815260200190565b60405180910390a3611b32565b612b5882826119cc565b6112595760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612b903390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612bde82826119cc565b156112595760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041611259816125b2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612c98576111ba83613183565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612cf2575060408051601f3d908101601f19168201909252612cef91810190614c5b565b60015b612d555760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610e7f565b6000805160206153148339815191528114612dc45760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610e7f565b506111ba83838361321f565b6000612dda612732565b6001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561277d573d6000803e3d6000fd5b8061016060008282546126f39190615087565b6040516001600160a01b0380851660248301528316604482015260648101829052611b329085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613244565b600080612ea184611eea565b905061118e33848684613319565b600054610100900460ff16612ed65760405162461bcd60e51b8152600401610e7f906150a7565b612ede613398565b612ee6613398565b6001600160a01b038116612f595760405162461bcd60e51b815260206004820152603460248201527f4552433436323643617368466c6f774c656e6465723a2061737365745f2063616044820152736e6e6f74206265207a65726f206164647265737360601b6064820152608401610e7f565b612f62816133c1565b612f6c84846133f1565b611b3282613422565b600080612f8184611bcc565b905061118e33848387613319565b6000612f9a82611ef7565b841115612fe95760405162461bcd60e51b815260206004820152601f60248201527f455243343632363a207769746864726177206d6f7265207468616e206d6178006044820152606401610e7f565b6000612ff485611162565b90506116523385858885613526565b600061300e826120c2565b84111561305d5760405162461bcd60e51b815260206004820152601d60248201527f455243343632363a2072656465656d206d6f7265207468616e206d61780000006044820152606401610e7f565b60006130688561113d565b90506116523385858489613526565b6001600160a01b038116600090815260fb6020526040812054610db29060006127a1565b60008183106130aa578161118e565b5090919050565b6001600160a01b038116600090815260fb6020526040812054610db2565b6130d982826119cc565b611259576130e6816135a8565b6130f18360206135ba565b6040516020016131029291906150f2565b60408051601f198184030181529082905262461bcd60e51b8252610e7f916004016140d2565b600080613136868686613756565b9050600183600281111561314c5761314c615167565b1480156131695750600084806131645761316461517d565b868809115b15611bfe57613179600182614b7c565b9695505050505050565b6001600160a01b0381163b6131f05760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610e7f565b60008051602061531483398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61322883613840565b6000825111806132355750805b156111ba57611b328383613880565b6000613299826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166138a59092919063ffffffff16565b90508051600014806132ba5750808060200190518101906132ba9190614d59565b6111ba5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610e7f565b61012d54613332906001600160a01b0316853085612e2a565b61333c83826138b4565b826001600160a01b0316846001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7848460405161338a929190918252602082015260400190565b60405180910390a350505050565b600054610100900460ff166133bf5760405162461bcd60e51b8152600401610e7f906150a7565b565b600054610100900460ff166133e85760405162461bcd60e51b8152600401610e7f906150a7565b61133981613975565b600054610100900460ff166134185760405162461bcd60e51b8152600401610e7f906150a7565b61125982826139fb565b600054610100900460ff166134495760405162461bcd60e51b8152600401610e7f906150a7565b6001600160a01b03811661346f5760405162461bcd60e51b8152600401610e7f90614b8f565b61347a600033613a3b565b61015f80546001600160a01b0319166001600160a01b03831617905561349e612dd0565b6001600160a01b031663095ea7b36134b4612732565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260001960248201526044016020604051808303816000875af1158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112599190614d59565b8161352f612509565b101561359b5760405162461bcd60e51b815260206004820152603560248201527f4552433436323643617368466c6f774c656e6465723a204e6f7420656e6f7567604482015274682062616c616e636520746f20776974686472617760581b6064820152608401610e7f565b6119c58585858585613a45565b6060610db26001600160a01b03831660145b606060006135c9836002615193565b6135d4906002614b7c565b67ffffffffffffffff8111156135ec576135ec61425a565b6040519080825280601f01601f191660200182016040528015613616576020820181803683370190505b509050600360fc1b8160008151811061363157613631614ec3565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061366057613660614ec3565b60200101906001600160f81b031916908160001a9053506000613684846002615193565b61368f906001614b7c565b90505b6001811115613707576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106136c3576136c3614ec3565b1a60f81b8282815181106136d9576136d9614ec3565b60200101906001600160f81b031916908160001a90535060049490941c93613700816151b2565b9050613692565b50831561118e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610e7f565b6000808060001985870985870292508281108382030391505080600003613790578382816137865761378661517d565b049250505061118e565b8084116137d75760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610e7f565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b61384981613183565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061118e838360405180606001604052806027815260200161533460279139613af2565b60606116528484600085613b60565b6001600160a01b03821661390a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610e7f565b8060fd600082825461391c9190614b7c565b90915550506001600160a01b038216600081815260fb60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600054610100900460ff1661399c5760405162461bcd60e51b8152600401610e7f906150a7565b6000806139a883613c3b565b91509150816139b85760126139ba565b805b61012d80546001600160a01b039095166001600160a01b031960ff93909316600160a01b02929092166001600160a81b031990951694909417179092555050565b600054610100900460ff16613a225760405162461bcd60e51b8152600401610e7f906150a7565b60fe613a2e8382615217565b5060ff6111ba8282615217565b6112598282612b4e565b826001600160a01b0316856001600160a01b031614613a6957613a6983868361292f565b613a738382613d17565b61012d54613a8b906001600160a01b03168584613e4b565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051613ae3929190918252602082015260400190565b60405180910390a45050505050565b6060600080856001600160a01b031685604051613b0f91906152d7565b600060405180830381855af49150503d8060008114613b4a576040519150601f19603f3d011682016040523d82523d6000602084013e613b4f565b606091505b509150915061317986838387613e7b565b606082471015613bc15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610e7f565b600080866001600160a01b03168587604051613bdd91906152d7565b60006040518083038185875af1925050503d8060008114613c1a576040519150601f19603f3d011682016040523d82523d6000602084013e613c1f565b606091505b5091509150613c3087838387613e7b565b979650505050505050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290516000918291829182916001600160a01b03871691613c82916152d7565b600060405180830381855afa9150503d8060008114613cbd576040519150601f19603f3d011682016040523d82523d6000602084013e613cc2565b606091505b5091509150818015613cd657506020815110155b15613d0a57600081806020019051810190613cf19190614c5b565b905060ff8111613d08576001969095509350505050565b505b5060009485945092505050565b6001600160a01b038216613d775760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610e7f565b6001600160a01b038216600090815260fb602052604090205481811015613deb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610e7f565b6001600160a01b038316600081815260fb60209081526040808320868603905560fd80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6040516001600160a01b0383166024820152604481018290526111ba90849063a9059cbb60e01b90606401612e5e565b60608315613eea578251600003613ee3576001600160a01b0385163b613ee35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e7f565b5081611652565b6116528383815115613eff5781518083602001fd5b8060405162461bcd60e51b8152600401610e7f91906140d2565b600060208284031215613f2b57600080fd5b81356001600160e01b03198116811461118e57600080fd5b6001600160a01b038116811461133957600080fd5b803564ffffffffff81168114613f6d57600080fd5b919050565b60008060008060008060008060008060006101608c8e031215613f9457600080fd5b8b35613f9f81613f43565b9a5060208c0135995060408c0135985060608c01359750613fc260808d01613f58565b965060a08c0135613fd281613f43565b955060c08c0135945060e08c013593506101008c013592506101208c01359150613fff6101408d01613f58565b90509295989b509295989b9093969950565b60006020828403121561402357600080fd5b813561118e81613f43565b60008060008060008060008060006101208a8c03121561404d57600080fd5b8935985060208a0135975060408a0135965061406b60608b01613f58565b955060808a013561407b81613f43565b945060a08a0135935060c08a0135925060e08a0135915061409f6101008b01613f58565b90509295985092959850929598565b60005b838110156140c95781810151838201526020016140b1565b50506000910152565b60208152600082518060208401526140f18160408501602087016140ae565b601f01601f19169190910160400192915050565b60006020828403121561411757600080fd5b5035919050565b6000806040838503121561413157600080fd5b823561413c81613f43565b946020939093013593505050565b60008060008060006080868803121561416257600080fd5b853561416d81613f43565b9450602086013561417d81613f43565b935060408601359250606086013567ffffffffffffffff808211156141a157600080fd5b818801915088601f8301126141b557600080fd5b8135818111156141c457600080fd5b8960208285010111156141d657600080fd5b9699959850939650602001949392505050565b6000806000606084860312156141fe57600080fd5b833561420981613f43565b9250602084013561421981613f43565b929592945050506040919091013590565b6000806040838503121561423d57600080fd5b82359150602083013561424f81613f43565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156142995761429961425a565b604052919050565b600067ffffffffffffffff8311156142bb576142bb61425a565b6142ce601f8401601f1916602001614270565b90508281528383830111156142e257600080fd5b828260208301376000602084830101529392505050565b6000806040838503121561430c57600080fd5b823561431781613f43565b9150602083013567ffffffffffffffff81111561433357600080fd5b8301601f8101851361434457600080fd5b614353858235602084016142a1565b9150509250929050565b6000806000806080858703121561437357600080fd5b843561437e81613f43565b9350602085013561438e81613f43565b93969395505050506040820135916060013590565b60006101c082840312156143b657600080fd5b50919050565b6000806101e083850312156143d057600080fd5b6143da84846143a3565b946101c0939093013593505050565b6000806000806000806000806000806102e08b8d03121561440957600080fd5b6144138c8c6143a3565b99506101c08b013598506101e08b013597506102008b0135965061443a6102208c01613f58565b95506102408b013594506102608b013593506102808b013592506102a08b013591506144696102c08c01613f58565b90509295989b9194979a5092959850565b600082601f83011261448b57600080fd5b61118e838335602085016142a1565b600080600080608085870312156144b057600080fd5b843567ffffffffffffffff808211156144c857600080fd5b6144d48883890161447a565b955060208701359150808211156144ea57600080fd5b506144f78782880161447a565b935050604085013561450881613f43565b9150606085013561451881613f43565b939692955090935050565b600067ffffffffffffffff82111561453d5761453d61425a565b5060051b60200190565b600082601f83011261455857600080fd5b8135602061456d61456883614523565b614270565b82815260059290921b8401810191818101908684111561458c57600080fd5b8286015b848110156145a75780358352918301918301614590565b509695505050505050565b6000602082840312156145c457600080fd5b813567ffffffffffffffff8111156145db57600080fd5b61171984828501614547565b6000806000606084860312156145fc57600080fd5b83359250602084013561460e81613f43565b9150604084013561461e81613f43565b809150509250925092565b6000806000806000806000806000806101408b8d03121561464957600080fd5b8a3561465481613f43565b995060208b0135985060408b0135975060608b0135965061467760808c01613f58565b955060a08b0135945060c08b0135935060e08b013592506101008b013591506144696101208c01613f58565b600082601f8301126146b457600080fd5b813560206146c461456883614523565b82815260059290921b840181019181810190868411156146e357600080fd5b8286015b848110156145a75780356146fa81613f43565b83529183019183016146e7565b600082601f83011261471857600080fd5b8135602061472861456883614523565b82815260059290921b8401810191818101908684111561474757600080fd5b8286015b848110156145a75761475c81613f58565b835291830191830161474b565b6000806000806000806000806000806101408b8d03121561478957600080fd5b8a3567ffffffffffffffff808211156147a157600080fd5b6147ad8e838f016146a3565b9b5060208d01359150808211156147c357600080fd5b6147cf8e838f01614547565b9a5060408d01359150808211156147e557600080fd5b6147f18e838f01614547565b995060608d013591508082111561480757600080fd5b6148138e838f01614547565b985060808d013591508082111561482957600080fd5b6148358e838f01614707565b975060a08d013591508082111561484b57600080fd5b6148578e838f01614547565b965060c08d013591508082111561486d57600080fd5b6148798e838f01614547565b955060e08d013591508082111561488f57600080fd5b61489b8e838f01614547565b94506101008d01359150808211156148b257600080fd5b6148be8e838f01614547565b93506101208d01359150808211156148d557600080fd5b506148e28d828e01614707565b9150509295989b9194979a5092959850565b60008060006040848603121561490957600080fd5b833567ffffffffffffffff8082111561492157600080fd5b818601915086601f83011261493557600080fd5b81358181111561494457600080fd5b8760206101c08302850101111561495a57600080fd5b60209283019550935090850135908082111561497557600080fd5b5061498286828701614547565b9150509250925092565b6000806040838503121561499f57600080fd5b82356149aa81613f43565b9150602083013561424f81613f43565b600080600080600080600080610100898b0312156149d757600080fd5b883567ffffffffffffffff808211156149ef57600080fd5b6149fb8c838d01614547565b995060208b0135915080821115614a1157600080fd5b614a1d8c838d01614547565b985060408b0135915080821115614a3357600080fd5b614a3f8c838d01614547565b975060608b0135915080821115614a5557600080fd5b614a618c838d01614707565b965060808b0135915080821115614a7757600080fd5b614a838c838d01614547565b955060a08b0135915080821115614a9957600080fd5b614aa58c838d01614547565b945060c08b0135915080821115614abb57600080fd5b614ac78c838d01614547565b935060e08b0135915080821115614add57600080fd5b50614aea8b828c01614707565b9150509295985092959890939650565b801515811461133957600080fd5b6000806101e08385031215614b1c57600080fd5b614b2684846143a3565b91506101c083013561424f81614afa565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b8201614b6257614b62614b37565b5060000390565b81810381811115610db257610db2614b37565b80820180821115610db257610db2614b37565b60208082526039908201527f4552433436323643617368466c6f774c656e6465723a207269736b4d6f64756c60408201527f655f2063616e6e6f74206265207a65726f206164647265737300000000000000606082015260800190565b600060208284031215614bfe57600080fd5b815161118e81613f43565b9889526020890197909752604088019590955264ffffffffff93841660608801526001600160a01b0392909216608087015260a086015260c085015260e0840191909152166101008201526101200190565b600060208284031215614c6d57600080fd5b5051919050565b600181811c90821680614c8857607f821691505b6020821081036143b657634e487b7160e01b600052602260045260246000fd5b60ff8181168382160190811115610db257610db2614b37565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b600060208284031215614d6b57600080fd5b815161118e81614afa565b8035613f6d81613f43565b803582526020810135602083015260408101356040830152606081013560608301526080810135608083015260a081013560a083015260c081013560c083015260e081013560e0830152610100808201358184015250610120808201358184015250610140808201358184015250610160614dfd818301614d76565b6001600160a01b031690830152610180614e18828201613f58565b64ffffffffff16908301526101a0614e31828201613f58565b64ffffffffff811684830152611b32565b6101e08101614e518285614d81565b826101c08301529392505050565b6102e08101614e6e828d614d81565b6101c082019a909a526101e081019890985261020088019690965264ffffffffff9485166102208801526102408701939093526102608601919091526102808501526102a0840152166102c090910152919050565b634e487b7160e01b600052603260045260246000fd5b600060018201614eeb57614eeb614b37565b5060010190565b998a5260208a0198909852604089019690965264ffffffffff94851660608901526001600160a01b0393909316608088015260a087019190915260c086015260e0850152610100840191909152166101208201526101400190565b6101e08101614f5c8285614d81565b8215156101c08301529392505050565b8082018281126000831280158216821582161715614f8c57614f8c614b37565b505092915050565b600181815b80851115614fcf578160001904821115614fb557614fb5614b37565b80851615614fc257918102915b93841c9390800290614f99565b509250929050565b600082614fe657506001610db2565b81614ff357506000610db2565b816001811461500957600281146150135761502f565b6001915050610db2565b60ff84111561502457615024614b37565b50506001821b610db2565b5060208310610133831016604e8410600b8410161715615052575081810a610db2565b61505c8383614f94565b806000190482111561507057615070614b37565b029392505050565b600061118e60ff841683614fd7565b818103600083128015838313168383128216171561171c5761171c614b37565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161512a8160178501602088016140ae565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161515b8160288401602088016140ae565b01602801949350505050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b60008160001904831182151516156151ad576151ad614b37565b500290565b6000816151c1576151c1614b37565b506000190190565b601f8211156111ba57600081815260208120601f850160051c810160208610156151f05750805b601f850160051c820191505b8181101561520f578281556001016151fc565b505050505050565b815167ffffffffffffffff8111156152315761523161425a565b6152458161523f8454614c74565b846151c9565b602080601f83116001811461527a57600084156152625750858301515b600019600386901b1c1916600185901b17855561520f565b600085815260208120601f198616915b828110156152a95788860151825594840194600190910190840161528a565b50858210156152c75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082516152e98184602087016140ae565b919091019291505056fe92a19c77d2ea87c7f81d50c74403cb2f401780f3ad919571121efe2bdb427eb1360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564b0296ea8dd3227371927b1c1cea2b12ea394743ddf2f32f58024ce26f83a24a690fe2ba5da14f172ed5a0a0fec391dbf8f191c9a2f3557d79ede5d6b1c1c9ffba264697066735822122033efff6a32736856377ccd41dd7a993d590eac1fa54cb23a059ba8bcd71adc5464736f6c63430008100033",
  "deployedBytecode": "0x6080604052600436106103fa5760003560e01c8063759076e511610213578063b7ee7d0111610123578063d905777e116100ab578063e5ef6f4b1161007a578063e5ef6f4b14610ca4578063e888b16714610cc4578063e8e617b714610ce4578063ef8b30f714610b6e578063ffa600e314610d0e57600080fd5b8063d905777e14610c0e578063dd62ed3e14610c2e578063de0e341b14610c4e578063e1d3945014610c8257600080fd5b8063c6e6f592116100f2578063c6e6f59214610b6e578063ce96cb7714610b8e578063d3fba1a214610bae578063d547741f14610bce578063d6281d3e14610bee57600080fd5b8063b7ee7d0114610b0e578063ba08765214610b2e578063c1d278cf14610b4e578063c63d75b6146107c357600080fd5b806395d89b41116101a6578063a457c2d711610175578063a457c2d714610a5a578063a9059cbb14610a7a578063af0e7e0c14610a9a578063b3d7f6b914610ace578063b460af9414610aee57600080fd5b806395d89b41146109f157806398e7863514610a065780639ed1a98514610a26578063a217fddf14610a4557600080fd5b806382ff9c8c116101e257806382ff9c8c146109715780638f15b4141461099157806391d14854146109b157806394bf804d146109d157600080fd5b8063759076e5146108e557806378b86fbf146108fb57806378fab2601461092f5780637a702b3c1461095157600080fd5b80632f2ff15d1161030e57806345f739ff116102a157806352d1902d1161027057806352d1902d1461083a5780635ee0c7dd1461084f5780636b09de451461086f5780636e553f651461088f57806370a08231146108af57600080fd5b806345f739ff146107e55780634b3fd148146108075780634cdad506146104db5780634f1ef2861461082757600080fd5b80633659cfe6116102dd5780633659cfe61461075057806338d52e0f1461077057806339509351146107a3578063402d267d146107c357600080fd5b80632f2ff15d146106b5578063313ce567146106d55780633256657f146106fc57806336568abe1461073057600080fd5b80630a28a4771161039157806318160ddd1161036057806318160ddd146105e8578063204d7923146105fd57806323b872dd14610631578063248a9ca31461065157806324ea54f41461068157600080fd5b80630a28a4771461051b5780630abf6b601461053b5780630e7b949e1461056f578063150b7a02146105a357600080fd5b806305918a79116103cd57806305918a791461049957806306fdde03146104b957806307a2d13a146104db578063095ea7b3146104fb57600080fd5b806301e1d114146103ff57806301ffc9a71461042757806302a2e3bb1461045757806304f6f5b214610477575b600080fd5b34801561040b57600080fd5b50610414610d2e565b6040519081526020015b60405180910390f35b34801561043357600080fd5b50610447610442366004613f19565b610d72565b604051901515815260200161041e565b34801561046357600080fd5b50610414610472366004613f72565b610db8565b34801561048357600080fd5b50610497610492366004614011565b610e2f565b005b3480156104a557600080fd5b506104146104b436600461402e565b610fd8565b3480156104c557600080fd5b506104ce6110ab565b60405161041e91906140d2565b3480156104e757600080fd5b506104146104f6366004614105565b61113d565b34801561050757600080fd5b5061044761051636600461411e565b61114a565b34801561052757600080fd5b50610414610536366004614105565b611162565b34801561054757600080fd5b506104147f54371fd80f4f86e64c2b0cfb7152ea6c6649b1b07a69bd719c7da8bd4f65902881565b34801561057b57600080fd5b506104147f2344277e405079ec07749d374ba0b5862a4e45a6a05ac889dbb4a991c6f9354d81565b3480156105af57600080fd5b506105cf6105be36600461414a565b630a85bd0160e11b95945050505050565b6040516001600160e01b0319909116815260200161041e565b3480156105f457600080fd5b5060fd54610414565b34801561060957600080fd5b506104147f288a15c4a15d470e4cd9cad2f113b91206b520c26dbd3dd74627f0c057baa19c81565b34801561063d57600080fd5b5061044761064c3660046141e9565b61116f565b34801561065d57600080fd5b5061041461066c366004614105565b60009081526065602052604090206001015490565b34801561068d57600080fd5b506104147f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a504181565b3480156106c157600080fd5b506104976106d036600461422a565b611195565b3480156106e157600080fd5b506106ea6111bf565b60405160ff909116815260200161041e565b34801561070857600080fd5b506104147f65148e5fc86c78934a61be40b7d689d70c62f4628997659546a93c8fb80c2c1681565b34801561073c57600080fd5b5061049761074b36600461422a565b6111df565b34801561075c57600080fd5b5061049761076b366004614011565b61125d565b34801561077c57600080fd5b5061012d546001600160a01b03165b6040516001600160a01b03909116815260200161041e565b3480156107af57600080fd5b506104476107be36600461411e565b61133c565b3480156107cf57600080fd5b506104146107de366004614011565b5060001990565b3480156107f157600080fd5b5061041460008051602061537b83398151915281565b34801561081357600080fd5b5061049761082236600461422a565b61135e565b6104976108353660046142f9565b6114ca565b34801561084657600080fd5b50610414611596565b34801561085b57600080fd5b506105cf61086a36600461435d565b611649565b34801561087b57600080fd5b5061049761088a366004614105565b61165a565b34801561089b57600080fd5b506104146108aa36600461422a565b6116f5565b3480156108bb57600080fd5b506104146108ca366004614011565b6001600160a01b0316600090815260fb602052604090205490565b3480156108f157600080fd5b5061016054610414565b34801561090757600080fd5b506104147f996bbdfe02e380a7d57d331edc0b802eeb8b44fb25af615058afab9a18e8a02381565b34801561093b57600080fd5b506104146000805160206152f483398151915281565b34801561095d57600080fd5b5061049761096c3660046143bc565b611723565b34801561097d57600080fd5b5061041461098c3660046143e9565b6117b1565b34801561099d57600080fd5b506104976109ac36600461449a565b6118b3565b3480156109bd57600080fd5b506104476109cc36600461422a565b6119cc565b3480156109dd57600080fd5b506104146109ec36600461422a565b6119f7565b3480156109fd57600080fd5b506104ce611a1b565b348015610a1257600080fd5b50610497610a213660046145b2565b611a2a565b348015610a3257600080fd5b5061015f546001600160a01b031661078b565b348015610a5157600080fd5b50610414600081565b348015610a6657600080fd5b50610447610a7536600461411e565b611b38565b348015610a8657600080fd5b50610447610a9536600461411e565b611bbe565b348015610aa657600080fd5b506104147f13413a37e797fdcf9481024e55772fdede41168298ffead0664159cf5d07455581565b348015610ada57600080fd5b50610414610ae9366004614105565b611bcc565b348015610afa57600080fd5b50610414610b093660046145e7565b611bd9565b348015610b1a57600080fd5b50610414610b29366004614629565b611c07565b348015610b3a57600080fd5b50610414610b493660046145e7565b611d5b565b348015610b5a57600080fd5b50610497610b69366004614769565b611d80565b348015610b7a57600080fd5b50610414610b89366004614105565b611eea565b348015610b9a57600080fd5b50610414610ba9366004614011565b611ef7565b348015610bba57600080fd5b50610497610bc93660046148f4565b611f12565b348015610bda57600080fd5b50610497610be936600461422a565b612005565b348015610bfa57600080fd5b506105cf610c0936600461435d565b61202a565b348015610c1a57600080fd5b50610414610c29366004614011565b6120c2565b348015610c3a57600080fd5b50610414610c4936600461498c565b6120db565b348015610c5a57600080fd5b5061078b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610c8e57600080fd5b5061041460008051602061535b83398151915281565b348015610cb057600080fd5b50610497610cbf3660046149ba565b612106565b348015610cd057600080fd5b50610497610cdf36600461422a565b6122ca565b348015610cf057600080fd5b506105cf610cff3660046141e9565b63e8e617b760e01b9392505050565b348015610d1a57600080fd5b50610497610d29366004614b08565b6124b2565b600080610d39612509565b90506000610160541215610d645761016054610d5490614b4d565b610d5e9082614b69565b91505090565b61016054610d5e9082614b7c565b60006001600160e01b03198216633ece0a8960e01b1480610da357506001600160e01b03198216635ee0c7dd60e01b145b80610db25750610db28261257d565b92915050565b60007f54371fd80f4f86e64c2b0cfb7152ea6c6649b1b07a69bd719c7da8bd4f659028610de4816125b2565b6000610dee612509565b9050610e038e8e8e8e8e8e8e8e8e8e8e6125bc565b50610e1e610e0f612509565b610e199083614b69565b6126e0565b50509b9a5050505050505050505050565b7f996bbdfe02e380a7d57d331edc0b802eeb8b44fb25af615058afab9a18e8a023610e59816125b2565b6001600160a01b038216610e885760405162461bcd60e51b8152600401610e7f90614b8f565b60405180910390fd5b610e90612732565b6001600160a01b0316826001600160a01b0316634d15eb036040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efb9190614bec565b6001600160a01b031614610f825760405162461bcd60e51b815260206004820152604260248201527f4552433436323643617368466c6f774c656e6465723a206e6577207269736b4d60448201527f6f64756c65206d7573742062656c6f6e6720746f207468652073616d6520706f6064820152611bdb60f21b608482015260a401610e7f565b61015f80546001600160a01b0319166001600160a01b0384169081179091556040519081527fd4208580168eba30c1d9ae9fa910d2dba68e0ef5a8badee2d4e27c9d3d4a39039060200160405180910390a15050565b600060008051602061537b833981519152610ff2816125b2565b6000610ffc612509565b905061101161015f546001600160a01b031690565b6001600160a01b03166305918a798d8d8d8d308d8d8d8d6040518a63ffffffff1660e01b815260040161104c99989796959493929190614c09565b6020604051808303816000875af115801561106b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108f9190614c5b565b925061109c610e0f612509565b50509998505050505050505050565b606060fe80546110ba90614c74565b80601f01602080910402602001604051908101604052809291908181526020018280546110e690614c74565b80156111335780601f1061110857610100808354040283529160200191611133565b820191906000526020600020905b81548152906001019060200180831161111657829003601f168201915b5050505050905090565b6000610db28260006127a1565b6000336111588185856127db565b5060019392505050565b6000610db28260016128ff565b60003361117d85828561292f565b6111888585856129a3565b60019150505b9392505050565b6000828152606560205260409020600101546111b0816125b2565b6111ba8383612b4e565b505050565b60008061012d546111da9190600160a01b900460ff16614ca8565b905090565b6001600160a01b038116331461124f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610e7f565b6112598282612bd4565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036112a55760405162461bcd60e51b8152600401610e7f90614cc1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112ee600080516020615314833981519152546001600160a01b031690565b6001600160a01b0316146113145760405162461bcd60e51b8152600401610e7f90614d0d565b61131d81612c3b565b6040805160008082526020820190925261133991839190612c65565b50565b60003361115881858561134f83836120db565b6113599190614b7c565b6127db565b7f2344277e405079ec07749d374ba0b5862a4e45a6a05ac889dbb4a991c6f9354d611388816125b2565b82611391612509565b10156113fb5760405162461bcd60e51b815260206004820152603360248201527f4552433436323643617368466c6f774c656e6465723a204e6f7420656e6f7567604482015272682062616c616e636520746f20626f72726f7760681b6064820152608401610e7f565b611404836126e0565b61140c612dd0565b60405163a9059cbb60e01b81526001600160a01b03848116600483015260248201869052919091169063a9059cbb906044016020604051808303816000875af115801561145d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114819190614d59565b50816001600160a01b03167fcbc04eca7e9da35cb1393a6135a199ca52e450d5e9251cbd99f7847d33a36750846040516114bd91815260200190565b60405180910390a2505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036115125760405162461bcd60e51b8152600401610e7f90614cc1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661155b600080516020615314833981519152546001600160a01b031690565b6001600160a01b0316146115815760405162461bcd60e51b8152600401610e7f90614d0d565b61158a82612c3b565b61125982826001612c65565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116365760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610e7f565b5060008051602061531483398151915290565b635ee0c7dd60e01b5b949350505050565b600019810361167d576000610160541361167557600061167a565b610160545b90505b6101605461168a82612e17565b6116a9333084611698612dd0565b6001600160a01b0316929190612e2a565b6101605460408051848152602081018490529081019190915233907f5970ab368b41592b8ee398793f9f4032529294b5a1244e1b2b59fd6629d0e79b9060600160405180910390a25050565b600060008051602061535b83398151915261170f816125b2565b6117198484612e95565b91505b5092915050565b6000805160206152f483398151915261173b816125b2565b61174d61018084016101608501614011565b6001600160a01b0316637a702b3c84846040518363ffffffff1660e01b815260040161177a929190614e42565b600060405180830381600087803b15801561179457600080fd5b505af11580156117a8573d6000803e3d6000fd5b50505050505050565b60007f13413a37e797fdcf9481024e55772fdede41168298ffead0664159cf5d0745556117dd816125b2565b60006117e7612509565b90506117fb6101808e016101608f01614011565b6001600160a01b03166382ff9c8c8e8e8e8e8e8e8e8e8e8e6040518b63ffffffff1660e01b81526004016118389a99989796959493929190614e5f565b6020604051808303816000875af1158015611857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187b9190614c5b565b92506000611887612509565b6118919083614b69565b905080156118a2576118a2816126e0565b5050509a9950505050505050505050565b600054610100900460ff16158080156118d35750600054600160ff909116105b806118ed5750303b1580156118ed575060005460ff166001145b6119505760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610e7f565b6000805460ff191660011790558015611973576000805461ff0019166101001790555b61197f85858585612eaf565b80156119c5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600060008051602061535b833981519152611a11816125b2565b6117198484612f75565b606060ff80546110ba90614c74565b7f65148e5fc86c78934a61be40b7d689d70c62f4628997659546a93c8fb80c2c16611a54816125b2565b6000611a5e612732565b905060005b8351811015611b3257816001600160a01b03166342842e0e307f0000000000000000000000000000000000000000000000000000000000000000878581518110611aaf57611aaf614ec3565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015611b0957600080fd5b505af1158015611b1d573d6000803e3d6000fd5b5050505080611b2b90614ed9565b9050611a63565b50505050565b60003381611b4682866120db565b905083811015611ba65760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e7f565b611bb382868684036127db565b506001949350505050565b6000336111588185856129a3565b6000610db28260016127a1565b600060008051602061535b833981519152611bf3816125b2565b611bfe858585612f8f565b95945050505050565b600060008051602061537b833981519152611c21816125b2565b6000611c2b612509565b90506000198703611cbc578c6001600160a01b03166305918a798d8d8d8d308e8d8d8d6040518a63ffffffff1660e01b8152600401611c7299989796959493929190614c09565b6020604051808303816000875af1158015611c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb59190614c5b565b9250611d40565b8c6001600160a01b031663766dbc568d8d8d8d308e8e8e8e8e6040518b63ffffffff1660e01b8152600401611cfa9a99989796959493929190614ef2565b6020604051808303816000875af1158015611d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3d9190614c5b565b92505b611d4b610e0f612509565b50509a9950505050505050505050565b600060008051602061535b833981519152611d75816125b2565b611bfe858585613003565b60008051602061537b833981519152611d98816125b2565b6000611da2612509565b905060005b8b51811015611ed057611ebd8d8281518110611dc557611dc5614ec3565b60200260200101518d8381518110611ddf57611ddf614ec3565b60200260200101518d8481518110611df957611df9614ec3565b60200260200101518d8581518110611e1357611e13614ec3565b60200260200101518d8681518110611e2d57611e2d614ec3565b6020026020010151308d8881518110611e4857611e48614ec3565b60200260200101518f8981518110611e6257611e62614ec3565b60200260200101518e8a81518110611e7c57611e7c614ec3565b60200260200101518e8b81518110611e9657611e96614ec3565b60200260200101518e8c81518110611eb057611eb0614ec3565b60200260200101516125bc565b5080611ec881614ed9565b915050611da7565b50611edc610e0f612509565b505050505050505050505050565b6000610db28260006128ff565b6000610db2611f0583613077565b611f0d612509565b61309b565b6000805160206152f4833981519152611f2a816125b2565b60005b82518110156119c557848482818110611f4857611f48614ec3565b90506101c00201610160016020810190611f629190614011565b6001600160a01b0316637a702b3c868684818110611f8257611f82614ec3565b90506101c00201858481518110611f9b57611f9b614ec3565b60200260200101516040518363ffffffff1660e01b8152600401611fc0929190614e42565b600060405180830381600087803b158015611fda57600080fd5b505af1158015611fee573d6000803e3d6000fd5b505050508080611ffd90614ed9565b915050611f2d565b600082815260656020526040902060010154612020816125b2565b6111ba8383612bd4565b6000612034612732565b6001600160a01b0316336001600160a01b0316146120a85760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792074686520506f6c696379506f6f6c2073686f756c642063616c6c2060448201526a1d1a1a5cc81b595d1a1bd960aa1b6064820152608401610e7f565b6120b182612e17565b50636b140e9f60e11b949350505050565b6000610db26120d0836130b1565b611f0d610b89612509565b6001600160a01b03918216600090815260fc6020908152604080832093909416825291909152205490565b60008051602061537b83398151915261211e816125b2565b6000612128612509565b9050600061213f61015f546001600160a01b031690565b905060005b8b518110156122a757816001600160a01b03166305918a798d838151811061216e5761216e614ec3565b60200260200101518d848151811061218857612188614ec3565b60200260200101518d85815181106121a2576121a2614ec3565b60200260200101518d86815181106121bc576121bc614ec3565b6020026020010151308e88815181106121d7576121d7614ec3565b60200260200101518e89815181106121f1576121f1614ec3565b60200260200101518e8a8151811061220b5761220b614ec3565b60200260200101518e8b8151811061222557612225614ec3565b60200260200101516040518a63ffffffff1660e01b815260040161225199989796959493929190614c09565b6020604051808303816000875af1158015612270573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122949190614c5b565b508061229f81614ed9565b915050612144565b506122bd6122b3612509565b610e199084614b69565b5050505050505050505050565b7f288a15c4a15d470e4cd9cad2f113b91206b520c26dbd3dd74627f0c057baa19c6122f4816125b2565b60006101605412801561231357506101605461230f90614b4d565b8313155b61237c5760405162461bcd60e51b815260206004820152603460248201527f4552433436323643617368466c6f774c656e6465723a20616d6f756e74206d756044820152731cdd081899481b195cdcc81d1a185b881919589d60621b6064820152608401610e7f565b82612385612509565b10156123f05760405162461bcd60e51b815260206004820152603460248201527f4552433436323643617368466c6f774c656e6465723a204e6f7420656e6f75676044820152731a0818985b185b98d9481d1bc818d85cda1bdd5d60621b6064820152608401610e7f565b6123f9836126e0565b612401612dd0565b60405163a9059cbb60e01b81526001600160a01b03848116600483015260248201869052919091169063a9059cbb906044016020604051808303816000875af1158015612452573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124769190614d59565b50816001600160a01b03167fe2a52c6ceabaf7f3fc3f521853d811e633371d1a7d9d4678b585ac2348ee0d8f846040516114bd91815260200190565b6000805160206152f48339815191526124ca816125b2565b6124dc61018084016101608501614011565b6001600160a01b031663ffa600e384846040518363ffffffff1660e01b815260040161177a929190614f4d565b6000612513612dd0565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015612559573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da9190614c5b565b60006001600160e01b03198216637965db0b60e01b1480610db257506301ffc9a760e01b6001600160e01b0319831614610db2565b61133981336130cf565b6000600019860361264d576040516305918a7960e01b81526001600160a01b038d16906305918a7990612603908e908e908e908e908e908d908d908d908d90600401614c09565b6020604051808303816000875af1158015612622573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126469190614c5b565b90506126d1565b604051633b36de2b60e11b81526001600160a01b038d169063766dbc569061268b908e908e908e908e908e908d908f908e908e908e90600401614ef2565b6020604051808303816000875af11580156126aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ce9190614c5b565b90505b9b9a5050505050505050505050565b8061016060008282546126f39190614f6c565b9091555050610160546040519081527fc7f3c2106cf3d0f81736749a1583b800014a964dc37d2f0eb8216c1b852317289060200160405180910390a150565b61015f5460408051634d15eb0360e01b815290516000926001600160a01b031691634d15eb039160048083019260209291908290030181865afa15801561277d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da9190614bec565b600061118e6127ae610d2e565b6127b9906001614b7c565b6127c56000600a615078565b60fd546127d29190614b7c565b85919085613128565b6001600160a01b03831661283d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e7f565b6001600160a01b03821661289e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e7f565b6001600160a01b03838116600081815260fc602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061118e61290f82600a615078565b60fd5461291c9190614b7c565b612924610d2e565b6127d2906001614b7c565b600061293b84846120db565b90506000198114611b3257818110156129965760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610e7f565b611b3284848484036127db565b6001600160a01b038316612a075760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e7f565b6001600160a01b038216612a695760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e7f565b6001600160a01b038316600090815260fb602052604090205481811015612ae15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610e7f565b6001600160a01b03808516600081815260fb602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612b419086815260200190565b60405180910390a3611b32565b612b5882826119cc565b6112595760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612b903390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612bde82826119cc565b156112595760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b7f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041611259816125b2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612c98576111ba83613183565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612cf2575060408051601f3d908101601f19168201909252612cef91810190614c5b565b60015b612d555760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610e7f565b6000805160206153148339815191528114612dc45760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610e7f565b506111ba83838361321f565b6000612dda612732565b6001600160a01b031663e5a6b10f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561277d573d6000803e3d6000fd5b8061016060008282546126f39190615087565b6040516001600160a01b0380851660248301528316604482015260648101829052611b329085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613244565b600080612ea184611eea565b905061118e33848684613319565b600054610100900460ff16612ed65760405162461bcd60e51b8152600401610e7f906150a7565b612ede613398565b612ee6613398565b6001600160a01b038116612f595760405162461bcd60e51b815260206004820152603460248201527f4552433436323643617368466c6f774c656e6465723a2061737365745f2063616044820152736e6e6f74206265207a65726f206164647265737360601b6064820152608401610e7f565b612f62816133c1565b612f6c84846133f1565b611b3282613422565b600080612f8184611bcc565b905061118e33848387613319565b6000612f9a82611ef7565b841115612fe95760405162461bcd60e51b815260206004820152601f60248201527f455243343632363a207769746864726177206d6f7265207468616e206d6178006044820152606401610e7f565b6000612ff485611162565b90506116523385858885613526565b600061300e826120c2565b84111561305d5760405162461bcd60e51b815260206004820152601d60248201527f455243343632363a2072656465656d206d6f7265207468616e206d61780000006044820152606401610e7f565b60006130688561113d565b90506116523385858489613526565b6001600160a01b038116600090815260fb6020526040812054610db29060006127a1565b60008183106130aa578161118e565b5090919050565b6001600160a01b038116600090815260fb6020526040812054610db2565b6130d982826119cc565b611259576130e6816135a8565b6130f18360206135ba565b6040516020016131029291906150f2565b60408051601f198184030181529082905262461bcd60e51b8252610e7f916004016140d2565b600080613136868686613756565b9050600183600281111561314c5761314c615167565b1480156131695750600084806131645761316461517d565b868809115b15611bfe57613179600182614b7c565b9695505050505050565b6001600160a01b0381163b6131f05760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610e7f565b60008051602061531483398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61322883613840565b6000825111806132355750805b156111ba57611b328383613880565b6000613299826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166138a59092919063ffffffff16565b90508051600014806132ba5750808060200190518101906132ba9190614d59565b6111ba5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610e7f565b61012d54613332906001600160a01b0316853085612e2a565b61333c83826138b4565b826001600160a01b0316846001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7848460405161338a929190918252602082015260400190565b60405180910390a350505050565b600054610100900460ff166133bf5760405162461bcd60e51b8152600401610e7f906150a7565b565b600054610100900460ff166133e85760405162461bcd60e51b8152600401610e7f906150a7565b61133981613975565b600054610100900460ff166134185760405162461bcd60e51b8152600401610e7f906150a7565b61125982826139fb565b600054610100900460ff166134495760405162461bcd60e51b8152600401610e7f906150a7565b6001600160a01b03811661346f5760405162461bcd60e51b8152600401610e7f90614b8f565b61347a600033613a3b565b61015f80546001600160a01b0319166001600160a01b03831617905561349e612dd0565b6001600160a01b031663095ea7b36134b4612732565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260001960248201526044016020604051808303816000875af1158015613502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112599190614d59565b8161352f612509565b101561359b5760405162461bcd60e51b815260206004820152603560248201527f4552433436323643617368466c6f774c656e6465723a204e6f7420656e6f7567604482015274682062616c616e636520746f20776974686472617760581b6064820152608401610e7f565b6119c58585858585613a45565b6060610db26001600160a01b03831660145b606060006135c9836002615193565b6135d4906002614b7c565b67ffffffffffffffff8111156135ec576135ec61425a565b6040519080825280601f01601f191660200182016040528015613616576020820181803683370190505b509050600360fc1b8160008151811061363157613631614ec3565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061366057613660614ec3565b60200101906001600160f81b031916908160001a9053506000613684846002615193565b61368f906001614b7c565b90505b6001811115613707576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106136c3576136c3614ec3565b1a60f81b8282815181106136d9576136d9614ec3565b60200101906001600160f81b031916908160001a90535060049490941c93613700816151b2565b9050613692565b50831561118e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610e7f565b6000808060001985870985870292508281108382030391505080600003613790578382816137865761378661517d565b049250505061118e565b8084116137d75760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610e7f565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b61384981613183565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061118e838360405180606001604052806027815260200161533460279139613af2565b60606116528484600085613b60565b6001600160a01b03821661390a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610e7f565b8060fd600082825461391c9190614b7c565b90915550506001600160a01b038216600081815260fb60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600054610100900460ff1661399c5760405162461bcd60e51b8152600401610e7f906150a7565b6000806139a883613c3b565b91509150816139b85760126139ba565b805b61012d80546001600160a01b039095166001600160a01b031960ff93909316600160a01b02929092166001600160a81b031990951694909417179092555050565b600054610100900460ff16613a225760405162461bcd60e51b8152600401610e7f906150a7565b60fe613a2e8382615217565b5060ff6111ba8282615217565b6112598282612b4e565b826001600160a01b0316856001600160a01b031614613a6957613a6983868361292f565b613a738382613d17565b61012d54613a8b906001600160a01b03168584613e4b565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051613ae3929190918252602082015260400190565b60405180910390a45050505050565b6060600080856001600160a01b031685604051613b0f91906152d7565b600060405180830381855af49150503d8060008114613b4a576040519150601f19603f3d011682016040523d82523d6000602084013e613b4f565b606091505b509150915061317986838387613e7b565b606082471015613bc15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610e7f565b600080866001600160a01b03168587604051613bdd91906152d7565b60006040518083038185875af1925050503d8060008114613c1a576040519150601f19603f3d011682016040523d82523d6000602084013e613c1f565b606091505b5091509150613c3087838387613e7b565b979650505050505050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290516000918291829182916001600160a01b03871691613c82916152d7565b600060405180830381855afa9150503d8060008114613cbd576040519150601f19603f3d011682016040523d82523d6000602084013e613cc2565b606091505b5091509150818015613cd657506020815110155b15613d0a57600081806020019051810190613cf19190614c5b565b905060ff8111613d08576001969095509350505050565b505b5060009485945092505050565b6001600160a01b038216613d775760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610e7f565b6001600160a01b038216600090815260fb602052604090205481811015613deb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610e7f565b6001600160a01b038316600081815260fb60209081526040808320868603905560fd80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6040516001600160a01b0383166024820152604481018290526111ba90849063a9059cbb60e01b90606401612e5e565b60608315613eea578251600003613ee3576001600160a01b0385163b613ee35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e7f565b5081611652565b6116528383815115613eff5781518083602001fd5b8060405162461bcd60e51b8152600401610e7f91906140d2565b600060208284031215613f2b57600080fd5b81356001600160e01b03198116811461118e57600080fd5b6001600160a01b038116811461133957600080fd5b803564ffffffffff81168114613f6d57600080fd5b919050565b60008060008060008060008060008060006101608c8e031215613f9457600080fd5b8b35613f9f81613f43565b9a5060208c0135995060408c0135985060608c01359750613fc260808d01613f58565b965060a08c0135613fd281613f43565b955060c08c0135945060e08c013593506101008c013592506101208c01359150613fff6101408d01613f58565b90509295989b509295989b9093969950565b60006020828403121561402357600080fd5b813561118e81613f43565b60008060008060008060008060006101208a8c03121561404d57600080fd5b8935985060208a0135975060408a0135965061406b60608b01613f58565b955060808a013561407b81613f43565b945060a08a0135935060c08a0135925060e08a0135915061409f6101008b01613f58565b90509295985092959850929598565b60005b838110156140c95781810151838201526020016140b1565b50506000910152565b60208152600082518060208401526140f18160408501602087016140ae565b601f01601f19169190910160400192915050565b60006020828403121561411757600080fd5b5035919050565b6000806040838503121561413157600080fd5b823561413c81613f43565b946020939093013593505050565b60008060008060006080868803121561416257600080fd5b853561416d81613f43565b9450602086013561417d81613f43565b935060408601359250606086013567ffffffffffffffff808211156141a157600080fd5b818801915088601f8301126141b557600080fd5b8135818111156141c457600080fd5b8960208285010111156141d657600080fd5b9699959850939650602001949392505050565b6000806000606084860312156141fe57600080fd5b833561420981613f43565b9250602084013561421981613f43565b929592945050506040919091013590565b6000806040838503121561423d57600080fd5b82359150602083013561424f81613f43565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156142995761429961425a565b604052919050565b600067ffffffffffffffff8311156142bb576142bb61425a565b6142ce601f8401601f1916602001614270565b90508281528383830111156142e257600080fd5b828260208301376000602084830101529392505050565b6000806040838503121561430c57600080fd5b823561431781613f43565b9150602083013567ffffffffffffffff81111561433357600080fd5b8301601f8101851361434457600080fd5b614353858235602084016142a1565b9150509250929050565b6000806000806080858703121561437357600080fd5b843561437e81613f43565b9350602085013561438e81613f43565b93969395505050506040820135916060013590565b60006101c082840312156143b657600080fd5b50919050565b6000806101e083850312156143d057600080fd5b6143da84846143a3565b946101c0939093013593505050565b6000806000806000806000806000806102e08b8d03121561440957600080fd5b6144138c8c6143a3565b99506101c08b013598506101e08b013597506102008b0135965061443a6102208c01613f58565b95506102408b013594506102608b013593506102808b013592506102a08b013591506144696102c08c01613f58565b90509295989b9194979a5092959850565b600082601f83011261448b57600080fd5b61118e838335602085016142a1565b600080600080608085870312156144b057600080fd5b843567ffffffffffffffff808211156144c857600080fd5b6144d48883890161447a565b955060208701359150808211156144ea57600080fd5b506144f78782880161447a565b935050604085013561450881613f43565b9150606085013561451881613f43565b939692955090935050565b600067ffffffffffffffff82111561453d5761453d61425a565b5060051b60200190565b600082601f83011261455857600080fd5b8135602061456d61456883614523565b614270565b82815260059290921b8401810191818101908684111561458c57600080fd5b8286015b848110156145a75780358352918301918301614590565b509695505050505050565b6000602082840312156145c457600080fd5b813567ffffffffffffffff8111156145db57600080fd5b61171984828501614547565b6000806000606084860312156145fc57600080fd5b83359250602084013561460e81613f43565b9150604084013561461e81613f43565b809150509250925092565b6000806000806000806000806000806101408b8d03121561464957600080fd5b8a3561465481613f43565b995060208b0135985060408b0135975060608b0135965061467760808c01613f58565b955060a08b0135945060c08b0135935060e08b013592506101008b013591506144696101208c01613f58565b600082601f8301126146b457600080fd5b813560206146c461456883614523565b82815260059290921b840181019181810190868411156146e357600080fd5b8286015b848110156145a75780356146fa81613f43565b83529183019183016146e7565b600082601f83011261471857600080fd5b8135602061472861456883614523565b82815260059290921b8401810191818101908684111561474757600080fd5b8286015b848110156145a75761475c81613f58565b835291830191830161474b565b6000806000806000806000806000806101408b8d03121561478957600080fd5b8a3567ffffffffffffffff808211156147a157600080fd5b6147ad8e838f016146a3565b9b5060208d01359150808211156147c357600080fd5b6147cf8e838f01614547565b9a5060408d01359150808211156147e557600080fd5b6147f18e838f01614547565b995060608d013591508082111561480757600080fd5b6148138e838f01614547565b985060808d013591508082111561482957600080fd5b6148358e838f01614707565b975060a08d013591508082111561484b57600080fd5b6148578e838f01614547565b965060c08d013591508082111561486d57600080fd5b6148798e838f01614547565b955060e08d013591508082111561488f57600080fd5b61489b8e838f01614547565b94506101008d01359150808211156148b257600080fd5b6148be8e838f01614547565b93506101208d01359150808211156148d557600080fd5b506148e28d828e01614707565b9150509295989b9194979a5092959850565b60008060006040848603121561490957600080fd5b833567ffffffffffffffff8082111561492157600080fd5b818601915086601f83011261493557600080fd5b81358181111561494457600080fd5b8760206101c08302850101111561495a57600080fd5b60209283019550935090850135908082111561497557600080fd5b5061498286828701614547565b9150509250925092565b6000806040838503121561499f57600080fd5b82356149aa81613f43565b9150602083013561424f81613f43565b600080600080600080600080610100898b0312156149d757600080fd5b883567ffffffffffffffff808211156149ef57600080fd5b6149fb8c838d01614547565b995060208b0135915080821115614a1157600080fd5b614a1d8c838d01614547565b985060408b0135915080821115614a3357600080fd5b614a3f8c838d01614547565b975060608b0135915080821115614a5557600080fd5b614a618c838d01614707565b965060808b0135915080821115614a7757600080fd5b614a838c838d01614547565b955060a08b0135915080821115614a9957600080fd5b614aa58c838d01614547565b945060c08b0135915080821115614abb57600080fd5b614ac78c838d01614547565b935060e08b0135915080821115614add57600080fd5b50614aea8b828c01614707565b9150509295985092959890939650565b801515811461133957600080fd5b6000806101e08385031215614b1c57600080fd5b614b2684846143a3565b91506101c083013561424f81614afa565b634e487b7160e01b600052601160045260246000fd5b6000600160ff1b8201614b6257614b62614b37565b5060000390565b81810381811115610db257610db2614b37565b80820180821115610db257610db2614b37565b60208082526039908201527f4552433436323643617368466c6f774c656e6465723a207269736b4d6f64756c60408201527f655f2063616e6e6f74206265207a65726f206164647265737300000000000000606082015260800190565b600060208284031215614bfe57600080fd5b815161118e81613f43565b9889526020890197909752604088019590955264ffffffffff93841660608801526001600160a01b0392909216608087015260a086015260c085015260e0840191909152166101008201526101200190565b600060208284031215614c6d57600080fd5b5051919050565b600181811c90821680614c8857607f821691505b6020821081036143b657634e487b7160e01b600052602260045260246000fd5b60ff8181168382160190811115610db257610db2614b37565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b600060208284031215614d6b57600080fd5b815161118e81614afa565b8035613f6d81613f43565b803582526020810135602083015260408101356040830152606081013560608301526080810135608083015260a081013560a083015260c081013560c083015260e081013560e0830152610100808201358184015250610120808201358184015250610140808201358184015250610160614dfd818301614d76565b6001600160a01b031690830152610180614e18828201613f58565b64ffffffffff16908301526101a0614e31828201613f58565b64ffffffffff811684830152611b32565b6101e08101614e518285614d81565b826101c08301529392505050565b6102e08101614e6e828d614d81565b6101c082019a909a526101e081019890985261020088019690965264ffffffffff9485166102208801526102408701939093526102608601919091526102808501526102a0840152166102c090910152919050565b634e487b7160e01b600052603260045260246000fd5b600060018201614eeb57614eeb614b37565b5060010190565b998a5260208a0198909852604089019690965264ffffffffff94851660608901526001600160a01b0393909316608088015260a087019190915260c086015260e0850152610100840191909152166101208201526101400190565b6101e08101614f5c8285614d81565b8215156101c08301529392505050565b8082018281126000831280158216821582161715614f8c57614f8c614b37565b505092915050565b600181815b80851115614fcf578160001904821115614fb557614fb5614b37565b80851615614fc257918102915b93841c9390800290614f99565b509250929050565b600082614fe657506001610db2565b81614ff357506000610db2565b816001811461500957600281146150135761502f565b6001915050610db2565b60ff84111561502457615024614b37565b50506001821b610db2565b5060208310610133831016604e8410600b8410161715615052575081810a610db2565b61505c8383614f94565b806000190482111561507057615070614b37565b029392505050565b600061118e60ff841683614fd7565b818103600083128015838313168383128216171561171c5761171c614b37565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161512a8160178501602088016140ae565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161515b8160288401602088016140ae565b01602801949350505050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b60008160001904831182151516156151ad576151ad614b37565b500290565b6000816151c1576151c1614b37565b506000190190565b601f8211156111ba57600081815260208120601f850160051c810160208610156151f05750805b601f850160051c820191505b8181101561520f578281556001016151fc565b505050505050565b815167ffffffffffffffff8111156152315761523161425a565b6152458161523f8454614c74565b846151c9565b602080601f83116001811461527a57600084156152625750858301515b600019600386901b1c1916600185901b17855561520f565b600085815260208120601f198616915b828110156152a95788860151825594840194600190910190840161528a565b50858210156152c75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082516152e98184602087016140ae565b919091019291505056fe92a19c77d2ea87c7f81d50c74403cb2f401780f3ad919571121efe2bdb427eb1360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564b0296ea8dd3227371927b1c1cea2b12ea394743ddf2f32f58024ce26f83a24a690fe2ba5da14f172ed5a0a0fec391dbf8f191c9a2f3557d79ede5d6b1c1c9ffba264697066735822122033efff6a32736856377ccd41dd7a993d590eac1fa54cb23a059ba8bcd71adc5464736f6c63430008100033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
