240 txs
246 calls
constructor
constructor(address _gradientRegistry)
functions
DIVISOR
viewfunction DIVISOR() view returns (uint256)
feePercentage
viewfunction feePercentage() view returns (uint256)
getActiveOrders
viewfunction getActiveOrders(address token, uint8 orderType, uint8 executionType) view returns (uint256[])
getActiveOrdersCount
viewfunction getActiveOrdersCount(bytes32 queueKey) view returns (uint256)
getCurrentMarketPrice
viewfunction getCurrentMarketPrice(address token) view returns (uint256 marketPrice)
getOrder
viewfunction getOrder(uint256 orderId) view returns (tuple)
getRemainingAmount
viewfunction getRemainingAmount(uint256 orderId) view returns (uint256)
getReserves
viewfunction getReserves(address token) view returns (uint256 reserveETH, uint256 reserveToken)
gradientRegistry
viewfunction gradientRegistry() view returns (address)
headOrder
viewfunction headOrder(bytes32) view returns (uint256)
isOrderExpired
viewfunction isOrderExpired(uint256 orderId) view returns (bool)
linkedOrders
viewfunction linkedOrders(bytes32, uint256) view returns (uint256 prev, uint256 next, bool exists)
MAX_FEE_PERCENTAGE
viewfunction MAX_FEE_PERCENTAGE() view returns (uint256)
maxOrderSize
viewfunction maxOrderSize() view returns (uint256)
maxOrderTtl
viewfunction maxOrderTtl() view returns (uint256)
maxPriceDeviation
viewfunction maxPriceDeviation() view returns (uint256)
minOrderSize
viewfunction minOrderSize() view returns (uint256)
mmFeeDistributionPercentage
viewfunction mmFeeDistributionPercentage() view returns (uint256)
orders
viewfunction orders(uint256) view returns (uint256 orderId, address owner, uint8 orderType, uint8 executionType, address token, uint256 amount, uint256 price, uint256 filledAmount, uint256 expirationTime, uint8 status)
owner
viewfunction owner() view returns (address)
tailOrder
viewfunction tailOrder(bytes32) view returns (uint256)
totalFeesCollected
viewfunction totalFeesCollected() view returns (uint256)
totalOrderCount
viewfunction totalOrderCount(bytes32) view returns (uint256)
validateExecutionPrice
viewfunction validateExecutionPrice(address token, uint256 executionPrice) view returns (bool)
cancelOrder
nonpayablefunction cancelOrder(uint256 orderId)
cleanupExpiredOrder
nonpayablefunction cleanupExpiredOrder(uint256 orderId)
createOrder
payablefunction createOrder(uint8 orderType, uint8 executionType, address token, uint256 amount, uint256 price, uint256 ttl) payable returns (uint256)
fulfillLimitOrders
nonpayablefunction fulfillLimitOrders(tuple[] matches)
fulfillMarketOrders
nonpayablefunction fulfillMarketOrders(tuple[] matches, uint256[] executionPrices)
fulfillOrdersWithMarketMaker
nonpayablefunction fulfillOrdersWithMarketMaker(uint256[] orderIds, uint256[] fillAmounts, uint256[] executionPrices)
fulfillOwnOrderWithAMM
nonpayablefunction fulfillOwnOrderWithAMM(uint256 orderId, uint256 fillAmount, uint256 minAmountOut)
renounceOwnership
nonpayablefunction renounceOwnership()
setFeePercentage
nonpayablefunction setFeePercentage(uint256 newFeePercentage)
setGradientRegistry
nonpayablefunction setGradientRegistry(address _gradientRegistry)
setMaxOrderTtl
nonpayablefunction setMaxOrderTtl(uint256 _maxOrderTtl)
setOrderSizeLimits
nonpayablefunction setOrderSizeLimits(uint256 _minOrderSize, uint256 _maxOrderSize)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateMaxPriceDeviation
nonpayablefunction updateMaxPriceDeviation(uint256 newDeviation)
updateMMFeeDistributionPercentage
nonpayablefunction updateMMFeeDistributionPercentage(uint256 newPercentage)
withdrawFees
nonpayablefunction withdrawFees(address recipient)
events
FeeDistributedToPool
event FeeDistributedToPool(address indexed marketMakerPool, address indexed token, uint256 epoch, uint256 amount, uint256 totalFee)
FeePercentageUpdated
event FeePercentageUpdated(uint256 oldFeePercentage, uint256 newFeePercentage)
FeesWithdrawn
event FeesWithdrawn(address indexed recipient, uint256 amount)
MaxPriceDeviationUpdated
event MaxPriceDeviationUpdated(uint256 oldDeviation, uint256 newDeviation)
MaxTTLUpdated
event MaxTTLUpdated(uint256 newMaxTTL)
MMFeeDistributionPercentageUpdated
event MMFeeDistributionPercentageUpdated(uint256 oldPercentage, uint256 newPercentage)
OrderCancelled
event OrderCancelled(uint256 indexed orderId)
OrderCreated
event OrderCreated(uint256 indexed orderId, address indexed owner, uint8 orderType, uint8 executionType, address token, uint256 amount, uint256 price, uint256 expirationTime, uint256 totalCost)
OrderExpired
event OrderExpired(uint256 indexed orderId)
OrderFulfilled
event OrderFulfilled(uint256 indexed orderId, uint256 amount)
OrderFulfilledByMarketMaker
event OrderFulfilledByMarketMaker(uint256 indexed orderId, address indexed marketMakerPool, uint256 amount, uint256 price)
OrderFulfilledByMatching
event OrderFulfilledByMatching(uint256 indexed orderId, uint256 indexed matchedOrderId, uint256 amount, uint256 price)
OrderPartiallyFulfilled
event OrderPartiallyFulfilled(uint256 indexed orderId, uint256 amount, uint256 remaining)
OrderSizeLimitsUpdated
event OrderSizeLimitsUpdated(uint256 minSize, uint256 maxSize)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RateLimitUpdated
event RateLimitUpdated(uint256 newInterval)
errors
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x6080604052611b58600f556101f460105534801561001c57600080fd5b506040516158db3803806158db83398101604081905261003b91610104565b338061006157604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61006a816100b4565b5060018055600280546001600160a01b0319166001600160a01b03929092169190911790556032600455620f4240600c55683635c9adc5dea00000600d5562278d00600e55610134565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561011657600080fd5b81516001600160a01b038116811461012d57600080fd5b9392505050565b615798806101436000396000f3fe6080604052600436106102275760003560e01c8063715018a611610122578063a001ecdd116100a5578063d09ef2411161006c578063d09ef2411461075b578063f1a82c7e14610788578063f2fde38b1461079e578063f6252ff2146107be578063fd31f89a146107de57005b8063a001ecdd1461064b578063a674537f14610661578063a85c38ef14610677578063ae06c1b71461070e578063cb25c17d1461072e57005b80638da5cb5b116100e95780638da5cb5b146105b75780638f9057df146105d5578063975b8662146105f5578063983d1a141461060b5780639c302fdb1461062b57005b8063715018a6146104c3578063727d2114146104d85780637af18788146104f8578063830562bc1461055f57806386ea511e1461059757005b80633410fe6e116101aa578063568c820611610171578063568c82061461042757806359c693131461044757806360c6d8ae14610477578063634eef471461048d57806366961d44146104ad57005b80633410fe6e146103865780633e99c1e41461039c578063457a8924146103d1578063514fcac7146103f1578063558e44d31461041157005b806313b64e24116101ee57806313b64e24146102e3578063164e68de146103035780631f32eb771461032357806324f1c5c1146103505780632f1131fb1461037057005b80630198708f1461023057806304ca1339146102505780630d34219c1461028357806310e1c166146102b057806311e807a4146102d057005b3661022e57005b005b34801561023c57600080fd5b5061022e61024b366004614cda565b61080b565b34801561025c57600080fd5b5061027061026b366004614d95565b610a64565b6040519081526020015b60405180910390f35b34801561028f57600080fd5b5061027061029e366004614db9565b60076020526000908152604090205481565b3480156102bc57600080fd5b506102706102cb366004614db9565b610c03565b6102706102de366004614ddf565b610c92565b3480156102ef57600080fd5b5061022e6102fe366004614e44565b61132d565b34801561030f57600080fd5b5061022e61031e366004614d95565b6113d8565b34801561032f57600080fd5b5061034361033e366004614e66565b611555565b60405161027a9190614eb1565b34801561035c57600080fd5b5061022e61036b366004614db9565b61167d565b34801561037c57600080fd5b50610270600f5481565b34801561039257600080fd5b5061027061271081565b3480156103a857600080fd5b506103bc6103b7366004614d95565b61170a565b6040805192835260208301919091520161027a565b3480156103dd57600080fd5b5061022e6103ec366004614f39565b611a74565b3480156103fd57600080fd5b5061022e61040c366004614db9565b611c07565b34801561041d57600080fd5b506102706101f481565b34801561043357600080fd5b5061022e610442366004614db9565b611f80565b34801561045357600080fd5b50610467610462366004614db9565b6122b9565b604051901515815260200161027a565b34801561048357600080fd5b5061027060055481565b34801561049957600080fd5b5061022e6104a8366004614d95565b61230c565b3480156104b957600080fd5b50610270600e5481565b3480156104cf57600080fd5b5061022e61238c565b3480156104e457600080fd5b5061022e6104f3366004614db9565b6123a0565b34801561050457600080fd5b50610542610513366004614e44565b600a60209081526000928352604080842090915290825290208054600182015460029092015490919060ff1683565b60408051938452602084019290925215159082015260600161027a565b34801561056b57600080fd5b5060025461057f906001600160a01b031681565b6040516001600160a01b03909116815260200161027a565b3480156105a357600080fd5b506104676105b2366004614faa565b612433565b3480156105c357600080fd5b506000546001600160a01b031661057f565b3480156105e157600080fd5b5061022e6105f0366004614fd6565b61258d565b34801561060157600080fd5b5061027060105481565b34801561061757600080fd5b5061022e610626366004614db9565b6126bb565b34801561063757600080fd5b5061022e610646366004615018565b612749565b34801561065757600080fd5b5061027060045481565b34801561066d57600080fd5b50610270600c5481565b34801561068357600080fd5b506106f8610692366004614db9565b60066020819052600091825260409091208054600182015460028301546003840154600485015460058601549686015460079096015494966001600160a01b038086169760ff600160a01b8804811698600160a81b90980481169796909216959091168a565b60405161027a9a99989796959493929190615087565b34801561071a57600080fd5b5061022e610729366004614db9565b612cc8565b34801561073a57600080fd5b50610270610749366004614db9565b60086020526000908152604090205481565b34801561076757600080fd5b5061077b610776366004614db9565b612d60565b60405161027a9190615100565b34801561079457600080fd5b50610270600d5481565b3480156107aa57600080fd5b5061022e6107b9366004614d95565b612eba565b3480156107ca57600080fd5b506102706107d9366004614db9565b612ef5565b3480156107ea57600080fd5b506102706107f9366004614db9565b60096020526000908152604090205481565b610813612f58565b6002546040516314c530d560e31b81523360048201526001600160a01b039091169063a62986a890602401602060405180830381865afa15801561085b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087f91906151a4565b6108a45760405162461bcd60e51b815260040161089b906151c6565b60405180910390fd5b846108e85760405162461bcd60e51b8152602060048201526014602482015273139bc81bdc99195c9cc81d1bc8199d5b199a5b1b60621b604482015260640161089b565b84831480156108f657508481145b61093d5760405162461bcd60e51b815260206004820152601860248201527709ad2e6dac2e8c6d0cac840c2e4e4c2f2e640d8cadccee8d60431b604482015260640161089b565b60005b85811015610a5257600085858381811061095c5761095c6151fd565b90506020020135116109805760405162461bcd60e51b815260040161089b90615213565b6000838383818110610994576109946151fd565b90506020020135116109f75760405162461bcd60e51b815260206004820152602660248201527f457865637574696f6e207072696365206d75737420626520677265617465722060448201526507468616e20360d41b606482015260840161089b565b610a4a878783818110610a0c57610a0c6151fd565b90506020020135868684818110610a2557610a256151fd565b90506020020135858585818110610a3e57610a3e6151fd565b90506020020135612f82565b600101610940565b50610a5c60018055565b505050505050565b600080600260009054906101000a90046001600160a01b03166001600160a01b031663f887ea406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ade9190615255565b90506001600160a01b038116610b275760405162461bcd60e51b815260206004820152600e60248201526d149bdd5d195c881b9bdd081cd95d60921b604482015260640161089b565b600080610b338561170a565b91509150600082118015610b475750600081115b610b8c5760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e74206c697175696469747960501b604482015260640161089b565b80610b9f83670de0b6b3a7640000615288565b610ba9919061529f565b935060008411610bfb5760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964206d61726b65742070726963652063616c63756c6174656400604482015260640161089b565b505050919050565b60008181526008602052604081205481905b8015610c8b57600081815260066020526040812090600782015460ff166003811115610c4357610c43615044565b148015610c565750610c54826122b9565b155b15610c695782610c65816152c1565b9350505b506000848152600a602090815260408083209383529290522060010154610c15565b5092915050565b6000846001600160a01b038116610cdb5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b604482015260640161089b565b6000816001600160a01b03163b11610d265760405162461bcd60e51b815260206004820152600e60248201526d139bdd08184818dbdb9d1c9858dd60921b604482015260640161089b565b600254604051630736b32b60e31b81526001600160a01b038381166004830152909116906339b5995890602401602060405180830381865afa158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9491906151a4565b15610dd45760405162461bcd60e51b815260206004820152601060248201526f151bdad95b881a5cc8189b1bd8dad95960821b604482015260640161089b565b610ddc612f58565b60008511610e2c5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e2030000000604482015260640161089b565b60008411610e725760405162461bcd60e51b8152602060048201526013602482015272496e76616c69642070726963652072616e676560681b604482015260640161089b565b60008311610ec25760405162461bcd60e51b815260206004820152601a60248201527f54544c206d7573742062652067726561746572207468616e2030000000000000604482015260640161089b565b600e54831115610f035760405162461bcd60e51b815260206004820152600c60248201526b54544c20746f6f206c6f6e6760a01b604482015260640161089b565b6000610f0f86886139ee565b90506000670de0b6b3a7640000610f268784615288565b610f30919061529f565b9050600c54811015610f765760405162461bcd60e51b815260206004820152600f60248201526e13dc99195c881d1bdbc81cdb585b1b608a1b604482015260640161089b565b600d54811115610fba5760405162461bcd60e51b815260206004820152600f60248201526e4f7264657220746f6f206c6172676560881b604482015260640161089b565b60008a6001811115610fce57610fce615044565b03611020578034101561101b5760405162461bcd60e51b8152602060048201526015602482015274125b9cdd59999a58da595b9d08115512081cd95b9d605a1b604482015260640161089b565b611035565b6110356001600160a01b03891633308a613a64565b600380549081906000611047836152c1565b9091555050604080516101408101825282815233602082015260009181018d600181111561107757611077615044565b81526020018c600181111561108e5761108e615044565b81526020018b6001600160a01b031681526020018581526020018981526020016000815260200188426110c191906152da565b8152602001600090526000838152600660209081526040918290208351815590830151600180830180546001600160a01b039093166001600160a01b0319841681178255948601519596508695939490926001600160a81b0319161790600160a01b90849081111561113557611135615044565b021790555060608201518160010160156101000a81548160ff0219169083600181111561116457611164615044565b021790555060808201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a0820151816003015560c0820151816004015560e0820151816005015561010082015181600601556101208201518160070160006101000a81548160ff021916908360038111156111ea576111ea615044565b02179055509050506111fe828b8e8e613acb565b336001600160a01b0316827fa2fb0dce7ae79c4288991eaef209e312e4008fdf46d4842d51f55426ccc903938e8e8e8e8e8861010001518b60405161124997969594939291906152ed565b60405180910390a360008c600181111561126557611265615044565b14801561127157508234115b15611314576000611282843461533f565b604051909150600090339083908381818185875af1925050503d80600081146112c7576040519150601f19603f3d011682016040523d82523d6000602084013e6112cc565b606091505b50509050806113115760405162461bcd60e51b8152602060048201526011602482015270115512081c995d1d5c9b8819985a5b1959607a1b604482015260640161089b565b50505b509350505061132260018055565b509695505050505050565b611335613bcd565b8082106113905760405162461bcd60e51b815260206004820152602360248201527f4d696e2073697a65206d757374206265206c657373207468616e206d61782073604482015262697a6560e81b606482015260840161089b565b600c829055600d81905560408051838152602081018390527f34a3b94861a601870265c6c4d74c28d1a09f6c803ce42b95e749f46127c8f17091015b60405180910390a15050565b6113e0613bcd565b6001600160a01b03811661142a5760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b604482015260640161089b565b600554806114705760405162461bcd60e51b81526020600482015260136024820152724e6f206665657320746f20776974686472617760681b604482015260640161089b565b600060058190556040516001600160a01b0384169083908381818185875af1925050503d80600081146114bf576040519150601f19603f3d011682016040523d82523d6000602084013e6114c4565b606091505b505090508061150d5760405162461bcd60e51b8152602060048201526015602482015274119959481dda5d1a191c985dd85b0819985a5b1959605a1b604482015260640161089b565b826001600160a01b03167fc0819c13be868895eb93e40eaceb96de976442fa1d404e5c55f14bb65a8c489a8360405161154891815260200190565b60405180910390a2505050565b60606000611564858585613bfa565b9050600061157182610c03565b905060008167ffffffffffffffff81111561158e5761158e615352565b6040519080825280602002602001820160405280156115b7578160200160208202803683370190505b506000848152600860205260408120549192505b81158015906115d957508381105b1561167057600082815260066020526040812090600782015460ff16600381111561160657611606615044565b1480156116195750611617836122b9565b155b1561164a5782848381518110611631576116316151fd565b602090810291909101015281611646816152c1565b9250505b506000858152600a602090815260408083209483529390529190912060010154906115cb565b5090979650505050505050565b611685613bcd565b6127108111156116cc5760405162461bcd60e51b8152602060048201526012602482015271088caecd2c2e8d2dedc40e8dede40d0d2ced60731b604482015260640161089b565b601080549082905560408051828152602081018490527f9af3456a3485c9955fbe2f71c7de1d0f89f93ff6ae53e43ec73f541db505abdc91016113cc565b6000806000600260009054906101000a90046001600160a01b03166001600160a01b031663f887ea406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611762573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117869190615255565b90506001600160a01b0381166117cf5760405162461bcd60e51b815260206004820152600e60248201526d149bdd5d195c881b9bdd081cd95d60921b604482015260640161089b565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118389190615255565b90506000826001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561187a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189e9190615255565b60405163e6a4390560e01b81526001600160a01b038981166004830152808316602483015291925060009184169063e6a4390590604401602060405180830381865afa1580156118f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119169190615255565b90506001600160a01b0381166119645760405162461bcd60e51b815260206004820152601360248201527214185a5c88191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640161089b565b600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156119a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c99190615384565b50915091506000836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a329190615255565b90508a6001600160a01b0316816001600160a01b031614611a54578282611a57565b81835b6001600160701b039182169d91169b509950505050505050505050565b611a7c612f58565b6002546040516314c530d560e31b81523360048201526001600160a01b039091169063a62986a890602401602060405180830381865afa158015611ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae891906151a4565b611b045760405162461bcd60e51b815260040161089b906151c6565b82611b515760405162461bcd60e51b815260206004820152601b60248201527f4e6f206f72646572206d61746368657320746f2066756c66696c6c0000000000604482015260640161089b565b828114611b9b5760405162461bcd60e51b815260206004820152601860248201527709ad2e6dac2e8c6d0cac840c2e4e4c2f2e640d8cadccee8d60431b604482015260640161089b565b60005b83811015611bf757611bef858583818110611bbb57611bbb6151fd565b905060600201803603810190611bd191906153c9565b848484818110611be357611be36151fd565b90506020020135613c30565b600101611b9e565b50611c0160018055565b50505050565b611c0f612f58565b60008181526006602052604090206001015481906001600160a01b0316611c485760405162461bcd60e51b815260040161089b90615435565b60008281526006602052604090206001015482906001600160a01b03163314611ca55760405162461bcd60e51b815260206004820152600f60248201526e2737ba1037b93232b91037bbb732b960891b604482015260640161089b565b600083815260066020526040812090600782015460ff166003811115611ccd57611ccd615044565b14611cea5760405162461bcd60e51b815260040161089b90615463565b611cf3846122b9565b15611d305760405162461bcd60e51b815260206004820152600d60248201526c13dc99195c88195e1c1a5c9959609a1b604482015260640161089b565b600781018054600260ff19909116179055600180820154600091600160a01b90910460ff1690811115611d6557611d65615044565b03611ea157600081600501548260030154611d80919061533f565b90508015611e9b576000670de0b6b3a7640000836004015483611da39190615288565b611dad919061529f565b905080471015611dff5760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e742045544820696e20636f6e747261637400000000604482015260640161089b565b60018301546040516000916001600160a01b03169083908381818185875af1925050503d8060008114611e4e576040519150601f19603f3d011682016040523d82523d6000602084013e611e53565b606091505b5050905080611e985760405162461bcd60e51b8152602060048201526011602482015270115512081c99599d5b990819985a5b1959607a1b604482015260640161089b565b50505b50611f03565b600081600501548260030154611eb7919061533f565b90508015611f01576002820154600090611edb9083906001600160a01b0316613ea7565b60018401546002850154919250611eff916001600160a01b03908116911683613eeb565b505b505b60028101546001820154600091611f39916001600160a01b039091169060ff600160a01b8204811691600160a81b900416613bfa565b9050611f458186613f1c565b60405185907f61b9399f2f0f32ca39ce8d7be32caed5ec22fe07a6daba3a467ed479ec60658290600090a250505050611f7d60018055565b50565b611f88612f58565b60008181526006602052604090206001015481906001600160a01b0316611fc15760405162461bcd60e51b815260040161089b90615435565b600082815260066020526040812090600782015460ff166003811115611fe957611fe9615044565b146120065760405162461bcd60e51b815260040161089b90615463565b61200f836122b9565b61204f5760405162461bcd60e51b815260206004820152601160248201527013dc99195c881b9bdd08195e1c1a5c9959607a1b604482015260640161089b565b60078101805460ff1916600317905560018082015460ff600160a01b909104168181111561207f5761207f615044565b036120e65760008160050154826003015461209a919061533f565b905080156120e45760028201546000906120be9083906001600160a01b0316613ea7565b600184015460028501549192506120e2916001600160a01b03908116911683613eeb565b505b505b6000600182810154600160a01b900460ff169081111561210857612108615044565b0361224057600081600501548260030154612123919061533f565b9050801561223e576000670de0b6b3a76400008360040154836121469190615288565b612150919061529f565b9050804710156121a25760405162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e742045544820696e20636f6e747261637400000000604482015260640161089b565b60018301546040516000916001600160a01b03169083908381818185875af1925050503d80600081146121f1576040519150601f19603f3d011682016040523d82523d6000602084013e6121f6565b606091505b505090508061223b5760405162461bcd60e51b8152602060048201526011602482015270115512081c99599d5b990819985a5b1959607a1b604482015260640161089b565b50505b505b60028101546001820154600091612276916001600160a01b039091169060ff600160a01b8204811691600160a81b900416613bfa565b90506122828185613f1c565b60405184907f1ad308dc7017610c82d08084545f7176df5e2f08f078c3c8f8926cd7e555551490600090a2505050611f7d60018055565b60008181526006602052604081206001015482906001600160a01b03166122f25760405162461bcd60e51b815260040161089b90615435565b505060009081526006602081905260409091200154421190565b612314613bcd565b6001600160a01b03811661236a5760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964206772616469656e7420726567697374727900000000000000604482015260640161089b565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b612394613bcd565b61239e6000614036565b565b6123a8613bcd565b600081116123f85760405162461bcd60e51b815260206004820152601a60248201527f54544c206d7573742062652067726561746572207468616e2030000000000000604482015260640161089b565b600e8190556040518181527f5829309fa85e85a75b744b2b1ae6b2913b3d2a9c94df75a5b61de31f962256be9060200160405180910390a150565b60008061243f84610a64565b905080600003612453576000915050612587565b808303612464576001915050612587565b6000818411156124f857600061247a838661533f565b905061248a61271060001961529f565b8111156124d95760405162461bcd60e51b815260206004820152601a60248201527f507269636520646966666572656e636520746f6f206c61726765000000000000604482015260640161089b565b826124e682612710615288565b6124f0919061529f565b91505061257e565b6000612504858461533f565b905061251461271060001961529f565b8111156125635760405162461bcd60e51b815260206004820152601a60248201527f507269636520646966666572656e636520746f6f206c61726765000000000000604482015260640161089b565b8261257082612710615288565b61257a919061529f565b9150505b60105410159150505b92915050565b612595612f58565b6002546040516314c530d560e31b81523360048201526001600160a01b039091169063a62986a890602401602060405180830381865afa1580156125dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260191906151a4565b61261d5760405162461bcd60e51b815260040161089b906151c6565b8061266a5760405162461bcd60e51b815260206004820152601b60248201527f4e6f206f72646572206d61746368657320746f2066756c66696c6c0000000000604482015260640161089b565b60005b818110156126ad576126a583838381811061268a5761268a6151fd565b9050606002018036038101906126a091906153c9565b614086565b60010161266d565b506126b760018055565b5050565b6126c3613bcd565b61271081111561270b5760405162461bcd60e51b81526020600482015260136024820152720a0cae4c6cadce8c2ceca40e8dede40d0d2ced606b1b604482015260640161089b565b600f80549082905560408051828152602081018490527f0a4a47a3e5193a63e95c6346171009c8e7099d3795ac25df2b9b672be06cc6ca91016113cc565b612751612f58565b60008381526006602052604090206001015483906001600160a01b031661278a5760405162461bcd60e51b815260040161089b90615435565b60008481526006602052604090206001015484906001600160a01b031633146127e75760405162461bcd60e51b815260206004820152600f60248201526e2737ba1037b93232b91037bbb732b960891b604482015260640161089b565b600084116128075760405162461bcd60e51b815260040161089b90615213565b600085815260066020526040812090600782015460ff16600381111561282f5761282f615044565b1461284c5760405162461bcd60e51b815260040161089b90615463565b600081600501548260030154612862919061533f565b905060008187116128735786612875565b815b9050600081116128975760405162461bcd60e51b815260040161089b9061548d565b6000670de0b6b3a76400008460040154836128b29190615288565b6128bc919061529f565b90506000600260009054906101000a90046001600160a01b03166001600160a01b031663745e9e9f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612913573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129379190615255565b90506001600160a01b03811661298f5760405162461bcd60e51b815260206004820152601860248201527f46616c6c6261636b4578656375746f72206e6f74207365740000000000000000604482015260640161089b565b6000600186810154600160a01b900460ff16908111156129b1576129b1615044565b03612ad35760006129c18361437d565b600287015460405163815a1a0d60e01b81526001600160a01b03918216600482015260248101869052604481018c9052600160648201529192506000919084169063815a1a0d90869060840160206040518083038185885af1158015612a2b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a5091906154b8565b90506000876004015483670de0b6b3a7640000612a6d9190615288565b612a77919061529f565b6002890154909150600090612a969083906001600160a01b0316613ea7565b60018a0154909150612aca906001600160a01b0316612ab5838661533f565b60028c01546001600160a01b03169190613eeb565b50505050612c8f565b6002850154600090612aef9085906001600160a01b0316613ea7565b600287015460405163095ea7b360e01b81526001600160a01b0385811660048301526024820184905292935091169063095ea7b3906044016020604051808303816000875af1158015612b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6a91906151a4565b50600286015460405163815a1a0d60e01b81526001600160a01b03918216600482015260248101839052604481018b90526000606482018190529184169063815a1a0d906084016020604051808303816000875af1158015612bd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf491906154b8565b90506000612c018261437d565b90506000612c0f828461533f565b60018a01546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612c63576040519150601f19603f3d011682016040523d82523d6000602084013e612c68565b606091505b5050905080612c895760405162461bcd60e51b815260040161089b906154d1565b50505050505b82856005016000828254612ca391906152da565b90915550612cb390508a846143bb565b50505050505050612cc360018055565b505050565b612cd0613bcd565b6101f4811115612d225760405162461bcd60e51b815260206004820152601760248201527f4665652070657263656e7461676520746f6f2068696768000000000000000000604482015260640161089b565b600480549082905560408051828152602081018490527fb27c12a91635e11c22bffa7bd8e0a8735da52b94aaefd7f249776c7590ba789491016113cc565b612d68614c22565b60008281526006602052604090206001015482906001600160a01b0316612da15760405162461bcd60e51b815260040161089b90615435565b600083815260066020908152604091829020825161014081018452815481526001808301546001600160a01b038116948301949094529093919291840191600160a01b900460ff1690811115612df957612df9615044565b6001811115612e0a57612e0a615044565b81526020016001820160159054906101000a900460ff166001811115612e3257612e32615044565b6001811115612e4357612e43615044565b815260028201546001600160a01b0316602082015260038083015460408301526004830154606083015260058301546080830152600683015460a0830152600783015460c09092019160ff1690811115612e9f57612e9f615044565b6003811115612eb057612eb0615044565b9052509392505050565b612ec2613bcd565b6001600160a01b038116612eec57604051631e4fbdf760e01b81526000600482015260240161089b565b611f7d81614036565b60008181526006602052604081206001015482906001600160a01b0316612f2e5760405162461bcd60e51b815260040161089b90615435565b600083815260066020526040902060058101546003820154612f50919061533f565b949350505050565b600260015403612f7b57604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b6000838152600660209081526040808320815161014081018352815481526001808301546001600160a01b03811695830195909552889587959094929392840191600160a01b90910460ff1690811115612fde57612fde615044565b6001811115612fef57612fef615044565b81526020016001820160159054906101000a900460ff16600181111561301757613017615044565b600181111561302857613028615044565b815260028201546001600160a01b0316602082015260038083015460408301526004830154606083015260058301546080830152600683015460a0830152600783015460c09092019160ff169081111561308457613084615044565b600381111561309557613095615044565b90525090506001816060015160018111156130b2576130b2615044565b03613121576000816040015160018111156130cf576130cf615044565b036130fd578060c001518211156130f85760405162461bcd60e51b815260040161089b90615508565b613121565b8060c001518210156131215760405162461bcd60e51b815260040161089b90615551565b60008160600151600181111561313957613139615044565b036131a7578060c0015182146131a75760405162461bcd60e51b815260206004820152602d60248201527f457865637574696f6e207072696365206e6f74206d617463686564207769746860448201526c1037b93232b910383934b1b29760991b606482015260840161089b565b600086815260066020526040812090600782015460ff1660038111156131cf576131cf615044565b146131ec5760405162461bcd60e51b815260040161089b90615463565b6131f5876122b9565b156132325760405162461bcd60e51b815260206004820152600d60248201526c13dc99195c88195e1c1a5c9959609a1b604482015260640161089b565b600281015461324a906001600160a01b031686612433565b6132665760405162461bcd60e51b815260040161089b90615599565b60025460408051632289a21d60e11b815290516000926001600160a01b031691634513443a9160048083019260209291908290030181865afa1580156132b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d49190615255565b90506001600160a01b03811661332c5760405162461bcd60e51b815260206004820152601960248201527f4d61726b6574206d616b657220706f6f6c206e6f742073657400000000000000604482015260640161089b565b600082600501548360030154613342919061533f565b905060008189116133535788613355565b815b9050600081116133775760405162461bcd60e51b815260040161089b9061548d565b6000670de0b6b3a764000061338c8a84615288565b613396919061529f565b90506000600186810154600160a01b900460ff16908111156133ba576133ba615044565b0361366057600285015460405163107542b960e21b81526001600160a01b0391821660048201526000918616906341d50ae490602401602060405180830381865afa15801561340d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343191906154b8565b9050600061343e8361437d565b9050600061344c828561533f565b6002890154604051633b00fcff60e11b81526001600160a01b0391821660048201526024810183905260448101889052919250881690637601f9fe9083906064016000604051808303818588803b1580156134a657600080fd5b505af11580156134ba573d6000803e3d6000fd5b50505050506000612710600f54846134d29190615288565b6134dc919061529f565b905080600560008282546134f0919061533f565b909155505080156135c3576002890154604051631f40046760e01b81526001600160a01b039182166004820152602481018690526000604482015290891690631f4004679083906064016000604051808303818588803b15801561355357600080fd5b505af1158015613567573d6000803e3d6000fd5b5050505060028a015460408051878152602081018590529081018690526001600160a01b039182169250908a16907f9759c7a0428463cbb2e99cc12d98e245a832db87e0af1dd55cb71957139f076a9060600160405180910390a35b60008d6135d885670de0b6b3a7640000615288565b6135e2919061529f565b60028b01549091506000906136019089906001600160a01b0316613ea7565b60028c01549091506000906136209084906001600160a01b0316613ea7565b60018d0154909150613654906001600160a01b031661363f838561533f565b60028f01546001600160a01b03169190613eeb565b50505050505050613977565b6002850154604051631af28a4960e21b81526001600160a01b039182166004820152600091861690636bca292490602401602060405180830381865afa1580156136ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d291906154b8565b60028701549091506000906136f19085906001600160a01b0316613ea7565b600288015460405163095ea7b360e01b81526001600160a01b0389811660048301526024820184905292935091169063095ea7b3906044016020604051808303816000875af1158015613748573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376c91906151a4565b506002870154604051635fbc13ef60e01b81526001600160a01b039182166004820152602481018590526044810183905290871690635fbc13ef90606401600060405180830381600087803b1580156137c457600080fd5b505af11580156137d8573d6000803e3d6000fd5b5050505060006137e78461437d565b905060006137f5828661533f565b90506000612710600f548461380a9190615288565b613814919061529f565b90508060056000828254613828919061533f565b909155505080156138fb5760028a0154604051631f40046760e01b81526001600160a01b0391821660048201526024810187905260016044820152908a1690631f4004679083906064016000604051808303818588803b15801561388b57600080fd5b505af115801561389f573d6000803e3d6000fd5b5050505060028b015460408051888152602081018590529081018690526001600160a01b039182169250908b16907f9759c7a0428463cbb2e99cc12d98e245a832db87e0af1dd55cb71957139f076a9060600160405180910390a35b60018a01546040516000916001600160a01b03169084908381818185875af1925050503d806000811461394a576040519150601f19603f3d011682016040523d82523d6000602084013e61394f565b606091505b50509050806139705760405162461bcd60e51b815260040161089b906154d1565b5050505050505b8185600501600082825461398b91906152da565b9091555061399b90508b836143bb565b60408051838152602081018b90526001600160a01b038616918d917fe332d84b9d7b6ed7b61613e3346be661c47cd1bcb330e8cdb0887aa2d3425e6e910160405180910390a35050505050505050505050565b6000806139fa836144b8565b90508060ff16601203613a105783915050612587565b60128160ff161015613a4457613a278160126155ec565b613a3290600a6156ec565b613a3c9085615288565b915050612587565b613a4f6012826155ec565b613a5a90600a6156ec565b613a3c908561529f565b6040516001600160a01b038481166024830152838116604483015260648201839052611c019186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061451c565b6000613ad8848484613bfa565b60408051606081018252600083815260096020818152848320805485528185018481526001868801818152898752600a85528887208f885285529786209651875590519086015594516002909401805460ff1916941515949094179093559084905290525490915015613b70576000818152600a60209081526040808320600983528184205484529091529020600101859055613b82565b60008181526008602052604090208590555b6000818152600960209081526040808320889055600780835281842080548a8652600b8552928520839055858552925260019290613bc19084906152da565b90915550505050505050565b6000546001600160a01b0316331461239e5760405163118cdaa760e01b815233600482015260240161089b565b6000838383604051602001613c11939291906156fb565b6040516020818303038152906040528051906020012090509392505050565b8151600090815260066020908152604080832091850151835282209091600783015460ff166003811115613c6657613c66615044565b148015613c8b57506000600782015460ff166003811115613c8957613c89615044565b145b613ccf5760405162461bcd60e51b81526020600482015260156024820152744f7264657273206d7573742062652061637469766560581b604482015260640161089b565b8351613cda906122b9565b158015613cf15750613cef84602001516122b9565b155b613d2e5760405162461bcd60e51b815260206004820152600e60248201526d13dc99195c9cc8195e1c1a5c995960921b604482015260640161089b565b6000600183810154600160a01b900460ff1690811115613d5057613d50615044565b148015613d7b575060018082810154600160a01b900460ff1690811115613d7957613d79615044565b145b613dbd5760405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206f7264657220747970657360681b604482015260640161089b565b600280820154908301546001600160a01b03908116911614613e125760405162461bcd60e51b815260206004820152600e60248201526d0a8ded6cadc40dad2e6dac2e8c6d60931b604482015260640161089b565b60018083810154600160a81b900460ff1690811115613e3357613e33615044565b1480613e5d575060018082810154600160a81b900460ff1690811115613e5b57613e5b615044565b145b613e9d5760405162461bcd60e51b81526020600482015260116024820152704e6f74206d61726b6574206f726465727360781b604482015260640161089b565b611c01848461458d565b600080613eb3836144b8565b90508060ff16601203613ec95783915050612587565b60128160ff161015613ee057613a4f8160126155ec565b613a276012826155ec565b6040516001600160a01b03838116602483015260448201839052612cc391859182169063a9059cbb90606401613a99565b6000828152600a602090815260408083208484529091529020600281015460ff16613f7e5760405162461bcd60e51b81526020600482015260126024820152714f72646572206e6f7420696e20717565756560701b604482015260640161089b565b805415613fae576001808201546000858152600a6020908152604080832086548452909152902090910155613fc3565b60018101546000848152600860205260409020555b600181015415613ff25780546000848152600a6020908152604080832060018601548452909152902055614004565b80546000848152600960205260409020555b506000918252600a6020908152604080842092845291905281208181556001810191909155600201805460ff19169055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8051600090815260066020908152604080832091840151835282209091600783015460ff1660038111156140bc576140bc615044565b1480156140e157506000600782015460ff1660038111156140df576140df615044565b145b6141255760405162461bcd60e51b81526020600482015260156024820152744f7264657273206d7573742062652061637469766560581b604482015260640161089b565b8251614130906122b9565b158015614147575061414583602001516122b9565b155b6141935760405162461bcd60e51b815260206004820152601760248201527f31206f6620746865206f72646572732065787069726564000000000000000000604482015260640161089b565b6000600183810154600160a01b900460ff16908111156141b5576141b5615044565b1480156141e0575060018082810154600160a01b900460ff16908111156141de576141de615044565b145b6142225760405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206f7264657220747970657360681b604482015260640161089b565b600280820154908301546001600160a01b039081169116146142775760405162461bcd60e51b815260206004820152600e60248201526d0a8ded6cadc40dad2e6dac2e8c6d60931b604482015260640161089b565b600180820154908301546001600160a01b039182169116036142e75760405162461bcd60e51b815260206004820152602360248201527f53656c6c657220616e642062757965722063616e6e6f74206265207468652073604482015262616d6560e81b606482015260840161089b565b6000600183810154600160a81b900460ff169081111561430957614309615044565b14801561433557506000600182810154600160a81b900460ff169081111561433357614333615044565b145b6143745760405162461bcd60e51b815260206004820152601060248201526f4e6f74206c696d6974206f726465727360801b604482015260640161089b565b612cc3836148ab565b600080612710600454846143919190615288565b61439b919061529f565b905080600560008282546143af91906152da565b90915550909392505050565b6000828152600660205260409020600381015460058201540361446c5760078101805460ff19166001908117909155600282015490820154600091614420916001600160a01b0390911690600160a01b810460ff90811691600160a81b900416613bfa565b905061442c8185613f1c565b837feb3b41be12efa25c0c65725eeff2e2ad0250e2e5de2aa939e18f36aa656e98808460405161445e91815260200190565b60405180910390a250505050565b827f8f9f7f58643161141dd2b5b862b54ab647f74549d3b06fd4430272bcc411678c83836005015484600301546144a3919061533f565b60408051928352602083019190915201611548565b6000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156144f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612587919061573f565b600080602060008451602086016000885af18061453f576040513d6000823e3d81fd5b50506000513d91508115614557578060011415614564565b6001600160a01b0384163b155b15611c0157604051635274afe760e01b81526001600160a01b038516600482015260240161089b565b8151600090815260066020908152604080832091850151835290912060028201546145c1906001600160a01b031684612433565b6145dd5760405162461bcd60e51b815260040161089b90615599565b60018083810154600160a81b900460ff16908111156145fe576145fe615044565b036146275781600401548311156146275760405162461bcd60e51b815260040161089b90615508565b60018082810154600160a81b900460ff169081111561464857614648615044565b036146715780600401548310156146715760405162461bcd60e51b815260040161089b90615551565b600082600501548360030154614687919061533f565b905060008260050154836003015461469f919061533f565b6040870151909150828111156146b25750815b818111156146bd5750805b600081116146dd5760405162461bcd60e51b815260040161089b9061548d565b806000670de0b6b3a76400006146f38984615288565b6146fd919061529f565b9050600061470a8261437d565b905060006147178361437d565b90506000614725828561533f565b60018a01546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114614779576040519150601f19603f3d011682016040523d82523d6000602084013e61477e565b606091505b505090508061479f5760405162461bcd60e51b815260040161089b906154d1565b60008c6147b486670de0b6b3a7640000615288565b6147be919061529f565b60028c01549091506000906147dd9089906001600160a01b0316613ea7565b60028d01549091506000906147fc9084906001600160a01b0316613ea7565b60018f015490915061484b906001600160a01b031661481b838561533f565b8f60020160009054906101000a90046001600160a01b03166001600160a01b0316613eeb9092919063ffffffff16565b505050868b600501600082825461486291906152da565b92505081905550868a600501600082825461487d91906152da565b90915550508c5161488e90886143bb565b61489c8d60200151886143bb565b50505050505050505050505050565b8051600090815260066020908152604080832091840151835290912060048082015490830154101561491f5760405162461bcd60e51b815260206004820152601f60248201527f5072696365206d69736d6174636820666f72206c696d6974206f726465727300604482015260640161089b565b600082600501548360030154614935919061533f565b905060008260050154836003015461494d919061533f565b6040860151909150828111156149605750815b8181111561496b5750805b6000811161498b5760405162461bcd60e51b815260040161089b9061548d565b60048401548190600090670de0b6b3a7640000906149a99084615288565b6149b3919061529f565b905060006149c08261437d565b905060006149cd8361437d565b905060006149db828561533f565b60018a01546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114614a2f576040519150601f19603f3d011682016040523d82523d6000602084013e614a34565b606091505b5050905080614a555760405162461bcd60e51b815260040161089b906154d1565b60048a0154600090614a6f86670de0b6b3a7640000615288565b614a79919061529f565b60028c0154909150600090614a989089906001600160a01b0316613ea7565b60028d0154909150600090614ab79084906001600160a01b0316613ea7565b60018f0154909150614ad6906001600160a01b031661481b838561533f565b505050868b6005016000828254614aed91906152da565b92505081905550868a6005016000828254614b0891906152da565b90915550506004808b0154908c01541115614bfa576000670de0b6b3a76400008b600401548d60040154614b3c919061533f565b614b46908a615288565b614b50919061529f565b60018d01546040519192506001600160a01b0316908290600081818185875af1925050503d8060008114614ba0576040519150601f19603f3d011682016040523d82523d6000602084013e614ba5565b606091505b50508092505081614bf85760405162461bcd60e51b815260206004820152601960248201527f45544820736176696e67732072657475726e206661696c656400000000000000604482015260640161089b565b505b8b51614c0690886143bb565b614c148c60200151886143bb565b505050505050505050505050565b6040805161014081018252600080825260208201819052909182019081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160006003811115614c8957614c89615044565b905290565b60008083601f840112614ca057600080fd5b50813567ffffffffffffffff811115614cb857600080fd5b6020830191508360208260051b8501011115614cd357600080fd5b9250929050565b60008060008060008060608789031215614cf357600080fd5b863567ffffffffffffffff811115614d0a57600080fd5b614d1689828a01614c8e565b909750955050602087013567ffffffffffffffff811115614d3657600080fd5b614d4289828a01614c8e565b909550935050604087013567ffffffffffffffff811115614d6257600080fd5b614d6e89828a01614c8e565b979a9699509497509295939492505050565b6001600160a01b0381168114611f7d57600080fd5b600060208284031215614da757600080fd5b8135614db281614d80565b9392505050565b600060208284031215614dcb57600080fd5b5035919050565b60028110611f7d57600080fd5b60008060008060008060c08789031215614df857600080fd5b8635614e0381614dd2565b95506020870135614e1381614dd2565b94506040870135614e2381614d80565b959894975094956060810135955060808101359460a0909101359350915050565b60008060408385031215614e5757600080fd5b50508035926020909101359150565b600080600060608486031215614e7b57600080fd5b8335614e8681614d80565b92506020840135614e9681614dd2565b91506040840135614ea681614dd2565b809150509250925092565b602080825282518282018190526000918401906040840190835b81811015614ee9578351835260209384019390920191600101614ecb565b509095945050505050565b60008083601f840112614f0657600080fd5b50813567ffffffffffffffff811115614f1e57600080fd5b602083019150836020606083028501011115614cd357600080fd5b60008060008060408587031215614f4f57600080fd5b843567ffffffffffffffff811115614f6657600080fd5b614f7287828801614ef4565b909550935050602085013567ffffffffffffffff811115614f9257600080fd5b614f9e87828801614c8e565b95989497509550505050565b60008060408385031215614fbd57600080fd5b8235614fc881614d80565b946020939093013593505050565b60008060208385031215614fe957600080fd5b823567ffffffffffffffff81111561500057600080fd5b61500c85828601614ef4565b90969095509350505050565b60008060006060848603121561502d57600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052602160045260246000fd5b60028110611f7d57611f7d615044565b6150738161505a565b9052565b6004811061507357615073615044565b8a81526001600160a01b038a16602082015261014081016150a78a61505a565b8960408301526150b68961505a565b88606083015260018060a01b03881660808301528660a08301528560c08301528460e0830152836101008301526150f1610120830184615077565b9b9a5050505050505050505050565b81518152602080830151610140830191615124908401826001600160a01b03169052565b506040830151615137604084018261506a565b50606083015161514a606084018261506a565b50608083015161516560808401826001600160a01b03169052565b5060a083015160a083015260c083015160c083015260e083015160e0830152610100830151610100830152610120830151610c8b610120840182615077565b6000602082840312156151b657600080fd5b81518015158114614db257600080fd5b60208082526018908201527f43616c6c6572206973206e6f7420617574686f72697a65640000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526022908201527f46696c6c20616d6f756e74206d7573742062652067726561746572207468616e604082015261020360f41b606082015260800190565b60006020828403121561526757600080fd5b8151614db281614d80565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761258757612587615272565b6000826152bc57634e487b7160e01b600052601260045260246000fd5b500490565b6000600182016152d3576152d3615272565b5060010190565b8082018082111561258757612587615272565b60e081016152fa8961505a565b8882526153068861505a565b60208201979097526001600160a01b039590951660408601526060850193909352608084019190915260a083015260c090910152919050565b8181038181111561258757612587615272565b634e487b7160e01b600052604160045260246000fd5b80516001600160701b038116811461537f57600080fd5b919050565b60008060006060848603121561539957600080fd5b6153a284615368565b92506153b060208501615368565b9150604084015163ffffffff81168114614ea657600080fd5b600060608284031280156153dc57600080fd5b600090506040516060810181811067ffffffffffffffff8211171561540f57634e487b7160e01b83526041600452602483fd5b604090815284358252602080860135908301529384013593810193909352509092915050565b60208082526014908201527313dc99195c88191bd95cc81b9bdd08195e1a5cdd60621b604082015260600190565b60208082526010908201526f4f72646572206e6f742061637469766560801b604082015260600190565b602080825260119082015270139bc8185b5bdd5b9d081d1bc8199a5b1b607a1b604082015260600190565b6000602082840312156154ca57600080fd5b5051919050565b6020808252601d908201527f455448207472616e7366657220746f2073656c6c6572206661696c6564000000604082015260600190565b60208082526029908201527f457865637574696f6e20707269636520657863656564732062757965722773206040820152686d617820707269636560b81b606082015260800190565b60208082526028908201527f457865637574696f6e2070726963652062656c6f772073656c6c65722773206d604082015267696e20707269636560c01b606082015260800190565b60208082526033908201527f457865637574696f6e20707269636520646576696174657320746f6f206d7563604082015272682066726f6d206d61726b657420707269636560681b606082015260800190565b60ff828116828216039081111561258757612587615272565b6001815b60018411156156405780850481111561562457615624615272565b600184161561563257908102905b60019390931c928002615609565b935093915050565b60008261565757506001612587565b8161566457506000612587565b816001811461567a5760028114615684576156a0565b6001915050612587565b60ff84111561569557615695615272565b50506001821b612587565b5060208310610133831016604e8410600b84101617156156c3575081810a612587565b6156d06000198484615605565b80600019048211156156e4576156e4615272565b029392505050565b6000614db260ff841683615648565b6bffffffffffffffffffffffff198460601b1681526157198361505a565b8260f81b601482015261572b8261505a565b60f89190911b601582015260160192915050565b60006020828403121561575157600080fd5b815160ff81168114614db257600080fdfea26469706673582212207ef8a92c80baf5edd87c65e3c51667e6e3a284cb8baff088f2a3d3566bf8907064736f6c634300081a003300000000000000000000000015a495c1b95b6843633dd3ec851f16b259c5e325