UNPKG

@backt/protocol

Version:
1,558 lines 204 kB
{ "contractName": "ContractForDifference", "abi": [ { "constant": true, "inputs": [], "name": "seller", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "feedsAddr", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "terminated", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "FORCE_TERMINATE_PENALTY_PERCENT", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "buyerSaleStrikePrice", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "sellerInitialNotional", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "FACTOR_INT", "outputs": [ { "name": "", "type": "int256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "sellerDepositBalance", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "upgradeCalledBy", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "notionalAmountWei", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "upgradeable", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "closed", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MINIMUM_COLLATERAL_PERCENT", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "buyerSaleTimeLimit", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "sellerInitialStrikePrice", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "LIQUIDATE_THRESHOLD_PERCENT_RAISED", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "buyer", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "buyerInitialNotional", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "sellerSaleStrikePrice", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "registry", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MAXIMUM_COLLATERAL_PERCENT", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "market", "outputs": [ { "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "LIQUIDATE_THRESHOLD_PERCENT", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "cfdRegistryAddr", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "buyerDepositBalance", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "initiated", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "buyerSelling", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "strikePrice", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "buyerInitialStrikePrice", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "", "type": "address" } ], "name": "withdrawable", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "FACTOR_UINT", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MINIMUM_NOTIONAL_AMOUNT_WEI", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "sellerSaleTimeLimit", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "sellerSelling", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "inputs": [], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "creator", "type": "address" }, { "indexed": false, "name": "market", "type": "bytes32" }, { "indexed": false, "name": "notionalAmountWei", "type": "uint256" }, { "indexed": false, "name": "deposit", "type": "uint256" } ], "name": "LogCFDCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "joiner", "type": "address" }, { "indexed": false, "name": "amountSent", "type": "uint256" }, { "indexed": false, "name": "buyer", "type": "address" }, { "indexed": false, "name": "seller", "type": "address" }, { "indexed": false, "name": "market", "type": "bytes32" }, { "indexed": false, "name": "notionalAmountWei", "type": "uint256" }, { "indexed": false, "name": "strikePrice", "type": "uint256" }, { "indexed": false, "name": "buyerDepositBalance", "type": "uint256" }, { "indexed": false, "name": "sellerDepositBalance", "type": "uint256" } ], "name": "LogCFDInitiated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "oldOwner", "type": "address" }, { "indexed": false, "name": "newOwner", "type": "address" } ], "name": "LogCFDTransferPosition", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "party", "type": "address" }, { "indexed": false, "name": "amount", "type": "uint256" }, { "indexed": false, "name": "market", "type": "bytes32" } ], "name": "LogCFDCanceledNew", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "party", "type": "address" }, { "indexed": false, "name": "newStrikePrice", "type": "uint256" } ], "name": "LogCFDStrikePriceUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "party", "type": "address" }, { "indexed": false, "name": "saleStrikePrice", "type": "uint256" }, { "indexed": false, "name": "timeLimit", "type": "uint256" } ], "name": "LogCFDSale", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "party", "type": "address" } ], "name": "LogCFDSaleCancelled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "party", "type": "address" }, { "indexed": false, "name": "newPrice", "type": "uint256" } ], "name": "LogCFDSaleUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "to", "type": "address" }, { "indexed": false, "name": "by", "type": "address" }, { "indexed": false, "name": "newNotional", "type": "uint256" }, { "indexed": false, "name": "sellerAmount", "type": "uint256" }, { "indexed": false, "name": "buyerDeposit", "type": "uint256" }, { "indexed": false, "name": "market", "type": "bytes32" } ], "name": "LogCFDSold", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "receiver", "type": "address" }, { "indexed": false, "name": "amount", "type": "uint256" } ], "name": "LogCFDSendCollateralFailure", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "withdrawer", "type": "address" } ], "name": "LogCFDWithrewUnsent", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "party", "type": "address" }, { "indexed": false, "name": "amount", "type": "uint256" }, { "indexed": false, "name": "isWithdraw", "type": "bool" }, { "indexed": false, "name": "newBalance", "type": "uint256" }, { "indexed": false, "name": "market", "type": "bytes32" } ], "name": "LogCFDPartyBalanceUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "receiver", "type": "address" }, { "indexed": false, "name": "amount", "type": "uint256" } ], "name": "LogCFDTransferFunds", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "winner", "type": "address" }, { "indexed": false, "name": "buyerCollateral", "type": "uint256" }, { "indexed": false, "name": "sellerCollateral", "type": "uint256" }, { "indexed": false, "name": "market", "type": "bytes32" } ], "name": "LogCFDClosed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "terminator", "type": "address" }, { "indexed": false, "name": "terminatorAmount", "type": "uint256" }, { "indexed": false, "name": "otherParty", "type": "address" }, { "indexed": false, "name": "otherPartyAmount", "type": "uint256" }, { "indexed": false, "name": "market", "type": "bytes32" } ], "name": "LogCFDForceTerminated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "newCFD", "type": "address" } ], "name": "LogCFDUpgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "name": "remainder", "type": "uint256" } ], "name": "LogCFDRemainingBalanceUnexpected", "type": "event" }, { "constant": true, "inputs": [], "name": "isActive", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "isBuyerSelling", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "isSellerSelling", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "_party", "type": "address" } ], "name": "isSelling", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "_party", "type": "address" } ], "name": "isContractParty", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "notional", "type": "uint256" } ], "name": "creatorFee", "outputs": [ { "name": "fee", "type": "uint256" } ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": true, "inputs": [ { "name": "notional", "type": "uint256" } ], "name": "joinerFee", "outputs": [ { "name": "fee", "type": "uint256" } ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": false, "inputs": [ { "name": "_registryAddr", "type": "address" }, { "name": "_cfdRegistryAddr", "type": "address" }, { "name": "_feedsAddr", "type": "address" }, { "name": "_partyAddr", "type": "address" }, { "name": "_marketId", "type": "bytes32" }, { "name": "_strikePrice", "type": "uint256" }, { "name": "_notionalAmountWei", "type": "uint256" }, { "name": "_isBuyer", "type": "bool" } ], "name": "create", "outputs": [], "payable": true, "stateMutability": "payable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_cfdAddr", "type": "address" }, { "name": "_registryAddr", "type": "address" }, { "name": "_cfdRegistryAddr", "type": "address" }, { "name": "_feedsAddr", "type": "address" } ], "name": "createByUpgrade", "outputs": [], "payable": true, "stateMutability": "payable", "type": "function" }, { "constant": true, "inputs": [], "name": "getCfdAttributes", "outputs": [ { "name": "", "type": "address" }, { "name": "", "type": "address" }, { "name": "", "type": "bytes32" }, { "name": "", "type": "uint256" }, { "name": "", "type": "uint256" }, { "name": "", "type": "bool" }, { "name": "", "type": "bool" }, { "name": "", "type": "uint8" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getCfdAttributes2", "outputs": [ { "name": "", "type": "uint256" }, { "name": "", "type": "uint256" }, { "name": "", "type": "uint256" }, { "name": "", "type": "uint256" }, { "name": "", "type": "uint256" }, { "name": "", "type": "uint256" }, { "name": "", "type": "uint256" }, { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getCfdAttributes3", "outputs": [ { "name": "", "type": "bool" }, { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [], "name": "deposit", "outputs": [], "payable": true, "stateMutability": "payable", "type": "function" }, { "constant": false, "inputs": [], "name": "cancelNew", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [], "name": "topup", "outputs": [], "payable": true, "stateMutability": "payable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_withdrawAmount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_newAddress", "type": "address" } ], "name": "transferPosition", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_desiredStrikePrice", "type": "uint256" }, { "name": "_timeLimit", "type": "uint256" } ], "name": "sellPrepare", "outputs": [], "payable": true, "stateMutability": "payable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_newPrice", "type": "uint256" } ], "name": "sellUpdate", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_newStrikePrice", "type": "uint256" } ], "name": "changeStrikePrice", "outputs": [], "payable": true, "stateMutability": "payable", "type": "function" }, { "constant": false, "inputs": [], "name": "sellCancel", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "_buyBuyerSide", "type": "bool" } ], "name": "buy", "outputs": [], "payable": true, "stateMutability": "payable", "type": "function" }, { "constant": true, "inputs": [ { "name": "_oldNotional", "type": "uint256" }, { "name": "_oldStrikePrice", "type": "uint256" }, { "name": "_newStrikePrice", "type": "uint256" } ], "name": "calculateNewNotional", "outputs": [ { "name": "newNotional", "type": "uint256" } ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": false, "inputs": [], "name": "liquidate", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [], "name": "forceTerminate", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [], "name": "upgrade", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "status", "outputs": [ { "name": "", "type": "uint8" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [], "name": "withdrawUnsent", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "name": "_strikePrice", "type": "uint256" }, { "name": "_currentPrice", "type": "uint256" }, { "name": "_notionalAmount", "type": "uint256" } ], "name": "changeInWei", "outputs": [ { "name": "change", "type": "uint256" } ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": true, "inputs": [ { "name": "_value", "type": "uint256" }, { "name": "_newValue", "type": "uint256" } ], "name": "percentChange", "outputs": [ { "name": "percent", "type": "uint256" } ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": true, "inputs": [ { "name": "_amount", "type": "uint256" }, { "name": "_percent", "type": "uint256" } ], "name": "percentOf", "outputs": [ { "name": "adjusted", "type": "uint256" } ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": true, "inputs": [ { "name": "_strikePrice", "type": "uint256" }, { "name": "_marketPrice", "type": "uint256" }, { "name": "_notionalAmount", "type": "uint256" }, { "name": "_depositBalance", "type": "uint256" }, { "name": "_isBuyer", "type": "bool" } ], "name": "calculateCollateralAmount", "outputs": [ { "name": "collateral", "type": "uint256" } ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": true, "inputs": [ { "name": "_notionalAmount", "type": "uint256" }, { "name": "_amount", "type": "uint256" } ], "name": "collateralInRange", "outputs": [ { "name": "inRange", "type": "bool" } ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": true, "inputs": [ { "name": "_marketPrice", "type": "uint256" }, { "name": "_buyerDepositBalance", "type": "uint256" }, { "name": "_sellerDepositBalance", "type": "uint256" }, { "name": "_strikePrice", "type": "uint256" } ], "name": "marketPriceInRange", "outputs": [ { "name": "inRange", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "_notionalAmountWei", "type": "uint256" }, { "name": "_depositBalance", "type": "uint256" }, { "name": "_strikePrice", "type": "uint256" }, { "name": "_calcForBuyerSide", "type": "bool" } ], "name": "cutOffPrice", "outputs": [ { "name": "price", "type": "uint256" } ], "payable": false, "stateMutability": "pure", "type": "function" } ], "bytecode": "0x60806040526000601060026101000a81548160ff0219169083151502179055506000601060036101000a81548160ff0219169083151502179055506000601060056101000a81548160ff0219169083151502179055506000601060066101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156100a357600080fd5b50615ed080620000b46000396000f30060806040526004361061032d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806308551a53146103325780630a10ff5f14610389578063194307bf146103e05780631a9fddf21461040f5780631bcccdf71461043c5780631bdfca0114610467578063200d2ed21461049257806322e20d2a146104cb57806322f3e2d4146104f65780632802759b1461052557806328970492146105bb57806328a07025146105e65780632a6d096f146105fd5780632d4dce7d146106595780632e1a7d4d146106845780632f301a78146106b1578063333c9dda14610706578063393d85331461075d5780633c79ad64146107be57806341c20c8e146107e957806346f33a6d14610818578063497b13d3146108475780635407baea1461085e578063597e1fb5146108b95780635ab3076c146108e85780635df0d4cd146109135780635dfa360a146109d75780635e24e35d14610a425780636182fab314610a8557806369774c2d14610ab05780636a8100b214610aba5780636ca6bbd814610ae55780637028875e14610b105780637150d8ae14610b305780637185b30c14610b875780637856193914610bb257806378c3829b14610bdd5780637af5cde914610c1e5780637b10399914610c815780637b433e0914610cd85780637d21f95014610d0357806380f5560514610d65578063818197ea14610d985780638505571e14610dc2578063917faf0e14610e0357806393a9651214610e2e57806398074eb414610e4557806398531f2814610e9c5780639c03d24a14610ecb5780639dec143014610f165780639f11853614610f41578063a22adf3b14610f70578063a6f4082114610f87578063ae3cde5914610fd2578063c2ef94f614611001578063c52987cf146110d3578063c93c88d7146110fe578063c9e2525114611129578063ce513b6f1461114b578063d0e30db0146111a2578063d525be32146111ac578063d55ec69714611207578063d7a7afac1461121e578063dc2ae6e814611249578063de46da8014611298578063df0fdcdc146112c3578063f797efda146112ee578063f7d740ac14611305578063fe2e56991461135a575b600080fd5b34801561033e57600080fd5b50610347611389565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039557600080fd5b5061039e6113af565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103ec57600080fd5b506103f56113d5565b604051808215151515815260200191505060405180910390f35b34801561041b57600080fd5b5061043a600480360381019080803590602001909291905050506113e8565b005b34801561044857600080fd5b50610451611552565b6040518082815260200191505060405180910390f35b34801561047357600080fd5b5061047c611557565b6040518082815260200191505060405180910390f35b34801561049e57600080fd5b506104a761155d565b604051808260038111156104b757fe5b60ff16815260200191505060405180910390f35b3480156104d757600080fd5b506104e06115d6565b6040518082815260200191505060405180910390f35b34801561050257600080fd5b5061050b6115dc565b604051808215151515815260200191505060405180910390f35b6105b9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611619565b005b3480156105c757600080fd5b506105d0611f72565b6040518082815260200191505060405180910390f35b3480156105f257600080fd5b506105fb611f7f565b005b34801561060957600080fd5b506106126122f5565b604051808981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019850505050505050505060405180910390f35b34801561066557600080fd5b5061066e612333565b6040518082815260200191505060405180910390f35b34801561069057600080fd5b506106af60048036038101908080359060200190929190505050612339565b005b3480156106bd57600080fd5b506106f06004803603810190808035906020019092919080359060200190929190803590602001909291905050506126b5565b6040518082815260200191505060405180910390f35b34801561071257600080fd5b5061071b6126ed565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561076957600080fd5b506107a8600480360381019080803590602001909291908035906020019092919080359060200190929190803515159060200190929190505050612713565b6040518082815260200191505060405180910390f35b3480156107ca57600080fd5b506107d36127d9565b6040518082815260200191505060405180910390f35b3480156107f557600080fd5b506107fe6127df565b604051808215151515815260200191505060405180910390f35b34801561082457600080fd5b5061082d6127f2565b604051808215151515815260200191505060405180910390f35b34801561085357600080fd5b5061085c612823565b005b34801561086a57600080fd5b5061089f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a6e565b604051808215151515815260200191505060405180910390f35b3480156108c557600080fd5b506108ce612b1f565b604051808215151515815260200191505060405180910390f35b3480156108f457600080fd5b506108fd612b32565b6040518082815260200191505060405180910390f35b6109d5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080356000191690602001909291908035906020019092919080359060200190929190803515159060200190929190505050612b37565b005b3480156109e357600080fd5b50610a2c60048036038101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803515159060200190929190505050613021565b6040518082815260200191505060405180910390f35b348015610a4e57600080fd5b50610a83600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130b1565b005b348015610a9157600080fd5b50610a9a6133c2565b6040518082815260200191505060405180910390f35b610ab86133c8565b005b348015610ac657600080fd5b50610acf613586565b6040518082815260200191505060405180910390f35b348015610af157600080fd5b50610afa61358c565b6040518082815260200191505060405180910390f35b610b2e600480360381019080803590602001909291905050506135a8565b005b348015610b3c57600080fd5b50610b4561369a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b9357600080fd5b50610b9c6136bf565b6040518082815260200191505060405180910390f35b348015610bbe57600080fd5b50610bc76136c5565b6040518082815260200191505060405180910390f35b348015610be957600080fd5b50610c08600480360381019080803590602001909291905050506136cb565b6040518082815260200191505060405180910390f35b348015610c2a57600080fd5b50610c67600480360381019080803590602001909291908035906020019092919080359060200190929190803590602001909291905050506136eb565b604051808215151515815260200191505060405180910390f35b348015610c8d57600080fd5b50610c9661372c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ce457600080fd5b50610ced613752565b6040518082815260200191505060405180910390f35b348015610d0f57600080fd5b50610d18613758565b60405180831515151581526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390f35b348015610d7157600080fd5b50610d7a613796565b60405180826000191660001916815260200191505060405180910390f35b610dc0600480360381019080803590602001909291908035906020019092919050505061379c565b005b348015610dce57600080fd5b50610ded60048036038101908080359060200190929190505050613a53565b6040518082815260200191505060405180910390f35b348015610e0f57600080fd5b50610e18613a73565b6040518082815260200191505060405180910390f35b348015610e3a57600080fd5b50610e43613a78565b005b348015610e5157600080fd5b50610e5a6142d6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ea857600080fd5b50610eb16142fc565b604051808215151515815260200191505060405180910390f35b348015610ed757600080fd5b50610f00600480360381019080803590602001909291908035906020019092919050505061432d565b6040518082815260200191505060405180910390f35b348015610f2257600080fd5b50610f2b614377565b6040518082815260200191505060405180910390f35b348015610f4d57600080fd5b50610f5661437d565b604051808215151515815260200191505060405180910390f35b348015610f7c57600080fd5b50610f85614390565b005b348015610f9357600080fd5b50610fbc6004803603810190808035906020019092919080359060200190929190505050614515565b6040518082815260200191505060405180910390f35b348015610fde57600080fd5b50610fe761452e565b604051808215151515815260200191505060405180910390f35b34801561100d57600080fd5b50611016614541565b604051808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001876000191660001916815260200186815260200185815260200184151515158152602001831515151581526020018260038111156110b857fe5b60ff1681526020019850505050505050505060405180910390f35b3480156110df57600080fd5b506110e86145dd565b6040518082815260200191505060405180910390f35b34801561110a57600080fd5b506111136145e3565b6040518082815260200191505060405180910390f35b6111496004803603810190808035151590602001909291905050506145e9565b005b34801561115757600080fd5b5061118c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614b1d565b6040518082815260200191505060405180910390f35b6111aa614b35565b005b3480156111b857600080fd5b506111ed600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050615429565b604051808215151515815260200191505060405180910390f35b34801561121357600080fd5b5061121c6154fa565b005b34801561122a57600080fd5b50611233615a4e565b6040518082815260200191505060405180910390f35b34801561125557600080fd5b5061127e6004803603810190808035906020019092919080359060200190929190505050615a5b565b604051808215151515815260200191505060405180910390f35b3480156112a457600080fd5b506112ad615a8a565b6040518082815260200191505060405180910390f35b3480156112cf57600080fd5b506112d8615a8f565b6040518082815260200191505060405180910390f35b3480156112fa57600080fd5b50611303615a95565b005b34801561131157600080fd5b50611344600480360381019080803590602001909291908035906020019092919080359060200190929190505050615b7d565b6040518082815260200191505060405180910390f35b34801561136657600080fd5b5061136f615ba0565b604051808215151515815260200191505060405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060049054906101000a900460ff1681565b6113f06115dc565b8015156113fc57600080fd5b61140533615429565b80151561141157600080fd5b6000831180151561142157600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156114825783600c819055506114e1565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156114e05783600e819055505b5b7fbbee2154904c4910310beb779cb9f970f5faa539a34158662d3963477f19ce313385604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150505050565b600581565b600c5481565b600060011515601060039054906101000a900460ff161515141561158457600390506115d3565b60001515601060029054906101000a900460ff16151514156115a957600090506115d3565b6115b16142fc565b806115c057506115bf6127f2565b5b156115ce57600290506115d3565b600190505b90565b60055481565b600060011515601060029054906101000a900460ff161515148015611614575060001515601060039054906101000a900460ff161515145b905090565b60008490508073ffffffffffffffffffffffffffffffffffffffff166380f556056040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561168057600080fd5b505afa158015611694573d6000803e3d6000fd5b505050506040513d60208110156116aa57600080fd5b8101908080519060200190929190505050600281600019169055508073ffffffffffffffffffffffffffffffffffffffff16633c79ad646040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561172757600080fd5b505afa15801561173b573d6000803e3d6000fd5b505050506040513d602081101561175157600080fd5b81019080805190602001909291905050506003819055508073ffffffffffffffffffffffffffffffffffffffff1663c52987cf6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156117ca57600080fd5b505afa1580156117de573d6000803e3d6000fd5b505050506040513d60208110156117f457600080fd5b81019080805190602001909291905050506006819055508073ffffffffffffffffffffffffffffffffffffffff16637150d8ae6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561186d57600080fd5b505afa158015611881573d6000803e3d6000fd5b505050506040513d602081101561189757600080fd5b81019080805190602001909291905050506000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff166308551a536040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561194957600080fd5b505afa15801561195d573d6000803e3d6000fd5b505050506040513d602081101561197357600080fd5b8101908080519060200190929190505050600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16639dec14306040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015611a2657600080fd5b505afa158015611a3a573d6000803e3d6000fd5b505050506040513d6020811015611a5057600080fd5b81019080805190602001909291905050506009819055508073ffffffffffffffffffffffffffffffffffffffff16637185b30c6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015611ac957600080fd5b505afa158015611add573d6000803e3d6000fd5b505050506040513d6020811015611af357600080fd5b81019080805190602001909291905050506004819055508073ffffffffffffffffffffffffffffffffffffffff1663c93c88d76040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015611b6c57600080fd5b505afa158015611b80573d6000803e3d6000fd5b505050506040513d6020811015611b9657600080fd5b81019080805190602001909291905050506007819055508073ffffffffffffffffffffffffffffffffffffffff16632d4dce7d6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015611c0f57600080fd5b505afa158015611c23573d6000803e3d6000fd5b505050506040513d6020811015611c3957600080fd5b8101908080519060200190929190505050600a819055508073ffffffffffffffffffffffffffffffffffffffff166322e20d2a6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015611cb257600080fd5b505afa158015611cc6573d6000803e3d6000fd5b505050506040513d6020811015611cdc57600080fd5b81019080805190602001909291905050506005819055508073ffffffffffffffffffffffffffffffffffffffff16636a8100b26040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015611d5557600080fd5b505afa158015611d69573d6000803e3d6000fd5b505050506040513d6020811015611d7f57600080fd5b810190808051906020019092919050505060088190555082601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060026101000a81548160ff021916908315150217905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166381e8dfa2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015611f5357600080fd5b505af1158015611f67573d6000803e3d6000fd5b505050505050505050565b68056bc75e2d6310000081565b6000806000806000611f8f6115dc565b801515611f9b57600080fd5b611fa3615bb3565b9550611fb786600954600a546006546136eb565b151515612052576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f4c6971756964617465207468726573686f6c64206e6f7420796574207265616381526020017f686564000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6120656003546009546006546001612713565b945084861193508361209957600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166120bc565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b92503073ffffffffffffffffffffffffffffffffffffffff163191508273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015156121c75781600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f4ef7babf760ae67aea11df6f2f8872dd3c883143d490e6cd77f9a4b709dc70d68383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1612233565b7fae0c91484288809ae2c2fb81551bd9d06d4d3bcbbce87f3c5a3d5775f299358b8383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b6001601060036101000a81548160ff0219169083151502179055507faa0254c6ef7b0f13349b08e091c677fb9d83e5829f3e697eee7127c0702292b3838561227c57600061227e565b835b86612289578461228c565b60005b600254604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001826000191660001916815260200194505050505060405180910390a1505050505050565b600080600080600080600080600454600554600954600a54600c54600e54600754600854975097509750975097509750975097509091929394959697565b600a5481565b6000806000806000856001811015151561235257600080fd5b60011515601060029054906101000a900460ff16151514151561237457600080fd5b60001515601060039054906101000a900460ff16151514151561239657600080fd5b61239f33612a6e565b15156123aa57600080fd5b600015156123b733615429565b15151415156123c557600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161495508561242457600a54612428565b6009545b94508487111561243757600080fd5b8685039350612444615bb3565b9250612470838761245757600954612459565b855b886124645786612468565b600a545b6006546136eb565b151561247b57600080fd5b61248c60065484600354878a613021565b915061249a60035483615a5b565b15156124a557600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc889081150290604051600060405180830381858888f1935050505015156125945786600b60003373fffffffffffffffffffffffffffffffffffffff