@hybridx-exchange/orderbook-core
Version:
🎛 Core contracts for the HybridX protocol
204 lines • 418 kB
JSON
{
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "_factory",
"type": "address"
},
{
"internalType": "address",
"name": "_WETH",
"type": "address"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "pair",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "baseToken",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "quoteToken",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "orderBook",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "OrderBookCreated",
"type": "event"
},
{
"constant": true,
"inputs": [],
"name": "WETH",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "allOrderBookLength",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "allOrderBooks",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "baseToken",
"type": "address"
},
{
"internalType": "address",
"name": "quoteToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "priceStep",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "minAmount",
"type": "uint256"
}
],
"name": "createOrderBook",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getCodeHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "getOrderBook",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "pairFactory",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
}
],
"evm": {
"bytecode": {
"linkReferences": {},
"object": "608060405234801561001057600080fd5b506040516160173803806160178339818101604052604081101561003357600080fd5b508051602090910151600380546001600160a01b039283166001600160a01b03199182161790915560028054929093169116179055615fa0806100776000396000f3fe608060405234801561001057600080fd5b506004361061006d5760003560e01c8063203d39ff146100725780632c67be04146100bc578063316cc2dd146100fa578063472c66701461011457806383dd41c614610131578063ad5c464814610139578063e14f870d14610141575b600080fd5b6100a06004803603604081101561008857600080fd5b506001600160a01b0381358116916020013516610149565b604080516001600160a01b039092168252519081900360200190f35b6100f8600480360360808110156100d257600080fd5b506001600160a01b0381358116916020810135909116906040810135906060013561016c565b005b61010261058f565b60408051918252519081900360200190f35b6100a06004803603602081101561012a57600080fd5b5035610595565b6101026105bc565b6100a06105ee565b6100a06105fd565b60006020818152928152604080822090935290815220546001600160a01b031681565b826001600160a01b0316846001600160a01b031614156101cd576040805162461bcd60e51b81526020600482015260176024820152764f463a204944454e544943414c5f41444452455353455360481b604482015290519081900360640190fd5b600080846001600160a01b0316866001600160a01b0316106101f05784866101f3565b85855b90925090506001600160a01b038216610246576040805162461bcd60e51b815260206004820152601060248201526f4f463a205a45524f5f4144445245535360801b604482015290519081900360640190fd5b6001600160a01b03828116600090815260208181526040808320858516845290915290205416156102b6576040805162461bcd60e51b81526020600482015260156024820152744f463a204f524445525f424f4f4b5f45584953545360581b604482015290519081900360640190fd5b6002546040805163e6a4390560e01b81526001600160a01b03858116600483015284811660248301529151600093929092169163e6a4390591604480820192602092909190829003018186803b15801561030f57600080fd5b505afa158015610323573d6000803e3d6000fd5b505050506040513d602081101561033957600080fd5b505190506001600160a01b038116610394576040805162461bcd60e51b81526020600482015260196024820152784f463a20544f4b454e5f504149525f4e4f545f45584953545360381b604482015290519081900360640190fd5b6060604051806020016103a69061060c565b6020820181038252601f19601f8201166040525090506000848460405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b8152601401925050506040516020818303038152906040528051906020012090506000818351602085016000f5604080516314d6c7d760e31b81526001600160a01b0387811660048301528d811660248301528c81166044830152606482018c9052608482018b905291519293509083169163a6b63eb89160a48082019260009290919082900301818387803b15801561049157600080fd5b505af11580156104a5573d6000803e3d6000fd5b5050506001600160a01b038088166000818152602081815260408083208b86168452825280832083835281842094845293825280832080548689166001600160a01b0319918216811790925585548116821790955560018054808201825594527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69093018054909416831790935582518985168152908101919091528082018c9052606081018b905290518c83169350918d16917fff812ff6839ab5e7ba32b4568a74ecad57d67a429ced4ff78aa7522f705f9db59181900360800190a350505050505050505050565b60015490565b600181815481106105a257fe5b6000918252602090912001546001600160a01b0316905081565b6000604051806020016105ce9061060c565b6020820181038252601f19601f8201166040525080519060200120905090565b6003546001600160a01b031681565b6002546001600160a01b031681565b6159528061061a8339019056fe60806040526001601255600580546001600160a01b031916331790556159288061002a6000396000f3fe60806040526004361061017e5760003560e01c8063053b4b9d1461018057806306fdde03146102635780630902f1ac146102ed57806319eda4bc14610328578063217a4b7014610352578063346970f91461038357806338bde791146103fa578063573dd9db1461042157806358f858801461049b5780636069f080146104b057806363c69f08146104da5780637de81d8b1461050d578063856652e9146105d657806388d519c41461060f578063950f59b21461062457806398d5fdca146106675780639b2cb5d81461067c578063a5cdc8fc14610691578063a6b63eb8146106bb578063a8aa1b311461070a578063bc9113f01461071f578063c2ffea8f14610734578063c45a01551461078b578063c55dae63146107a0578063cb160866146107b5578063db7b373e146107f0578063deb65ac314610805578063e52fa98b1461082f578063e68cc59714610865578063f12dbb9f1461089e578063f1564c0b146108e1578063f1a2e8491461090b578063f361df0814610920575b005b34801561018c57600080fd5b506101c3600480360360608110156101a357600080fd5b506001600160a01b03813581169160208101359160409091013516610935565b604051808481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561020d5781810151838201526020016101f5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561024c578181015183820152602001610234565b505050509050019550505050505060405180910390f35b34801561026f57600080fd5b50610278610bbe565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b257818101518382015260200161029a565b50505050905090810190601f1680156102df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102f957600080fd5b50610302610beb565b604080516001600160701b03938416815291909216602082015281519081900390910190f35b34801561033457600080fd5b5061017e6004803603602081101561034b57600080fd5b5035610c1c565b34801561035e57600080fd5b50610367610d1a565b604080516001600160a01b039092168252519081900360200190f35b34801561038f57600080fd5b506103ad600480360360208110156103a657600080fd5b5035610d29565b604080516001600160a01b03998a168152979098166020880152868801959095526060860193909352608085019190915260a084015260c083015260e08201529051908190036101000190f35b34801561040657600080fd5b5061040f610d79565b60408051918252519081900360200190f35b34801561042d57600080fd5b5061044b6004803603602081101561044457600080fd5b5035610d7f565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561048757818101518382015260200161046f565b505050509050019250505060405180910390f35b3480156104a757600080fd5b5061040f610f1c565b3480156104bc57600080fd5b5061017e600480360360208110156104d357600080fd5b5035610f22565b3480156104e657600080fd5b5061044b600480360360208110156104fd57600080fd5b50356001600160a01b0316611020565b34801561051957600080fd5b5061053d6004803603604081101561053057600080fd5b508035906020013561108c565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610581578181015183820152602001610569565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156105c05781810151838201526020016105a8565b5050505090500194505050505060405180910390f35b3480156105e257600080fd5b5061040f600480360360408110156105f957600080fd5b506001600160a01b0381351690602001356111db565b34801561061b57600080fd5b5061040f611209565b34801561063057600080fd5b5061040f6004803603606081101561064757600080fd5b506001600160a01b0381358116916020810135916040909101351661120f565b34801561067357600080fd5b5061040f611483565b34801561068857600080fd5b5061040f6114fc565b34801561069d57600080fd5b5061017e600480360360208110156106b457600080fd5b5035611502565b3480156106c757600080fd5b5061017e600480360360a08110156106de57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135611770565b34801561071657600080fd5b50610367611a95565b34801561072b57600080fd5b5061040f611aa4565b34801561074057600080fd5b5061076d6004803603604081101561075757600080fd5b506001600160a01b038135169060200135611b1d565b60408051938452602084019290925282820152519081900360600190f35b34801561079757600080fd5b50610367611c6b565b3480156107ac57600080fd5b50610367611c7a565b3480156107c157600080fd5b5061017e600480360360408110156107d857600080fd5b506001600160a01b0381358116916020013516611c89565b3480156107fc57600080fd5b5061040f611e97565b34801561081157600080fd5b5061017e6004803603602081101561082857600080fd5b5035611e9d565b34801561083b57600080fd5b5061053d6004803603604081101561085257600080fd5b508035906020013563ffffffff16611fc1565b34801561087157600080fd5b5061076d6004803603604081101561088857600080fd5b506001600160a01b0381351690602001356120ce565b3480156108aa57600080fd5b5061040f600480360360608110156108c157600080fd5b506001600160a01b03813581169160208101359160409091013516612215565b3480156108ed57600080fd5b5061017e6004803603602081101561090457600080fd5b5035612476565b34801561091757600080fd5b5061040f61259a565b34801561092c57600080fd5b5061040f6125a0565b600060608060125460011461097a576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556006546001600160a01b031633146109cf576040805162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21039b2b73232b960911b604482015290519081900360640190fd5b60408051600280825260608083018452926020830190803883395050600654600a54600b54939450610a12936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110610a3757fe5b6020026020010183600181518110610a4b57fe5b6020908102919091010191909152526000610a6588612715565b90506000610a728261273d565b9050600080610a82836000612762565b915091505b8115610b2f576000610ac7858c88600081518110610aa157fe5b602002602001015189600181518110610ab657fe5b602002602001015187600954612784565b5050505090508060001415610adc5750610b2f565b6000610aed8b878487878e8e6128cb565b909b509950909150610b0790508c8263ffffffff61295c16565b9b5081811415610b18575050610b2f565b610b2285856129ac565b9094509250610a87915050565b610b376129b9565b8915610ba85760018414610b7d57610b788a86600081518110610b5657fe5b602002602001015187600181518110610b6b57fe5b6020026020010151612aaf565b610ba3565b610ba38a86600181518110610b8e57fe5b602002602001015187600081518110610b6b57fe5b880197505b5050505050600160128190555093509350939050565b6040518060400160405280601181526020017048796272696458204f72646572426f6f6b60781b81525081565b600654600a54600b546000928392610c13926001600160a01b039283169291821691166125a6565b90939092509050565b601254600114610c5c576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610c76906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610cc7576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6064811115610d10576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600f556001601255565b600b546001600160a01b031681565b601060205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979590961695939492939192909188565b600c5481565b60408051600880825261012082019092526060916020820161010080388339019050509050610dac615859565b50600082815260106020908152604080832081516101008101835281546001600160a01b039081168083526001840154909116948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e0820152835190928491610e2f57fe5b60200260200101818152505080602001516001600160a01b031682600181518110610e5657fe5b602002602001018181525050806040015182600281518110610e7457fe5b602002602001018181525050806060015182600381518110610e9257fe5b602002602001018181525050806080015182600481518110610eb057fe5b6020026020010181815250508060a0015182600581518110610ece57fe5b6020026020010181815250508060c0015182600681518110610eec57fe5b6020026020010181815250508060e0015182600781518110610f0a57fe5b60200260200101818152505050919050565b600e5481565b601254600114610f62576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554610f7c906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614610fcd576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b601e811115611016576040805162461bcd60e51b815260206004820152601060248201526f496e76616c696420466565205261746560801b604482015290519081900360640190fd5b600e556001601255565b6001600160a01b03811660009081526011602090815260409182902080548351818402810184019094528084526060939283018282801561108057602002820191906000526020600020905b81548152602001906001019080831161106c575b50505050509050919050565b606080600061109c856000612c9b565b9050600060018614156110d7575b81158015906110b95750848210155b156110d2576110c88683612c9b565b91506001016110aa565b611109565b6002861415611109575b81158015906110f05750848211155b15611109576110ff8683612c9b565b91506001016110e1565b80156111d25780604051908082528060200260200182016040528015611139578160200160208202803883390190505b50935080604051908082528060200260200182016040528015611166578160200160208202803883390190505b509250611174866000612c9b565b915060005b818110156111d0578285828151811061118e57fe5b6020026020010181815250506111a48784612cb8565b8482815181106111b057fe5b6020026020010181815250506111c68784612c9b565b9250600101611179565b505b50509250929050565b601160205281600052604060002081815481106111f457fe5b90600052602060002001600091509150505481565b60075481565b6000601254600114611251576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255821580159061126e5750600754838161126b57fe5b06155b6112af576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166112c481612d32565b6001600160a01b031614611317576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000611321612ddb565b90506000600d54821161133557600061133b565b600d5482035b9050600061134e60085487600954612e57565b905080821015611396576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b038a811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156113e457600080fd5b505af11580156113f8573d6000803e3d6000fd5b505050506000611409838888612e85565b9050801561146a57611420888785848b600161327e565b60408051858152602081018490528082018a90526001606082015290519196506001600160a01b0380891692908b16916000805160206158b1833981519152919081900360800190a35b6114726129b9565b505060016012555090949350505050565b600654600a54600b54600092839283926114ac926001600160a01b0390811692811691166125a6565b91509150816001600160701b03166000146114f757816001600160701b03166114ec600954600a0a836001600160701b03166134cf90919063ffffffff16565b816114f357fe5b0492505b505090565b60085481565b601254600114611542576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125561154f615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b039081168083526001840154909116938201939093526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152331461160a576040805162461bcd60e51b815260206004820152600d60248201526c13dddb995c88125b9d985b1a59609a1b604482015290519081900360640190fd5b61161381613532565b600060018260c001511461163257600a546001600160a01b031661163f565b600b546001600160a01b03165b90506116548183602001518460a001516136ec565b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d60208110156116c857600080fd5b505160c0840151909150600114156116e457600d8190556116ea565b600c8190555b82602001516001600160a01b031683600001516001600160a01b03167fd32766082eb3d1ee39881604cae4ea25b61931060c8fbc7d5f05556040053b5785608001518660a0015187606001518860c001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a3505060016012555050565b6005546001600160a01b031633146117bb576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b6001821015611806576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6001811015611851576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b600080866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561188d57600080fd5b505afa1580156118a1573d6000803e3d6000fd5b505050506040513d60208110156118b757600080fd5b50516040805163d21220a760e01b815290516001600160a01b038a169163d21220a7916004808301926020929190829003018186803b1580156118f957600080fd5b505afa15801561190d573d6000803e3d6000fd5b505050506040513d602081101561192357600080fd5b505190925090506001600160a01b038083169087161480156119565750846001600160a01b0316816001600160a01b0316145b8061198e5750856001600160a01b0316816001600160a01b031614801561198e5750846001600160a01b0316826001600160a01b0316145b6119d4576040805162461bcd60e51b8152602060048201526012602482015271151bdad95b8814185a5c88125b9d985b1a5960721b604482015290519081900360640190fd5b600680546001600160a01b03808a166001600160a01b031992831617909255600a80548984169083168117909155600b80549389169390921692909217905560078590556040805163313ce56760e01b8152905163313ce56791600481810192602092909190829003018186803b158015611a4e57600080fd5b505afa158015611a62573d6000803e3d6000fd5b505050506040513d6020811015611a7857600080fd5b505160ff1660095550506008555050601e600e5550506032600f55565b6006546001600160a01b031681565b600b546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b158015611ae957600080fd5b505afa158015611afd573d6000803e3d6000fd5b505050506040513d6020811015611b1357600080fd5b505160ff16919050565b600654600a54600b546000928392839283928392611b4b926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b031691506000611b6c88612715565b90506000611b798261273d565b600097509050878780611b8c8482612762565b915091505b8115611c2f576000611ba986858a8a87600954612784565b909d509b50919250505080611bbe5750611c2f565b6000806000611bd8898588600954600e54600f548b6137f1565b91945092509050611bef828263ffffffff61295c16565b909d019c611c03878463ffffffff61295c16565b965083831415611c165750505050611c2f565b611c208887612762565b9096509450611b919350505050565b8215611c5d5760018514611c4d57611c48838888612aaf565b611c58565b611c58838789612aaf565b8a0199505b505050505050509250925092565b6005546001600160a01b031681565b600a546001600160a01b031681565b601254600114611cc9576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ce3906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611d34576040805162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b604482015290519081900360640190fd5b6001600160a01b038216611d8757478015611d81576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611d7f573d6000803e3d6000fd5b505b50611e8e565b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015611dd157600080fd5b505afa158015611de5573d6000803e3d6000fd5b505050506040513d6020811015611dfb57600080fd5b5051600a5490915081906001600160a01b0385811691161415611e40576000611e246002613983565b9050808311611e34576000611e38565b8083035b915050611e7a565b600b546001600160a01b0385811691161415611e7a576000611e626001613983565b9050808311611e72576000611e76565b8083035b9150505b8015611e8b57611e8b8484836139bf565b50505b50506001601255565b60095481565b601254600114611edd576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b6000601255600554611ef7906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614611f6c57611f196001613b47565b158015611f2d5750611f2b6002613b47565b155b611f6c576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015611fb7576040805162461bcd60e51b8152602060048201526012602482015271141c9a58d94814dd195c08125b9d985b1a5960721b604482015290519081900360640190fd5b6007556001601255565b6060806000611fcf85613b47565b90508363ffffffff168111611fe45780611fec565b8363ffffffff165b905080604051908082528060200260200182016040528015612018578160200160208202803883390190505b50925080604051908082528060200260200182016040528015612045578160200160208202803883390190505b5091506000612055866000612c9b565b905060005b811580159061206e5750828163ffffffff16105b156111d05781858263ffffffff168151811061208657fe5b60200260200101818152505061209c8783612cb8565b848263ffffffff16815181106120ae57fe5b6020026020010181815250506120c48783612c9b565b915060010161205a565b600654600a54600b5460009283928392839283926120fc926001600160a01b039283169291821691166125a6565b6001600160701b031691506001600160701b03169150600061211d88612715565b9050600061212a8261273d565b60009750905087878061213d8582612762565b915091505b81156121f157600061215a85858a8a87600954613b59565b909d509b5091925050508061216f57506121f1565b6000806000612189888588600954600e54600f548b613c97565b919450925090506121a183600163ffffffff613dc816565b909d019c6121c56121b8838363ffffffff61295c16565b889063ffffffff61295c16565b9650838214156121d857505050506121f1565b6121e28987612762565b90965094506121429350505050565b8215611c5d576001841461220a57611c48838888613e17565b611c58838789613e17565b6000601254600114612257576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b600060125582158015906122745750600754838161227157fe5b06155b6122b5576040805162461bcd60e51b815260206004820152600d60248201526c141c9a58d948125b9d985b1a59609a1b604482015290519081900360640190fd5b6005546001600160a01b03166122ca81612d32565b6001600160a01b03161461231d576040805162461bcd60e51b815260206004820152601560248201527413dc99195c909bdbdac81d5b98dbdb9b9958dd1959605a1b604482015290519081900360640190fd5b6000612327613f1d565b90506000600c54821161233b576000612341565b600c5482035b905060085481101561238b576040805162461bcd60e51b815260206004820152600e60248201526d105b5bdd5b9d08125b9d985b1a5960921b604482015290519081900360640190fd5b6006546040805163bc25cf7760e01b81526001600160a01b0389811660048301529151919092169163bc25cf7791602480830192600092919082900301818387803b1580156123d957600080fd5b505af11580156123ed573d6000803e3d6000fd5b5050505060006123fe828787613f68565b9050801561245f57612415878684848a600261327e565b60408051848152602081018490528082018990526002606082015290519195506001600160a01b0380881692908a16916000805160206158b1833981519152919081900360800190a35b6124676129b9565b50506001601255509392505050565b6012546001146124b6576040805162461bcd60e51b81526020600482015260066024820152651313d0d2d15160d21b604482015290519081900360640190fd5b60006012556005546124d0906001600160a01b0316612bc0565b6001600160a01b0316336001600160a01b031614612545576124f26001613b47565b15801561250657506125046002613b47565b155b612545576040805162461bcd60e51b815260206004820152600b60248201526a13dc99195c88115e1a5cdd60aa1b604482015290519081900360640190fd5b6001811015612590576040805162461bcd60e51b8152602060048201526012602482015271135a5b88105b5bdd5b9d08125b9d985b1a5960721b604482015290519081900360640190fd5b6008556001601255565b600d5481565b600f5481565b600080826001600160a01b0316846001600160a01b03161415612606576040805162461bcd60e51b81526020600482015260136024820152724944454e544943414c5f41444452455353455360681b604482015290519081900360640190fd5b6000836001600160a01b0316856001600160a01b0316106126275783612629565b845b90506001600160a01b038116612675576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156126b157600080fd5b505afa1580156126c5573d6000803e3d6000fd5b505050506040513d60608110156126db57600080fd5b50805160209091015190925090506001600160a01b0387811690841614612703578082612706565b81815b90999098509650505050505050565b600b546000906001600160a01b03838116911614612734576002612737565b60015b92915050565b600081600114156127505750600261275d565b816002141561275d575060015b919050565b60008061276f8484612c9b565b915061277b8483612cb8565b90509250929050565b600080600080600060018b14156128205760006127a38a8a8a8a61430a565b905060006127b98a6107cd63ffffffff6134cf16565b90508082116127c95760006127dd565b6127dd8183036107ca63ffffffff61435616565b94508b85116127ec57846127ee565b8b5b9450841561280657612801858b8d612aaf565b612809565b60005b858d039750955050508389039150508682016128bd565b60028b14156128b45760006128378a8a8a8a614369565b9050600061284d8b6107cd63ffffffff6134cf16565b905080821161285d576000612871565b6128718183036107ca63ffffffff61435616565b95508b86116128805785612882565b8b5b9550851561289a57612895868c8c612aaf565b61289d565b60005b868d039750945050508884019150508187036128bd565b50889350879050865b965096509650965096915050565b6000806060806000806128e08c8c8c8c6143a7565b9399509650919450925090506128f683886143f2565b925061290284896144ae565b9350612914828263ffffffff61295c16565b9450600060018d1461293157600b546001600160a01b031661293e565b600a546001600160a01b03165b905061294b818f886139bf565b505050975097509750979350505050565b80820382811115612737576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008061276f848461457d565b600a54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a0457600080fd5b505afa158015612a18573d6000803e3d6000fd5b505050506040513d6020811015612a2e57600080fd5b5051600c55600b54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612a7e57600080fd5b505afa158015612a92573d6000803e3d6000fd5b505050506040513d6020811015612aa857600080fd5b5051600d55565b6000808411612b01576040805162461bcd60e51b8152602060048201526019602482015278125394d551919250d251539517d25394155517d05353d55395603a1b604482015290519081900360640190fd5b600083118015612b115750600082115b612b5b576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000612b6f856103e563ffffffff6134cf16565b90506000612b83828563ffffffff6134cf16565b90506000612ba983612b9d886103e863ffffffff6134cf16565b9063ffffffff613dc816565b9050808281612bb457fe5b04979650505050505050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612bfb57600080fd5b505afa158015612c0f573d6000803e3d6000fd5b505050506040513d6020811015612c2557600080fd5b5051604080516303e1469160e61b815290516001600160a01b039092169163f851a44091600480820192602092909190829003018186803b158015612c6957600080fd5b505afa158015612c7d573d6000803e3d6000fd5b505050506040513d6020811015612c9357600080fd5b505192915050565b600091825260036020908152604080842092845291905290205490565b600082815260016020908152604080832084845282528083205485845260028352818420858552909252822054815b81811015612d29576000868152602081815260408083208884528252808320848452825280832054835260109091529020600501549390930192600101612ce7565b50505092915050565b6000816001600160a01b031663e14f870d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d6d57600080fd5b505afa158015612d81573d6000803e3d6000fd5b505050506040513d6020811015612d9757600080fd5b50516040805163def0d2cb60e01b815290516001600160a01b039092169163def0d2cb91600480820192602092909190829003018186803b158015612c6957600080fd5b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b505afa158015612e3a573d6000803e3d6000fd5b505050506040513d6020811015612e5057600080fd5b5051919050565b6000612e7d600a83900a612e71868663ffffffff6134cf16565b9063ffffffff61435616565b949350505050565b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450612ecf936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110612ef457fe5b6020026020010183600181518110612f0857fe5b602002602001018281525082815250505080600081518110612f2657fe5b602002602001015181600181518110612f3b57fe5b602002602001015182600281518110612f5057fe5b6020026020010183600381518110612f6457fe5b602002602001018281525082815250505060008082600081518110612f8557fe5b6020026020010151118015612fae5750600082600181518110612fa457fe5b6020026020010151115b905060008060008895506000612fc660026000612c9b565b90505b8015801590612fd85750888111155b15613100578685156130635761301d60018989600081518110612ff757fe5b60200260200101518a60018151811061300c57fe5b602002602001015186600954612784565b8b60028151811061302a57fe5b602002602001018c60038151811061303e57fe5b6020908102919091010191909152529096509450905080613063576000975050613100565b6000613070600284612cb8565b905060008060006060806130876001888a896143a7565b9398509196509450925090506130a3848463ffffffff61295c16565b600b549901986130bd906001600160a01b031683836145c5565b868514156130d55760009d5050505050505050613100565b6130e58e8663ffffffff61295c16565b9d506130f260028961457d565b975050505050505050612fc9565b811561311d57600a5461311d906001600160a01b031689846136ec565b84801561312a5750600087115b80156131365750888114155b156131ac576131746001888860008151811061314e57fe5b60200260200101518960018151811061316357fe5b60200260200101518d600954612784565b8a60028151811061318157fe5b602002602001018b60038151811061319557fe5b602090810291909101019190915252919850945092505b82156132715786156131f7576131f08784886002815181106131ca57fe5b6020026020010151896003815181106131df57fe5b60200260200101518d60095461473d565b5090975092505b600b54600a54613217918a916001600160a01b0391821691168688614820565b86158061322b575088613228611483565b10155b613271576040805162461bcd60e51b8152602060048201526012602482015271084eaf240e0e4d2c6ca40dad2e6dac2e8c6d60731b604482015290519081900360640190fd5b5050505050509392505050565b6001600160a01b038616600090815260116020908152604080832080548251818502810185019093528083526060938301828280156132dc57602002820191906000526020600020905b8154815260200190600101908083116132c8575b5050505050905060ff815110613334576040805162461bcd60e51b815260206004820152601860248201527713dc99195c88139d5b58995c881a5cc8195e18d95959195960421b604482015290519081900360640190fd5b805161333e615859565b6040518061010001604052808b6001600160a01b031681526020018a6001600160a01b03168152602001613370614c3c565b8152602001878152602001898152602001888152602001868152602001838152509050601160008b6001600160a01b03166001600160a01b031681526020019081526020016000208160400151908060018154018082558091505090600182039060005260206000200160009091929091909150555080601060008360400151815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050506134a18587614c4a565b6134af576134af8587614c7a565b6134be85878360400151614d04565b604001519998505050505050505050565b60008115806134ea575050808202828282816134e757fe5b04145b612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b6135498160c0015182606001518360400151614d4c565b60408082015160009081526010602090815282822080546001600160a01b031990811682556001820180549091169055600281018390556003810183905560048101839055600581018390556006810183905560070182905583516001600160a01b0316825260119052205460e08201518111613602576040805162461bcd60e51b81526020600482015260126024820152710d2dcecc2d8d2c840dee4c8cae492dcc8caf60731b604482015290519081900360640190fd5b81516001600160a01b031660009081526011602052604081208054600019840190811061362b57fe5b600091825260208083209091015485516001600160a01b031683526011909152604090912060e085015181549293508392811061366457fe5b600091825260208083209091019290925560e08501518382526010835260408083206007019190915585516001600160a01b031682526011909252208054806136a957fe5b600190038181906000526020600020016000905590556136d18360c001518460600151614c4a565b6136e7576136e78360c001518460600151614eb1565b505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561373157600080fd5b505afa158015613745573d6000803e3d6000fd5b505050506040513d602081101561375b57600080fd5b505190506001600160a01b0384811690821614156137e057806001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156137b957600080fd5b505af11580156137cd573d6000803e3d6000fd5b505050506137db8383614f46565b6137eb565b6137eb8484846139bf565b50505050565b60008060008060018b14156138a357600061380d8b8b8b615039565b9050613824866127108a900363ffffffff6134cf16565b6138368261271063ffffffff6134cf16565b11613860578a9450613854612710612e71838b63ffffffff6134cf16565b9150818101935061389d565b613878612710612e71888b830363ffffffff6134cf16565b9050613885818b8b612e57565b945085935061389a848263ffffffff61295c16565b91505b5061393e565b60028b141561393e5760006138b98b8b8b612e57565b90506138d0866127108a900363ffffffff6134cf16565b6138e28261271063ffffffff6134cf16565b1161390c578a9450613900612710612e71838b63ffffffff6134cf16565b9150818101935061393c565b613924612710612e71888b830363ffffffff6134cf16565b9050613931818b8b615039565b945085935080840391505b505b6139736064612e71613956848a63ffffffff6134cf16565b61396785606463ffffffff6134cf16565b9063ffffffff61295c16565b9150509750975097945050505050565b600080613991836000612c9b565b90505b80156139b9576139a48382612cb8565b820191506139b28382612c9b565b9050613994565b50919050565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310613a685780518252601f199092019160209182019101613a49565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613aca576040519150601f19603f3d011682016040523d82523d6000602084013e613acf565b606091505b5091509150818015613afd575080511580613afd5750808060200190516020811015613afa57600080fd5b50515b613b40576040805162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015290519081900360640190fd5b5050505050565b60009081526004602052604090205490565b600080600080600060018b1415613bfc576000613b788a8a8a8a61430a565b90506000613b8e8a6107cd63ffffffff6134cf16565b9050808211613b9e576000613bb2565b613bb28183036107ca63ffffffff61435616565b94508415613bca57613bc5858b8d612aaf565b613bcd565b60005b95508b861115613be8578b9550613be5868b8d613e17565b94505b5050508289039350508187038682016128bd565b60028b14156128b4576000613c138a8a8a8a614369565b90506000613c298b6107cd63ffffffff6134cf16565b9050808211613c39576000613c4d565b613c4d8183036107ca63ffffffff61435616565b95508515613c6557613c60868c8c612aaf565b613c68565b60005b94508b851115613c83578b9450613c80858c8c613e17565b95505b5050508189039350508682018187036128bd565b6000808080613cb2612710612e71878a63ffffffff6134cf16565b90506000613ccb6064612e71848a63ffffffff6134cf16565b90506000613ce26121b8848463ffffffff61295c16565b905060008c8211613d1957879550613d00868363ffffffff61295c16565b9450613d12828463ffffffff61295c16565b9050613d85565b8c9150613d3d898b02620f424003612e71620f4240856134cf90919063ffffffff16565b9550613d708a8a02620f424003612e716127108d9003613d6486606463ffffffff6134cf16565b9063ffffffff6134cf16565b9050613d82868363ffffffff61295c16565b94505b60018e1415613da057613d99818d8d612e57565b9650613db7565b60028e1415613db757613db4818d8d615039565b96505b505050509750975097945050505050565b80820182811015612737576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000808411613e6a576040805162461bcd60e51b815260206004820152601a602482015279125394d551919250d251539517d3d55514155517d05353d5539560321b604482015290519081900360640190fd5b600083118015613e7a5750600082115b613ec4576040805162461bcd60e51b8152602060048201526016602482015275494e53554646494349454e545f4c495155494449545960501b604482015290519081900360640190fd5b6000613edc6103e8613d64868863ffffffff6134cf16565b90506000613ef66103e5613d64868963ffffffff61295c16565b9050613f136001828481613f0657fe5b049063ffffffff613dc816565b9695505050505050565b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612e2657600080fd5b60408051600480825260a0820190925260009160609190602082016080803883395050600654600a54600b54939450613fb2936001600160a01b03928316935090821691166125a6565b816001600160701b03169150806001600160701b0316905082600081518110613fd757fe5b6020026020010183600181518110613feb57fe5b60200260200101828152508281525050508060008151811061400957fe5b60200260200101518160018151811061401e57fe5b60200260200101518260028151811061403357fe5b602002602001018360038151811061404757fe5b60200260200101828152508281525050508491506000808260008151811061406b57fe5b6020026020010151118015614094575060008260018151811061408a57fe5b6020026020010151115b90506000806000806140a860016000612c9b565b90505b80158015906140ba5750888110155b156141bc5786851561411f576140d960028989600081518110612ff757fe5b8b6002815181106140e657fe5b602002602001018c6003815181106140fa57fe5b602090810291909101019190915252909650945090508061411f5760009750506141bc565b600061412c600184612cb8565b905060008060006060806141436002888a896143a7565b93985091965094509250905061415f848463ffffffff61295c16565b600a54990198614179906001600160a01b031683836145c5565b868514156141915760009d50505050505050506141bc565b6141a18e8663ffffffff61295c16565b9d506141ae60018961457d565b9750505050505050506140ab565b81156141d957600b546141d9906001600160a01b031689846136ec565b8480156141e65750600087115b80156141f25750888114155b156142425761420a6002888860008151811061314e57fe5b8a60028151811061421757fe5b602002602001018b60038151811061422b57fe5b602090810291909101019190915252919850945092505b831561327157861561428d5761428687858860028151811061426057fe5b60200260200101518960038151811061427557fe5b60200260200101518d600954615053565b5090975093505b600a54600b546142ad918a916001600160a01b0391821691168787614820565b8615806142c15750886142be611483565b11155b613271576040805162461bcd60e51b81526020600482015260156024820152741cd95b1b081d1bc81d185c99d95d0819985a5b1959605a1b604482015290519081900360640190fd5b600061434d614348614333600a85900a612e7187613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d64898063ffffffff6134cf16565b615105565b95945050505050565b600081838161436157fe5b049392505050565b600061434d61434861439285612e71600a87900a613d64623cda20818d8d63ffffffff6134cf16565b612b9d6009613d648a8063ffffffff6134cf16565b60008060006060806143c4898989600954600e54600f548c6137f1565b919650945092506143df6143d78a61273d565b86868a615156565b8092508193505050945094509450945094565b60608151835101604051908082528060200260200182016040528015614422578160200160208202803883390190505b50905060005b83518110156144645783818151811061443d57fe5b602002602001015182828151811061445157fe5b6020908102919091010152600101614428565b5060005b82518110156144a75782818151811061447d57fe5b602002602001015182828651018151811061449457fe5b6020908102919091010152600101614468565b5092915050565b606081518351016040519080825280602002602001820160405280156144de578160200160208202803883390190505b50905060005b835181101561452d578381815181106144f957fe5b602002602001015182828151811061450d57fe5b6001600160a01b03909216602092830291909101909101526001016144e4565b5060005b82518110156144a75782818151811061454657fe5b602002602001015182828651018151811061455d57fe5b6001600160a01b0390921660209283029190910190910152600101614531565b600082815260036020908152604080832084845290915290205480156145a357806145be565b60008381526003602090815260408083208380529091529020545b9392505050565b600554604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b15801561460a57600080fd5b505afa15801561461e573d6000803e3d6000fd5b505050506040513d602081101561463457600080fd5b5051905060005b8351811015613b4057846001600160a01b0316826001600160a01b0316141561470457816001600160a01b0316632e1a7d4d84838151811061467957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156146b757600080fd5b505af11580156146cb573d6000803e3d6000fd5b505050506146ff8482815181106146de57fe5b60200260200101518483815181106146f257fe5b6020026020010151614f46565b614735565b6147358585838151811061471457fe5b602002602001015185848151811061472857fe5b60200260200101516139bf565b60010161463b565b60008060008061474e888887615515565b90508581101561480c5761478b614773600a87900a612e718b8563ffffffff6134cf16565b613967600a88900a612e718c8b63ffffffff6134cf16565b91506000821161479c57600161479e565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526018602482015277139bdd08115b9bdd59da0813dd5d1c1d5d08105b5bdd5b9d60421b604482015290519081900360640190fd5b6148008a8363ffffffff61295c16565b93508882019250614813565b8993508892505b5096509650969350505050565b6006546148389085906001600160a01b0316846139bf565b600080600660009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561488957600080fd5b505afa15801561489d573d6000803e3d6000fd5b505050506040513d60208110156148b357600080fd5b50516001600160a01b038681169116146148cf578260006148d3565b6000835b915091506000600560009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561492757600080fd5b505afa15801561493b573d6000803e3d6000fd5b505050506040513d602081101561495157600080fd5b505190506001600160a01b038082169087161415614ac5576006546040805160008082526020820192839052631fac4f7b60e21b835260248201878152604483018790523060648401819052608060848501908152845160a486018190526001600160a01b0390971696637eb13dec968b968b969495909490939260c4860192918190849084905b838110156149f15781810151838201526020016149d9565b50505050905090810190601f168015614a1e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614a4057600080fd5b505af1158015614a54573d6000803e3d6000fd5b50505050806001600160a01b0316632e1a7d4d856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015614a9e57600080fd5b505af1158015614ab2573d6000803e3d6000fd5b50505050614ac08885614f46565b614bca565b600654604080516000808252602082019092526001600160a01b0390921691637eb13dec91869186918d9190506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b62578181015183820152602001614b4a565b50505050905090810190601f168015614b8f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614bb157600080fd5b505af1158015614bc5573d6000803e3d6000fd5b505050505b600660009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614c1a57600080fd5b505af1158015614c2e573d6000803e3d6000fd5b505050505050505050505050565b601380546001019081905590565b60008281526001602090815260408083208484528252808320549483526002825280832093835292905220540390565b60008281526004602052604090205480614cb6576000838152600360209081526040808320838052909152808220849055838252812055614ceb565b600080614cc38585615542565b6000878152600360209081526040808320948352939052828120879055868152919091205550505b5050600090815260046020526040902080546001019055565b60008381526002602090815260408083208584528083528184208054978552848452828520878652845282852097855296835290832093909355929052905280546001019055565b60008381526001602090815260408083208584528252808320548684526002835281842086855290925290912054808210614dbe576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420717565756560981b604482015290519081900360640190fd5b600085815260208181526040808320878452825280832085845290915290205480600184015b83811015614e285785831415614df957614e28565b6000888152602081815260408083208a8452825280832084845290915290208054939055829150600101614de4565b50808514614e6c576040805162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206461746160a01b604482015290519081900360640190fd5b50505060008481526020818152604080832086845282528083209383529281528282208290559481526001808652828220948252939094529092208054909101905550565b600080614ebe8484615542565b91509150808314614f06576040805162461bcd60e51b815260206004820152600d60248201526c496e76616c696420707269636560981b604482015290519081900360640190fd5b6000848152600360209081526040808320938352928152828220805494835283832094909455928190559384526004909152909120805460001901905550565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310614f925780518252601f199092019160209182019101614f73565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614ff4576040519150601f19603f3d011682016040523d82523d6000602084013e614ff9565b606091505b50509050806136e75760405162461bcd60e51b81526004018080602001828103825260238152602001806158d16023913960400191505060405180910390fd5b6000612e7d83612e7186600a86900a63ffffffff6134cf16565b600080600080615064888887615515565b90508581111561480c576150a161508982612e718a600a8a900a63ffffffff6134cf16565b61396788612e718b600a8b900a63ffffffff6134cf16565b9150600082116150b25760016150b4565b815b9150818a10156147f0576040805162461bcd60e51b8152602060048201526017602482015276139bdd08115b9bdd59da08125b9c1d5d08105b5bdd5b9d604a1b604482015290519081900360640190fd5b60006003821115615148575080600160028204015b818110156151425780915060028182858161513157fe5b04018161513a57fe5b04905061511a565b5061275d565b811561275d57506001919050565b606080836000806151678987614c4a565b9050606081604051908082528060200260200182016040528015615195578160200160208202803883390190505b5090506060826040519080825280602002602001820160405280156151c4578160200160208202803883390190505b5090505b82841080156151d75750600085115b1561542b5760006151e88c8a6155e4565b9050806151f5575061542b565b6151fd615859565b5060008181526010602090815260409182902082516101008101845281546001600160a01b0390811682526001830154169281018390526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152845185908890811061527f57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506