0x608060405233600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550666a39e43ec8c00060055565090105fbb8006006556402cb417800600755600060085561008c6008546005546100bc64010000000002611fa0179091906401000000009004565b6009556000600a60006101000a81548160ff0219169083151502179055503480156100b657600080fd5b506100d5565b60008282111515156100ca57fe5b818303905092915050565b611fe5806100e46000396000f30060806040526004361061013e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde0314610279578063095ea7b31461030957806318160ddd1461036e5780632195845f1461039957806323b872dd146103f4578063313ce567146104795780633ccfd60b146104a457806342966c68146104bb57806368f8fc10146104e857806370a08231146105355780638a56f3ee1461058c578063943c33ab146105d957806395d89b41146105f05780639b1cbccc14610680578063a9059cbb146106af578063c108d54214610714578063c489744b14610743578063cbcb2e23146107ba578063d207b7aa146107e5578063d8a5436014610810578063dd62ed3e1461083b578063efca2eed146108b2578063f2fde38b146108dd578063f9f92be414610920575b60008060003392503491506000821415610260576009546007541115151561016557600080fd5b60001515600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415156101c457600080fd5b60075490506101d3838261097b565b506001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610259620f423f61024b620f4240600754610b2290919063ffffffff16565b610b3890919063ffffffff16565b6007819055505b6000821115610274576102738383610b70565b5b505050005b34801561028557600080fd5b5061028e610c85565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ce5780820151818401526020810190506102b3565b50505050905090810190601f1680156102fb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031557600080fd5b50610354600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610cbe565b604051808215151515815260200191505060405180910390f35b34801561037a57600080fd5b50610383610e4c565b6040518082815260200191505060405180910390f35b3480156103a557600080fd5b506103da600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e52565b604051808215151515815260200191505060405180910390f35b34801561040057600080fd5b5061045f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611097565b604051808215151515815260200191505060405180910390f35b34801561048557600080fd5b5061048e61146d565b6040518082815260200191505060405180910390f35b3480156104b057600080fd5b506104b9611472565b005b3480156104c757600080fd5b506104e66004803603810190808035906020019092919050505061155b565b005b3480156104f457600080fd5b50610533600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b70565b005b34801561054157600080fd5b50610576600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611727565b6040518082815260200191505060405180910390f35b34801561059857600080fd5b506105d760048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611770565b005b3480156105e557600080fd5b506105ee611937565b005b3480156105fc57600080fd5b506106056119b4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561064557808201518184015260208101905061062a565b50505050905090810190601f1680156106725780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561068c57600080fd5b506106956119ed565b604051808215151515815260200191505060405180910390f35b3480156106bb57600080fd5b506106fa600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ab5565b604051808215151515815260200191505060405180910390f35b34801561072057600080fd5b50610729611cf0565b604051808215151515815260200191505060405180910390f35b34801561074f57600080fd5b506107a4600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d03565b6040518082815260200191505060405180910390f35b3480156107c657600080fd5b506107cf611dee565b6040518082815260200191505060405180910390f35b3480156107f157600080fd5b506107fa611df4565b6040518082815260200191505060405180910390f35b34801561081c57600080fd5b50610825611dfa565b6040518082815260200191505060405180910390f35b34801561084757600080fd5b5061089c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e00565b6040518082815260200191505060405180910390f35b3480156108be57600080fd5b506108c7611e87565b6040518082815260200191505060405180910390f35b3480156108e957600080fd5b5061091e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e8d565b005b34801561092c57600080fd5b50610961600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f64565b604051808215151515815260200191505060405180910390f35b6000600a60009054906101000a900460ff1615151561099957600080fd5b6109ae82600854611f8490919063ffffffff16565b6008819055506109c982600954611fa090919063ffffffff16565b600981905550610a2182600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f8490919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167f8940c4b8e215f8822c5c8f0056c12652c746cbc57eedbd2a440b175971d47a77836040518082815260200191505060405180910390a28273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60008183811515610b2f57fe5b04905092915050565b600080831415610b4b5760009050610b6a565b8183029050818382811515610b5c57fe5b04141515610b6657fe5b8090505b92915050565b600080600a60009054906101000a900460ff16151515610b8f57600080fd5b670de0b6b3a7640000610bad84600654610b3890919063ffffffff16565b811515610bb657fe5b049150600090506611c37937e080008310158015610bdb575067016345785d8a000083105b15610bf357606460148302811515610bef57fe5b0490505b67016345785d8a00008310158015610c125750670de0b6b3a764000083105b15610c2a57606460198302811515610c2657fe5b0490505b670de0b6b3a764000083101515610c4e576064601e8302811515610c4a57fe5b0490505b610c618183611f8490919063ffffffff16565b91506009548211151515610c7457600080fd5b610c7e848361097b565b5050505050565b6040805190810160405280600c81526020017f446f6e6174696f6e436f696e000000000000000000000000000000000000000081525081565b6000808214158015610d4d57506000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b15610d5b5760009050610e46565b81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a3600190505b92915050565b60055481565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610eb357600080fd5b8391508173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015610f5157600080fd5b505af1158015610f65573d6000803e3d6000fd5b505050506040513d6020811015610f7b57600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561105357600080fd5b505af1158015611067573d6000803e3d6000fd5b505050506040513d602081101561107d57600080fd5b810190808051906020019092919050505092505050919050565b60006060600481016000369050101515156110ae57fe5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156110ea57600080fd5b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054831115151561113857600080fd5b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483111515156111c357600080fd5b61121583600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112e783600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113b983600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f8490919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150509392505050565b600881565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114d157600080fd5b3091508173ffffffffffffffffffffffffffffffffffffffff16319050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611556573d6000803e3d6000fd5b505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156115b957600080fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561160757600080fd5b33905061165c82600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116b482600554611fa090919063ffffffff16565b6005819055506116cf82600854611fa090919063ffffffff16565b6008819055508073ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040518082815260200191505060405180910390a25050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117cc57600080fd5b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561181a57600080fd5b61186c82600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118c482600554611fa090919063ffffffff16565b6005819055506118df82600854611fa090919063ffffffff16565b6008819055508073ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040518082815260200191505060405180910390a25050565b600033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555066252ddcaf93100090506119b0600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261097b565b5050565b6040805190810160405280600481526020017f44544e430000000000000000000000000000000000000000000000000000000081525081565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a4b57600080fd5b600a60009054906101000a900460ff16151515611a6757600080fd5b6001600a60006101000a81548160ff0219169083151502179055507f7f95d919e78bdebe8a285e6e33357c2fcb65ccf66e72d7573f9f8f6caad0c4cc60405160405180910390a16001905090565b6000604060048101600036905010151515611acc57fe5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515611b0857600080fd5b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548311151515611b5657600080fd5b611ba883600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fa090919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611c3d83600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f8490919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191505092915050565b600a60009054906101000a900460ff1681565b60008060008491508173ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611da657600080fd5b505af1158015611dba573d6000803e3d6000fd5b505050506040513d6020811015611dd057600080fd5b81019080805190602001909291905050509050809250505092915050565b60075481565b60065481565b60095481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ee957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515611f615780600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60046020528060005260406000206000915054906101000a900460ff1681565b60008183019050828110151515611f9757fe5b80905092915050565b6000828211151515611fae57fe5b8183039050929150505600a165627a7a7230582074bb76c946f23b8854f6084fd333d0bea1b940fe47139afa36a2491b1a28ea3e0029