{
  "_format": "hh-sol-artifact-1",
  "contractName": "LeverageStrategiesManager",
  "sourceName": "contracts/LeverageManager/LeverageStrategiesManager.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IComptroller",
          "name": "_comptroller",
          "type": "address"
        },
        {
          "internalType": "contract SwapHelper",
          "name": "_swapHelper",
          "type": "address"
        },
        {
          "internalType": "contract IVToken",
          "name": "_vBNB",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "errorCode",
          "type": "uint256"
        }
      ],
      "name": "AccrueInterestFailed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "errorCode",
          "type": "uint256"
        }
      ],
      "name": "BorrowBehalfFailed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "err",
          "type": "uint256"
        }
      ],
      "name": "EnterMarketFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FlashLoanAssetOrAmountMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "IdenticalMarkets",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InitiatorMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InsufficientFundsToRepayFlashloan",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidExecuteOperation",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "market",
          "type": "address"
        }
      ],
      "name": "MarketNotListed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "errorCode",
          "type": "uint256"
        }
      ],
      "name": "MintBehalfFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotAnApprovedDelegate",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnBehalfMismatch",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "errorCode",
          "type": "uint256"
        }
      ],
      "name": "OperationCausesLiquidation",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "errorCode",
          "type": "uint256"
        }
      ],
      "name": "RedeemBehalfFailed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "errorCode",
          "type": "uint256"
        }
      ],
      "name": "RepayBehalfFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SlippageExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenSwapCallFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UnauthorizedExecutor",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "VBNBNotSupported",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroFlashLoanAmount",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "DustTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IVToken",
          "name": "collateralMarket",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "collateralAmountSeed",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "contract IVToken",
          "name": "borrowedMarket",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowedAmountToFlashLoan",
          "type": "uint256"
        }
      ],
      "name": "LeverageEntered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IVToken",
          "name": "collateralMarket",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IVToken",
          "name": "borrowedMarket",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowedAmountSeed",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowedAmountToFlashLoan",
          "type": "uint256"
        }
      ],
      "name": "LeverageEnteredFromBorrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IVToken",
          "name": "collateralMarket",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "collateralAmountToRedeemForSwap",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "contract IVToken",
          "name": "borrowedMarket",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "borrowedAmountToFlashLoan",
          "type": "uint256"
        }
      ],
      "name": "LeverageExited",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IVToken",
          "name": "collateralMarket",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "collateralAmountSeed",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "collateralAmountToFlashLoan",
          "type": "uint256"
        }
      ],
      "name": "SingleAssetLeverageEntered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IVToken",
          "name": "collateralMarket",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "collateralAmountToFlashLoan",
          "type": "uint256"
        }
      ],
      "name": "SingleAssetLeverageExited",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "COMPTROLLER",
      "outputs": [
        {
          "internalType": "contract IComptroller",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IVToken",
          "name": "_collateralMarket",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_collateralAmountSeed",
          "type": "uint256"
        },
        {
          "internalType": "contract IVToken",
          "name": "_borrowedMarket",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_borrowedAmountToFlashLoan",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_minAmountOutAfterSwap",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_swapData",
          "type": "bytes"
        }
      ],
      "name": "enterLeverage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IVToken",
          "name": "_collateralMarket",
          "type": "address"
        },
        {
          "internalType": "contract IVToken",
          "name": "_borrowedMarket",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_borrowedAmountSeed",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_borrowedAmountToFlashLoan",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_minAmountOutAfterSwap",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_swapData",
          "type": "bytes"
        }
      ],
      "name": "enterLeverageFromBorrow",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IVToken",
          "name": "_collateralMarket",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_collateralAmountSeed",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_collateralAmountToFlashLoan",
          "type": "uint256"
        }
      ],
      "name": "enterSingleAssetLeverage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IVToken[]",
          "name": "vTokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "premiums",
          "type": "uint256[]"
        },
        {
          "internalType": "address",
          "name": "initiator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "onBehalf",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "param",
          "type": "bytes"
        }
      ],
      "name": "executeOperation",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "internalType": "uint256[]",
          "name": "repayAmounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IVToken",
          "name": "_collateralMarket",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_collateralAmountToRedeemForSwap",
          "type": "uint256"
        },
        {
          "internalType": "contract IVToken",
          "name": "_borrowedMarket",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_borrowedAmountToFlashLoan",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_minAmountOutAfterSwap",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_swapData",
          "type": "bytes"
        }
      ],
      "name": "exitLeverage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IVToken",
          "name": "_collateralMarket",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_collateralAmountToFlashLoan",
          "type": "uint256"
        }
      ],
      "name": "exitSingleAssetLeverage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "swapHelper",
      "outputs": [
        {
          "internalType": "contract SwapHelper",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "vBNB",
      "outputs": [
        {
          "internalType": "contract IVToken",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60e060405234801561000f575f5ffd5b50604051613bed380380613bed83398101604081905261002e91610165565b6001600160a01b038316158061004b57506001600160a01b038216155b8061005d57506001600160a01b038116155b1561007b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0380841660805282811660a052811660c05261009c6100a4565b50505061020b565b5f54610100900460ff16156100d45760405162461bcd60e51b81526004016100cb906101b1565b60405180910390fd5b5f5460ff90811614610126575f805460ff191660ff9081179091556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989161011d916101fc565b60405180910390a15b565b5f6001600160a01b0382165b92915050565b5f61013482610128565b61014d8161013a565b8114610157575f5ffd5b50565b805161013481610144565b5f5f5f6060848603121561017a5761017a5f5ffd5b5f610185868661015a565b93505060206101968682870161015a565b92505060406101a78682870161015a565b9150509250925092565b6020808252810161013481602781527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469602082015266616c697a696e6760c81b604082015260600190565b60ff8216815260208101610134565b60805160a05160c0516139496102a45f395f818161014b015261136901525f818160f9015281816129cd0152612a6401525f8181610198015281816103e7015281816106600152818161086701528181610b7201528181610d9d01528181610ee8015281816112cf015281816113d401528181611503015281816115960152818161163901528181611f1701526123b601526139495ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806379ba509711610093578063c78befbe11610063578063c78befbe146101ff578063e30c397814610212578063f2fde38b14610223578063fc08f9f614610236575f5ffd5b806379ba5097146101c25780638129fc1c146101ca5780638da5cb5b146101d2578063c6cd25f6146101ec575f5ffd5b80633a8f8c43116100ce5780633a8f8c431461016d5780633c3a2c21146101805780635f82c67e14610193578063715018a6146101ba575f5ffd5b80630fc6a11c146100f4578063134248011461013157806333e1567f14610146575b5f5ffd5b61011b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101289190612e2a565b60405180910390f35b61014461013f366004612eb5565b610257565b005b61011b7f000000000000000000000000000000000000000000000000000000000000000081565b61014461017b366004612f59565b6104d0565b61014461018e366004612f9f565b61073e565b61011b7f000000000000000000000000000000000000000000000000000000000000000081565b610144610935565b610144610948565b610144610989565b6033546001600160a01b03165b6040516101289190612ff4565b6101446101fa366004613002565b610a59565b61014461020d366004612f59565b610c3d565b6065546001600160a01b03166101df565b610144610231366004613050565b610e61565b6102496102443660046130b5565b610ed2565b60405161012892919061321b565b835f03610277576040516362ec8de760e01b815260040160405180910390fd5b856001600160a01b0316876001600160a01b0316036102a957604051637239c0db60e11b815260040160405180910390fd5b6102b2876112b6565b6102bb866112b6565b6102c36113bd565b6102cc87611467565b6102d586611467565b6102df33886114ec565b6102e833611635565b6102f38633876116f5565b335f805c610100600160a81b031916610100830217905d50866001805c6001600160a01b0319166001600160a01b03831617905d50848060035d50828060045d5060035f805c60ff19168217905d506040805160018082528183019092525f916020808301908036833701905050905086815f815181106103765761037661324f565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905085815f815181106103c5576103c561324f565b60209081029190910101526040516315513b6760e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635544ed9c906104269033903090879087908b908b906004016132dd565b5f604051808303815f87803b15801561043d575f5ffd5b505af115801561044f573d5f5f3e3d5ffd5b5050505061045c33611635565b876001600160a01b0316896001600160a01b0316336001600160a01b03167f4bdf2f6f97b9e53fbb880300a2b1e8f12110f6cbcc3279602053bcf6f5e051038a8a6040516104ab929190613333565b60405180910390a46104bc89611773565b6104c588611773565b505050505050505050565b835f036104f0576040516362ec8de760e01b815260040160405180910390fd5b846001600160a01b0316876001600160a01b03160361052257604051637239c0db60e11b815260040160405180910390fd5b61052b876112b6565b610534856112b6565b61053c6113bd565b61054587611467565b61054e85611467565b61055833886114ec565b61056133611635565b61056c8733886116f5565b335f805c610100600160a81b031916610100830217905d50866001805c6001600160a01b0319166001600160a01b03831617905d50858060025d50828060045d5060025f805c60ff19168217905d506040805160018082528183019092525f916020808301908036833701905050905085815f815181106105ef576105ef61324f565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905085815f8151811061063e5761063e61324f565b60209081029190910101526040516315513b6760e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635544ed9c9061069f9033903090879087908b908b906004016132dd565b5f604051808303815f87803b1580156106b6575f5ffd5b505af11580156106c8573d5f5f3e3d5ffd5b505050506106d533611635565b866001600160a01b0316896001600160a01b0316336001600160a01b03167f2535d675850d7c542dc54c7aa081f27a11d1b0df3f3db67275ce0a9d056274348b8a604051610724929190613333565b60405180910390a461073589611773565b6104c587611773565b805f0361075e576040516362ec8de760e01b815260040160405180910390fd5b610767836112b6565b61076f6113bd565b61077883611467565b61078233846114ec565b61078b33611635565b6107968333846116f5565b335f805c610100600160a81b031916610100830217905d5060015f805c60ff19168217905d50818060025d506040805160018082528183019092525f916020808301908036833701905050905083815f815181106107f6576107f661324f565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905082815f815181106108455761084561324f565b60209081029190910101526040516315513b6760e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635544ed9c906108a290339030908790879060040161334e565b5f604051808303815f87803b1580156108b9575f5ffd5b505af11580156108cb573d5f5f3e3d5ffd5b505050506108d833611635565b846001600160a01b0316336001600160a01b03167f49cef9d2c3f3f5785b1ad7facb0837a43e60a785a0141101e658f5565664cd89868660405161091d929190613333565b60405180910390a361092e85611773565b5050505050565b61093d6118b9565b6109465f6118e3565b565b60655433906001600160a01b0316811461097d5760405162461bcd60e51b8152600401610974906133f2565b60405180910390fd5b610986816118e3565b50565b5f54610100900460ff16158080156109a757505f54600160ff909116105b806109c05750303b1580156109c057505f5460ff166001145b6109dc5760405162461bcd60e51b81526004016109749061344c565b5f805460ff1916600117905580156109fd575f805461ff0019166101001790555b610a056118fc565b610a0d61192a565b8015610986575f805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890610a4e9060019061346f565b60405180910390a150565b805f03610a79576040516362ec8de760e01b815260040160405180910390fd5b610a82826112b6565b610a8a6113bd565b335f805c610100600160a81b031916610100830217905d50816001805c6001600160a01b0319166001600160a01b03831617905d5060055f805c60ff19168217905d506040805160018082528183019092525f916020808301908036833701905050905082815f81518110610b0157610b0161324f565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905082815f81518110610b5057610b5061324f565b60209081029190910101526040516315513b6760e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635544ed9c90610bad90339030908790879060040161334e565b5f604051808303815f87803b158015610bc4575f5ffd5b505af1158015610bd6573d5f5f3e3d5ffd5b50505050610be333611635565b836001600160a01b0316336001600160a01b03167f9858e3a66fd738b1f0f73208c9090ca5a20ee504df594271e464d4bb4cda0e6f85604051610c26919061347d565b60405180910390a3610c3784611773565b50505050565b835f03610c5d576040516362ec8de760e01b815260040160405180910390fd5b846001600160a01b0316876001600160a01b031603610c8f57604051637239c0db60e11b815260040160405180910390fd5b610c98876112b6565b610ca1856112b6565b610ca96113bd565b335f805c610100600160a81b031916610100830217905d50866001805c6001600160a01b0319166001600160a01b03831617905d50858060025d50828060045d5060045f805c60ff19168217905d506040805160018082528183019092525f916020808301908036833701905050905085815f81518110610d2c57610d2c61324f565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905085815f81518110610d7b57610d7b61324f565b60209081029190910101526040516315513b6760e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635544ed9c90610ddc9033903090879087908b908b906004016132dd565b5f604051808303815f87803b158015610df3575f5ffd5b505af1158015610e05573d5f5f3e3d5ffd5b50505050610e1233611635565b866001600160a01b0316896001600160a01b0316336001600160a01b03167fc40371cee960c145e7af5e62a37dfd2f97089c030c2427ad853ae214e815ebed8b8a604051610724929190613333565b610e696118b9565b606580546001600160a01b0383166001600160a01b03199091168117909155610e9a6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6060610edd611958565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f26576040516341c8302160e11b815260040160405180910390fd5b6001600160a01b0386163014610f4f576040516304db910d60e01b815260040160405180910390fd5b6101005f5c046001600160a01b0390811690861614610f8157604051632a057c4360e01b815260040160405180910390fd5b60018b141580610f92575060018914155b80610f9e575060018714155b15610fbc57604051634f7d8fbd60e11b815260040160405180910390fd5b6040805160018082528183019092529060208083019080368337019050509050600160ff5f5c166005811115610ff457610ff461323b565b0361107e5761105b858d8d5f81811061100f5761100f61324f565b9050602002016020810190611024919061348b565b8c8c5f8181106110365761103661324f565b905060200201358b8b5f81811061104f5761104f61324f565b90506020020135611981565b815f8151811061106d5761106d61324f565b602002602001018181525050611299565b600260ff5f5c1660058111156110965761109661323b565b036110ff5761105b858d8d5f8181106110b1576110b161324f565b90506020020160208101906110c6919061348b565b8c8c5f8181106110d8576110d861324f565b905060200201358b8b5f8181106110f1576110f161324f565b905060200201358888611ab3565b600360ff5f5c1660058111156111175761111761323b565b036111805761105b858d8d5f8181106111325761113261324f565b9050602002016020810190611147919061348b565b8c8c5f8181106111595761115961324f565b905060200201358b8b5f8181106111725761117261324f565b905060200201358888611c6e565b600460ff5f5c1660058111156111985761119861323b565b036112015761105b858d8d5f8181106111b3576111b361324f565b90506020020160208101906111c8919061348b565b8c8c5f8181106111da576111da61324f565b905060200201358b8b5f8181106111f3576111f361324f565b905060200201358888611d63565b600560ff5f5c1660058111156112195761121961323b565b036112805761105b858d8d5f8181106112345761123461324f565b9050602002016020810190611249919061348b565b8c8c5f81811061125b5761125b61324f565b905060200201358b8b5f8181106112745761127461324f565b9050602002013561221b565b604051639c3c956760e01b815260040160405180910390fd5b600191506112a76001609755565b9a509a98505050505050505050565b604051638e8f294b60e01b81525f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638e8f294b90611304908590600401612ff4565b606060405180830381865afa15801561131f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134391906134c7565b50509050806113675781604051635a9a1eb960e11b81526004016109749190612ff4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036113b95760405163baeccefd60e01b815260040160405180910390fd5b5050565b604051630217306760e31b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906310b983389061140b9033903090600401613509565b602060405180830381865afa158015611426573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144a9190613524565b610946576040516337248ad960e01b815260040160405180910390fd5b5f816001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303815f875af11580156114a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c99190613542565b905080156113b957806040516315fc6cbf60e21b8152600401610974919061347d565b60405163929fe9a160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063929fe9a19061153a9085908590600401613560565b602060405180830381865afa158015611555573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115799190613524565b6113b957604051636ac2e1e360e11b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d585c3c6906115cd9086908690600401613509565b6020604051808303815f875af11580156115e9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160d9190613542565b905080156116305780604051631957d10560e31b8152600401610974919061347d565b505050565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663528a174c846040518263ffffffff1660e01b81526004016116839190612ff4565b606060405180830381865afa15801561169e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c2919061357b565b92505091505f821415806116d557505f81115b1561163057816040516347749fcb60e01b8152600401610974919061347d565b8015611630575f836001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611738573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175c91906135c8565b9050610c376001600160a01b03821684308561265e565b5f816001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117b0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117d491906135c8565b90505f816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016118039190612ff4565b602060405180830381865afa15801561181e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118429190613542565b90508015611630576001600160a01b036101005f5c0481169061186890841682846126b6565b826001600160a01b0316816001600160a01b03167fe8f38899ee6a4204a1a5ae0757b409b58be63978bc756134d464cfbaadc28931846040516118ab919061347d565b60405180910390a350505050565b6033546001600160a01b031633146109465760405162461bcd60e51b81526004016109749061361a565b606580546001600160a01b0319169055610986816126d5565b5f54610100900460ff166119225760405162461bcd60e51b815260040161097490613671565b610946612726565b5f54610100900460ff166119505760405162461bcd60e51b815260040161097490613671565b610946612755565b60026097540361197a5760405162461bcd60e51b8152600401610974906136b4565b6002609755565b5f5f846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119bf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119e391906135c8565b90505f6119f260025c866136d8565b9050611a086001600160a01b038316878361277b565b6040516323323e0360e01b81525f906001600160a01b038816906323323e0390611a38908b9086906004016136eb565b6020604051808303815f875af1158015611a54573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a789190613542565b90508015611a9b5780604051631f32531d60e21b8152600401610974919061347d565b611aa788888588612802565b98975050505050505050565b5f5f866001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611af1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1591906135c8565b60408051636f307dc360e01b815290519192506001600160a01b0360015c16916004805c925f928592636f307dc3928082019260209290918290030181865afa158015611b64573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b8891906135c8565b90505f611b99858b84868c8c6129bd565b90505f611ba860025c836136d8565b9050611bbe6001600160a01b038416868361277b565b5f856001600160a01b03166323323e038f846040518363ffffffff1660e01b8152600401611bed9291906136eb565b6020604051808303815f875af1158015611c09573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c2d9190613542565b90508015611c505780604051631f32531d60e21b8152600401610974919061347d565b611c5c8e8e898e612802565b9e9d5050505050505050505050505050565b5f5f866001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cac573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd091906135c8565b60408051636f307dc360e01b815290519192506001600160a01b0360015c16916004805c925f928592636f307dc3928082019260209290918290030181865afa158015611d1f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d4391906135c8565b90505f611d528a60035c6136d8565b90505f611ba8868385878d8d6129bd565b5f5f866001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc591906135c8565b90505f876001600160a01b03166317bfdfbc8a6040518263ffffffff1660e01b8152600401611df49190612ff4565b6020604051808303815f875af1158015611e10573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e349190613542565b90505f818811611e445787611e46565b815b9050611e5c6001600160a01b0384168a8361277b565b6040516304c11f0360e31b81525f906001600160a01b038b1690632608f81890611e8c908e9086906004016136eb565b6020604051808303815f875af1158015611ea8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ecc9190613542565b90508015611eef578060405163014e9bb360e01b8152600401610974919061347d565b505060408051629df3ab60e31b815290516001600160a01b0360015c8116935060025c925f927f0000000000000000000000000000000000000000000000000000000000000000909216916304ef9d58916004808201926020929091908290030181865afa158015611f63573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f879190613542565b90505f5f8211611f975782611fed565b611fa982670de0b6b3a76400006136f9565b6001611fbd84670de0b6b3a76400006136f9565b611fcf670de0b6b3a76400008761370c565b611fd991906136d8565b611fe391906136f9565b611fed919061373f565b90505f846001600160a01b031663df3a516e8e846040518363ffffffff1660e01b815260040161201e9291906136eb565b6020604051808303815f875af115801561203a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061205e9190613542565b905080156120815780604051636083d26960e01b8152600401610974919061347d565b5050505f826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120c1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120e591906135c8565b905061216181826001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016121179190612ff4565b602060405180830381865afa158015612132573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121569190613542565b8660045c8b8b6129bd565b5061216c888a6136d8565b945084846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161219b9190612ff4565b602060405180830381865afa1580156121b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121da9190613542565b10156121f957604051630f1b15df60e21b815260040160405180910390fd5b61220d6001600160a01b0385168b8761277b565b505050509695505050505050565b5f5f846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612259573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061227d91906135c8565b90505f856001600160a01b03166317bfdfbc886040518263ffffffff1660e01b81526004016122ac9190612ff4565b6020604051808303815f875af11580156122c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ec9190613542565b90505f8186116122fc57856122fe565b815b90506123146001600160a01b038416888361277b565b6040516304c11f0360e31b81525f906001600160a01b03891690632608f81890612344908c9086906004016136eb565b6020604051808303815f875af1158015612360573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123849190613542565b905080156123a7578060405163014e9bb360e01b8152600401610974919061347d565b6123b186886136d8565b94505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ef9d586040518163ffffffff1660e01b8152600401602060405180830381865afa158015612410573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124349190613542565b90505f5f8211612444578661249a565b61245682670de0b6b3a76400006136f9565b600161246a84670de0b6b3a76400006136f9565b61247c670de0b6b3a76400008b61370c565b61248691906136d8565b61249091906136f9565b61249a919061373f565b90505f8a6001600160a01b0316633af9e6698d6040518263ffffffff1660e01b81526004016124c99190612ff4565b6020604051808303815f875af11580156124e5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125099190613542565b905080821115612517578091505b604051636f9d28b760e11b81526001600160a01b038c169063df3a516e90612545908f9086906004016136eb565b6020604051808303815f875af1158015612561573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125859190613542565b935083156125a85783604051636083d26960e01b8152600401610974919061347d565b6040516370a0823160e01b815288906001600160a01b038916906370a08231906125d6903090600401612ff4565b602060405180830381865afa1580156125f1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126159190613542565b101561263457604051630f1b15df60e21b815260040160405180910390fd5b6126486001600160a01b0388168c8a61277b565b50505050505050949350505050565b6001609755565b610c37846323b872dd60e01b85858560405160240161267f93929190613752565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612ba5565b6116308363a9059cbb60e01b848460405160240161267f9291906136eb565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff1661274c5760405162461bcd60e51b815260040161097490613671565b610946336118e3565b5f54610100900460ff166126575760405162461bcd60e51b815260040161097490613671565b5f63095ea7b360e01b83836040516024016127979291906136eb565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290506127d58482612c35565b610c37576127f88463095ea7b360e01b855f60405160240161267f92919061377a565b610c378482612ba5565b6040516370a0823160e01b815281905f906001600160a01b038516906370a0823190612832908890600401612ff4565b602060405180830381865afa15801561284d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128719190613542565b90505f856001600160a01b031663856e5bb388856040518363ffffffff1660e01b81526004016128a29291906136eb565b6020604051808303815f875af11580156128be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128e29190613542565b9050801561290557806040516343f10e9d60e11b8152600401610974919061347d565b6040516370a0823160e01b81525f906001600160a01b038716906370a0823190612933908a90600401612ff4565b602060405180830381865afa15801561294e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129729190613542565b90508361297f82856136f9565b101561299e57604051630f1b15df60e21b815260040160405180910390fd5b6129b26001600160a01b038716888661277b565b505050949350505050565b5f6129f26001600160a01b0388167f0000000000000000000000000000000000000000000000000000000000000000886126b6565b6040516370a0823160e01b81525f906001600160a01b038716906370a0823190612a20903090600401612ff4565b602060405180830381865afa158015612a3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a5f9190613542565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585604051612a9c9291906137a7565b5f604051808303815f865af19150503d805f8114612ad5576040519150601f19603f3d011682016040523d82523d5f602084013e612ada565b606091505b5050905080612afc5760405163428c0cc760e01b815260040160405180910390fd5b6040516370a0823160e01b81525f906001600160a01b038916906370a0823190612b2a903090600401612ff4565b602060405180830381865afa158015612b45573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b699190613542565b9050612b7583826136f9565b935086841015612b9857604051638199f5f360e01b815260040160405180910390fd5b5050509695505050505050565b5f612bf9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612cd89092919063ffffffff16565b905080515f1480612c19575080806020019051810190612c199190613524565b6116305760405162461bcd60e51b8152600401610974906137f9565b5f5f5f846001600160a01b031684604051612c509190613835565b5f604051808303815f865af19150503d805f8114612c89576040519150601f19603f3d011682016040523d82523d5f602084013e612c8e565b606091505b5091509150818015612cb8575080511580612cb8575080806020019051810190612cb89190613524565b8015612ccd57506001600160a01b0385163b15155b925050505b92915050565b6060612ce684845f85612cf0565b90505b9392505050565b606082471015612d125760405162461bcd60e51b815260040161097490613882565b5f5f866001600160a01b03168587604051612d2d9190613835565b5f6040518083038185875af1925050503d805f8114612d67576040519150601f19603f3d011682016040523d82523d5f602084013e612d6c565b606091505b5091509150612d7d87838387612d8a565b925050505b949350505050565b60608315612dc85782515f03612dc1576001600160a01b0385163b612dc15760405162461bcd60e51b8152600401610974906138c5565b5081612d82565b612d828383815115612ddd5781518083602001fd5b8060405162461bcd60e51b81526004016109749190613902565b5f6001600160a01b038216612cd2565b5f612cd282612df7565b5f612cd282612e07565b612e2481612e11565b82525050565b60208101612cd28284612e1b565b612e4181612e07565b8114610986575f5ffd5b8035612cd281612e38565b80612e41565b8035612cd281612e56565b5f5f83601f840112612e7a57612e7a5f5ffd5b50813567ffffffffffffffff811115612e9457612e945f5ffd5b602083019150836001820283011115612eae57612eae5f5ffd5b9250929050565b5f5f5f5f5f5f5f60c0888a031215612ece57612ece5f5ffd5b5f612ed98a8a612e4b565b9750506020612eea8a828b01612e4b565b9650506040612efb8a828b01612e5c565b9550506060612f0c8a828b01612e5c565b9450506080612f1d8a828b01612e5c565b93505060a088013567ffffffffffffffff811115612f3c57612f3c5f5ffd5b612f488a828b01612e67565b925092505092959891949750929550565b5f5f5f5f5f5f5f60c0888a031215612f7257612f725f5ffd5b5f612f7d8a8a612e4b565b9750506020612f8e8a828b01612e5c565b9650506040612efb8a828b01612e4b565b5f5f5f60608486031215612fb457612fb45f5ffd5b5f612fbf8686612e4b565b9350506020612fd086828701612e5c565b9250506040612fe186828701612e5c565b9150509250925092565b612e2481612df7565b60208101612cd28284612feb565b5f5f60408385031215613016576130165f5ffd5b5f6130218585612e4b565b925050602061303285828601612e5c565b9150509250929050565b612e4181612df7565b8035612cd28161303c565b5f60208284031215613063576130635f5ffd5b5f612d828484613045565b5f5f83601f840112613081576130815f5ffd5b50813567ffffffffffffffff81111561309b5761309b5f5ffd5b602083019150836020820283011115612eae57612eae5f5ffd5b5f5f5f5f5f5f5f5f5f5f60c08b8d0312156130d1576130d15f5ffd5b8a3567ffffffffffffffff8111156130ea576130ea5f5ffd5b6130f68d828e0161306e565b9a509a505060208b013567ffffffffffffffff811115613117576131175f5ffd5b6131238d828e0161306e565b985098505060408b013567ffffffffffffffff811115613144576131445f5ffd5b6131508d828e0161306e565b965096505060606131638d828e01613045565b94505060806131748d828e01613045565b93505060a08b013567ffffffffffffffff811115613193576131935f5ffd5b61319f8d828e01612e67565b92509250509295989b9194979a5092959850565b801515612e24565b80612e24565b5f6131cc83836131bb565b505060200190565b5f6131dd825190565b8084526020938401938301805f5b838110156132105781516131ff88826131c1565b9750602083019250506001016131eb565b509495945050505050565b6040810161322982856131b3565b8181036020830152612ce681846131d4565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f6131cc8383612e1b565b5f613277825190565b8084526020938401938301805f5b838110156132105781516132998882613263565b975060208301925050600101613285565b82818337505f910152565b8183525f6020840193506132ca8385846132aa565b601f19601f8401165b9093019392505050565b60a081016132eb8289612feb565b6132f86020830188612feb565b818103604083015261330a818761326e565b9050818103606083015261331e81866131d4565b90508181036080830152611aa78184866132b5565b6040810161334182856131bb565b612ce960208301846131bb565b60a0810161335c8287612feb565b6133696020830186612feb565b818103604083015261337b818561326e565b9050818103606083015261338f81846131d4565b82810360808401525f81529050602081019695505050505050565b602981525f602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291505b5060400190565b60208082528101612cd2816133aa565b602e81525f602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015291506133eb565b60208082528101612cd281613402565b5f60ff8216612cd2565b612e248161345c565b60208101612cd28284613466565b60208101612cd282846131bb565b5f6020828403121561349e5761349e5f5ffd5b5f612d828484612e4b565b801515612e41565b8051612cd2816134a9565b8051612cd281612e56565b5f5f5f606084860312156134dc576134dc5f5ffd5b5f6134e786866134b1565b93505060206134f8868287016134bc565b9250506040612fe1868287016134b1565b604081016135178285612feb565b612ce96020830184612feb565b5f60208284031215613537576135375f5ffd5b5f612d8284846134b1565b5f60208284031215613555576135555f5ffd5b5f612d8284846134bc565b6040810161356e8285612feb565b612ce96020830184612e1b565b5f5f5f60608486031215613590576135905f5ffd5b5f61359b86866134bc565b93505060206135ac868287016134bc565b9250506040612fe1868287016134bc565b8051612cd28161303c565b5f602082840312156135db576135db5f5ffd5b5f612d8284846135bd565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081525f5b5060200190565b60208082528101612cd2816135e6565b602b81525f602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b602082015291506133eb565b60208082528101612cd28161362a565b601f81525f602082017f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081529150613613565b60208082528101612cd281613681565b634e487b7160e01b5f52601160045260245ffd5b80820180821115612cd257612cd26136c4565b604081016133418285612feb565b81810381811115612cd257612cd26136c4565b818102808215838204851417613724576137246136c4565b5092915050565b634e487b7160e01b5f52601260045260245ffd5b5f8261374d5761374d61372b565b500490565b606081016137608286612feb565b61376d6020830185612feb565b612d8260408301846131bb565b604081016137888285612feb565b612ce96020830184613466565b5f6137a18385846132aa565b50500190565b5f612d82828486613795565b602a81525f602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015291506133eb565b60208082528101612cd2816137b3565b8281835e505f910152565b5f61381d825190565b61382b818560208601613809565b9290920192915050565b5f612ce98284613814565b602681525f602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b602082015291506133eb565b60208082528101612cd281613840565b601d81525f602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150613613565b60208082528101612cd281613892565b5f6138de825190565b8084526020840193506138f5818560208601613809565b601f19601f8201166132d3565b60208082528101612ce981846138d556fea2646970667358221220512b2315be067daf0697f0324e6327b49545d26765779854a32706075dbfa2de64736f6c634300081c0033",
  "deployedBytecode": "0x608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806379ba509711610093578063c78befbe11610063578063c78befbe146101ff578063e30c397814610212578063f2fde38b14610223578063fc08f9f614610236575f5ffd5b806379ba5097146101c25780638129fc1c146101ca5780638da5cb5b146101d2578063c6cd25f6146101ec575f5ffd5b80633a8f8c43116100ce5780633a8f8c431461016d5780633c3a2c21146101805780635f82c67e14610193578063715018a6146101ba575f5ffd5b80630fc6a11c146100f4578063134248011461013157806333e1567f14610146575b5f5ffd5b61011b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101289190612e2a565b60405180910390f35b61014461013f366004612eb5565b610257565b005b61011b7f000000000000000000000000000000000000000000000000000000000000000081565b61014461017b366004612f59565b6104d0565b61014461018e366004612f9f565b61073e565b61011b7f000000000000000000000000000000000000000000000000000000000000000081565b610144610935565b610144610948565b610144610989565b6033546001600160a01b03165b6040516101289190612ff4565b6101446101fa366004613002565b610a59565b61014461020d366004612f59565b610c3d565b6065546001600160a01b03166101df565b610144610231366004613050565b610e61565b6102496102443660046130b5565b610ed2565b60405161012892919061321b565b835f03610277576040516362ec8de760e01b815260040160405180910390fd5b856001600160a01b0316876001600160a01b0316036102a957604051637239c0db60e11b815260040160405180910390fd5b6102b2876112b6565b6102bb866112b6565b6102c36113bd565b6102cc87611467565b6102d586611467565b6102df33886114ec565b6102e833611635565b6102f38633876116f5565b335f805c610100600160a81b031916610100830217905d50866001805c6001600160a01b0319166001600160a01b03831617905d50848060035d50828060045d5060035f805c60ff19168217905d506040805160018082528183019092525f916020808301908036833701905050905086815f815181106103765761037661324f565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905085815f815181106103c5576103c561324f565b60209081029190910101526040516315513b6760e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635544ed9c906104269033903090879087908b908b906004016132dd565b5f604051808303815f87803b15801561043d575f5ffd5b505af115801561044f573d5f5f3e3d5ffd5b5050505061045c33611635565b876001600160a01b0316896001600160a01b0316336001600160a01b03167f4bdf2f6f97b9e53fbb880300a2b1e8f12110f6cbcc3279602053bcf6f5e051038a8a6040516104ab929190613333565b60405180910390a46104bc89611773565b6104c588611773565b505050505050505050565b835f036104f0576040516362ec8de760e01b815260040160405180910390fd5b846001600160a01b0316876001600160a01b03160361052257604051637239c0db60e11b815260040160405180910390fd5b61052b876112b6565b610534856112b6565b61053c6113bd565b61054587611467565b61054e85611467565b61055833886114ec565b61056133611635565b61056c8733886116f5565b335f805c610100600160a81b031916610100830217905d50866001805c6001600160a01b0319166001600160a01b03831617905d50858060025d50828060045d5060025f805c60ff19168217905d506040805160018082528183019092525f916020808301908036833701905050905085815f815181106105ef576105ef61324f565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905085815f8151811061063e5761063e61324f565b60209081029190910101526040516315513b6760e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635544ed9c9061069f9033903090879087908b908b906004016132dd565b5f604051808303815f87803b1580156106b6575f5ffd5b505af11580156106c8573d5f5f3e3d5ffd5b505050506106d533611635565b866001600160a01b0316896001600160a01b0316336001600160a01b03167f2535d675850d7c542dc54c7aa081f27a11d1b0df3f3db67275ce0a9d056274348b8a604051610724929190613333565b60405180910390a461073589611773565b6104c587611773565b805f0361075e576040516362ec8de760e01b815260040160405180910390fd5b610767836112b6565b61076f6113bd565b61077883611467565b61078233846114ec565b61078b33611635565b6107968333846116f5565b335f805c610100600160a81b031916610100830217905d5060015f805c60ff19168217905d50818060025d506040805160018082528183019092525f916020808301908036833701905050905083815f815181106107f6576107f661324f565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905082815f815181106108455761084561324f565b60209081029190910101526040516315513b6760e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635544ed9c906108a290339030908790879060040161334e565b5f604051808303815f87803b1580156108b9575f5ffd5b505af11580156108cb573d5f5f3e3d5ffd5b505050506108d833611635565b846001600160a01b0316336001600160a01b03167f49cef9d2c3f3f5785b1ad7facb0837a43e60a785a0141101e658f5565664cd89868660405161091d929190613333565b60405180910390a361092e85611773565b5050505050565b61093d6118b9565b6109465f6118e3565b565b60655433906001600160a01b0316811461097d5760405162461bcd60e51b8152600401610974906133f2565b60405180910390fd5b610986816118e3565b50565b5f54610100900460ff16158080156109a757505f54600160ff909116105b806109c05750303b1580156109c057505f5460ff166001145b6109dc5760405162461bcd60e51b81526004016109749061344c565b5f805460ff1916600117905580156109fd575f805461ff0019166101001790555b610a056118fc565b610a0d61192a565b8015610986575f805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890610a4e9060019061346f565b60405180910390a150565b805f03610a79576040516362ec8de760e01b815260040160405180910390fd5b610a82826112b6565b610a8a6113bd565b335f805c610100600160a81b031916610100830217905d50816001805c6001600160a01b0319166001600160a01b03831617905d5060055f805c60ff19168217905d506040805160018082528183019092525f916020808301908036833701905050905082815f81518110610b0157610b0161324f565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905082815f81518110610b5057610b5061324f565b60209081029190910101526040516315513b6760e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635544ed9c90610bad90339030908790879060040161334e565b5f604051808303815f87803b158015610bc4575f5ffd5b505af1158015610bd6573d5f5f3e3d5ffd5b50505050610be333611635565b836001600160a01b0316336001600160a01b03167f9858e3a66fd738b1f0f73208c9090ca5a20ee504df594271e464d4bb4cda0e6f85604051610c26919061347d565b60405180910390a3610c3784611773565b50505050565b835f03610c5d576040516362ec8de760e01b815260040160405180910390fd5b846001600160a01b0316876001600160a01b031603610c8f57604051637239c0db60e11b815260040160405180910390fd5b610c98876112b6565b610ca1856112b6565b610ca96113bd565b335f805c610100600160a81b031916610100830217905d50866001805c6001600160a01b0319166001600160a01b03831617905d50858060025d50828060045d5060045f805c60ff19168217905d506040805160018082528183019092525f916020808301908036833701905050905085815f81518110610d2c57610d2c61324f565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905085815f81518110610d7b57610d7b61324f565b60209081029190910101526040516315513b6760e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635544ed9c90610ddc9033903090879087908b908b906004016132dd565b5f604051808303815f87803b158015610df3575f5ffd5b505af1158015610e05573d5f5f3e3d5ffd5b50505050610e1233611635565b866001600160a01b0316896001600160a01b0316336001600160a01b03167fc40371cee960c145e7af5e62a37dfd2f97089c030c2427ad853ae214e815ebed8b8a604051610724929190613333565b610e696118b9565b606580546001600160a01b0383166001600160a01b03199091168117909155610e9a6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6060610edd611958565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f26576040516341c8302160e11b815260040160405180910390fd5b6001600160a01b0386163014610f4f576040516304db910d60e01b815260040160405180910390fd5b6101005f5c046001600160a01b0390811690861614610f8157604051632a057c4360e01b815260040160405180910390fd5b60018b141580610f92575060018914155b80610f9e575060018714155b15610fbc57604051634f7d8fbd60e11b815260040160405180910390fd5b6040805160018082528183019092529060208083019080368337019050509050600160ff5f5c166005811115610ff457610ff461323b565b0361107e5761105b858d8d5f81811061100f5761100f61324f565b9050602002016020810190611024919061348b565b8c8c5f8181106110365761103661324f565b905060200201358b8b5f81811061104f5761104f61324f565b90506020020135611981565b815f8151811061106d5761106d61324f565b602002602001018181525050611299565b600260ff5f5c1660058111156110965761109661323b565b036110ff5761105b858d8d5f8181106110b1576110b161324f565b90506020020160208101906110c6919061348b565b8c8c5f8181106110d8576110d861324f565b905060200201358b8b5f8181106110f1576110f161324f565b905060200201358888611ab3565b600360ff5f5c1660058111156111175761111761323b565b036111805761105b858d8d5f8181106111325761113261324f565b9050602002016020810190611147919061348b565b8c8c5f8181106111595761115961324f565b905060200201358b8b5f8181106111725761117261324f565b905060200201358888611c6e565b600460ff5f5c1660058111156111985761119861323b565b036112015761105b858d8d5f8181106111b3576111b361324f565b90506020020160208101906111c8919061348b565b8c8c5f8181106111da576111da61324f565b905060200201358b8b5f8181106111f3576111f361324f565b905060200201358888611d63565b600560ff5f5c1660058111156112195761121961323b565b036112805761105b858d8d5f8181106112345761123461324f565b9050602002016020810190611249919061348b565b8c8c5f81811061125b5761125b61324f565b905060200201358b8b5f8181106112745761127461324f565b9050602002013561221b565b604051639c3c956760e01b815260040160405180910390fd5b600191506112a76001609755565b9a509a98505050505050505050565b604051638e8f294b60e01b81525f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638e8f294b90611304908590600401612ff4565b606060405180830381865afa15801561131f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134391906134c7565b50509050806113675781604051635a9a1eb960e11b81526004016109749190612ff4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036113b95760405163baeccefd60e01b815260040160405180910390fd5b5050565b604051630217306760e31b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906310b983389061140b9033903090600401613509565b602060405180830381865afa158015611426573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144a9190613524565b610946576040516337248ad960e01b815260040160405180910390fd5b5f816001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303815f875af11580156114a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c99190613542565b905080156113b957806040516315fc6cbf60e21b8152600401610974919061347d565b60405163929fe9a160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063929fe9a19061153a9085908590600401613560565b602060405180830381865afa158015611555573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115799190613524565b6113b957604051636ac2e1e360e11b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d585c3c6906115cd9086908690600401613509565b6020604051808303815f875af11580156115e9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160d9190613542565b905080156116305780604051631957d10560e31b8152600401610974919061347d565b505050565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663528a174c846040518263ffffffff1660e01b81526004016116839190612ff4565b606060405180830381865afa15801561169e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c2919061357b565b92505091505f821415806116d557505f81115b1561163057816040516347749fcb60e01b8152600401610974919061347d565b8015611630575f836001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611738573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175c91906135c8565b9050610c376001600160a01b03821684308561265e565b5f816001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117b0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117d491906135c8565b90505f816001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016118039190612ff4565b602060405180830381865afa15801561181e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118429190613542565b90508015611630576001600160a01b036101005f5c0481169061186890841682846126b6565b826001600160a01b0316816001600160a01b03167fe8f38899ee6a4204a1a5ae0757b409b58be63978bc756134d464cfbaadc28931846040516118ab919061347d565b60405180910390a350505050565b6033546001600160a01b031633146109465760405162461bcd60e51b81526004016109749061361a565b606580546001600160a01b0319169055610986816126d5565b5f54610100900460ff166119225760405162461bcd60e51b815260040161097490613671565b610946612726565b5f54610100900460ff166119505760405162461bcd60e51b815260040161097490613671565b610946612755565b60026097540361197a5760405162461bcd60e51b8152600401610974906136b4565b6002609755565b5f5f846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119bf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119e391906135c8565b90505f6119f260025c866136d8565b9050611a086001600160a01b038316878361277b565b6040516323323e0360e01b81525f906001600160a01b038816906323323e0390611a38908b9086906004016136eb565b6020604051808303815f875af1158015611a54573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a789190613542565b90508015611a9b5780604051631f32531d60e21b8152600401610974919061347d565b611aa788888588612802565b98975050505050505050565b5f5f866001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611af1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1591906135c8565b60408051636f307dc360e01b815290519192506001600160a01b0360015c16916004805c925f928592636f307dc3928082019260209290918290030181865afa158015611b64573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b8891906135c8565b90505f611b99858b84868c8c6129bd565b90505f611ba860025c836136d8565b9050611bbe6001600160a01b038416868361277b565b5f856001600160a01b03166323323e038f846040518363ffffffff1660e01b8152600401611bed9291906136eb565b6020604051808303815f875af1158015611c09573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c2d9190613542565b90508015611c505780604051631f32531d60e21b8152600401610974919061347d565b611c5c8e8e898e612802565b9e9d5050505050505050505050505050565b5f5f866001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cac573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cd091906135c8565b60408051636f307dc360e01b815290519192506001600160a01b0360015c16916004805c925f928592636f307dc3928082019260209290918290030181865afa158015611d1f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d4391906135c8565b90505f611d528a60035c6136d8565b90505f611ba8868385878d8d6129bd565b5f5f866001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc591906135c8565b90505f876001600160a01b03166317bfdfbc8a6040518263ffffffff1660e01b8152600401611df49190612ff4565b6020604051808303815f875af1158015611e10573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e349190613542565b90505f818811611e445787611e46565b815b9050611e5c6001600160a01b0384168a8361277b565b6040516304c11f0360e31b81525f906001600160a01b038b1690632608f81890611e8c908e9086906004016136eb565b6020604051808303815f875af1158015611ea8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ecc9190613542565b90508015611eef578060405163014e9bb360e01b8152600401610974919061347d565b505060408051629df3ab60e31b815290516001600160a01b0360015c8116935060025c925f927f0000000000000000000000000000000000000000000000000000000000000000909216916304ef9d58916004808201926020929091908290030181865afa158015611f63573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f879190613542565b90505f5f8211611f975782611fed565b611fa982670de0b6b3a76400006136f9565b6001611fbd84670de0b6b3a76400006136f9565b611fcf670de0b6b3a76400008761370c565b611fd991906136d8565b611fe391906136f9565b611fed919061373f565b90505f846001600160a01b031663df3a516e8e846040518363ffffffff1660e01b815260040161201e9291906136eb565b6020604051808303815f875af115801561203a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061205e9190613542565b905080156120815780604051636083d26960e01b8152600401610974919061347d565b5050505f826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120c1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120e591906135c8565b905061216181826001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016121179190612ff4565b602060405180830381865afa158015612132573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121569190613542565b8660045c8b8b6129bd565b5061216c888a6136d8565b945084846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161219b9190612ff4565b602060405180830381865afa1580156121b6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121da9190613542565b10156121f957604051630f1b15df60e21b815260040160405180910390fd5b61220d6001600160a01b0385168b8761277b565b505050509695505050505050565b5f5f846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612259573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061227d91906135c8565b90505f856001600160a01b03166317bfdfbc886040518263ffffffff1660e01b81526004016122ac9190612ff4565b6020604051808303815f875af11580156122c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ec9190613542565b90505f8186116122fc57856122fe565b815b90506123146001600160a01b038416888361277b565b6040516304c11f0360e31b81525f906001600160a01b03891690632608f81890612344908c9086906004016136eb565b6020604051808303815f875af1158015612360573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123849190613542565b905080156123a7578060405163014e9bb360e01b8152600401610974919061347d565b6123b186886136d8565b94505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ef9d586040518163ffffffff1660e01b8152600401602060405180830381865afa158015612410573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124349190613542565b90505f5f8211612444578661249a565b61245682670de0b6b3a76400006136f9565b600161246a84670de0b6b3a76400006136f9565b61247c670de0b6b3a76400008b61370c565b61248691906136d8565b61249091906136f9565b61249a919061373f565b90505f8a6001600160a01b0316633af9e6698d6040518263ffffffff1660e01b81526004016124c99190612ff4565b6020604051808303815f875af11580156124e5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125099190613542565b905080821115612517578091505b604051636f9d28b760e11b81526001600160a01b038c169063df3a516e90612545908f9086906004016136eb565b6020604051808303815f875af1158015612561573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125859190613542565b935083156125a85783604051636083d26960e01b8152600401610974919061347d565b6040516370a0823160e01b815288906001600160a01b038916906370a08231906125d6903090600401612ff4565b602060405180830381865afa1580156125f1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126159190613542565b101561263457604051630f1b15df60e21b815260040160405180910390fd5b6126486001600160a01b0388168c8a61277b565b50505050505050949350505050565b6001609755565b610c37846323b872dd60e01b85858560405160240161267f93929190613752565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612ba5565b6116308363a9059cbb60e01b848460405160240161267f9291906136eb565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff1661274c5760405162461bcd60e51b815260040161097490613671565b610946336118e3565b5f54610100900460ff166126575760405162461bcd60e51b815260040161097490613671565b5f63095ea7b360e01b83836040516024016127979291906136eb565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915290506127d58482612c35565b610c37576127f88463095ea7b360e01b855f60405160240161267f92919061377a565b610c378482612ba5565b6040516370a0823160e01b815281905f906001600160a01b038516906370a0823190612832908890600401612ff4565b602060405180830381865afa15801561284d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128719190613542565b90505f856001600160a01b031663856e5bb388856040518363ffffffff1660e01b81526004016128a29291906136eb565b6020604051808303815f875af11580156128be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128e29190613542565b9050801561290557806040516343f10e9d60e11b8152600401610974919061347d565b6040516370a0823160e01b81525f906001600160a01b038716906370a0823190612933908a90600401612ff4565b602060405180830381865afa15801561294e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129729190613542565b90508361297f82856136f9565b101561299e57604051630f1b15df60e21b815260040160405180910390fd5b6129b26001600160a01b038716888661277b565b505050949350505050565b5f6129f26001600160a01b0388167f0000000000000000000000000000000000000000000000000000000000000000886126b6565b6040516370a0823160e01b81525f906001600160a01b038716906370a0823190612a20903090600401612ff4565b602060405180830381865afa158015612a3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a5f9190613542565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585604051612a9c9291906137a7565b5f604051808303815f865af19150503d805f8114612ad5576040519150601f19603f3d011682016040523d82523d5f602084013e612ada565b606091505b5050905080612afc5760405163428c0cc760e01b815260040160405180910390fd5b6040516370a0823160e01b81525f906001600160a01b038916906370a0823190612b2a903090600401612ff4565b602060405180830381865afa158015612b45573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b699190613542565b9050612b7583826136f9565b935086841015612b9857604051638199f5f360e01b815260040160405180910390fd5b5050509695505050505050565b5f612bf9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612cd89092919063ffffffff16565b905080515f1480612c19575080806020019051810190612c199190613524565b6116305760405162461bcd60e51b8152600401610974906137f9565b5f5f5f846001600160a01b031684604051612c509190613835565b5f604051808303815f865af19150503d805f8114612c89576040519150601f19603f3d011682016040523d82523d5f602084013e612c8e565b606091505b5091509150818015612cb8575080511580612cb8575080806020019051810190612cb89190613524565b8015612ccd57506001600160a01b0385163b15155b925050505b92915050565b6060612ce684845f85612cf0565b90505b9392505050565b606082471015612d125760405162461bcd60e51b815260040161097490613882565b5f5f866001600160a01b03168587604051612d2d9190613835565b5f6040518083038185875af1925050503d805f8114612d67576040519150601f19603f3d011682016040523d82523d5f602084013e612d6c565b606091505b5091509150612d7d87838387612d8a565b925050505b949350505050565b60608315612dc85782515f03612dc1576001600160a01b0385163b612dc15760405162461bcd60e51b8152600401610974906138c5565b5081612d82565b612d828383815115612ddd5781518083602001fd5b8060405162461bcd60e51b81526004016109749190613902565b5f6001600160a01b038216612cd2565b5f612cd282612df7565b5f612cd282612e07565b612e2481612e11565b82525050565b60208101612cd28284612e1b565b612e4181612e07565b8114610986575f5ffd5b8035612cd281612e38565b80612e41565b8035612cd281612e56565b5f5f83601f840112612e7a57612e7a5f5ffd5b50813567ffffffffffffffff811115612e9457612e945f5ffd5b602083019150836001820283011115612eae57612eae5f5ffd5b9250929050565b5f5f5f5f5f5f5f60c0888a031215612ece57612ece5f5ffd5b5f612ed98a8a612e4b565b9750506020612eea8a828b01612e4b565b9650506040612efb8a828b01612e5c565b9550506060612f0c8a828b01612e5c565b9450506080612f1d8a828b01612e5c565b93505060a088013567ffffffffffffffff811115612f3c57612f3c5f5ffd5b612f488a828b01612e67565b925092505092959891949750929550565b5f5f5f5f5f5f5f60c0888a031215612f7257612f725f5ffd5b5f612f7d8a8a612e4b565b9750506020612f8e8a828b01612e5c565b9650506040612efb8a828b01612e4b565b5f5f5f60608486031215612fb457612fb45f5ffd5b5f612fbf8686612e4b565b9350506020612fd086828701612e5c565b9250506040612fe186828701612e5c565b9150509250925092565b612e2481612df7565b60208101612cd28284612feb565b5f5f60408385031215613016576130165f5ffd5b5f6130218585612e4b565b925050602061303285828601612e5c565b9150509250929050565b612e4181612df7565b8035612cd28161303c565b5f60208284031215613063576130635f5ffd5b5f612d828484613045565b5f5f83601f840112613081576130815f5ffd5b50813567ffffffffffffffff81111561309b5761309b5f5ffd5b602083019150836020820283011115612eae57612eae5f5ffd5b5f5f5f5f5f5f5f5f5f5f60c08b8d0312156130d1576130d15f5ffd5b8a3567ffffffffffffffff8111156130ea576130ea5f5ffd5b6130f68d828e0161306e565b9a509a505060208b013567ffffffffffffffff811115613117576131175f5ffd5b6131238d828e0161306e565b985098505060408b013567ffffffffffffffff811115613144576131445f5ffd5b6131508d828e0161306e565b965096505060606131638d828e01613045565b94505060806131748d828e01613045565b93505060a08b013567ffffffffffffffff811115613193576131935f5ffd5b61319f8d828e01612e67565b92509250509295989b9194979a5092959850565b801515612e24565b80612e24565b5f6131cc83836131bb565b505060200190565b5f6131dd825190565b8084526020938401938301805f5b838110156132105781516131ff88826131c1565b9750602083019250506001016131eb565b509495945050505050565b6040810161322982856131b3565b8181036020830152612ce681846131d4565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f6131cc8383612e1b565b5f613277825190565b8084526020938401938301805f5b838110156132105781516132998882613263565b975060208301925050600101613285565b82818337505f910152565b8183525f6020840193506132ca8385846132aa565b601f19601f8401165b9093019392505050565b60a081016132eb8289612feb565b6132f86020830188612feb565b818103604083015261330a818761326e565b9050818103606083015261331e81866131d4565b90508181036080830152611aa78184866132b5565b6040810161334182856131bb565b612ce960208301846131bb565b60a0810161335c8287612feb565b6133696020830186612feb565b818103604083015261337b818561326e565b9050818103606083015261338f81846131d4565b82810360808401525f81529050602081019695505050505050565b602981525f602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291505b5060400190565b60208082528101612cd2816133aa565b602e81525f602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015291506133eb565b60208082528101612cd281613402565b5f60ff8216612cd2565b612e248161345c565b60208101612cd28284613466565b60208101612cd282846131bb565b5f6020828403121561349e5761349e5f5ffd5b5f612d828484612e4b565b801515612e41565b8051612cd2816134a9565b8051612cd281612e56565b5f5f5f606084860312156134dc576134dc5f5ffd5b5f6134e786866134b1565b93505060206134f8868287016134bc565b9250506040612fe1868287016134b1565b604081016135178285612feb565b612ce96020830184612feb565b5f60208284031215613537576135375f5ffd5b5f612d8284846134b1565b5f60208284031215613555576135555f5ffd5b5f612d8284846134bc565b6040810161356e8285612feb565b612ce96020830184612e1b565b5f5f5f60608486031215613590576135905f5ffd5b5f61359b86866134bc565b93505060206135ac868287016134bc565b9250506040612fe1868287016134bc565b8051612cd28161303c565b5f602082840312156135db576135db5f5ffd5b5f612d8284846135bd565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081525f5b5060200190565b60208082528101612cd2816135e6565b602b81525f602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b602082015291506133eb565b60208082528101612cd28161362a565b601f81525f602082017f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081529150613613565b60208082528101612cd281613681565b634e487b7160e01b5f52601160045260245ffd5b80820180821115612cd257612cd26136c4565b604081016133418285612feb565b81810381811115612cd257612cd26136c4565b818102808215838204851417613724576137246136c4565b5092915050565b634e487b7160e01b5f52601260045260245ffd5b5f8261374d5761374d61372b565b500490565b606081016137608286612feb565b61376d6020830185612feb565b612d8260408301846131bb565b604081016137888285612feb565b612ce96020830184613466565b5f6137a18385846132aa565b50500190565b5f612d82828486613795565b602a81525f602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015291506133eb565b60208082528101612cd2816137b3565b8281835e505f910152565b5f61381d825190565b61382b818560208601613809565b9290920192915050565b5f612ce98284613814565b602681525f602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b602082015291506133eb565b60208082528101612cd281613840565b601d81525f602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150613613565b60208082528101612cd281613892565b5f6138de825190565b8084526020840193506138f5818560208601613809565b601f19601f8201166132d3565b60208082528101612ce981846138d556fea2646970667358221220512b2315be067daf0697f0324e6327b49545d26765779854a32706075dbfa2de64736f6c634300081c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
