{
  "_format": "hh-sol-artifact-1",
  "contractName": "CfManagerSoftcapVesting",
  "sourceName": "contracts/managers/crowdfunding-softcap-vesting/CfManagerSoftcapVesting.sol",
  "abi": [
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "string",
              "name": "contractFlavor",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "contractVersion",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "issuer",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "paymentMethod",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenPrice",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenPricePrecision",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "softCap",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minInvestment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxInvestment",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "whitelistRequired",
              "type": "bool"
            },
            {
              "internalType": "string",
              "name": "info",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "feeManager",
              "type": "address"
            }
          ],
          "internalType": "struct Structs.CampaignConstructor",
          "name": "params",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokensReturned",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "CancelCampaign",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "investor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "CancelInvestment",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "ChangeOwnership",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "investor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "Claim",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fundsRaised",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokensSold",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokensRefund",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "Finalize",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "investor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "Invest",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "Revoke",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "info",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "setter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "SetInfo",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cliffDuration",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "StartVesting",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "cancelCampaign",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cancelInvestment",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "investor",
          "type": "address"
        }
      ],
      "name": "cancelInvestmentFor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "changeOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "investor",
          "type": "address"
        }
      ],
      "name": "claim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "investor",
          "type": "address"
        }
      ],
      "name": "claimedAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "commonState",
      "outputs": [
        {
          "components": [
            {
              "internalType": "string",
              "name": "flavor",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "version",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "contractAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "info",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stablecoin",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "softCap",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "finalized",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "canceled",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "pricePerToken",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "fundsRaised",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokensSold",
              "type": "uint256"
            }
          ],
          "internalType": "struct Structs.CampaignCommonState",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "finalize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "flavor",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getInfoHistory",
      "outputs": [
        {
          "components": [
            {
              "internalType": "string",
              "name": "info",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "timestamp",
              "type": "uint256"
            }
          ],
          "internalType": "struct Structs.InfoEntry[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getState",
      "outputs": [
        {
          "components": [
            {
              "internalType": "string",
              "name": "flavor",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "version",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "contractAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "issuer",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stablecoin",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenPrice",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "softCap",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minInvestment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxInvestment",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "whitelistRequired",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "finalized",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "canceled",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "totalClaimableTokens",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalInvestorsCount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalFundsRaised",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalTokensSold",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalTokensBalance",
              "type": "uint256"
            },
            {
              "internalType": "string",
              "name": "info",
              "type": "string"
            },
            {
              "internalType": "bool",
              "name": "vestingStarted",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "start",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cliff",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "duration",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "revocable",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "revoked",
              "type": "bool"
            },
            {
              "internalType": "address",
              "name": "feeManager",
              "type": "address"
            }
          ],
          "internalType": "struct Structs.CfManagerSoftcapVestingState",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "invest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "beneficiary",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "investForBeneficiary",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "investor",
          "type": "address"
        }
      ],
      "name": "investmentAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "wallet",
          "type": "address"
        }
      ],
      "name": "isWalletWhitelisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "revoke",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "info",
          "type": "string"
        }
      ],
      "name": "setInfo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stablecoin",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "cliffDuration",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        }
      ],
      "name": "startVesting",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "investor",
          "type": "address"
        }
      ],
      "name": "tokenAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506040516200492b3803806200492b833981016040819052620000349162000c67565b60408101516001600160a01b03166200006a5760405162461bcd60e51b8152600401620000619062001071565b60405180910390fd5b60608101516001600160a01b0316620000975760405162461bcd60e51b81526004016200006190620010e7565b60008160c0015111620000be5760405162461bcd60e51b8152600401620000619062001124565b8061012001518161014001511015620000eb5760405162461bcd60e51b8152600401620000619062000f34565b600081610140015111620001135760405162461bcd60e51b8152600401620000619062001013565b60006200012a8260600151620006b760201b60201c565b905060006001600160a01b038216620001485782608001516200014a565b815b90506001600160a01b038116620001755760405162461bcd60e51b8152600401620000619062000f9c565b60006200018c84606001516200078260201b60201c565b90506000808211620001a3578460e00151620001a5565b815b905060008560e0015111620001ce5760405162461bcd60e51b8152600401620000619062000fd3565b60a08501516000906001600160a01b031615620001f0578560a001516200026e565b836001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b1580156200022a57600080fd5b505afa1580156200023f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000269919081019062000dc9565b608001515b90506000620002a8620002978861010001518960c001518a60600151866200083860201b60201c565b60c089015160608a01518562000895565b90506000620002e2620002d18961012001518a60c001518b60600151876200083860201b60201c565b60c08a015160608b01518662000895565b9050604051806102c001604052808960000151815260200189602001518152602001306001600160a01b0316815260200189604001516001600160a01b0316815260200189606001516001600160a01b0316815260200189608001516001600160a01b03168152602001876001600160a01b031681526020018960c00151815260200185815260200183815260200182815260200189610140015181526020018961016001511515815260200160001515815260200160001515815260200160008152602001600081526020016000815260200160008152602001600081526020018961018001518152602001896101a001516001600160a01b031681525060008082015181600001908051906020019062000400929190620009c5565b5060208281015180516200041b9260018501920190620009c5565b5060408201516002820180546001600160a01b039283166001600160a01b0319918216179091556060840151600384018054918416918316919091179055608084015160048401805491841691831691909117905560a084015160058401805491841691831691909117905560c084015160068401805491909316911617905560e082015160078201556101008083015160088301556101208301516009830155610140830151600a830155610160830151600b830155610180830151600c830180546101a08601516101c08701511515620100000262ff00001991151590950261ff001994151560ff19909316929092179390931617919091169190911790556101e0820151600d820155610200820151600e820155610220820151600f82015561024082015160108201556102608201516011820155610280820151805162000571916012840191602090910190620009c5565b506102a09190910151601390910180546001600160a01b0319166001600160a01b039283161790556040805160c08101825260008082526020808301829052828401829052606080840183905260016080850181905260a09094018390526018805460ff199081169091556019849055601a849055601b93909355601c805490931690931761ff001916909155908b015182516318160ddd60e01b81529251869462000688949216926318160ddd9260048082019391829003018186803b1580156200063c57600080fd5b505afa15801562000651573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000677919062000ed3565b60c08b015160608c01518762000895565b1015620006a95760405162461bcd60e51b81526004016200006190620010ae565b5050505050505050620013d5565b60408051600481526024810182526020810180516001600160e01b031663060638bb60e21b1790529051600091829182916001600160a01b03861691620006ff919062000f16565b600060405180830381855afa9150503d80600081146200073c576040519150601f19603f3d011682016040523d82523d6000602084013e62000741565b606091505b50915091508115620007765760008180602001905181019062000765919062000b06565b610120015193506200077d92505050565b6000925050505b919050565b60408051600481526024810182526020810180516001600160e01b0316633093f85b60e21b1790529051600091829182916001600160a01b03861691620007ca919062000f16565b600060405180830381855afa9150503d806000811462000807576040519150601f19603f3d011682016040523d82523d6000602084013e6200080c565b606091505b509150915081156200077657808060200190518101906200082e919062000ed3565b925050506200077d565b60006200084582620008c4565b846200085185620008c4565b6200085c866200094e565b62000868908962001317565b62000874919062001317565b620008809190620011be565b6200088c9190620011be565b95945050505050565b6000620008a283620008c4565b620008ad846200094e565b620008b884620008c4565b62000868878962001317565b6000816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200090057600080fd5b505afa15801562000915573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093b919062000eec565b6200094890600a6200122c565b92915050565b6000816001600160a01b031663c24fe16c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200098a57600080fd5b505afa1580156200099f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000948919062000ed3565b828054620009d3906200136c565b90600052602060002090601f016020900481019282620009f7576000855562000a42565b82601f1062000a1257805160ff191683800117855562000a42565b8280016001018555821562000a42579182015b8281111562000a4257825182559160200191906001019062000a25565b5062000a5092915062000a54565b5090565b5b8082111562000a50576000815560010162000a55565b80516001600160a01b03811681146200077d57600080fd5b805180151581146200077d57600080fd5b600082601f83011262000aa5578081fd5b81516001600160401b0381111562000ac15762000ac1620013bf565b62000ad6601f8201601f191660200162001192565b81815284602083860101111562000aeb578283fd5b62000afe82602083016020870162001339565b949350505050565b60006020828403121562000b18578081fd5b81516001600160401b038082111562000b2f578283fd5b818401915061014080838703121562000b46578384fd5b62000b518162001192565b905082518281111562000b62578485fd5b62000b708782860162000a94565b82525060208301518281111562000b85578485fd5b62000b938782860162000a94565b60208301525062000ba76040840162000a6b565b604082015262000bba6060840162000a6b565b606082015260808301518281111562000bd1578485fd5b62000bdf8782860162000a94565b60808301525060a08301518281111562000bf7578485fd5b62000c058782860162000a94565b60a08301525060c08301518281111562000c1d578485fd5b62000c2b8782860162000a94565b60c08301525060e083810151908201526101008084015190820152610120915062000c5882840162000a6b565b91810191909152949350505050565b60006020828403121562000c79578081fd5b81516001600160401b038082111562000c90578283fd5b81840191506101c080838703121562000ca7578384fd5b62000cb28162001192565b905082518281111562000cc3578485fd5b62000cd18782860162000a94565b82525060208301518281111562000ce6578485fd5b62000cf48782860162000a94565b60208301525062000d086040840162000a6b565b604082015262000d1b6060840162000a6b565b606082015262000d2e6080840162000a6b565b608082015262000d4160a0840162000a6b565b60a082015260c0838101519082015260e0808401519082015261010080840151908201526101208084015190820152610140808401519082015261016062000d8b81850162000a83565b90820152610180838101518381111562000da3578586fd5b62000db18882870162000a94565b8284015250506101a0915062000c5882840162000a6b565b60006020828403121562000ddb578081fd5b81516001600160401b038082111562000df2578283fd5b9083019060e0828603121562000e06578283fd5b62000e1260e062001192565b82518281111562000e21578485fd5b62000e2f8782860162000a94565b82525060208301518281111562000e44578485fd5b62000e528782860162000a94565b60208301525062000e666040840162000a6b565b604082015262000e796060840162000a6b565b606082015262000e8c6080840162000a6b565b608082015262000e9f60a0840162000a6b565b60a082015260c08301518281111562000eb6578485fd5b62000ec48782860162000a94565b60c08301525095945050505050565b60006020828403121562000ee5578081fd5b5051919050565b60006020828403121562000efe578081fd5b815160ff8116811462000f0f578182fd5b9392505050565b6000825162000f2a81846020870162001339565b9190910192915050565b60208082526042908201527f43664d616e61676572536f667463617056657374696e673a204d61782068617360408201527f20746f20626520626967676572207468616e206d696e20696e766573746d656e6060820152613a1760f11b608082015260a00190565b60208082526028908201526000805160206200490b8339815191526040820152671034b9b9bab2b91760c11b606082015260800190565b60208082526031908201526000805160206200490b83398151915260408201527010383934b1b290383932b1b4b9b4b7b71760791b606082015260800190565b602080825260409082018190527f43664d616e61676572536f667463617056657374696e673a204d617820696e76908201527f6573746d656e742068617320746f20626520626967676572207468616e20302e606082015260800190565b6020808252602e908201526000805160206200490b83398151915260408201526d206f776e6572206164647265737360901b606082015260800190565b6020808252602a908201526000805160206200490b8339815191526040820152691039b7b33a1031b0b81760b11b606082015260800190565b6020808252602e908201526000805160206200490b83398151915260408201526d206173736574206164647265737360901b606082015260800190565b60208082526048908201527f43664d616e61676572536f667463617056657374696e673a20496e697469616c60408201527f2070726963652070657220746f6b656e206d7573742062652067726561746572606082015267103a3430b710181760c11b608082015260a00190565b6040518181016001600160401b0381118282101715620011b657620011b6620013bf565b604052919050565b600082620011da57634e487b7160e01b81526012600452602481fd5b500490565b80825b6001808611620011f3575062001223565b818704821115620012085762001208620013a9565b808616156200121657918102915b9490941c938002620011e2565b94509492505050565b600062000f0f60001960ff8516846000826200124b5750600162000f0f565b816200125a5750600062000f0f565b81600181146200127357600281146200127e57620012b2565b600191505062000f0f565b60ff841115620012925762001292620013a9565b6001841b915084821115620012ab57620012ab620013a9565b5062000f0f565b5060208310610133831016604e8410600b8410161715620012ea575081810a83811115620012e457620012e4620013a9565b62000f0f565b620012f98484846001620011df565b8086048211156200130e576200130e620013a9565b02949350505050565b6000816000190483118215151615620013345762001334620013a9565b500290565b60005b83811015620013565781810151838201526020016200133c565b8381111562001366576000848401525b50505050565b6002810460018216806200138157607f821691505b60208210811415620013a357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b61352680620013e56000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806367c5bd54116100b8578063a96b7f051161007c578063a96b7f0514610258578063aac8f9671461026b578063b6549f751461028b578063e9cbd82214610293578063ed0ea003146102a8578063f59e4f65146102bb57610137565b806367c5bd541461020d578063937f6e771461022057806394f8e95414610233578063980e78441461023b57806398e162551461024357610137565b80632afcf480116100ff5780632afcf480146101b757806336921c0c146101ca5780633d029091146101dd5780634bb278f3146101f057806354fd4d50146101f857610137565b806304e869031461013c5780631818e2ec146101655780631865c57d1461017a5780631e83409a1461018f5780632af4c31e146101a4575b600080fd5b61014f61014a3660046123fc565b6102c3565b60405161015c91906132ba565b60405180910390f35b61016d6102e2565b60405161015c9190612fb7565b61018261052b565b60405161015c91906130c2565b6101a261019d3660046123fc565b610887565b005b6101a26101b23660046123fc565b610a15565b6101a26101c5366004612546565b610a99565b6101a26101d8366004612445565b610aa7565b6101a26101eb366004612576565b610af8565b6101a2610c3d565b610200610f73565b60405161015c9190612761565b6101a261021b3660046123fc565b611008565b6101a261022e3660046124a5565b611039565b6101a2611118565b6101a261114b565b61024b6112bd565b60405161015c91906126e3565b61014f6102663660046123fc565b6113b8565b61027e6102793660046123fc565b6113d3565b60405161015c9190612756565b6101a26113ff565b61029b611536565b60405161015c919061261d565b61014f6102b63660046123fc565b611545565b610200611560565b6001600160a01b0381166000908152601560205260409020545b919050565b6102ea6121c7565b604051806101a0016040528060008001805461030590613474565b80601f016020809104026020016040519081016040528092919081815260200182805461033190613474565b801561037e5780601f106103535761010080835404028352916020019161037e565b820191906000526020600020905b81548152906001019060200180831161036157829003601f168201915b505050505081526020016000600101805461039890613474565b80601f01602080910402602001604051908101604052809291908181526020018280546103c490613474565b80156104115780601f106103e657610100808354040283529160200191610411565b820191906000526020600020905b8154815290600101906020018083116103f457829003601f168201915b50505091835250506002546001600160a01b0390811660208301526003541660408201526012805460609092019161044890613474565b80601f016020809104026020016040519081016040528092919081815260200182805461047490613474565b80156104c15780601f10610496576101008083540402835291602001916104c1565b820191906000526020600020905b8154815290600101906020018083116104a457829003601f168201915b50505091835250506004546001600160a01b0390811660208301526006541660408201526009546060820152600c5460ff6101008083048216151560808501526201000090920416151560a083015260075460c0830152600f5460e0830152601054910152905090565b610533612257565b60405180610360016040528060008001805461054e90613474565b80601f016020809104026020016040519081016040528092919081815260200182805461057a90613474565b80156105c75780601f1061059c576101008083540402835291602001916105c7565b820191906000526020600020905b8154815290600101906020018083116105aa57829003601f168201915b50505050508152602001600060010180546105e190613474565b80601f016020809104026020016040519081016040528092919081815260200182805461060d90613474565b801561065a5780601f1061062f5761010080835404028352916020019161065a565b820191906000526020600020905b81548152906001019060200180831161063d57829003601f168201915b50505091835250506002546001600160a01b0390811660208301526003548116604083015260045481166060830152600554811660808301526006541660a082015260075460c082015260095460e0820152600a5461010080830191909152600b54610120830152600c5460ff808216151561014085015291810482161515610160840152620100009004161515610180820152600d546101a0820152600e546101c0820152600f546101e08201526010546102008201526102200161071e611571565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610749919061261d565b60206040518083038186803b15801561076157600080fd5b505afa158015610775573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610799919061255e565b8152602001600060120180546107ae90613474565b80601f01602080910402602001604051908101604052809291908181526020018280546107da90613474565b80156108275780601f106107fc57610100808354040283529160200191610827565b820191906000526020600020905b81548152906001019060200180831161080a57829003601f168201915b505050918352505060185460ff908116151560208301526019546040830152601a546060830152601b546080830152601c54808216151560a0840152610100900416151560c08201526013546001600160a01b031660e090910152905090565b600c54610100900460ff166108b75760405162461bcd60e51b81526004016108ae90612f6d565b60405180910390fd5b60185460ff166108d95760405162461bcd60e51b81526004016108ae90612b88565b60006108e482611580565b60075460045460065492935060009261090d92859290916001600160a01b0391821691166115ac565b90506000821161092f5760405162461bcd60e51b81526004016108ae906127d9565b816000600d0160008282546109449190613431565b90915550506001600160a01b03831660009081526015602052604081208054849290610971908490613431565b90915550506001600160a01b0383166000908152601d60205260408120805484929061099e9084906132c3565b909155506109c1905083836109b1611571565b6001600160a01b031691906115fa565b6004546040516001600160a01b03858116927f9137e112a187039f8a3291c0a66fce97153d25ec42036e82360d5d0106d19a6e92610a08929091169086908690429061268f565b60405180910390a2505050565b6003546001600160a01b03163314610a3f5760405162461bcd60e51b81526004016108ae906128c4565b600380546001600160a01b0319166001600160a01b0383161790556040517fb4fa0c8f1565e6385961540cac5b9884d84157c515100cf972728e8be8dacdd390610a8e90339084904290612631565b60405180910390a150565b610aa4333383611650565b50565b816001600160a01b0316836001600160a01b031614610ae8576001600160a01b0383163314610ae85760405162461bcd60e51b81526004016108ae90612912565b610af3838383611650565b505050565b6003546001600160a01b03163314610b225760405162461bcd60e51b81526004016108ae906128c4565b600c54610100900460ff16610b495760405162461bcd60e51b81526004016108ae90612f6d565b60185460ff1615610b6c5760405162461bcd60e51b81526004016108ae90612dba565b80821115610b8c5760405162461bcd60e51b81526004016108ae9061282b565b60008111610bac5760405162461bcd60e51b81526004016108ae906129c9565b42610bb782856132c3565b11610bd45760405162461bcd60e51b81526004016108ae90612bd4565b6018805460ff191660011790556019839055610bf082846132c3565b601a55601b81905560045460405133917f1b80a1ad361272967857069bbb1b6c32ae4dede784580d2e94bed06f9dd7ca7791610a08916001600160a01b03169087908790879042906126b5565b6003546001600160a01b03163314610c675760405162461bcd60e51b81526004016108ae906128c4565b600c5462010000900460ff1615610c905760405162461bcd60e51b81526004016108ae90612e0b565b600c54610100900460ff1615610cb85760405162461bcd60e51b81526004016108ae90612ce0565b6000610cc2611536565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610cf2919061261d565b60206040518083038186803b158015610d0a57600080fd5b505afa158015610d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d42919061255e565b60095490915081101580610d5b5750610d59611a79565b155b610d775760405162461bcd60e51b81526004016108ae90612a0e565b600c805461ff0019166101001790556000610d90611571565b6010546040516370a0823160e01b81529192509060009082906001600160a01b038516906370a0823190610dc890309060040161261d565b60206040518083038186803b158015610de057600080fd5b505afa158015610df4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e18919061255e565b610e229190613431565b6004805460408051631629a1fb60e21b815290519394506001600160a01b03909116926358a687ec9282810192600092919082900301818387803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b505050506000841115610f0557600080610e95611ad7565b91509150600081118015610eb157506001600160a01b03821615155b15610eee57610eca6001600160a01b03881683836115fa565b610ee933610ed88389613431565b6001600160a01b038a1691906115fa565b610f02565b610f026001600160a01b03881633886115fa565b50505b8015610f1f57610f1f6001600160a01b03841633836115fa565b60045460405133917fc7ffb23c3f55c770b94ffcdbbe7d3b0520a2e76b9abe111f43c7c48cab999a6a91610f64916001600160a01b03169088908790879042906126b5565b60405180910390a25050505050565b606060006001018054610f8590613474565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb190613474565b8015610ffe5780601f10610fd357610100808354040283529160200191610ffe565b820191906000526020600020905b815481529060010190602001808311610fe157829003601f168201915b5050505050905090565b600c5462010000900460ff166110305760405162461bcd60e51b81526004016108ae90612efd565b610aa481611baf565b6003546001600160a01b031633146110635760405162461bcd60e51b81526004016108ae906128c4565b6040805180820190915281815242602080830191909152601480546001810182556000919091528251805160029092027fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec01926110c592849290910190612363565b5060209182015160019091015581516110e49160129190840190612363565b507f39b28594242c42fce47a0a6e63bac12adbd07fbb35580f5a54b236858101d58a813342604051610a8e93929190612774565b600c54610100900460ff16156111405760405162461bcd60e51b81526004016108ae90612ce0565b61114933611baf565b565b6003546001600160a01b031633146111755760405162461bcd60e51b81526004016108ae906128c4565b600c5462010000900460ff161561119e5760405162461bcd60e51b81526004016108ae90612e0b565b600c54610100900460ff16156111c65760405162461bcd60e51b81526004016108ae90612ce0565b600c805462ff000019166201000017905560006111e1611571565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161120c919061261d565b60206040518083038186803b15801561122457600080fd5b505afa158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c919061255e565b905080156112715761127133826109b1611571565b60045460405133917faf1ae5c6fb3f0ce445b207ae00f52f0b564d8fe58282727032de5d199eaa7981916112b2916001600160a01b0316908590429061266e565b60405180910390a250565b60606014805480602002602001604051908101604052809291908181526020016000905b828210156113af578382906000526020600020906002020160405180604001604052908160008201805461131490613474565b80601f016020809104026020016040519081016040528092919081815260200182805461134090613474565b801561138d5780601f106113625761010080835404028352916020019161138d565b820191906000526020600020905b81548152906001019060200180831161137057829003601f168201915b50505050508152602001600182015481525050815260200190600101906112e1565b50505050905090565b6001600160a01b031660009081526017602052604090205490565b600c5460009060ff1615806113f95750600c5460ff1680156113f957506113f982611cec565b92915050565b6003546001600160a01b031633146114295760405162461bcd60e51b81526004016108ae906128c4565b600c54610100900460ff166114505760405162461bcd60e51b81526004016108ae90612f6d565b60185460ff166114725760405162461bcd60e51b81526004016108ae90612b88565b601c5460ff166114945760405162461bcd60e51b81526004016108ae90612c31565b601c54610100900460ff16156114bc5760405162461bcd60e51b81526004016108ae90612ea0565b600d5460006114c9611d6d565b905060006114d78284613431565b601c805461ff00191661010017905590506114f533826109b1611571565b60045460405133917fd6f80c7d68e3e62bd7a51c3d37e575c1cfbc311c07487b69ef4eb570bc21cb6891610a08916001600160a01b0316908590429061266e565b6006546001600160a01b031690565b6001600160a01b031660009081526016602052604090205490565b6060600080018054610f8590613474565b6004546001600160a01b031690565b6001600160a01b0381166000908152601d60205260408120546115a283611dfc565b6113f99190613431565b60006115b783611e9e565b6115c084611f1c565b6115c984611e9e565b6115d38789613412565b6115dd9190613412565b6115e791906132db565b6115f191906132db565b95945050505050565b610af38363a9059cbb60e01b8484604051602401611619929190612655565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611f8f565b600c5462010000900460ff16156116795760405162461bcd60e51b81526004016108ae90612e0b565b600c54610100900460ff16156116a15760405162461bcd60e51b81526004016108ae90612ce0565b816116ab816113d3565b6116c75760405162461bcd60e51b81526004016108ae90612c9d565b600082116116e75760405162461bcd60e51b81526004016108ae90612d5d565b60006116f1611571565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161171c919061261d565b60206040518083038186803b15801561173457600080fd5b505afa158015611748573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176c919061255e565b6009546007546004546006549394509192611796928592916001600160a01b0391821691166115ac565b10156117b45760405162461bcd60e51b81526004016108ae90612b2b565b600d546000906117c49083613431565b6007546004546006549293506000926117ed92889290916001600160a01b03918216911661201e565b60075460045460065492935060009261181692859290916001600160a01b0391821691166115ac565b90506000821180156118285750600081115b6118445760405162461bcd60e51b81526004016108ae90612a88565b818310156118645760405162461bcd60e51b81526004016108ae90612ace565b6001600160a01b0387166000908152601560205260408120546118a69061188b90856132c3565b6007546004546006546001600160a01b0391821691166115ac565b90506118b184612046565b8110156118d05760405162461bcd60e51b81526004016108ae90612a88565b600b548111156118f25760405162461bcd60e51b81526004016108ae9061287d565b611911893084611900611536565b6001600160a01b031692919061208a565b6001600160a01b03881660009081526015602052604090205461194a5760016000600e01600082825461194491906132c3565b90915550505b6001600160a01b038816600090815260156020526040812080548592906119729084906132c3565b90915550506001600160a01b0388166000908152601660205260408120805484929061199f9084906132c3565b90915550506001600160a01b038816600090815260176020526040812080548592906119cc9084906132c3565b9091555050600d80548491906000906119e69084906132c3565b909155505060108054849190600090611a009084906132c3565b9091555050600f8054839190600090611a1a9084906132c3565b90915550506004546040516001600160a01b038a8116927ff29b7b9c9bc4f1c24045a5a10b8bb59a7318d7a1e2e46af68bd5560dfce0e04492611a66929091169087908790429061268f565b60405180910390a2505050505050505050565b600f546009546000918291611aac91611a9191613431565b6007546004546006546001600160a01b03918216911661201e565b600754600454600654929350611ad1928492916001600160a01b0390811691166115ac565b91505090565b6013546040516000918291829182916001600160a01b0390911690611b0090309060240161261d565b60408051601f198184030181529181526020820180516001600160e01b03166308cbebd760e31b17905251611b359190612601565b6000604051808303816000865af19150503d8060008114611b72576040519150601f19603f3d011682016040523d82523d6000602084013e611b77565b606091505b50915091508115611ba15780806020019051810190611b969190612418565b935093505050611bab565b6000809350935050505b9091565b6001600160a01b0381166000908152601560209081526040808320546016909252909120548115801590611be35750600081115b611bff5760405162461bcd60e51b81526004016108ae906127a2565b60016000600e016000828254611c159190613431565b90915550506001600160a01b03831660009081526015602090815260408083208390556016825280832083905560179091528120819055600d8054849290611c5e908490613431565b909155505060108054839190600090611c78908490613431565b9091555050600f8054829190600090611c92908490613431565b90915550611ca5905083826109b1611536565b6004546040516001600160a01b03858116927f211dda46c5b3693e6a4dae7489d6a6738cf8a0104ce5b5ddbb477496a796e3ba92610a08929091169086908690429061268f565b600554604051633657e85160e01b81526000916001600160a01b031690633657e85190611d1d90859060040161261d565b60206040518083038186803b158015611d3557600080fd5b505afa158015611d49573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f99190612485565b600080601860020154421015611d8557506000611de2565b601b54601954611d9591906132c3565b42101580611daa5750601c54610100900460ff165b15611db85750601054611de2565b601b54601954611dc89042613431565b601054611dd59190613412565b611ddf91906132db565b90505b600d54601054611df29190613431565b611ad19082613431565b601a54600090421015611e11575060006102dd565b601b54601954611e2191906132c3565b42101580611e365750601c54610100900460ff165b15611e5a57506001600160a01b0381166000908152601760205260409020546102dd565b601b54601954611e6a9042613431565b6001600160a01b038416600090815260176020526040902054611e8d9190613412565b611e9791906132db565b90506102dd565b6000816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611ed957600080fd5b505afa158015611eed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1191906125a1565b6113f990600a613341565b6000816001600160a01b031663c24fe16c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f5757600080fd5b505afa158015611f6b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f9919061255e565b6000611fe4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120b19092919063ffffffff16565b805190915015610af357808060200190518101906120029190612485565b610af35760405162461bcd60e51b81526004016108ae90612e56565b600061202982611e9e565b8461203385611e9e565b61203c86611f1c565b6115d39089613412565b600754600454600654600092839261206d928692916001600160a01b0390811691166115ac565b600a54909150811061208157600a54612083565b805b9392505050565b6120ab846323b872dd60e01b85858560405160240161161993929190612631565b50505050565b60606120c084846000856120c8565b949350505050565b6060824710156120ea5760405162461bcd60e51b81526004016108ae90612983565b6120f385612188565b61210f5760405162461bcd60e51b81526004016108ae90612d26565b600080866001600160a01b0316858760405161212b9190612601565b60006040518083038185875af1925050503d8060008114612168576040519150601f19603f3d011682016040523d82523d6000602084013e61216d565b606091505b509150915061217d82828661218e565b979650505050505050565b3b151590565b6060831561219d575081612083565b8251156121ad5782518084602001fd5b8160405162461bcd60e51b81526004016108ae9190612761565b604051806101a00160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000151581526020016000151581526020016000815260200160008152602001600081525090565b604051806103600160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160001515815260200160001515815260200160001515815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160001515815260200160008152602001600081526020016000815260200160001515815260200160001515815260200160006001600160a01b031681525090565b82805461236f90613474565b90600052602060002090601f01602090048101928261239157600085556123d7565b82601f106123aa57805160ff19168380011785556123d7565b828001600101855582156123d7579182015b828111156123d75782518255916020019190600101906123bc565b506123e39291506123e7565b5090565b5b808211156123e357600081556001016123e8565b60006020828403121561240d578081fd5b8135612083816134db565b6000806040838503121561242a578081fd5b8251612435816134db565b6020939093015192949293505050565b600080600060608486031215612459578081fd5b8335612464816134db565b92506020840135612474816134db565b929592945050506040919091013590565b600060208284031215612496578081fd5b81518015158114612083578182fd5b600060208083850312156124b7578182fd5b823567ffffffffffffffff808211156124ce578384fd5b818501915085601f8301126124e1578384fd5b8135818111156124f3576124f36134c5565b604051601f8201601f1916810185018381118282101715612516576125166134c5565b604052818152838201850188101561252c578586fd5b818585018683013790810190930193909352509392505050565b600060208284031215612557578081fd5b5035919050565b60006020828403121561256f578081fd5b5051919050565b60008060006060848603121561258a578283fd5b505081359360208301359350604090920135919050565b6000602082840312156125b2578081fd5b815160ff81168114612083578182fd5b6001600160a01b03169052565b15159052565b600081518084526125ed816020860160208601613448565b601f01601f19169290920160200192915050565b60008251612613818460208701613448565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6001600160a01b03959095168552602085019390935260408401919091526060830152608082015260a00190565b60208082528251828201819052600091906040908185019080840286018301878501865b8381101561274857888303603f190185528151805187855261272b888601826125d5565b918901519489019490945294870194925090860190600101612707565b509098975050505050505050565b901515815260200190565b60006020825261208360208301846125d5565b60006060825261278760608301866125d5565b6001600160a01b039490941660208301525060400152919050565b6020808252601c908201527f4143664d616e616765723a204e6f20746f6b656e73206f776e65642e00000000604082015260600190565b60208082526032908201527f43664d616e61676572536f667463617056657374696e673a204e6f20746f6b656040820152713739903a37903132903932b632b0b9b2b21760711b606082015260800190565b60208082526032908201527f43664d616e61676572536f667463617056657374696e673a20636c69666644756040820152713930ba34b7b7101e1e90323ab930ba34b7b760711b606082015260800190565b60208082526027908201527f4143664d616e616765723a20496e766573746d656e7420616d6f756e7420746f60408201526637903434b3b41760c91b606082015260800190565b6020808252602e908201527f4143664d616e616765723a204f6e6c79206f776e65722063616e2063616c6c2060408201526d3a3434b990333ab731ba34b7b71760911b606082015260800190565b6020808252604b908201527f4143664d616e616765723a204f6e6c79207370656e6465722063616e2064656360408201527f69646520746f20626f6f6b2074686520696e766573746d656e74206f6e20736f60608201526a36b2b7b7329032b639b29760a91b608082015260a00190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b60208082526025908201527f43664d616e61676572536f667463617056657374696e673a206475726174696f60408201526406e203e20360dc1b606082015260800190565b60208082526054908201527f4143664d616e616765723a2043616e206f6e6c792066696e616c697a6520636160408201527f6d706169676e20696620746865206d696e696d756d2066756e64696e6720676f60608201527330b6103430b9903132b2b7103932b0b1b432b21760611b608082015260a00190565b60208082526026908201527f4143664d616e616765723a20496e766573746d656e7420616d6f756e7420746f60408201526537903637bb9760d11b606082015260800190565b6020808252603e908201527f4143664d616e616765723a204e6f7420656e6f75676820746f6b656e73206c6560408201527f667420666f72207468697320696e766573746d656e7420616d6f756e742e0000606082015260800190565b6020808252603c908201527f4143664d616e616765723a206e6f7420656e6f75676820746f6b656e7320666f60408201527f722073616c6520746f2072656163682074686520736f66746361702e00000000606082015260800190565b6020808252602c908201527f43664d616e61676572536f667463617056657374696e673a2056657374696e6760408201526b081b9bdd081cdd185c9d195960a21b606082015260800190565b6020808252603b908201527f43664d616e61676572536f667463617056657374696e673a207374617274202b60408201527f206475726174696f6e203e20626c6f636b2e74696d657374616d700000000000606082015260800190565b60208082526046908201527f43664d616e61676572536f667463617056657374696e673a2043616d7061696760408201527f6e2076657374696e6720636f6e66696775726174696f6e206e6f74207265766f60608201526531b0b136329760d11b608082015260a00190565b60208082526023908201527f4143664d616e616765723a2057616c6c6574206e6f742077686974656c69737460408201526232b21760e91b606082015260800190565b60208082526026908201527f4143664d616e616765723a205468652063616d706169676e2069732066696e616040820152653634bd32b21760d11b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526037908201527f4143664d616e616765723a20496e766573746d656e7420616d6f756e7420686160408201527f7320746f2062652067726561746572207468616e20302e000000000000000000606082015260800190565b60208082526031908201527f43664d616e61676572536f667463617056657374696e673a2056657374696e676040820152701030b63932b0b23c9039ba30b93a32b21760791b606082015260800190565b6020808252602b908201527f4143664d616e616765723a205468652063616d706169676e206861732062656560408201526a371031b0b731b2b632b21760a91b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252603a908201527f43664d616e61676572536f667463617056657374696e673a2043616d7061696760408201527f6e2076657374696e6720616c7265616479207265766f6b65642e000000000000606082015260800190565b6020808252604a908201527f4143664d616e616765723a2043616e206f6e6c792063616e63656c20666f722060408201527f736f6d656f6e65206966207468652063616d706169676e20686173206265656e6060820152691031b0b731b2b632b21760b11b608082015260a00190565b6020808252602a908201527f4143664d616e616765723a205468652063616d706169676e206973206e6f74206040820152693334b730b634bd32b21760b11b606082015260800190565b60006020825282516101a0806020850152612fd66101c08501836125d5565b91506020850151601f1980868503016040870152612ff484836125d5565b93506040870151915061300a60608701836125c2565b6060870151915061301e60808701836125c2565b60808701519150808685030160a08701525061303a83826125d5565b92505060a085015161304f60c08601826125c2565b5060c085015161306260e08601826125c2565b5060e085015161010085810191909152850151610120613084818701836125cf565b8601519050610140613098868201836125cf565b86015161016086810191909152860151610180808701919091529095015193019290925250919050565b60006020825282516103608060208501526130e16103808501836125d5565b91506020850151601f19808685030160408701526130ff84836125d5565b93506040870151915061311560608701836125c2565b6060870151915061312960808701836125c2565b6080870151915061313d60a08701836125c2565b60a0870151915061315160c08701836125c2565b60c0870151915061316560e08701836125c2565b60e08701516101008781019190915287015161012080880191909152870151610140808801919091528701516101608088019190915287015191506101806131af818801846125cf565b87015191506101a06131c3878201846125cf565b87015191506101c06131d7878201846125cf565b8701516101e0878101919091528701516102008088019190915287015161022080880191909152870151610240808801919091528701516102608088019190915287015186850382016102808089019190915290925061323785846125d5565b945080880151925050506102a0613250818701836125cf565b8601516102c0868101919091528601516102e08087019190915286015161030080870191909152860151905061032061328b818701836125cf565b860151905061034061329f868201836125cf565b86015190506132b0858301826125c2565b5090949350505050565b90815260200190565b600082198211156132d6576132d66134af565b500190565b6000826132f657634e487b7160e01b81526012600452602481fd5b500490565b80825b600180861161330d5750613338565b81870482111561331f5761331f6134af565b8086161561332c57918102915b9490941c9380026132fe565b94509492505050565b600061208360001960ff85168460008261335d57506001612083565b8161336a57506000612083565b8160018114613380576002811461338a576133b7565b6001915050612083565b60ff84111561339b5761339b6134af565b6001841b9150848211156133b1576133b16134af565b50612083565b5060208310610133831016604e8410600b84101617156133ea575081810a838111156133e5576133e56134af565b612083565b6133f784848460016132fb565b808604821115613409576134096134af565b02949350505050565b600081600019048311821515161561342c5761342c6134af565b500290565b600082821015613443576134436134af565b500390565b60005b8381101561346357818101518382015260200161344b565b838111156120ab5750506000910152565b60028104600182168061348857607f821691505b602082108114156134a957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610aa457600080fdfea26469706673582212209bb496b9cddb343e5eae5851480aefdfd64dca45deb9e62e2b47c627b1b9dade64736f6c6343000800003343664d616e61676572536f667463617056657374696e673a20496e76616c6964",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806367c5bd54116100b8578063a96b7f051161007c578063a96b7f0514610258578063aac8f9671461026b578063b6549f751461028b578063e9cbd82214610293578063ed0ea003146102a8578063f59e4f65146102bb57610137565b806367c5bd541461020d578063937f6e771461022057806394f8e95414610233578063980e78441461023b57806398e162551461024357610137565b80632afcf480116100ff5780632afcf480146101b757806336921c0c146101ca5780633d029091146101dd5780634bb278f3146101f057806354fd4d50146101f857610137565b806304e869031461013c5780631818e2ec146101655780631865c57d1461017a5780631e83409a1461018f5780632af4c31e146101a4575b600080fd5b61014f61014a3660046123fc565b6102c3565b60405161015c91906132ba565b60405180910390f35b61016d6102e2565b60405161015c9190612fb7565b61018261052b565b60405161015c91906130c2565b6101a261019d3660046123fc565b610887565b005b6101a26101b23660046123fc565b610a15565b6101a26101c5366004612546565b610a99565b6101a26101d8366004612445565b610aa7565b6101a26101eb366004612576565b610af8565b6101a2610c3d565b610200610f73565b60405161015c9190612761565b6101a261021b3660046123fc565b611008565b6101a261022e3660046124a5565b611039565b6101a2611118565b6101a261114b565b61024b6112bd565b60405161015c91906126e3565b61014f6102663660046123fc565b6113b8565b61027e6102793660046123fc565b6113d3565b60405161015c9190612756565b6101a26113ff565b61029b611536565b60405161015c919061261d565b61014f6102b63660046123fc565b611545565b610200611560565b6001600160a01b0381166000908152601560205260409020545b919050565b6102ea6121c7565b604051806101a0016040528060008001805461030590613474565b80601f016020809104026020016040519081016040528092919081815260200182805461033190613474565b801561037e5780601f106103535761010080835404028352916020019161037e565b820191906000526020600020905b81548152906001019060200180831161036157829003601f168201915b505050505081526020016000600101805461039890613474565b80601f01602080910402602001604051908101604052809291908181526020018280546103c490613474565b80156104115780601f106103e657610100808354040283529160200191610411565b820191906000526020600020905b8154815290600101906020018083116103f457829003601f168201915b50505091835250506002546001600160a01b0390811660208301526003541660408201526012805460609092019161044890613474565b80601f016020809104026020016040519081016040528092919081815260200182805461047490613474565b80156104c15780601f10610496576101008083540402835291602001916104c1565b820191906000526020600020905b8154815290600101906020018083116104a457829003601f168201915b50505091835250506004546001600160a01b0390811660208301526006541660408201526009546060820152600c5460ff6101008083048216151560808501526201000090920416151560a083015260075460c0830152600f5460e0830152601054910152905090565b610533612257565b60405180610360016040528060008001805461054e90613474565b80601f016020809104026020016040519081016040528092919081815260200182805461057a90613474565b80156105c75780601f1061059c576101008083540402835291602001916105c7565b820191906000526020600020905b8154815290600101906020018083116105aa57829003601f168201915b50505050508152602001600060010180546105e190613474565b80601f016020809104026020016040519081016040528092919081815260200182805461060d90613474565b801561065a5780601f1061062f5761010080835404028352916020019161065a565b820191906000526020600020905b81548152906001019060200180831161063d57829003601f168201915b50505091835250506002546001600160a01b0390811660208301526003548116604083015260045481166060830152600554811660808301526006541660a082015260075460c082015260095460e0820152600a5461010080830191909152600b54610120830152600c5460ff808216151561014085015291810482161515610160840152620100009004161515610180820152600d546101a0820152600e546101c0820152600f546101e08201526010546102008201526102200161071e611571565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610749919061261d565b60206040518083038186803b15801561076157600080fd5b505afa158015610775573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610799919061255e565b8152602001600060120180546107ae90613474565b80601f01602080910402602001604051908101604052809291908181526020018280546107da90613474565b80156108275780601f106107fc57610100808354040283529160200191610827565b820191906000526020600020905b81548152906001019060200180831161080a57829003601f168201915b505050918352505060185460ff908116151560208301526019546040830152601a546060830152601b546080830152601c54808216151560a0840152610100900416151560c08201526013546001600160a01b031660e090910152905090565b600c54610100900460ff166108b75760405162461bcd60e51b81526004016108ae90612f6d565b60405180910390fd5b60185460ff166108d95760405162461bcd60e51b81526004016108ae90612b88565b60006108e482611580565b60075460045460065492935060009261090d92859290916001600160a01b0391821691166115ac565b90506000821161092f5760405162461bcd60e51b81526004016108ae906127d9565b816000600d0160008282546109449190613431565b90915550506001600160a01b03831660009081526015602052604081208054849290610971908490613431565b90915550506001600160a01b0383166000908152601d60205260408120805484929061099e9084906132c3565b909155506109c1905083836109b1611571565b6001600160a01b031691906115fa565b6004546040516001600160a01b03858116927f9137e112a187039f8a3291c0a66fce97153d25ec42036e82360d5d0106d19a6e92610a08929091169086908690429061268f565b60405180910390a2505050565b6003546001600160a01b03163314610a3f5760405162461bcd60e51b81526004016108ae906128c4565b600380546001600160a01b0319166001600160a01b0383161790556040517fb4fa0c8f1565e6385961540cac5b9884d84157c515100cf972728e8be8dacdd390610a8e90339084904290612631565b60405180910390a150565b610aa4333383611650565b50565b816001600160a01b0316836001600160a01b031614610ae8576001600160a01b0383163314610ae85760405162461bcd60e51b81526004016108ae90612912565b610af3838383611650565b505050565b6003546001600160a01b03163314610b225760405162461bcd60e51b81526004016108ae906128c4565b600c54610100900460ff16610b495760405162461bcd60e51b81526004016108ae90612f6d565b60185460ff1615610b6c5760405162461bcd60e51b81526004016108ae90612dba565b80821115610b8c5760405162461bcd60e51b81526004016108ae9061282b565b60008111610bac5760405162461bcd60e51b81526004016108ae906129c9565b42610bb782856132c3565b11610bd45760405162461bcd60e51b81526004016108ae90612bd4565b6018805460ff191660011790556019839055610bf082846132c3565b601a55601b81905560045460405133917f1b80a1ad361272967857069bbb1b6c32ae4dede784580d2e94bed06f9dd7ca7791610a08916001600160a01b03169087908790879042906126b5565b6003546001600160a01b03163314610c675760405162461bcd60e51b81526004016108ae906128c4565b600c5462010000900460ff1615610c905760405162461bcd60e51b81526004016108ae90612e0b565b600c54610100900460ff1615610cb85760405162461bcd60e51b81526004016108ae90612ce0565b6000610cc2611536565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610cf2919061261d565b60206040518083038186803b158015610d0a57600080fd5b505afa158015610d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d42919061255e565b60095490915081101580610d5b5750610d59611a79565b155b610d775760405162461bcd60e51b81526004016108ae90612a0e565b600c805461ff0019166101001790556000610d90611571565b6010546040516370a0823160e01b81529192509060009082906001600160a01b038516906370a0823190610dc890309060040161261d565b60206040518083038186803b158015610de057600080fd5b505afa158015610df4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e18919061255e565b610e229190613431565b6004805460408051631629a1fb60e21b815290519394506001600160a01b03909116926358a687ec9282810192600092919082900301818387803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b505050506000841115610f0557600080610e95611ad7565b91509150600081118015610eb157506001600160a01b03821615155b15610eee57610eca6001600160a01b03881683836115fa565b610ee933610ed88389613431565b6001600160a01b038a1691906115fa565b610f02565b610f026001600160a01b03881633886115fa565b50505b8015610f1f57610f1f6001600160a01b03841633836115fa565b60045460405133917fc7ffb23c3f55c770b94ffcdbbe7d3b0520a2e76b9abe111f43c7c48cab999a6a91610f64916001600160a01b03169088908790879042906126b5565b60405180910390a25050505050565b606060006001018054610f8590613474565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb190613474565b8015610ffe5780601f10610fd357610100808354040283529160200191610ffe565b820191906000526020600020905b815481529060010190602001808311610fe157829003601f168201915b5050505050905090565b600c5462010000900460ff166110305760405162461bcd60e51b81526004016108ae90612efd565b610aa481611baf565b6003546001600160a01b031633146110635760405162461bcd60e51b81526004016108ae906128c4565b6040805180820190915281815242602080830191909152601480546001810182556000919091528251805160029092027fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec01926110c592849290910190612363565b5060209182015160019091015581516110e49160129190840190612363565b507f39b28594242c42fce47a0a6e63bac12adbd07fbb35580f5a54b236858101d58a813342604051610a8e93929190612774565b600c54610100900460ff16156111405760405162461bcd60e51b81526004016108ae90612ce0565b61114933611baf565b565b6003546001600160a01b031633146111755760405162461bcd60e51b81526004016108ae906128c4565b600c5462010000900460ff161561119e5760405162461bcd60e51b81526004016108ae90612e0b565b600c54610100900460ff16156111c65760405162461bcd60e51b81526004016108ae90612ce0565b600c805462ff000019166201000017905560006111e1611571565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161120c919061261d565b60206040518083038186803b15801561122457600080fd5b505afa158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c919061255e565b905080156112715761127133826109b1611571565b60045460405133917faf1ae5c6fb3f0ce445b207ae00f52f0b564d8fe58282727032de5d199eaa7981916112b2916001600160a01b0316908590429061266e565b60405180910390a250565b60606014805480602002602001604051908101604052809291908181526020016000905b828210156113af578382906000526020600020906002020160405180604001604052908160008201805461131490613474565b80601f016020809104026020016040519081016040528092919081815260200182805461134090613474565b801561138d5780601f106113625761010080835404028352916020019161138d565b820191906000526020600020905b81548152906001019060200180831161137057829003601f168201915b50505050508152602001600182015481525050815260200190600101906112e1565b50505050905090565b6001600160a01b031660009081526017602052604090205490565b600c5460009060ff1615806113f95750600c5460ff1680156113f957506113f982611cec565b92915050565b6003546001600160a01b031633146114295760405162461bcd60e51b81526004016108ae906128c4565b600c54610100900460ff166114505760405162461bcd60e51b81526004016108ae90612f6d565b60185460ff166114725760405162461bcd60e51b81526004016108ae90612b88565b601c5460ff166114945760405162461bcd60e51b81526004016108ae90612c31565b601c54610100900460ff16156114bc5760405162461bcd60e51b81526004016108ae90612ea0565b600d5460006114c9611d6d565b905060006114d78284613431565b601c805461ff00191661010017905590506114f533826109b1611571565b60045460405133917fd6f80c7d68e3e62bd7a51c3d37e575c1cfbc311c07487b69ef4eb570bc21cb6891610a08916001600160a01b0316908590429061266e565b6006546001600160a01b031690565b6001600160a01b031660009081526016602052604090205490565b6060600080018054610f8590613474565b6004546001600160a01b031690565b6001600160a01b0381166000908152601d60205260408120546115a283611dfc565b6113f99190613431565b60006115b783611e9e565b6115c084611f1c565b6115c984611e9e565b6115d38789613412565b6115dd9190613412565b6115e791906132db565b6115f191906132db565b95945050505050565b610af38363a9059cbb60e01b8484604051602401611619929190612655565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611f8f565b600c5462010000900460ff16156116795760405162461bcd60e51b81526004016108ae90612e0b565b600c54610100900460ff16156116a15760405162461bcd60e51b81526004016108ae90612ce0565b816116ab816113d3565b6116c75760405162461bcd60e51b81526004016108ae90612c9d565b600082116116e75760405162461bcd60e51b81526004016108ae90612d5d565b60006116f1611571565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161171c919061261d565b60206040518083038186803b15801561173457600080fd5b505afa158015611748573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176c919061255e565b6009546007546004546006549394509192611796928592916001600160a01b0391821691166115ac565b10156117b45760405162461bcd60e51b81526004016108ae90612b2b565b600d546000906117c49083613431565b6007546004546006549293506000926117ed92889290916001600160a01b03918216911661201e565b60075460045460065492935060009261181692859290916001600160a01b0391821691166115ac565b90506000821180156118285750600081115b6118445760405162461bcd60e51b81526004016108ae90612a88565b818310156118645760405162461bcd60e51b81526004016108ae90612ace565b6001600160a01b0387166000908152601560205260408120546118a69061188b90856132c3565b6007546004546006546001600160a01b0391821691166115ac565b90506118b184612046565b8110156118d05760405162461bcd60e51b81526004016108ae90612a88565b600b548111156118f25760405162461bcd60e51b81526004016108ae9061287d565b611911893084611900611536565b6001600160a01b031692919061208a565b6001600160a01b03881660009081526015602052604090205461194a5760016000600e01600082825461194491906132c3565b90915550505b6001600160a01b038816600090815260156020526040812080548592906119729084906132c3565b90915550506001600160a01b0388166000908152601660205260408120805484929061199f9084906132c3565b90915550506001600160a01b038816600090815260176020526040812080548592906119cc9084906132c3565b9091555050600d80548491906000906119e69084906132c3565b909155505060108054849190600090611a009084906132c3565b9091555050600f8054839190600090611a1a9084906132c3565b90915550506004546040516001600160a01b038a8116927ff29b7b9c9bc4f1c24045a5a10b8bb59a7318d7a1e2e46af68bd5560dfce0e04492611a66929091169087908790429061268f565b60405180910390a2505050505050505050565b600f546009546000918291611aac91611a9191613431565b6007546004546006546001600160a01b03918216911661201e565b600754600454600654929350611ad1928492916001600160a01b0390811691166115ac565b91505090565b6013546040516000918291829182916001600160a01b0390911690611b0090309060240161261d565b60408051601f198184030181529181526020820180516001600160e01b03166308cbebd760e31b17905251611b359190612601565b6000604051808303816000865af19150503d8060008114611b72576040519150601f19603f3d011682016040523d82523d6000602084013e611b77565b606091505b50915091508115611ba15780806020019051810190611b969190612418565b935093505050611bab565b6000809350935050505b9091565b6001600160a01b0381166000908152601560209081526040808320546016909252909120548115801590611be35750600081115b611bff5760405162461bcd60e51b81526004016108ae906127a2565b60016000600e016000828254611c159190613431565b90915550506001600160a01b03831660009081526015602090815260408083208390556016825280832083905560179091528120819055600d8054849290611c5e908490613431565b909155505060108054839190600090611c78908490613431565b9091555050600f8054829190600090611c92908490613431565b90915550611ca5905083826109b1611536565b6004546040516001600160a01b03858116927f211dda46c5b3693e6a4dae7489d6a6738cf8a0104ce5b5ddbb477496a796e3ba92610a08929091169086908690429061268f565b600554604051633657e85160e01b81526000916001600160a01b031690633657e85190611d1d90859060040161261d565b60206040518083038186803b158015611d3557600080fd5b505afa158015611d49573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f99190612485565b600080601860020154421015611d8557506000611de2565b601b54601954611d9591906132c3565b42101580611daa5750601c54610100900460ff165b15611db85750601054611de2565b601b54601954611dc89042613431565b601054611dd59190613412565b611ddf91906132db565b90505b600d54601054611df29190613431565b611ad19082613431565b601a54600090421015611e11575060006102dd565b601b54601954611e2191906132c3565b42101580611e365750601c54610100900460ff165b15611e5a57506001600160a01b0381166000908152601760205260409020546102dd565b601b54601954611e6a9042613431565b6001600160a01b038416600090815260176020526040902054611e8d9190613412565b611e9791906132db565b90506102dd565b6000816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611ed957600080fd5b505afa158015611eed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1191906125a1565b6113f990600a613341565b6000816001600160a01b031663c24fe16c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f5757600080fd5b505afa158015611f6b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f9919061255e565b6000611fe4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120b19092919063ffffffff16565b805190915015610af357808060200190518101906120029190612485565b610af35760405162461bcd60e51b81526004016108ae90612e56565b600061202982611e9e565b8461203385611e9e565b61203c86611f1c565b6115d39089613412565b600754600454600654600092839261206d928692916001600160a01b0390811691166115ac565b600a54909150811061208157600a54612083565b805b9392505050565b6120ab846323b872dd60e01b85858560405160240161161993929190612631565b50505050565b60606120c084846000856120c8565b949350505050565b6060824710156120ea5760405162461bcd60e51b81526004016108ae90612983565b6120f385612188565b61210f5760405162461bcd60e51b81526004016108ae90612d26565b600080866001600160a01b0316858760405161212b9190612601565b60006040518083038185875af1925050503d8060008114612168576040519150601f19603f3d011682016040523d82523d6000602084013e61216d565b606091505b509150915061217d82828661218e565b979650505050505050565b3b151590565b6060831561219d575081612083565b8251156121ad5782518084602001fd5b8160405162461bcd60e51b81526004016108ae9190612761565b604051806101a00160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000151581526020016000151581526020016000815260200160008152602001600081525090565b604051806103600160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160001515815260200160001515815260200160001515815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160001515815260200160008152602001600081526020016000815260200160001515815260200160001515815260200160006001600160a01b031681525090565b82805461236f90613474565b90600052602060002090601f01602090048101928261239157600085556123d7565b82601f106123aa57805160ff19168380011785556123d7565b828001600101855582156123d7579182015b828111156123d75782518255916020019190600101906123bc565b506123e39291506123e7565b5090565b5b808211156123e357600081556001016123e8565b60006020828403121561240d578081fd5b8135612083816134db565b6000806040838503121561242a578081fd5b8251612435816134db565b6020939093015192949293505050565b600080600060608486031215612459578081fd5b8335612464816134db565b92506020840135612474816134db565b929592945050506040919091013590565b600060208284031215612496578081fd5b81518015158114612083578182fd5b600060208083850312156124b7578182fd5b823567ffffffffffffffff808211156124ce578384fd5b818501915085601f8301126124e1578384fd5b8135818111156124f3576124f36134c5565b604051601f8201601f1916810185018381118282101715612516576125166134c5565b604052818152838201850188101561252c578586fd5b818585018683013790810190930193909352509392505050565b600060208284031215612557578081fd5b5035919050565b60006020828403121561256f578081fd5b5051919050565b60008060006060848603121561258a578283fd5b505081359360208301359350604090920135919050565b6000602082840312156125b2578081fd5b815160ff81168114612083578182fd5b6001600160a01b03169052565b15159052565b600081518084526125ed816020860160208601613448565b601f01601f19169290920160200192915050565b60008251612613818460208701613448565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6001600160a01b03959095168552602085019390935260408401919091526060830152608082015260a00190565b60208082528251828201819052600091906040908185019080840286018301878501865b8381101561274857888303603f190185528151805187855261272b888601826125d5565b918901519489019490945294870194925090860190600101612707565b509098975050505050505050565b901515815260200190565b60006020825261208360208301846125d5565b60006060825261278760608301866125d5565b6001600160a01b039490941660208301525060400152919050565b6020808252601c908201527f4143664d616e616765723a204e6f20746f6b656e73206f776e65642e00000000604082015260600190565b60208082526032908201527f43664d616e61676572536f667463617056657374696e673a204e6f20746f6b656040820152713739903a37903132903932b632b0b9b2b21760711b606082015260800190565b60208082526032908201527f43664d616e61676572536f667463617056657374696e673a20636c69666644756040820152713930ba34b7b7101e1e90323ab930ba34b7b760711b606082015260800190565b60208082526027908201527f4143664d616e616765723a20496e766573746d656e7420616d6f756e7420746f60408201526637903434b3b41760c91b606082015260800190565b6020808252602e908201527f4143664d616e616765723a204f6e6c79206f776e65722063616e2063616c6c2060408201526d3a3434b990333ab731ba34b7b71760911b606082015260800190565b6020808252604b908201527f4143664d616e616765723a204f6e6c79207370656e6465722063616e2064656360408201527f69646520746f20626f6f6b2074686520696e766573746d656e74206f6e20736f60608201526a36b2b7b7329032b639b29760a91b608082015260a00190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b60208082526025908201527f43664d616e61676572536f667463617056657374696e673a206475726174696f60408201526406e203e20360dc1b606082015260800190565b60208082526054908201527f4143664d616e616765723a2043616e206f6e6c792066696e616c697a6520636160408201527f6d706169676e20696620746865206d696e696d756d2066756e64696e6720676f60608201527330b6103430b9903132b2b7103932b0b1b432b21760611b608082015260a00190565b60208082526026908201527f4143664d616e616765723a20496e766573746d656e7420616d6f756e7420746f60408201526537903637bb9760d11b606082015260800190565b6020808252603e908201527f4143664d616e616765723a204e6f7420656e6f75676820746f6b656e73206c6560408201527f667420666f72207468697320696e766573746d656e7420616d6f756e742e0000606082015260800190565b6020808252603c908201527f4143664d616e616765723a206e6f7420656e6f75676820746f6b656e7320666f60408201527f722073616c6520746f2072656163682074686520736f66746361702e00000000606082015260800190565b6020808252602c908201527f43664d616e61676572536f667463617056657374696e673a2056657374696e6760408201526b081b9bdd081cdd185c9d195960a21b606082015260800190565b6020808252603b908201527f43664d616e61676572536f667463617056657374696e673a207374617274202b60408201527f206475726174696f6e203e20626c6f636b2e74696d657374616d700000000000606082015260800190565b60208082526046908201527f43664d616e61676572536f667463617056657374696e673a2043616d7061696760408201527f6e2076657374696e6720636f6e66696775726174696f6e206e6f74207265766f60608201526531b0b136329760d11b608082015260a00190565b60208082526023908201527f4143664d616e616765723a2057616c6c6574206e6f742077686974656c69737460408201526232b21760e91b606082015260800190565b60208082526026908201527f4143664d616e616765723a205468652063616d706169676e2069732066696e616040820152653634bd32b21760d11b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526037908201527f4143664d616e616765723a20496e766573746d656e7420616d6f756e7420686160408201527f7320746f2062652067726561746572207468616e20302e000000000000000000606082015260800190565b60208082526031908201527f43664d616e61676572536f667463617056657374696e673a2056657374696e676040820152701030b63932b0b23c9039ba30b93a32b21760791b606082015260800190565b6020808252602b908201527f4143664d616e616765723a205468652063616d706169676e206861732062656560408201526a371031b0b731b2b632b21760a91b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252603a908201527f43664d616e61676572536f667463617056657374696e673a2043616d7061696760408201527f6e2076657374696e6720616c7265616479207265766f6b65642e000000000000606082015260800190565b6020808252604a908201527f4143664d616e616765723a2043616e206f6e6c792063616e63656c20666f722060408201527f736f6d656f6e65206966207468652063616d706169676e20686173206265656e6060820152691031b0b731b2b632b21760b11b608082015260a00190565b6020808252602a908201527f4143664d616e616765723a205468652063616d706169676e206973206e6f74206040820152693334b730b634bd32b21760b11b606082015260800190565b60006020825282516101a0806020850152612fd66101c08501836125d5565b91506020850151601f1980868503016040870152612ff484836125d5565b93506040870151915061300a60608701836125c2565b6060870151915061301e60808701836125c2565b60808701519150808685030160a08701525061303a83826125d5565b92505060a085015161304f60c08601826125c2565b5060c085015161306260e08601826125c2565b5060e085015161010085810191909152850151610120613084818701836125cf565b8601519050610140613098868201836125cf565b86015161016086810191909152860151610180808701919091529095015193019290925250919050565b60006020825282516103608060208501526130e16103808501836125d5565b91506020850151601f19808685030160408701526130ff84836125d5565b93506040870151915061311560608701836125c2565b6060870151915061312960808701836125c2565b6080870151915061313d60a08701836125c2565b60a0870151915061315160c08701836125c2565b60c0870151915061316560e08701836125c2565b60e08701516101008781019190915287015161012080880191909152870151610140808801919091528701516101608088019190915287015191506101806131af818801846125cf565b87015191506101a06131c3878201846125cf565b87015191506101c06131d7878201846125cf565b8701516101e0878101919091528701516102008088019190915287015161022080880191909152870151610240808801919091528701516102608088019190915287015186850382016102808089019190915290925061323785846125d5565b945080880151925050506102a0613250818701836125cf565b8601516102c0868101919091528601516102e08087019190915286015161030080870191909152860151905061032061328b818701836125cf565b860151905061034061329f868201836125cf565b86015190506132b0858301826125c2565b5090949350505050565b90815260200190565b600082198211156132d6576132d66134af565b500190565b6000826132f657634e487b7160e01b81526012600452602481fd5b500490565b80825b600180861161330d5750613338565b81870482111561331f5761331f6134af565b8086161561332c57918102915b9490941c9380026132fe565b94509492505050565b600061208360001960ff85168460008261335d57506001612083565b8161336a57506000612083565b8160018114613380576002811461338a576133b7565b6001915050612083565b60ff84111561339b5761339b6134af565b6001841b9150848211156133b1576133b16134af565b50612083565b5060208310610133831016604e8410600b84101617156133ea575081810a838111156133e5576133e56134af565b612083565b6133f784848460016132fb565b808604821115613409576134096134af565b02949350505050565b600081600019048311821515161561342c5761342c6134af565b500290565b600082821015613443576134436134af565b500390565b60005b8381101561346357818101518382015260200161344b565b838111156120ab5750506000910152565b60028104600182168061348857607f821691505b602082108114156134a957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610aa457600080fdfea26469706673582212209bb496b9cddb343e5eae5851480aefdfd64dca45deb9e62e2b47c627b1b9dade64736f6c63430008000033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
