{
  "_format": "hh-sol-artifact-1",
  "contractName": "YearnStrategyMock",
  "sourceName": "contracts/mocks/external/YearnStrategyMock.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_vault",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "clone",
          "type": "address"
        }
      ],
      "name": "Cloned",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "EmergencyExitEnabled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "profit",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "loss",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "debtPayment",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "debtOutstanding",
          "type": "uint256"
        }
      ],
      "name": "Harvested",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "debtThreshold",
          "type": "uint256"
        }
      ],
      "name": "UpdatedDebtThreshold",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "newKeeper",
          "type": "address"
        }
      ],
      "name": "UpdatedKeeper",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "delay",
          "type": "uint256"
        }
      ],
      "name": "UpdatedMaxReportDelay",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "metadataURI",
          "type": "string"
        }
      ],
      "name": "UpdatedMetadataURI",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "delay",
          "type": "uint256"
        }
      ],
      "name": "UpdatedMinReportDelay",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "profitFactor",
          "type": "uint256"
        }
      ],
      "name": "UpdatedProfitFactor",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "rewards",
          "type": "address"
        }
      ],
      "name": "UpdatedRewards",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "newStrategist",
          "type": "address"
        }
      ],
      "name": "UpdatedStrategist",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_want",
          "type": "address"
        }
      ],
      "name": "_setWant",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "_takeFunds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "_toggleDelegation",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "_toggleReentrancyExploit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "apiVersion",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_vault",
          "type": "address"
        }
      ],
      "name": "clone",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_vault",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_strategist",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_rewards",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        }
      ],
      "name": "clone",
      "outputs": [
        {
          "internalType": "address",
          "name": "newStrategy",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "debtThreshold",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "delegateEverything",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "delegatedAssets",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "doReentrancy",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "emergencyExit",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "estimatedTotalAssets",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "harvest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "callCost",
          "type": "uint256"
        }
      ],
      "name": "harvestTrigger",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_vault",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_strategist",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_rewards",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isActive",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "keeper",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxReportDelay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "metadataURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newStrategy",
          "type": "address"
        }
      ],
      "name": "migrate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minReportDelay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "profitFactor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "protectedToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewards",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_debtThreshold",
          "type": "uint256"
        }
      ],
      "name": "setDebtThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setEmergencyExit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        }
      ],
      "name": "setKeeper",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_delay",
          "type": "uint256"
        }
      ],
      "name": "setMaxReportDelay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_metadataURI",
          "type": "string"
        }
      ],
      "name": "setMetadataURI",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_delay",
          "type": "uint256"
        }
      ],
      "name": "setMinReportDelay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_profitFactor",
          "type": "uint256"
        }
      ],
      "name": "setProfitFactor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_rewards",
          "type": "address"
        }
      ],
      "name": "setRewards",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_strategist",
          "type": "address"
        }
      ],
      "name": "setStrategist",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "strategist",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "sweep",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tend",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "tendTrigger",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "vault",
      "outputs": [
        {
          "internalType": "contract VaultAPI",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "want",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amountNeeded",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_loss",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620035653803806200356583398101604081905262000034916200052f565b80806200004d813380806001600160e01b036200005616565b505050620007a7565b6005546001600160a01b0316156200008b5760405162461bcd60e51b815260040162000082906200065f565b60405180910390fd5b600180546001600160a01b0319166001600160a01b03868116919091179182905560408051637e062a3560e11b81529051929091169163fc0c546a91600480820192602092909190829003018186803b158015620000e857600080fd5b505afa158015620000fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012391906200052f565b600580546001600160a01b0319166001600160a01b0392831617908190556200015d9116856000196200023b602090811b62001c1517901c565b600280546001600160a01b038086166001600160a01b0319928316179092556003805485841690831617908190556004805485851693169290921782556000600681905562015180600755606460085560095560015460405163095ea7b360e01b81529084169363095ea7b393620001de93909116916000199101620005cb565b602060405180830381600087803b158015620001f957600080fd5b505af11580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000234919062000558565b5050505050565b801580620002ca5750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90620002749030908690600401620005b1565b60206040518083038186803b1580156200028d57600080fd5b505afa158015620002a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c891906200057a565b155b620002e95760405162461bcd60e51b8152600401620000829062000717565b620003448363095ea7b360e01b84846040516024016200030b929190620005cb565b60408051808303601f190181529190526020810180516001600160e01b0319939093166001600160e01b03938416179052906200034916565b505050565b6060620003a5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620003e560201b62001d14179092919060201c565b805190915015620003445780806020019051810190620003c6919062000558565b620003445760405162461bcd60e51b81526004016200008290620006cd565b6060620003ff84846000856001600160e01b036200040916565b90505b9392505050565b6060824710156200042e5760405162461bcd60e51b8152600401620000829062000619565b62000442856001600160e01b03620004eb16565b620004615760405162461bcd60e51b8152600401620000829062000696565b60006060866001600160a01b0316858760405162000480919062000593565b60006040518083038185875af1925050503d8060008114620004bf576040519150601f19603f3d011682016040523d82523d6000602084013e620004c4565b606091505b509092509050620004e08282866001600160e01b03620004f116565b979650505050505050565b3b151590565b606083156200050257508162000402565b825115620005135782518084602001fd5b8160405162461bcd60e51b8152600401620000829190620005e4565b60006020828403121562000541578081fd5b81516001600160a01b038116811462000402578182fd5b6000602082840312156200056a578081fd5b8151801515811462000402578182fd5b6000602082840312156200058c578081fd5b5051919050565b60008251620005a781846020870162000774565b9190910192915050565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b60006020825282518060208401526200060581604085016020870162000774565b601f01601f19169190910160400192915050565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252601c908201527f537472617465677920616c726561647920696e697469616c697a656400000000604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526036908201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60408201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606082015260800190565b60005b838110156200079157818101518382015260200162000777565b83811115620007a1576000848401525b50505050565b612dae80620007b76000396000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c80638cdfe16611610146578063d0e8577d116100c3578063efbb5cb011610087578063efbb5cb014610467578063f017c92f1461046f578063f8c8765e14610482578063fba04a4414610495578063fbfa77cf146104a8578063fcf2d0ad146104b05761025e565b8063d0e8577d1461041e578063d64a42e914610431578063d653943a14610439578063ec38a86214610441578063ed882c2b146104545761025e565b8063aced16611161010a578063aced1661146103d5578063b30db32c146103dd578063c7b9d530146103e5578063ce5494bb146103f8578063d05118421461040b5761025e565b80638cdfe166146103a25780638e6350e2146103aa57806391397ab4146103b257806395e80c50146103c55780639ec5a894146103cd5761025e565b806328b7ccf7116101df57806352052af8116101a357806352052af8146103465780635641ec031461034e578063650d188014610356578063748747e614610369578063750521f51461037c5780638124b78e1461038f5761025e565b806328b7ccf7146103085780632e1a7d4d1461031057806339a172a814610323578063440368a3146103365780634641257d1461033e5761025e565b80631d12f28b116102265780631d12f28b146102c65780631f1fcd51146102db5780631fe4a686146102f057806322f3e2d4146102f857806325829410146103005761025e565b806301681a621461026357806303aaab6f1461027857806303ee438c1461029657806306fdde03146102ab5780630f969b87146102b3575b600080fd5b610276610271366004612725565b6104b8565b005b61028061065d565b60405161028d91906129b8565b60405180910390f35b61029e61066b565b60405161028d91906129f2565b61029e6106f9565b6102766102c13660046128c0565b610728565b6102ce6107b5565b60405161028d9190612cbf565b6102e36107bb565b60405161028d9190612946565b6102e36107ca565b6102806107d9565b61029e61087b565b6102ce61089a565b6102ce61031e3660046128c0565b6108a0565b6102766103313660046128c0565b610901565b610276610983565b610276610bac565b610276610f15565b610280610f32565b6102806103643660046128c0565b610f3b565b610276610377366004612725565b610f43565b61027661038a3660046127d8565b610fee565b6102e361039d366004612725565b611085565b6102ce611109565b6102ce61110f565b6102766103c03660046128c0565b6111b7565b6102ce611239565b6102e361123f565b6102e361124e565b61027661125d565b6102766103f3366004612725565b61127c565b610276610406366004612725565b611327565b6102e361041936600461275d565b61149e565b61027661042c366004612725565b61158b565b6102806115ad565b6102e36115bc565b61027661044f366004612725565b6115c2565b6102806104623660046128c0565b611759565b6102ce6119f0565b61027661047d3660046128c0565b611a71565b61027661049036600461275d565b611af3565b6102766104a33660046128c0565b611b05565b6102e3611b22565b610276611b31565b6104c0611d2d565b6001600160a01b0316336001600160a01b0316146104f95760405162461bcd60e51b81526004016104f090612bd6565b60405180910390fd5b6005546001600160a01b03828116911614156105275760405162461bcd60e51b81526004016104f090612a4a565b6001546001600160a01b03828116911614156105555760405162461bcd60e51b81526004016104f090612b7e565b606061055f611daa565b905060005b81518110156105ba5781818151811061057957fe5b60200260200101516001600160a01b0316836001600160a01b031614156105b25760405162461bcd60e51b81526004016104f090612c45565b600101610564565b506106596105c6611d2d565b6040516370a0823160e01b81526001600160a01b038516906370a08231906105f2903090600401612946565b60206040518083038186803b15801561060a57600080fd5b505afa15801561061e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064291906128d8565b6001600160a01b038516919063ffffffff611dfc16565b5050565b600a54610100900460ff1681565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106f15780601f106106c6576101008083540402835291602001916106f1565b820191906000526020600020905b8154815290600101906020018083116106d457829003601f168201915b505050505081565b606061070361087b565b604051602001610713919061290c565b60405160208183030381529060405290505b90565b6002546001600160a01b03163314806107595750610744611d2d565b6001600160a01b0316336001600160a01b0316145b6107755760405162461bcd60e51b81526004016104f090612bd6565b60098190556040517fa68ba126373d04c004c5748c300c9fca12bd444b3d4332e261f3bd2bac4a8600906107aa908390612cbf565b60405180910390a150565b60095481565b6005546001600160a01b031681565b6002546001600160a01b031681565b6001546040516339ebf82360e01b815260009182916001600160a01b03909116906339ebf8239061080e903090600401612946565b6101206040518083038186803b15801561082757600080fd5b505afa15801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190612842565b604001511180610876575060006108746119f0565b115b905090565b6040805180820190915260058152640c0b8ccb8d60da1b602082015290565b60075481565b6001546000906001600160a01b031633146108cd5760405162461bcd60e51b81526004016104f090612b5e565b60006108d883611e1b565b6005549093509091506108fb906001600160a01b0316338363ffffffff611dfc16565b50919050565b6002546001600160a01b0316331480610932575061091d611d2d565b6001600160a01b0316336001600160a01b0316145b61094e5760405162461bcd60e51b81526004016104f090612bd6565b60068190556040517fbb2c369a0355a34b02ab5fce0643150c87e1c8dfe7c918d465591879f57948b1906107aa908390612cbf565b6004546001600160a01b03163314806109a657506002546001600160a01b031633145b806109c957506109b4611d2d565b6001600160a01b0316336001600160a01b0316145b80610a6a5750600160009054906101000a90046001600160a01b03166001600160a01b031663452a93206040518163ffffffff1660e01b815260040160206040518083038186803b158015610a1d57600080fd5b505afa158015610a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a559190612741565b6001600160a01b0316336001600160a01b0316145b80610b0b5750600160009054906101000a90046001600160a01b03166001600160a01b03166388a8d6026040518163ffffffff1660e01b815260040160206040518083038186803b158015610abe57600080fd5b505afa158015610ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af69190612741565b6001600160a01b0316336001600160a01b0316145b610b275760405162461bcd60e51b81526004016104f090612bd6565b6001546040805163bf3759b560e01b81529051610baa926001600160a01b03169163bf3759b5916004808301926020929190829003018186803b158015610b6d57600080fd5b505afa158015610b81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba591906128d8565b61149b565b565b6004546001600160a01b0316331480610bcf57506002546001600160a01b031633145b80610bf25750610bdd611d2d565b6001600160a01b0316336001600160a01b0316145b80610c935750600160009054906101000a90046001600160a01b03166001600160a01b031663452a93206040518163ffffffff1660e01b815260040160206040518083038186803b158015610c4657600080fd5b505afa158015610c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7e9190612741565b6001600160a01b0316336001600160a01b0316145b80610d345750600160009054906101000a90046001600160a01b03166001600160a01b03166388a8d6026040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce757600080fd5b505afa158015610cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1f9190612741565b6001600160a01b0316336001600160a01b0316145b610d505760405162461bcd60e51b81526004016104f090612bd6565b6001546040805163bf3759b560e01b81529051600092839283926001600160a01b039092169163bf3759b591600480820192602092909190829003018186803b158015610d9c57600080fd5b505afa158015610db0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd491906128d8565b600a5490915060009060ff1615610e30576000610def6119f0565b9050610e08838211610e015783610e03565b815b611e1b565b9450915082821115610e2a57610e24828463ffffffff61209816565b94508291505b50610e41565b610e39826120da565b919550935090505b6001546040516328766ebf60e21b81526001600160a01b039091169063a1d9bafc90610e7590879087908690600401612cdf565b602060405180830381600087803b158015610e8f57600080fd5b505af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec791906128d8565b9150610ed28261149b565b7f4c0f499ffe6befa0ca7c826b0916cf87bea98de658013e76938489368d60d50984848385604051610f079493929190612cf5565b60405180910390a150505050565b600a805461ff001981166101009182900460ff1615909102179055565b600a5460ff1681565b60005b919050565b6002546001600160a01b0316331480610f745750610f5f611d2d565b6001600160a01b0316336001600160a01b0316145b610f905760405162461bcd60e51b81526004016104f090612bd6565b6001600160a01b038116610fa357600080fd5b600480546001600160a01b0319166001600160a01b0383161790556040517f2f202ddb4a2e345f6323ed90f8fc8559d770a7abbbeee84dde8aca3351fe7154906107aa908390612946565b6002546001600160a01b031633148061101f575061100a611d2d565b6001600160a01b0316336001600160a01b0316145b61103b5760405162461bcd60e51b81526004016104f090612bd6565b61104760008383612641565b507f300e67d5a415b6d015a471d9c7b95dd58f3e8290af965e84e0f845de2996dda682826040516110799291906129c3565b60405180910390a15050565b6040516368288c2160e11b8152600090309063d0511842906110b1908590339081908190600401612974565b602060405180830381600087803b1580156110cb57600080fd5b505af11580156110df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111039190612741565b92915050565b60085481565b600a5460009062010000900460ff16156111af576001546040516339ebf82360e01b81526001600160a01b03909116906339ebf82390611153903090600401612946565b6101206040518083038186803b15801561116c57600080fd5b505afa158015611180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190612842565b60c001519050610725565b506000610725565b6002546001600160a01b03163314806111e857506111d3611d2d565b6001600160a01b0316336001600160a01b0316145b6112045760405162461bcd60e51b81526004016104f090612bd6565b60088190556040517fd94596337df4c2f0f44d30a7fc5db1c7bb60d9aca4185ed77c6fd96eb45ec298906107aa908390612cbf565b60065481565b6003546001600160a01b031681565b6004546001600160a01b031681565b600a805462ff0000198116620100009182900460ff1615909102179055565b6002546001600160a01b03163314806112ad5750611298611d2d565b6001600160a01b0316336001600160a01b0316145b6112c95760405162461bcd60e51b81526004016104f090612bd6565b6001600160a01b0381166112dc57600080fd5b600280546001600160a01b0319166001600160a01b0383161790556040517f352ececae6d7d1e6d26bcf2c549dfd55be1637e9b22dc0cf3b71ddb36097a6b4906107aa908390612946565b6001546001600160a01b03163314806113585750611343611d2d565b6001600160a01b0316336001600160a01b0316145b61136157600080fd5b6001546040805163fbfa77cf60e01b815290516001600160a01b039283169284169163fbfa77cf916004808301926020929190829003018186803b1580156113a857600080fd5b505afa1580156113bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e09190612741565b6001600160a01b0316146113f357600080fd5b6113fc8161149b565b6005546040516370a0823160e01b815261149b9183916001600160a01b03909116906370a0823190611432903090600401612946565b60206040518083038186803b15801561144a57600080fd5b505afa15801561145e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148291906128d8565b6005546001600160a01b0316919063ffffffff611dfc16565b50565b604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81523060601b601482018190526e5af43d82803e903d91602b57fd5bf360881b602883015260009160378184f0604051637c643b2f60e11b81529093506001600160a01b038416915063f8c8765e9061151c908990899089908990600401612974565b600060405180830381600087803b15801561153657600080fd5b505af115801561154a573d6000803e3d6000fd5b50506040516001600160a01b03851692507f783540fb4221a3238720dc7038937d0d79982bcf895274aa6ad179f82cf0d53c9150600090a250949350505050565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600a5462010000900460ff1681565b610bad81565b6002546001600160a01b031633146115ec5760405162461bcd60e51b81526004016104f090612a25565b6001600160a01b0381166115ff57600080fd5b60015460035460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926116369291169060009060040161299f565b602060405180830381600087803b15801561165057600080fd5b505af1158015611664573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168891906127b8565b50600380546001600160a01b0319166001600160a01b03838116919091179182905560015460405163095ea7b360e01b81529082169263095ea7b3926116d7929116906000199060040161299f565b602060405180830381600087803b1580156116f157600080fd5b505af1158015611705573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172991906127b8565b507fafbb66abf8f3b719799940473a4052a3717cdd8e40fb6c8a3faadab316b1a069816040516107aa9190612946565b60006117636126bf565b6001546040516339ebf82360e01b81526001600160a01b03909116906339ebf82390611793903090600401612946565b6101206040518083038186803b1580156117ac57600080fd5b505afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190612842565b90508060200151600014156117fd576000915050610f3e565b60065460a082015161181690429063ffffffff61209816565b1015611826576000915050610f3e565b60075460a082015161183f90429063ffffffff61209816565b1061184e576001915050610f3e565b6001546040805163bf3759b560e01b815290516000926001600160a01b03169163bf3759b5916004808301926020929190829003018186803b15801561189357600080fd5b505afa1580156118a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cb91906128d8565b90506009548111156118e257600192505050610f3e565b60006118ec6119f0565b90508260c001516119086009548361226690919063ffffffff16565b101561191a5760019350505050610f3e565b60c08301516000908211156119425760c084015161193f90839063ffffffff61209816565b90505b6001546040805163112c1f9b60e01b815290516000926001600160a01b03169163112c1f9b916004808301926020929190829003018186803b15801561198757600080fd5b505afa15801561199b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bf91906128d8565b90506119d1818363ffffffff61226616565b6008546119e4908963ffffffff61228b16565b10979650505050505050565b6005546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611a21903090600401612946565b60206040518083038186803b158015611a3957600080fd5b505afa158015611a4d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087691906128d8565b6002546001600160a01b0316331480611aa25750611a8d611d2d565b6001600160a01b0316336001600160a01b0316145b611abe5760405162461bcd60e51b81526004016104f090612bd6565b60078190556040517f5430e11864ad7aa9775b07d12657fe52df9aa2ba734355bd8ef8747be2c800c5906107aa908390612cbf565b611aff848484846122c5565b50505050565b60055461149b906001600160a01b0316338363ffffffff611dfc16565b6001546001600160a01b031681565b6002546001600160a01b0316331480611b625750611b4d611d2d565b6001600160a01b0316336001600160a01b0316145b611b7e5760405162461bcd60e51b81526004016104f090612bd6565b600a805460ff19166001908117909155546040805163507257cd60e11b815290516001600160a01b039092169163a0e4af9a9160048082019260009290919082900301818387803b158015611bd257600080fd5b505af1158015611be6573d6000803e3d6000fd5b50506040517f97e963041e952738788b9d4871d854d282065b8f90a464928d6528f2e9a4fd0b925060009150a1565b801580611c9d5750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90611c4b903090869060040161295a565b60206040518083038186803b158015611c6357600080fd5b505afa158015611c77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9b91906128d8565b155b611cb95760405162461bcd60e51b81526004016104f090612c69565b611d0f8363095ea7b360e01b8484604051602401611cd892919061299f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612486565b505050565b6060611d238484600085612515565b90505b9392505050565b60015460408051635aa6e67560e01b815290516000926001600160a01b031691635aa6e675916004808301926020929190829003018186803b158015611d7257600080fd5b505afa158015611d86573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108769190612741565b60408051600180825281830190925260609182919060208083019080368337019050509050610bad81600081518110611ddf57fe5b6001600160a01b0390921660209283029190910190910152905090565b611d0f8363a9059cbb60e01b8484604051602401611cd892919061299f565b600a546000908190610100900460ff1615611f37576001546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611e61903090600401612946565b60206040518083038186803b158015611e7957600080fd5b505afa158015611e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb191906128d8565b600154604051627b8a6760e11b81529192506001600160a01b03169062f714ce90611ee29084903090600401612cc8565b602060405180830381600087803b158015611efc57600080fd5b505af1158015611f10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3491906128d8565b50505b6001546040516339ebf82360e01b81526000916001600160a01b0316906339ebf82390611f68903090600401612946565b6101206040518083038186803b158015611f8157600080fd5b505afa158015611f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb99190612842565b60c001516005546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611ff3903090600401612946565b60206040518083038186803b15801561200b57600080fd5b505afa15801561201f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204391906128d8565b90508085111561206757925082612060858263ffffffff61209816565b9250612091565b8082111561208d5761207f828263ffffffff61209816565b92508483111561208d578492505b8493505b5050915091565b6000611d2683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125d6565b6005546040516370a0823160e01b81526000918291829182916001600160a01b03909116906370a0823190612113903090600401612946565b60206040518083038186803b15801561212b57600080fd5b505afa15801561213f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216391906128d8565b6001546040516339ebf82360e01b81529192506000916001600160a01b03909116906339ebf82390612199903090600401612946565b6101206040518083038186803b1580156121b257600080fd5b505afa1580156121c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ea9190612842565b60c001519050858211156122125785925061220b828463ffffffff61209816565b9150612219565b9091506000905b612229818463ffffffff61209816565b90508082111561224a57612243828263ffffffff61209816565b945061225d565b61225a818363ffffffff61209816565b93505b50509193909250565b600082820183811015611d265760405162461bcd60e51b81526004016104f090612a69565b60008261229a57506000611103565b828202828482816122a757fe5b0414611d265760405162461bcd60e51b81526004016104f090612b1d565b6005546001600160a01b0316156122ee5760405162461bcd60e51b81526004016104f090612ae6565b600180546001600160a01b0319166001600160a01b03868116919091179182905560408051637e062a3560e11b81529051929091169163fc0c546a91600480820192602092909190829003018186803b15801561234a57600080fd5b505afa15801561235e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123829190612741565b600580546001600160a01b0319166001600160a01b0392831617908190556123ae911685600019611c15565b600280546001600160a01b038086166001600160a01b0319928316179092556003805485841690831617908190556004805485851693169290921782556000600681905562015180600755606460085560095560015460405163095ea7b360e01b81529084169363095ea7b39361242d9390911691600019910161299f565b602060405180830381600087803b15801561244757600080fd5b505af115801561245b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247f91906127b8565b5050505050565b60606124db826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611d149092919063ffffffff16565b805190915015611d0f57808060200190518101906124f991906127b8565b611d0f5760405162461bcd60e51b81526004016104f090612bfb565b6060824710156125375760405162461bcd60e51b81526004016104f090612aa0565b61254085612602565b61255c5760405162461bcd60e51b81526004016104f090612b9f565b60006060866001600160a01b0316858760405161257991906128f0565b60006040518083038185875af1925050503d80600081146125b6576040519150601f19603f3d011682016040523d82523d6000602084013e6125bb565b606091505b50915091506125cb828286612608565b979650505050505050565b600081848411156125fa5760405162461bcd60e51b81526004016104f091906129f2565b505050900390565b3b151590565b60608315612617575081611d26565b8251156126275782518084602001fd5b8160405162461bcd60e51b81526004016104f091906129f2565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106126825782800160ff198235161785556126af565b828001600101855582156126af579182015b828111156126af578235825591602001919060010190612694565b506126bb92915061270b565b5090565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61072591905b808211156126bb5760008155600101612711565b600060208284031215612736578081fd5b8135611d2681612d63565b600060208284031215612752578081fd5b8151611d2681612d63565b60008060008060808587031215612772578283fd5b843561277d81612d63565b9350602085013561278d81612d63565b9250604085013561279d81612d63565b915060608501356127ad81612d63565b939692955090935050565b6000602082840312156127c9578081fd5b81518015158114611d26578182fd5b600080602083850312156127ea578182fd5b823567ffffffffffffffff80821115612801578384fd5b81850186601f820112612812578485fd5b8035925081831115612822578485fd5b866020848301011115612833578485fd5b60200196919550909350505050565b6000610120808385031215612855578182fd5b61285e81612d10565b835181526020840151602082015260408401516040820152606084015160608201526080840151608082015260a084015160a082015260c084015160c082015260e084015160e082015261010091508184015182820152809250505092915050565b6000602082840312156128d1578081fd5b5035919050565b6000602082840312156128e9578081fd5b5051919050565b60008251612902818460208701612d37565b9190910192915050565b60007102cb2b0b93729ba3930ba32b3bca6b7b1b5960751b82528251612939816012850160208701612d37565b9190910160120192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03948516815292841660208401529083166040830152909116606082015260800190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b60006020825282602083015282846040840137818301604090810191909152601f909201601f19160101919050565b6000602082528251806020840152612a11816040850160208701612d37565b601f01601f19169190910160400192915050565b6020808252600b908201526a085cdd1c985d1959da5cdd60aa1b604082015260600190565b602080825260059082015264085dd85b9d60da1b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252601c908201527f537472617465677920616c726561647920696e697469616c697a656400000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b602080825260069082015265085d985d5b1d60d21b604082015260600190565b6020808252600790820152662173686172657360c81b604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252600b908201526a08585d5d1a1bdc9a5e995960aa1b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252600a9082015269085c1c9bdd1958dd195960b21b604082015260600190565b60208082526036908201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60408201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606082015260800190565b90815260200190565b9182526001600160a01b0316602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b60405181810167ffffffffffffffff81118282101715612d2f57600080fd5b604052919050565b60005b83811015612d52578181015183820152602001612d3a565b83811115611aff5750506000910152565b6001600160a01b038116811461149b57600080fdfea2646970667358221220e3ecaeac736ed1c4ba996a83921b13cd49303c06eb17225450ffcef2b1bd3bff64736f6c634300060a0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061025e5760003560e01c80638cdfe16611610146578063d0e8577d116100c3578063efbb5cb011610087578063efbb5cb014610467578063f017c92f1461046f578063f8c8765e14610482578063fba04a4414610495578063fbfa77cf146104a8578063fcf2d0ad146104b05761025e565b8063d0e8577d1461041e578063d64a42e914610431578063d653943a14610439578063ec38a86214610441578063ed882c2b146104545761025e565b8063aced16611161010a578063aced1661146103d5578063b30db32c146103dd578063c7b9d530146103e5578063ce5494bb146103f8578063d05118421461040b5761025e565b80638cdfe166146103a25780638e6350e2146103aa57806391397ab4146103b257806395e80c50146103c55780639ec5a894146103cd5761025e565b806328b7ccf7116101df57806352052af8116101a357806352052af8146103465780635641ec031461034e578063650d188014610356578063748747e614610369578063750521f51461037c5780638124b78e1461038f5761025e565b806328b7ccf7146103085780632e1a7d4d1461031057806339a172a814610323578063440368a3146103365780634641257d1461033e5761025e565b80631d12f28b116102265780631d12f28b146102c65780631f1fcd51146102db5780631fe4a686146102f057806322f3e2d4146102f857806325829410146103005761025e565b806301681a621461026357806303aaab6f1461027857806303ee438c1461029657806306fdde03146102ab5780630f969b87146102b3575b600080fd5b610276610271366004612725565b6104b8565b005b61028061065d565b60405161028d91906129b8565b60405180910390f35b61029e61066b565b60405161028d91906129f2565b61029e6106f9565b6102766102c13660046128c0565b610728565b6102ce6107b5565b60405161028d9190612cbf565b6102e36107bb565b60405161028d9190612946565b6102e36107ca565b6102806107d9565b61029e61087b565b6102ce61089a565b6102ce61031e3660046128c0565b6108a0565b6102766103313660046128c0565b610901565b610276610983565b610276610bac565b610276610f15565b610280610f32565b6102806103643660046128c0565b610f3b565b610276610377366004612725565b610f43565b61027661038a3660046127d8565b610fee565b6102e361039d366004612725565b611085565b6102ce611109565b6102ce61110f565b6102766103c03660046128c0565b6111b7565b6102ce611239565b6102e361123f565b6102e361124e565b61027661125d565b6102766103f3366004612725565b61127c565b610276610406366004612725565b611327565b6102e361041936600461275d565b61149e565b61027661042c366004612725565b61158b565b6102806115ad565b6102e36115bc565b61027661044f366004612725565b6115c2565b6102806104623660046128c0565b611759565b6102ce6119f0565b61027661047d3660046128c0565b611a71565b61027661049036600461275d565b611af3565b6102766104a33660046128c0565b611b05565b6102e3611b22565b610276611b31565b6104c0611d2d565b6001600160a01b0316336001600160a01b0316146104f95760405162461bcd60e51b81526004016104f090612bd6565b60405180910390fd5b6005546001600160a01b03828116911614156105275760405162461bcd60e51b81526004016104f090612a4a565b6001546001600160a01b03828116911614156105555760405162461bcd60e51b81526004016104f090612b7e565b606061055f611daa565b905060005b81518110156105ba5781818151811061057957fe5b60200260200101516001600160a01b0316836001600160a01b031614156105b25760405162461bcd60e51b81526004016104f090612c45565b600101610564565b506106596105c6611d2d565b6040516370a0823160e01b81526001600160a01b038516906370a08231906105f2903090600401612946565b60206040518083038186803b15801561060a57600080fd5b505afa15801561061e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064291906128d8565b6001600160a01b038516919063ffffffff611dfc16565b5050565b600a54610100900460ff1681565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106f15780601f106106c6576101008083540402835291602001916106f1565b820191906000526020600020905b8154815290600101906020018083116106d457829003601f168201915b505050505081565b606061070361087b565b604051602001610713919061290c565b60405160208183030381529060405290505b90565b6002546001600160a01b03163314806107595750610744611d2d565b6001600160a01b0316336001600160a01b0316145b6107755760405162461bcd60e51b81526004016104f090612bd6565b60098190556040517fa68ba126373d04c004c5748c300c9fca12bd444b3d4332e261f3bd2bac4a8600906107aa908390612cbf565b60405180910390a150565b60095481565b6005546001600160a01b031681565b6002546001600160a01b031681565b6001546040516339ebf82360e01b815260009182916001600160a01b03909116906339ebf8239061080e903090600401612946565b6101206040518083038186803b15801561082757600080fd5b505afa15801561083b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085f9190612842565b604001511180610876575060006108746119f0565b115b905090565b6040805180820190915260058152640c0b8ccb8d60da1b602082015290565b60075481565b6001546000906001600160a01b031633146108cd5760405162461bcd60e51b81526004016104f090612b5e565b60006108d883611e1b565b6005549093509091506108fb906001600160a01b0316338363ffffffff611dfc16565b50919050565b6002546001600160a01b0316331480610932575061091d611d2d565b6001600160a01b0316336001600160a01b0316145b61094e5760405162461bcd60e51b81526004016104f090612bd6565b60068190556040517fbb2c369a0355a34b02ab5fce0643150c87e1c8dfe7c918d465591879f57948b1906107aa908390612cbf565b6004546001600160a01b03163314806109a657506002546001600160a01b031633145b806109c957506109b4611d2d565b6001600160a01b0316336001600160a01b0316145b80610a6a5750600160009054906101000a90046001600160a01b03166001600160a01b031663452a93206040518163ffffffff1660e01b815260040160206040518083038186803b158015610a1d57600080fd5b505afa158015610a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a559190612741565b6001600160a01b0316336001600160a01b0316145b80610b0b5750600160009054906101000a90046001600160a01b03166001600160a01b03166388a8d6026040518163ffffffff1660e01b815260040160206040518083038186803b158015610abe57600080fd5b505afa158015610ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af69190612741565b6001600160a01b0316336001600160a01b0316145b610b275760405162461bcd60e51b81526004016104f090612bd6565b6001546040805163bf3759b560e01b81529051610baa926001600160a01b03169163bf3759b5916004808301926020929190829003018186803b158015610b6d57600080fd5b505afa158015610b81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba591906128d8565b61149b565b565b6004546001600160a01b0316331480610bcf57506002546001600160a01b031633145b80610bf25750610bdd611d2d565b6001600160a01b0316336001600160a01b0316145b80610c935750600160009054906101000a90046001600160a01b03166001600160a01b031663452a93206040518163ffffffff1660e01b815260040160206040518083038186803b158015610c4657600080fd5b505afa158015610c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7e9190612741565b6001600160a01b0316336001600160a01b0316145b80610d345750600160009054906101000a90046001600160a01b03166001600160a01b03166388a8d6026040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce757600080fd5b505afa158015610cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1f9190612741565b6001600160a01b0316336001600160a01b0316145b610d505760405162461bcd60e51b81526004016104f090612bd6565b6001546040805163bf3759b560e01b81529051600092839283926001600160a01b039092169163bf3759b591600480820192602092909190829003018186803b158015610d9c57600080fd5b505afa158015610db0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd491906128d8565b600a5490915060009060ff1615610e30576000610def6119f0565b9050610e08838211610e015783610e03565b815b611e1b565b9450915082821115610e2a57610e24828463ffffffff61209816565b94508291505b50610e41565b610e39826120da565b919550935090505b6001546040516328766ebf60e21b81526001600160a01b039091169063a1d9bafc90610e7590879087908690600401612cdf565b602060405180830381600087803b158015610e8f57600080fd5b505af1158015610ea3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec791906128d8565b9150610ed28261149b565b7f4c0f499ffe6befa0ca7c826b0916cf87bea98de658013e76938489368d60d50984848385604051610f079493929190612cf5565b60405180910390a150505050565b600a805461ff001981166101009182900460ff1615909102179055565b600a5460ff1681565b60005b919050565b6002546001600160a01b0316331480610f745750610f5f611d2d565b6001600160a01b0316336001600160a01b0316145b610f905760405162461bcd60e51b81526004016104f090612bd6565b6001600160a01b038116610fa357600080fd5b600480546001600160a01b0319166001600160a01b0383161790556040517f2f202ddb4a2e345f6323ed90f8fc8559d770a7abbbeee84dde8aca3351fe7154906107aa908390612946565b6002546001600160a01b031633148061101f575061100a611d2d565b6001600160a01b0316336001600160a01b0316145b61103b5760405162461bcd60e51b81526004016104f090612bd6565b61104760008383612641565b507f300e67d5a415b6d015a471d9c7b95dd58f3e8290af965e84e0f845de2996dda682826040516110799291906129c3565b60405180910390a15050565b6040516368288c2160e11b8152600090309063d0511842906110b1908590339081908190600401612974565b602060405180830381600087803b1580156110cb57600080fd5b505af11580156110df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111039190612741565b92915050565b60085481565b600a5460009062010000900460ff16156111af576001546040516339ebf82360e01b81526001600160a01b03909116906339ebf82390611153903090600401612946565b6101206040518083038186803b15801561116c57600080fd5b505afa158015611180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190612842565b60c001519050610725565b506000610725565b6002546001600160a01b03163314806111e857506111d3611d2d565b6001600160a01b0316336001600160a01b0316145b6112045760405162461bcd60e51b81526004016104f090612bd6565b60088190556040517fd94596337df4c2f0f44d30a7fc5db1c7bb60d9aca4185ed77c6fd96eb45ec298906107aa908390612cbf565b60065481565b6003546001600160a01b031681565b6004546001600160a01b031681565b600a805462ff0000198116620100009182900460ff1615909102179055565b6002546001600160a01b03163314806112ad5750611298611d2d565b6001600160a01b0316336001600160a01b0316145b6112c95760405162461bcd60e51b81526004016104f090612bd6565b6001600160a01b0381166112dc57600080fd5b600280546001600160a01b0319166001600160a01b0383161790556040517f352ececae6d7d1e6d26bcf2c549dfd55be1637e9b22dc0cf3b71ddb36097a6b4906107aa908390612946565b6001546001600160a01b03163314806113585750611343611d2d565b6001600160a01b0316336001600160a01b0316145b61136157600080fd5b6001546040805163fbfa77cf60e01b815290516001600160a01b039283169284169163fbfa77cf916004808301926020929190829003018186803b1580156113a857600080fd5b505afa1580156113bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e09190612741565b6001600160a01b0316146113f357600080fd5b6113fc8161149b565b6005546040516370a0823160e01b815261149b9183916001600160a01b03909116906370a0823190611432903090600401612946565b60206040518083038186803b15801561144a57600080fd5b505afa15801561145e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148291906128d8565b6005546001600160a01b0316919063ffffffff611dfc16565b50565b604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81523060601b601482018190526e5af43d82803e903d91602b57fd5bf360881b602883015260009160378184f0604051637c643b2f60e11b81529093506001600160a01b038416915063f8c8765e9061151c908990899089908990600401612974565b600060405180830381600087803b15801561153657600080fd5b505af115801561154a573d6000803e3d6000fd5b50506040516001600160a01b03851692507f783540fb4221a3238720dc7038937d0d79982bcf895274aa6ad179f82cf0d53c9150600090a250949350505050565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600a5462010000900460ff1681565b610bad81565b6002546001600160a01b031633146115ec5760405162461bcd60e51b81526004016104f090612a25565b6001600160a01b0381166115ff57600080fd5b60015460035460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926116369291169060009060040161299f565b602060405180830381600087803b15801561165057600080fd5b505af1158015611664573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168891906127b8565b50600380546001600160a01b0319166001600160a01b03838116919091179182905560015460405163095ea7b360e01b81529082169263095ea7b3926116d7929116906000199060040161299f565b602060405180830381600087803b1580156116f157600080fd5b505af1158015611705573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172991906127b8565b507fafbb66abf8f3b719799940473a4052a3717cdd8e40fb6c8a3faadab316b1a069816040516107aa9190612946565b60006117636126bf565b6001546040516339ebf82360e01b81526001600160a01b03909116906339ebf82390611793903090600401612946565b6101206040518083038186803b1580156117ac57600080fd5b505afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e49190612842565b90508060200151600014156117fd576000915050610f3e565b60065460a082015161181690429063ffffffff61209816565b1015611826576000915050610f3e565b60075460a082015161183f90429063ffffffff61209816565b1061184e576001915050610f3e565b6001546040805163bf3759b560e01b815290516000926001600160a01b03169163bf3759b5916004808301926020929190829003018186803b15801561189357600080fd5b505afa1580156118a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cb91906128d8565b90506009548111156118e257600192505050610f3e565b60006118ec6119f0565b90508260c001516119086009548361226690919063ffffffff16565b101561191a5760019350505050610f3e565b60c08301516000908211156119425760c084015161193f90839063ffffffff61209816565b90505b6001546040805163112c1f9b60e01b815290516000926001600160a01b03169163112c1f9b916004808301926020929190829003018186803b15801561198757600080fd5b505afa15801561199b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bf91906128d8565b90506119d1818363ffffffff61226616565b6008546119e4908963ffffffff61228b16565b10979650505050505050565b6005546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611a21903090600401612946565b60206040518083038186803b158015611a3957600080fd5b505afa158015611a4d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087691906128d8565b6002546001600160a01b0316331480611aa25750611a8d611d2d565b6001600160a01b0316336001600160a01b0316145b611abe5760405162461bcd60e51b81526004016104f090612bd6565b60078190556040517f5430e11864ad7aa9775b07d12657fe52df9aa2ba734355bd8ef8747be2c800c5906107aa908390612cbf565b611aff848484846122c5565b50505050565b60055461149b906001600160a01b0316338363ffffffff611dfc16565b6001546001600160a01b031681565b6002546001600160a01b0316331480611b625750611b4d611d2d565b6001600160a01b0316336001600160a01b0316145b611b7e5760405162461bcd60e51b81526004016104f090612bd6565b600a805460ff19166001908117909155546040805163507257cd60e11b815290516001600160a01b039092169163a0e4af9a9160048082019260009290919082900301818387803b158015611bd257600080fd5b505af1158015611be6573d6000803e3d6000fd5b50506040517f97e963041e952738788b9d4871d854d282065b8f90a464928d6528f2e9a4fd0b925060009150a1565b801580611c9d5750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e90611c4b903090869060040161295a565b60206040518083038186803b158015611c6357600080fd5b505afa158015611c77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9b91906128d8565b155b611cb95760405162461bcd60e51b81526004016104f090612c69565b611d0f8363095ea7b360e01b8484604051602401611cd892919061299f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612486565b505050565b6060611d238484600085612515565b90505b9392505050565b60015460408051635aa6e67560e01b815290516000926001600160a01b031691635aa6e675916004808301926020929190829003018186803b158015611d7257600080fd5b505afa158015611d86573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108769190612741565b60408051600180825281830190925260609182919060208083019080368337019050509050610bad81600081518110611ddf57fe5b6001600160a01b0390921660209283029190910190910152905090565b611d0f8363a9059cbb60e01b8484604051602401611cd892919061299f565b600a546000908190610100900460ff1615611f37576001546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611e61903090600401612946565b60206040518083038186803b158015611e7957600080fd5b505afa158015611e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb191906128d8565b600154604051627b8a6760e11b81529192506001600160a01b03169062f714ce90611ee29084903090600401612cc8565b602060405180830381600087803b158015611efc57600080fd5b505af1158015611f10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3491906128d8565b50505b6001546040516339ebf82360e01b81526000916001600160a01b0316906339ebf82390611f68903090600401612946565b6101206040518083038186803b158015611f8157600080fd5b505afa158015611f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb99190612842565b60c001516005546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611ff3903090600401612946565b60206040518083038186803b15801561200b57600080fd5b505afa15801561201f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204391906128d8565b90508085111561206757925082612060858263ffffffff61209816565b9250612091565b8082111561208d5761207f828263ffffffff61209816565b92508483111561208d578492505b8493505b5050915091565b6000611d2683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125d6565b6005546040516370a0823160e01b81526000918291829182916001600160a01b03909116906370a0823190612113903090600401612946565b60206040518083038186803b15801561212b57600080fd5b505afa15801561213f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216391906128d8565b6001546040516339ebf82360e01b81529192506000916001600160a01b03909116906339ebf82390612199903090600401612946565b6101206040518083038186803b1580156121b257600080fd5b505afa1580156121c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ea9190612842565b60c001519050858211156122125785925061220b828463ffffffff61209816565b9150612219565b9091506000905b612229818463ffffffff61209816565b90508082111561224a57612243828263ffffffff61209816565b945061225d565b61225a818363ffffffff61209816565b93505b50509193909250565b600082820183811015611d265760405162461bcd60e51b81526004016104f090612a69565b60008261229a57506000611103565b828202828482816122a757fe5b0414611d265760405162461bcd60e51b81526004016104f090612b1d565b6005546001600160a01b0316156122ee5760405162461bcd60e51b81526004016104f090612ae6565b600180546001600160a01b0319166001600160a01b03868116919091179182905560408051637e062a3560e11b81529051929091169163fc0c546a91600480820192602092909190829003018186803b15801561234a57600080fd5b505afa15801561235e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123829190612741565b600580546001600160a01b0319166001600160a01b0392831617908190556123ae911685600019611c15565b600280546001600160a01b038086166001600160a01b0319928316179092556003805485841690831617908190556004805485851693169290921782556000600681905562015180600755606460085560095560015460405163095ea7b360e01b81529084169363095ea7b39361242d9390911691600019910161299f565b602060405180830381600087803b15801561244757600080fd5b505af115801561245b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247f91906127b8565b5050505050565b60606124db826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611d149092919063ffffffff16565b805190915015611d0f57808060200190518101906124f991906127b8565b611d0f5760405162461bcd60e51b81526004016104f090612bfb565b6060824710156125375760405162461bcd60e51b81526004016104f090612aa0565b61254085612602565b61255c5760405162461bcd60e51b81526004016104f090612b9f565b60006060866001600160a01b0316858760405161257991906128f0565b60006040518083038185875af1925050503d80600081146125b6576040519150601f19603f3d011682016040523d82523d6000602084013e6125bb565b606091505b50915091506125cb828286612608565b979650505050505050565b600081848411156125fa5760405162461bcd60e51b81526004016104f091906129f2565b505050900390565b3b151590565b60608315612617575081611d26565b8251156126275782518084602001fd5b8160405162461bcd60e51b81526004016104f091906129f2565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106126825782800160ff198235161785556126af565b828001600101855582156126af579182015b828111156126af578235825591602001919060010190612694565b506126bb92915061270b565b5090565b6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61072591905b808211156126bb5760008155600101612711565b600060208284031215612736578081fd5b8135611d2681612d63565b600060208284031215612752578081fd5b8151611d2681612d63565b60008060008060808587031215612772578283fd5b843561277d81612d63565b9350602085013561278d81612d63565b9250604085013561279d81612d63565b915060608501356127ad81612d63565b939692955090935050565b6000602082840312156127c9578081fd5b81518015158114611d26578182fd5b600080602083850312156127ea578182fd5b823567ffffffffffffffff80821115612801578384fd5b81850186601f820112612812578485fd5b8035925081831115612822578485fd5b866020848301011115612833578485fd5b60200196919550909350505050565b6000610120808385031215612855578182fd5b61285e81612d10565b835181526020840151602082015260408401516040820152606084015160608201526080840151608082015260a084015160a082015260c084015160c082015260e084015160e082015261010091508184015182820152809250505092915050565b6000602082840312156128d1578081fd5b5035919050565b6000602082840312156128e9578081fd5b5051919050565b60008251612902818460208701612d37565b9190910192915050565b60007102cb2b0b93729ba3930ba32b3bca6b7b1b5960751b82528251612939816012850160208701612d37565b9190910160120192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03948516815292841660208401529083166040830152909116606082015260800190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b60006020825282602083015282846040840137818301604090810191909152601f909201601f19160101919050565b6000602082528251806020840152612a11816040850160208701612d37565b601f01601f19169190910160400192915050565b6020808252600b908201526a085cdd1c985d1959da5cdd60aa1b604082015260600190565b602080825260059082015264085dd85b9d60da1b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252601c908201527f537472617465677920616c726561647920696e697469616c697a656400000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b602080825260069082015265085d985d5b1d60d21b604082015260600190565b6020808252600790820152662173686172657360c81b604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252600b908201526a08585d5d1a1bdc9a5e995960aa1b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252600a9082015269085c1c9bdd1958dd195960b21b604082015260600190565b60208082526036908201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60408201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606082015260800190565b90815260200190565b9182526001600160a01b0316602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b60405181810167ffffffffffffffff81118282101715612d2f57600080fd5b604052919050565b60005b83811015612d52578181015183820152602001612d3a565b83811115611aff5750506000910152565b6001600160a01b038116811461149b57600080fdfea2646970667358221220e3ecaeac736ed1c4ba996a83921b13cd49303c06eb17225450ffcef2b1bd3bff64736f6c634300060a0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
