@giveth/liquidpledging-contract
Version:
Liquid Pledging Smart Contract
1,167 lines • 162 kB
JSON
{
"contractName": "LiquidPledging",
"source": "./contracts/LiquidPledging.sol",
"compilerOutput": {
"abi": [
{
"constant": false,
"inputs": [
{
"name": "idReceiver",
"type": "uint64"
},
{
"name": "donorAddress",
"type": "address"
},
{
"name": "token",
"type": "address"
},
{
"name": "amount",
"type": "uint256"
}
],
"name": "addGiverAndDonate",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "APP_ADDR_NAMESPACE",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "whitelistDisabled",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "projectId",
"type": "uint64"
}
],
"name": "isProjectCanceled",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "PLUGIN_MANAGER_ROLE",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "numberOfPledges",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "idPledge",
"type": "uint64"
},
{
"name": "amount",
"type": "uint256"
}
],
"name": "confirmPayment",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "idPledge",
"type": "uint64"
},
{
"name": "idxDelegate",
"type": "uint64"
}
],
"name": "getPledgeDelegate",
"outputs": [
{
"name": "idDelegate",
"type": "uint64"
},
{
"name": "addr",
"type": "address"
},
{
"name": "name",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "contractHashes",
"type": "bytes32[]"
}
],
"name": "addValidPluginContracts",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getRecoveryVault",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "useWhitelist",
"type": "bool"
}
],
"name": "useWhitelist",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "idPledge",
"type": "uint64"
}
],
"name": "getPledge",
"outputs": [
{
"name": "amount",
"type": "uint256"
},
{
"name": "owner",
"type": "uint64"
},
{
"name": "nDelegates",
"type": "uint64"
},
{
"name": "intendedProject",
"type": "uint64"
},
{
"name": "commitTime",
"type": "uint64"
},
{
"name": "oldPledge",
"type": "uint64"
},
{
"name": "token",
"type": "address"
},
{
"name": "pledgeState",
"type": "uint8"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "idPledge",
"type": "uint64"
},
{
"name": "amount",
"type": "uint256"
}
],
"name": "withdraw",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "idSender",
"type": "uint64"
},
{
"name": "idPledge",
"type": "uint64"
},
{
"name": "amount",
"type": "uint256"
},
{
"name": "idReceiver",
"type": "uint64"
}
],
"name": "transfer",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "idGiver",
"type": "uint64"
},
{
"name": "idReceiver",
"type": "uint64"
},
{
"name": "token",
"type": "address"
},
{
"name": "amount",
"type": "uint256"
}
],
"name": "donate",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "addr",
"type": "address"
}
],
"name": "isValidPlugin",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "idPledge",
"type": "uint64"
}
],
"name": "normalizePledge",
"outputs": [
{
"name": "",
"type": "uint64"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "name",
"type": "string"
},
{
"name": "url",
"type": "string"
},
{
"name": "commitTime",
"type": "uint64"
},
{
"name": "plugin",
"type": "address"
}
],
"name": "addDelegate",
"outputs": [
{
"name": "idDelegate",
"type": "uint64"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "numberOfPledgeAdmins",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "pledgesAmounts",
"type": "uint256[]"
}
],
"name": "mWithdraw",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "EVMSCRIPT_REGISTRY_APP_ID",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "addr",
"type": "address"
}
],
"name": "removeValidPluginInstance",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "idReceiver",
"type": "uint64"
},
{
"name": "token",
"type": "address"
},
{
"name": "amount",
"type": "uint256"
}
],
"name": "addGiverAndDonate",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "addr",
"type": "address"
},
{
"name": "name",
"type": "string"
},
{
"name": "url",
"type": "string"
},
{
"name": "commitTime",
"type": "uint64"
},
{
"name": "plugin",
"type": "address"
}
],
"name": "addGiver",
"outputs": [
{
"name": "idGiver",
"type": "uint64"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "name",
"type": "string"
},
{
"name": "url",
"type": "string"
},
{
"name": "projectAdmin",
"type": "address"
},
{
"name": "parentProject",
"type": "uint64"
},
{
"name": "commitTime",
"type": "uint64"
},
{
"name": "plugin",
"type": "address"
}
],
"name": "addProject",
"outputs": [
{
"name": "idProject",
"type": "uint64"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "idProject",
"type": "uint64"
}
],
"name": "cancelProject",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "addr",
"type": "address"
}
],
"name": "addValidPluginInstance",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "token",
"type": "address"
}
],
"name": "allowRecoverability",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "name",
"type": "string"
},
{
"name": "url",
"type": "string"
},
{
"name": "commitTime",
"type": "uint64"
},
{
"name": "plugin",
"type": "address"
}
],
"name": "addGiver",
"outputs": [
{
"name": "idGiver",
"type": "uint64"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "appId",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "addr",
"type": "address"
}
],
"name": "getCodeHash",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "ETH",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getInitializationBlock",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "EVMSCRIPT_REGISTRY_APP",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_token",
"type": "address"
}
],
"name": "transferToVault",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_sender",
"type": "address"
},
{
"name": "_role",
"type": "bytes32"
},
{
"name": "params",
"type": "uint256[]"
}
],
"name": "canPerform",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "idPledge",
"type": "uint64"
},
{
"name": "amount",
"type": "uint256"
}
],
"name": "cancelPledge",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "contractHash",
"type": "bytes32"
}
],
"name": "removeValidPluginContract",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "_vault",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "contractHash",
"type": "bytes32"
}
],
"name": "addValidPluginContract",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "idDelegate",
"type": "uint64"
},
{
"name": "newAddr",
"type": "address"
},
{
"name": "newName",
"type": "string"
},
{
"name": "newUrl",
"type": "string"
},
{
"name": "newCommitTime",
"type": "uint64"
}
],
"name": "updateDelegate",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "pledges",
"type": "uint64[]"
}
],
"name": "mNormalizePledge",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "kernel",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "idSender",
"type": "uint64"
},
{
"name": "pledgesAmounts",
"type": "uint256[]"
},
{
"name": "idReceiver",
"type": "uint64"
}
],
"name": "mTransfer",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "idGiver",
"type": "uint64"
},
{
"name": "newAddr",
"type": "address"
},
{
"name": "newName",
"type": "string"
},
{
"name": "newUrl",
"type": "string"
},
{
"name": "newCommitTime",
"type": "uint64"
}
],
"name": "updateGiver",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "idPledge",
"type": "uint64"
},
{
"name": "amount",
"type": "uint256"
}
],
"name": "cancelPayment",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "idAdmin",
"type": "uint64"
}
],
"name": "getPledgeAdmin",
"outputs": [
{
"name": "adminType",
"type": "uint8"
},
{
"name": "addr",
"type": "address"
},
{
"name": "name",
"type": "string"
},
{
"name": "url",
"type": "string"
},
{
"name": "commitTime",
"type": "uint64"
},
{
"name": "parentProject",
"type": "uint64"
},
{
"name": "canceled",
"type": "bool"
},
{
"name": "plugin",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "idProject",
"type": "uint64"
},
{
"name": "newAddr",
"type": "address"
},
{
"name": "newName",
"type": "string"
},
{
"name": "newUrl",
"type": "string"
},
{
"name": "newCommitTime",
"type": "uint64"
}
],
"name": "updateProject",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "_script",
"type": "bytes"
}
],
"name": "getExecutor",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "vault",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "from",
"type": "uint256"
},
{
"indexed": true,
"name": "to",
"type": "uint256"
},
{
"indexed": false,
"name": "amount",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "idProject",
"type": "uint256"
}
],
"name": "CancelProject",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "idGiver",
"type": "uint64"
},
{
"indexed": false,
"name": "url",
"type": "string"
}
],
"name": "GiverAdded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "idGiver",
"type": "uint64"
},
{
"indexed": false,
"name": "url",
"type": "string"
}
],
"name": "GiverUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "idDelegate",
"type": "uint64"
},
{
"indexed": false,
"name": "url",
"type": "string"
}
],
"name": "DelegateAdded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "idDelegate",
"type": "uint64"
},
{
"indexed": false,
"name": "url",
"type": "string"
}
],
"name": "DelegateUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "idProject",
"type": "uint64"
},
{
"indexed": false,
"name": "url",
"type": "string"
}
],
"name": "ProjectAdded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "idProject",
"type": "uint64"
},
{
"indexed": false,
"name": "url",
"type": "string"
}
],
"name": "ProjectUpdated",
"type": "event"
}
],
"evm": {
"bytecode": {
"object": "60606040526069805460ff19169055341561001957600080fd5b61520e806100286000396000f3006060604052600436106102415763ffffffff60e060020a6000350416627611c68114610246578063178e60791461027c5780631c8e8568146102a15780632101a6ad146102c857806324fea3b0146102e75780632a8ec8cc146102fa5780632ee888081461030d5780632f6b64ca1461032f57806332ce8ebc146103eb57806332f0a3b51461040957806338740291146104385780633f657a461461045057806343387983146104de57806347c5ef43146105005780634c4316c71461052f5780634eafbcd51461056357806350f8a8031461058257806352dc7dcc146105bd5780635503d9ba146105ff57806357adafb61461061257806360b1e057146106615780636293c702146106745780636ba3cc87146106935780636e802c6a146106c157806372116e921461077b578063796d5654146107cc57806379f4542e146107eb5780637e7db6e11461080a5780637f61fa931461082957806380afdea81461086b57806381ea44081461087e5780638322fff21461089d5780638b3dd749146108b05780639b3fdf4c146108c35780639d4941d8146108d6578063a1658fad146108f5578063af9f456314610958578063b12b5f761461097a578063c4d66de814610990578063c8ae070f146109af578063cc19ecf7146109c5578063ce17273c14610a11578063d4aae0c414610a60578063d639cd7314610a73578063db7c231414610adb578063e9c211e214610b27578063eba8ba0614610b49578063f6b24b1c14610c9f578063f92a79ff14610ceb578063fbfa77cf14610d3c575b600080fd5b341561025157600080fd5b61027a6001604060020a0360043516600160a060020a0360243581169060443516606435610d4f565b005b341561028757600080fd5b61028f610daa565b60405190815260200160405180910390f35b34156102ac57600080fd5b6102b4610dce565b604051901515815260200160405180910390f35b34156102d357600080fd5b6102b46001604060020a0360043516610dd7565b34156102f257600080fd5b61028f610e79565b341561030557600080fd5b61028f610e9b565b341561031857600080fd5b61027a6001604060020a0360043516602435610ea6565b341561033a57600080fd5b6103546001604060020a0360043581169060243516610fda565b6040516001604060020a0384168152600160a060020a038316602082015260606040820181815290820183818151815260200191508051906020019080838360005b838110156103ae578082015183820152602001610396565b50505050905090810190601f1680156103db5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b34156103f657600080fd5b61027a6004803560248101910135611108565b341561041457600080fd5b61041c61119c565b604051600160a060020a03909116815260200160405180910390f35b341561044357600080fd5b61027a600435151561121c565b341561045b57600080fd5b61046f6001604060020a0360043516611282565b6040518881526001604060020a038089166020830152878116604083015286811660608301528581166080830152841660a0820152600160a060020a03831660c082015260e081018260028111156104c357fe5b60ff1681526020019850505050505050505060405180910390f35b34156104e957600080fd5b61027a6001604060020a03600435166024356113ff565b341561050b57600080fd5b61027a6001604060020a0360043581169060243581169060443590606435166115e6565b341561053a57600080fd5b61027a6001604060020a0360043581169060243516600160a060020a03604435166064356115fb565b341561056e57600080fd5b6102b4600160a060020a0360043516611792565b341561058d57600080fd5b6105a16001604060020a0360043516611809565b6040516001604060020a03909116815260200160405180910390f35b34156105c857600080fd5b6105a160246004803582810192908201359181359182019101356001604060020a0360443516600160a060020a03606435166119fe565b341561060a57600080fd5b61028f611c8b565b341561061d57600080fd5b61027a6004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650611c9595505050505050565b341561066c57600080fd5b61028f611d00565b341561067f57600080fd5b61027a600160a060020a0360043516611d24565b341561069e57600080fd5b61027a6001604060020a0360043516600160a060020a0360243516604435611d85565b34156106cc57600080fd5b6105a160048035600160a060020a03169060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650505083356001604060020a03169360200135600160a060020a03169250611d96915050565b341561078657600080fd5b6105a16024600480358281019290820135918135918201910135600160a060020a036044358116906001604060020a036064358116916084359091169060a43516611ff9565b34156107d757600080fd5b61027a6001604060020a03600435166124a6565b34156107f657600080fd5b61027a600160a060020a0360043516612510565b341561081557600080fd5b6102b4600160a060020a0360043516612588565b341561083457600080fd5b6105a160246004803582810192908201359181359182019101356001604060020a0360443516600160a060020a036064351661258e565b341561087657600080fd5b61028f61260a565b341561088957600080fd5b61028f600160a060020a0360043516612610565b34156108a857600080fd5b61041c612692565b34156108bb57600080fd5b61028f612697565b34156108ce57600080fd5b61028f61269d565b34156108e157600080fd5b61027a600160a060020a03600435166126c1565b341561090057600080fd5b6102b460048035600160a060020a031690602480359190606490604435908101908301358060208082020160405190810160405280939291908181526020018383602002808284375094965061283895505050505050565b341561096357600080fd5b61027a6001604060020a0360043516602435612976565b341561098557600080fd5b61027a600435612a0b565b341561099b57600080fd5b61027a600160a060020a0360043516612a63565b34156109ba57600080fd5b61027a600435612acc565b34156109d057600080fd5b61027a600480356001604060020a039081169160248035600160a060020a031692604435808301939081013592606435908101929101359060843516612b3b565b3415610a1c57600080fd5b61027a6004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650612c4495505050505050565b3415610a6b57600080fd5b61041c612c77565b3415610a7e57600080fd5b61027a600480356001604060020a0316906044602480359081019083013580602080820201604051908101604052809392919081815260200183836020028082843750949650505092356001604060020a03169250612c86915050565b3415610ae657600080fd5b61027a600480356001604060020a039081169160248035600160a060020a031692604435808301939081013592606435908101929101359060843516612cfb565b3415610b3257600080fd5b61027a6001604060020a0360043516602435612e04565b3415610b5457600080fd5b610b686001604060020a0360043516612f2c565b60405180896002811115610b7857fe5b60ff168152600160a060020a0389811660208301526001604060020a038781166080840152861660a083015284151560c0830152831660e08201526101008282038101604083019081529160608101910189818151815260200191508051906020019080838360005b83811015610bf9578082015183820152602001610be1565b50505050905090810190601f168015610c265780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b83811015610c5c578082015183820152602001610c44565b50505050905090810190601f168015610c895780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390f35b3415610caa57600080fd5b61027a600480356001604060020a039081169160248035600160a060020a0316926044358083019390810135926064359081019291013590608435166130fb565b3415610cf657600080fd5b61041c60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061320495505050505050565b3415610d4757600080fd5b61041c6132e0565b6000600160a060020a0384161515610d6657600080fd5b610d95846020604051908101604052806000815250602060405190810160405260008082526203f48090611d96565b9050610da3818685856115fb565b5050505050565b7fd6f028ca0e8edb4a8c9757ca4fdccab25fa1e0317da1188108f7d2dee14902fb81565b60695460ff1681565b600080610de3836132f4565b90506000815460ff166002811115610df757fe5b1415610e065760009150610e73565b6002815460ff166002811115610e1857fe5b14610e1f57fe5b6001810154604060020a900460ff1615610e3c5760019150610e73565b60018101546001604060020a03161515610e595760009150610e73565b6001810154610e70906001604060020a0316610dd7565b91505b50919050565b6040516000805160206151a38339815191528152601301604051809103902081565b606554600019015b90565b606954600090819033600160a060020a039081166101009092041614610ecb57600080fd5b610ed48461333a565b91506001600383015460a060020a900460ff166002811115610ef257fe5b14610efc57600080fd5b6002820154600183018054610fc7926001604060020a03169190602080820201604051908101604052809291908181526020018280548015610f8f57602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411610f4c5790505b50505050600286810154600388015460009350839260c060020a9092046001604060020a031691600160a060020a039091169061336b565b9050610fd484828561368d565b50505050565b600080610fe5614dee565b600080610ff18761333a565b915081600101600187036001604060020a031681548110151561101057fe5b90600052602060002090600491828204019190066008029054906101000a90046001604060020a03169450611044856132f4565b90508060000160019054906101000a9004600160a060020a03169350806002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110f85780601f106110cd576101008083540402835291602001916110f8565b820191906000526020600020905b8154815290600101906020018083116110db57829003601f168201915b5050505050925050509250925092565b60006040516000805160206151a3833981519152815260130160405180910390206111533382600060405180591061113d5750595b9080825280602002602001820160405250612838565b151561115e57600080fd5b600091505b60ff821683901015610fd457611191848460ff851681811061118157fe5b9050602002013560001916612acc565b600190910190611163565b60008054600160a060020a031615156111b457600080fd5b60008054600160a060020a0316906332f0a3b590604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156111fd57600080fd5b6102c65a03f1151561120e57600080fd5b505050604051805191505090565b6040516000805160206151a3833981519152815260130160405180910390206112643382600060405180591061113d5750599080825280602002602001820160405250612838565b151561126f57600080fd5b506069805460ff19169115919091179055565b600080600080600080600080611296614e00565b61129f8a61333a565b6101006040519081016040529081600082015481526020016001820180548060200260200160405190810160405280929190818152602001828054801561133757602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116112f45790505b50505091835250506002828101546001604060020a038082166020850152604060020a820481166040850152608060020a82048116606085015260c060020a9091041660808301526003830154600160a060020a03811660a084015260c09092019160a060020a900460ff16908111156113ad57fe5b60028111156113b857fe5b90525090508051985080604001519750806020015151965080606001519550806080015194508060a0015193508060c0015192508060e00151915050919395975091939597565b600080600061140d85611809565b94506114188561333a565b92506000600384015460a060020a900460ff16600281111561143657fe5b1461144057600080fd5b6002830154611457906001604060020a0316613761565b600283015460018401805461151f926001604060020a031691906020808202016040519081016040528092919081815260200182805480156114ea57602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116114a75790505b505050506002870154600388015460009250829160c060020a90046001604060020a031690600160a060020a0316600161336b565b915061152c85838661368d565b6002830154611543906001604060020a03166132f4565b60695481546003860154929350600160a060020a036101009283900481169363a5426df1936001604060020a0388169304821691168860405160e060020a63ffffffff87160281526004810194909452600160a060020a039283166024850152911660448301526064820152608401600060405180830381600087803b15156115cb57600080fd5b6102c65a03f115156115dc57600080fd5b5050505050505050565b6115ef84613761565b610fd4848484846137b8565b600080806001604060020a03871681901161161557600080fd5b6000841161162257600080fd5b600160a060020a038516151561163757600080fd5b611640876132f4565b92506000835460ff16600281111561165457fe5b1461165e57600080fd5b606954600160a060020a03808716916323b872dd9133916101009004168760006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156116d457600080fd5b6102c65a03f115156116e557600080fd5b5050506040518051905015156116fa57600080fd5b61172b87600060405180591061170d5750595b908082528060200260200182016040525060008060008a600061336b565b91506117368261333a565b80548501815590506001604060020a03821660007faf6151f5085accf2d57e1e7bf7601d3b3982e0de7e9a90f032f8554de9c104f68660405190815260200160405180910390a3611789878386896137b8565b50505050505050565b606954600090819060ff16806117af5750600160a060020a038316155b156117bd5760019150610e73565b600160a060020a03831660009081526068602052604090205460ff16156117e75760019150610e73565b6117f083612610565b60009081526067602052604090205460ff169392505050565b6000806000806118188561333a565b92506000600384015460a060020a900460ff16600281111561183657fe5b14611843578493506119f6565b60028301546000604060020a9091046001604060020a031611801561188257506002830154608060020a90046001604060020a0316611880613e0f565b115b156119c557600283015460018401805461194e926001604060020a0316919060208082020160405190810160405280929190818152602001828054801561191a57602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a0316815260200190600801906020826007010492830192600103820291508084116118d75790505b505050506002870154600388015460009250829160c060020a90046001604060020a031690600160a060020a03168261336b565b60028401549092506119a590604060020a90046001604060020a031660006040518059106119795750595b9080825280602002602001820160405250600386015460009081908790600160a060020a03168261336b565b90506119b68582856000015461368d565b8094506119c28561333a565b92505b6119ce85613e13565b90506001604060020a03808216908616146119f2576119f28582856000015461368d565b8093505b505050919050565b6000611a0982611792565b1515611a1457600080fd5b5060648054908160018101611a298382614e4c565b91600052602060002090600402016000610100604051908101604052806001815260200133600160a060020a03168152602001876001604060020a0316815260200160006001604060020a0316815260200160001515815260200186600160a060020a031681526020018b8b8080601f0160208091040260200160405190810160405281815292919060208401838380828437820191505050505050815260200189898080601f016020809104026020016040519081016040528181529291906020840183838082843750505092909352509193925083915050518154829060ff19166001836002811115611b1a57fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181546001604060020a039190911660a860020a026000805160206151c3833981519152909116178155606082015160018201805467ffffffffffffffff19166001604060020a03929092169190911790556080820151600182018054911515604060020a0268ff00000000000000001990921691909117905560a08201518160010160096101000a815481600160a060020a030219169083600160a060020a0316021790555060c082015181600201908051611c0b929160200190614e78565b5060e082015181600301908051611c26929160200190614e78565b50505050806001604060020a03167fd921f0ff8d5f67ca22b52c5b4be3463a8cabd9d95c28a02dd7c86f9deb3329be86866040516020808252810182905280604081018484808284378201915050935050505060405180910390a29695505050505050565b6064546000190190565b600080805b8351831015610fd4576001604060020a03848481518110611cb757fe5b90602001906020020151169150604060020a848481518110611cd557fe5b90602001906020020151811515611ce857fe5b049050611cf582826113ff565b600190920191611c9a565b7fddbcfd564f642ab5627cf68b9b7d374fb4f8a36e941a75d89c87998cef03bd6181565b6040516000805160206151a383398151915281526013016040518091039020611d4c82613edb565b611d57338383612838565b1515611d6257600080fd5b5050600160a060020a03166000908152606860205260409020805460ff19169055565b611d9183338484610d4f565b505050565b6000611da182611792565b1515611dac57600080fd5b5060648054908160018101611dc18382614e4c565b916000526020600020906004020160006101006040519081016040528060008152600160a060020a03808c1660208301526001604060020a03891660408301526000606083018190526080830152871660a082015260c081018a905260e00188905291905081518154829060ff19166001836002811115611e3e57fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181546001604060020a039190911660a860020a026000805160206151c3833981519152909116178155606082015160018201805467ffffffffffffffff19166001604060020a03929092169190911790556080820151600182018054911515604060020a0268ff00000000000000001990921691909117905560a08201518160010160096101000a815481600160a060020a030219169083600160a060020a0316021790555060c082015181600201908051611f2f929160200190614e78565b5060e082015181600301908051611f4a929160200190614e78565b50505050806001604060020a03167fad9c62a4382fd0ddbc4a0cf6c2bc7df75b0b8beb786ff59014f39daaea7f232f8560405160208082528190810183818151815260200191508051906020019080838360005b83811015611fb6578082015183820152602001611f9e565b50505050905090810190601f168015611fe35780820380516001836020036101000a031916815260200191505b509250505060405180910390a295945050505050565b60008061200583611792565b151561201057600080fd5b6001604060020a0385161561222d57612028856132f4565b9050601461221a826101006040519081016040528154909190829060ff16600281111561205157fe5b600281111561205c57fe5b81528154610100808204600160a060020a0390811660208086019190915260a860020a9093046001604060020a039081166040808701919091526001808801549283166060880152604060020a830460ff1615156080880152690100000000000000000090920490921660a08601526002808701805460c090970196909592811615909402600019019093169290920491601f83018190048102019051908101604052809291908181526020018280546001816001161561010002031660029004801561216a5780601f1061213f5761010080835404028352916020019161216a565b820191906000526020600020905b81548152906001019060200180831161214d57829003601f168201915b50505050508152602001600382018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561220c5780601f106121e15761010080835404028352916020019161220c565b820191906000526020600020905b8154815290600101906020018083116121ef57829003601f168201915b505050505081525050613efb565b6001604060020a03161061222d57600080fd5b60648054925082600181016122428382614e4c565b9160005260206000209060040201600061010060405190810160405280600281526020018a600160a060020a03168152602001886001604060020a03168152602001896001604060020a0316815260200160001515815260200187600160a060020a031681526020018e8e8080601f016020809104026020016040519081016040528181529291906020840183838082843782019150505050505081526020018c8c8080601f016020809104026020016040519081016040528181529291906020840183838082843750505092909352509193925083915050518154829060ff1916600183600281111561233257fe5b021790555060208201518154600160a060020a03919091166101000261010060a860020a0319909116178155604082015181546001604060020a039190911660a860020a026000805160206151c3833981519152909116178155606082015160018201805467ffffffffffffffff19166001604060020a03929092169190911790556080820151600182018054911515604060020a0268ff00000000000000001990921691909117905560a08201518160010160096101000a815481600160a060020a030219169083600160a060020a0316021790555060c082015181600201908051612423929160200190614e78565b5060e08201518160030190805161243e929160200190614e78565b50505050816001604060020a03167f9958fc92731727637b02f1ac1e6caf2814442c27e1d962f0c477cd14280f586d89896040516020808252810182905280604081018484808284378201915050935050505060405180910390a25098975050505050505050565b60006124b1826132f4565b90506124bc82613761565b60018101805468ff00000000000000001916604060020a1790556001604060020a0382167f74acb192d39829b88a66ad5363afa9120c5a306a458287a870351ae34a04d34660405160405180910390a25050565b6040516000805160206151a3833981519152815260130160405180910390206125583382600060405180591061113d5750599080825280602002602001820160405250612838565b151561256357600080fd5b50600160a060020a03166000908152606860205260409020805460ff19166001179055565b50600190565b60006125ff3388888080601f016020809104026020016040519081016040528181529291906020840183838082843782019150505050505087878080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050508686611d96565b979650505050505050565b60015481565b600061261a614dee565b823b604051915080825280600060208401863c50806040518082805190602001908083835b6020831061265e5780518252601f19909201916020918201910161263f565b6001836020036101000a03801982511681845116179092525050509190910192506040915050518091039020915050919050565b600081565b60035490565b7f34f01c17e9be6ddbf2c61f37b5b1fb9f1a090a975006581ad19bda1c4d38287181565b6000806126cd83612588565b15156126d857600080fd5b6126e061119c565b91506126eb82613f6f565b15156126f657600080fd5b600160a060020a03831615156127485781600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f19350505050151561274357600080fd5b611d91565b82600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561279f57600080fd5b6102c65a03f115156127b057600080fd5b5050506040518051915050600160a060020a03831663a9059cbb838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561281857600080fd5b6102c65a03f1151561282957600080fd5b50505060405180515050505050565b6000612842614dee565b6000808451111561285b57835160200290508391508082525b600054600160a060020a0316158061296c575060008054600160a060020a03169063fdef91069088903090899087906040516020015260405160e060020a63ffffffff8716028152600160a060020a0380861660048301908152908516602483015260448201849052608060648301908152909160840183818151815260200191508051906020019080838360005b838110156129025780820151838201526020016128ea565b50505050905090810190601f16801561292f5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b151561295057600080fd5b6102c65a03f1151561296157600080fd5b505050604051805190505b9695505050505050565b60008061298284611809565b935061298d8461333a565b600281015490925060c060020a90046001604060020a031615156129b057600080fd5b6000600383015460a060020a900460ff1660028111156129cc57fe5b146129d657600080fd5b60028201546129ed906001604060020a0316613761565b6002820154610fc79060c060020a90046001604060020a0316613e13565b6040516000805160206151a383398151915281526013016040518091039020612a3382613f95565b612a3e338383612838565b1515612a4957600080fd5b50506000908152606760205260409020805460ff19169055565b60035415612a7057600080fd5b600160a060020a0381161515612a8557600080fd5b612a8d613fa6565b6069805461010060a860020a031916610100600160a060020a038416021790556001612aba606482614e4c565b506001612ac8606582614ef2565b5050565b6040516000805160206151a383398151915281526013016040518091039020612b143382600060405180591061113d5750599080825280602002602001820160405250612838565b1515612b1f57600080fd5b506000908152606760205260409020805460ff19166001179055565b6000612b46886132f4565b805490915033600160a060020a039081166101009092041614612b6857600080fd5b6001815460ff166002811115612b7a57fe5b14612b8457600080fd5b805461010060a860020a031916610100600160a060020a03891602178155612bb0600282018787614f1e565b50612bbf600382018585614f1e565b5080546001604060020a0380841660a860020a026000805160206151c383398151915290921691909117825588167f6586deed9fa035704e9886588d904801e7e86d1ebd926905fa03a0018531b2fd85856040516020808252810182905280604081018484808284378201915050935050505060405180910390a25050505050505050565b60005b8151811015612ac857612c6e828281518110612c5f57fe5b90602001906020020151611809565b50600101612c47565b600054600160a060020a031681565b600080805b8451831015612cf3576001604060020a03858481518110612ca857fe5b90602001906020020151169150604060020a858481518110612cc657fe5b90602001906020020151811515612cd957fe5b049050612ce8868383876115e6565b600190920191612c8b565b505050505050565b6000612d06886132f4565b805490915033600160a060020a039081166101009092041614612d2857600080fd5b6000815460ff166002811115612d3a57fe5b14612d4457600080fd5b805461010060a860020a031916610100600160a060020a03891602178155612d70600282018787614f1e565b50612d7f600382018585614f1e565b5080546001604060020a0380841660a860020a026000805160206151c383398151915290921691909117825588167f4b2f87168338ea08f27c7f7b2dfe4e61feb620ffe9a6a6a18afeaf94546075bf85856040516020808252810182905280604081018484808284378201915050935050505060405180910390a25050505050505050565b606954600090819033600160a060020a039081166101009092041614612e2957600080fd5b612e328461333a565b91506001600383015460a060020a900460ff166002811115612e5057fe5b14612e5a57600080fd5b6002820154600183018054612f21926001604060020a03169190602080820201604051908101604052809291908181526020018280548015612eed57602002820191906000526020600020906000905b82829054906101000a90046001604060020a03166001604060020a031681526020019060080190602082600701049283019260010382029150808411612eaa5790505b505050506002860154600387015460009250829160c060020a90046001604060020a031690600160a060020a03168261336b565b9050610fc781611809565b600080612f37614dee565b612f3f614dee565b6000806000806000612f508a6132f4565b80546002808301805460ff84169d5061010093849004600160a060020a03169c5093945092600181161590920260001901909116046020601f820181900481020160405190810160405280929190818152602001828054600181600116156101000203166002900480156130055780601f10612fda57610100808354040283529160200191613005565b820191906000526020600020905b815481529060010190602001808311612fe857829003601f168201915b50505050509650806003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156130a45780601f10613079576101008083540402835291602001916130a4565b820191906000526020600020905b81548152906001019060200180831161308757829003601f168201