0x608060405234801561001057600080fd5b5060008054336001600160a01b03199182168117835560018054909216179055612a0590819061004090396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063a2e74af61161005b578063a2e74af6146100f4578063c9c6539614610109578063e6a439051461011c578063f46901ed1461015057600080fd5b8063017e7e581461008d578063094b7415146100bd5780631e3dd18b146100d0578063574f2ba3146100e3575b600080fd5b6000546100a0906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6001546100a0906001600160a01b031681565b6100a06100de36600461058f565b610163565b6003546040519081526020016100b4565b6101076101023660046105c4565b61018d565b005b6100a06101173660046105e6565b610207565b6100a061012a3660046105e6565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b61010761015e3660046105c4565b61050d565b6003818154811061017357600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b031633146101e55760405162461bcd60e51b81526020600482015260166024820152752a34b232a134ba29bbb0b81d102327a92124a22222a760511b60448201526064015b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b0316141561026b5760405162461bcd60e51b815260206004820181905260248201527f54696465426974537761703a204944454e544943414c5f41444452455353455360448201526064016101dc565b600080836001600160a01b0316856001600160a01b03161061028e578385610291565b84845b90925090506001600160a01b0382166102ec5760405162461bcd60e51b815260206004820152601960248201527f54696465426974537761703a205a45524f5f414444524553530000000000000060448201526064016101dc565b6001600160a01b038281166000908152600260209081526040808320858516845290915290205416156103615760405162461bcd60e51b815260206004820152601860248201527f54696465426974537761703a20504149525f455849535453000000000000000060448201526064016101dc565b60006040518060200161037390610582565b601f1982820381018352601f9091011660408190526bffffffffffffffffffffffff19606086811b8216602084015285901b166034820152909150600090604801604051602081830303815290604052805190602001209050808251602084016000f560405163485cc95560e01b81526001600160a01b03868116600483015285811660248301529196509086169063485cc95590604401600060405180830381600087803b15801561042557600080fd5b505af1158015610439573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9095018054909716841790965592548351928352908201527f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9910160405180910390a35050505092915050565b6001546001600160a01b031633146105605760405162461bcd60e51b81526020600482015260166024820152752a34b232a134ba29bbb0b81d102327a92124a22222a760511b60448201526064016101dc565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6123b68061061a83390190565b6000602082840312156105a157600080fd5b5035919050565b80356001600160a01b03811681146105bf57600080fd5b919050565b6000602082840312156105d657600080fd5b6105df826105a8565b9392505050565b600080604083850312156105f957600080fd5b610602836105a8565b9150610610602084016105a8565b9050925092905056fe60806040526001600c5534801561001557600080fd5b50604080518082018252600c81526b05469646542697420537761760a41b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fc4baceef158c66f7098395b7ff9124bfe4c9dd0caf176d363b5d44f84fa22265818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b031916331790556122ac8061010a6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610407578063d505accf1461041a578063dd62ed3e1461042d578063fff6cae91461045857600080fd5b8063ba9a7a56146103d8578063bc25cf77146103e1578063c45a0155146103f457600080fd5b80637ecebe00116100d35780637ecebe001461035b57806389afcb441461037b57806395d89b41146103a3578063a9059cbb146103c557600080fd5b80636a6278421461031f57806370a08231146103325780637464fc3d1461035257600080fd5b806323b872dd116101665780633644e515116101405780633644e515146102f1578063485cc955146102fa5780635909c0d51461030d5780635a3d54931461031657600080fd5b806323b872dd1461029d57806330adf81f146102b0578063313ce567146102d757600080fd5b8063022c0d9f146101ae57806306fdde03146101c35780630902f1ac14610204578063095ea7b3146102385780630dfe16811461025b57806318160ddd14610286575b600080fd5b6101c16101bc366004611e1f565b610460565b005b6101ee6040518060400160405280600c81526020016b05469646542697420537761760a41b81525081565b6040516101fb9190611ee5565b60405180910390f35b61020c610995565b604080516001600160701b03948516815293909216602084015263ffffffff16908201526060016101fb565b61024b610246366004611f18565b6109bf565b60405190151581526020016101fb565b60065461026e906001600160a01b031681565b6040516001600160a01b0390911681526020016101fb565b61028f60005481565b6040519081526020016101fb565b61024b6102ab366004611f44565b6109d6565b61028f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102df601281565b60405160ff90911681526020016101fb565b61028f60035481565b6101c1610308366004611f85565b610a69565b61028f60095481565b61028f600a5481565b61028f61032d366004611fbe565b610aea565b61028f610340366004611fbe565b60016020526000908152604090205481565b61028f600b5481565b61028f610369366004611fbe565b60046020526000908152604090205481565b61038e610389366004611fbe565b610dcf565b604080519283526020830191909152016101fb565b6101ee6040518060400160405280600381526020016254425360e81b81525081565b61024b6103d3366004611f18565b611173565b61028f6103e881565b6101c16103ef366004611fbe565b611180565b60055461026e906001600160a01b031681565b60075461026e906001600160a01b031681565b6101c1610428366004611fdb565b6112a3565b61028f61043b366004611f85565b600260209081526000928352604080842090915290825290205481565b6101c16114b9565b600c5460011461048b5760405162461bcd60e51b815260040161048290612052565b60405180910390fd5b6000600c558415158061049e5750600084115b6104fa5760405162461bcd60e51b815260206004820152602760248201527f54696465426974537761703a20494e53554646494349454e545f4f555450555460448201526617d05353d5539560ca1b6064820152608401610482565b600080610505610995565b5091509150816001600160701b03168710801561052a5750806001600160701b031686105b6105825760405162461bcd60e51b815260206004820152602360248201527f54696465426974537761703a20494e53554646494349454e545f4c495155494460448201526249545960e81b6064820152608401610482565b60065460075460009182916001600160a01b039182169190811690891682148015906105c05750806001600160a01b0316896001600160a01b031614155b61060c5760405162461bcd60e51b815260206004820152601760248201527f54696465426974537761703a20494e56414c49445f544f0000000000000000006044820152606401610482565b8a1561061d5761061d828a8d6115fb565b891561062e5761062e818a8c6115fb565b861561069b576040516375fa684d60e01b81526001600160a01b038a16906375fa684d906106689033908f908f908e908e9060040161207f565b600060405180830381600087803b15801561068257600080fd5b505af1158015610696573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a082319060240160206040518083038186803b1580156106da57600080fd5b505afa1580156106ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071291906120cb565b6040516370a0823160e01b81523060048201529094506001600160a01b038216906370a082319060240160206040518083038186803b15801561075457600080fd5b505afa158015610768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078c91906120cb565b92505050600089856001600160701b03166107a791906120fa565b83116107b45760006107d1565b6107c78a6001600160701b0387166120fa565b6107d190846120fa565b905060006107e88a6001600160701b0387166120fa565b83116107f5576000610812565b6108088a6001600160701b0387166120fa565b61081290846120fa565b905060008211806108235750600081115b61087e5760405162461bcd60e51b815260206004820152602660248201527f54696465426974537761703a20494e53554646494349454e545f494e5055545f604482015265105353d5539560d21b6064820152608401610482565b60006108a061088e846003611746565b61089a876103e8611746565b906117ad565b905060006108b261088e846003611746565b90506108d7620f42406108d16001600160701b038b8116908b16611746565b90611746565b6108e18383611746565b10156109205760405162461bcd60e51b815260206004820152600e60248201526d54696465426974537761703a204b60901b6044820152606401610482565b505061092e84848888611803565b60408051838152602081018390529081018c9052606081018b90526001600160a01b038a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350506001600c55505050505050505050565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b60006109cc33848461198f565b5060015b92915050565b6001600160a01b0383166000908152600260209081526040808320338452909152812054821015610a54576001600160a01b0384166000908152600260209081526040808320338452909152902054610a2f90836117ad565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610a5f8484846119f1565b5060019392505050565b6005546001600160a01b03163314610abc5760405162461bcd60e51b81526020600482015260166024820152752a34b232a134ba29bbb0b81d102327a92124a22222a760511b6044820152606401610482565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b6000600c54600114610b0e5760405162461bcd60e51b815260040161048290612052565b6000600c81905580610b1e610995565b506006546040516370a0823160e01b81523060048201529294509092506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610b6b57600080fd5b505afa158015610b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba391906120cb565b6007546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610bec57600080fd5b505afa158015610c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2491906120cb565b90506000610c3b836001600160701b0387166117ad565b90506000610c52836001600160701b0387166117ad565b90506000610c608787611a97565b60005490915080610c9757610c836103e861089a610c7e8787611746565b611be3565b9850610c9260006103e8611c53565b610cde565b610cdb6001600160701b038916610cae8684611746565b610cb89190612127565b6001600160701b038916610ccc8685611746565b610cd69190612127565b611ce2565b98505b60008911610d415760405162461bcd60e51b815260206004820152602a60248201527f54696465426974537761703a20494e53554646494349454e545f4c495155494460448201526912551657d3525395115160b21b6064820152608401610482565b610d4b8a8a611c53565b610d5786868a8a611803565b8115610d8157600854610d7d906001600160701b0380821691600160701b900416611746565b600b555b604080518581526020810185905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001600c5550949695505050505050565b600080600c54600114610df45760405162461bcd60e51b815260040161048290612052565b6000600c81905580610e04610995565b506006546007546040516370a0823160e01b81523060048201529395509193506001600160a01b039081169291169060009083906370a082319060240160206040518083038186803b158015610e5957600080fd5b505afa158015610e6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9191906120cb565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a082319060240160206040518083038186803b158015610ed657600080fd5b505afa158015610eea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0e91906120cb565b30600090815260016020526040812054919250610f2b8888611a97565b60005490915080610f3c8487611746565b610f469190612127565b9a5080610f538486611746565b610f5d9190612127565b995060008b118015610f6f575060008a115b610fce5760405162461bcd60e51b815260206004820152602a60248201527f54696465426974537761703a20494e53554646494349454e545f4c495155494460448201526912551657d0955493915160b21b6064820152608401610482565b610fd83084611cfa565b610fe3878d8d6115fb565b610fee868d8c6115fb565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a082319060240160206040518083038186803b15801561102d57600080fd5b505afa158015611041573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106591906120cb565b6040516370a0823160e01b81523060048201529095506001600160a01b038716906370a082319060240160206040518083038186803b1580156110a757600080fd5b505afa1580156110bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110df91906120cb565b93506110ed85858b8b611803565b811561111757600854611113906001600160701b0380821691600160701b900416611746565b600b555b604080518c8152602081018c90526001600160a01b038e169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506001600c81905550915091565b60006109cc3384846119f1565b600c546001146111a25760405162461bcd60e51b815260040161048290612052565b6000600c556006546007546008546040516370a0823160e01b81523060048201526001600160a01b03938416939092169161124c9184918691611247916001600160701b039091169084906370a08231906024015b60206040518083038186803b15801561120f57600080fd5b505afa158015611223573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089a91906120cb565b6115fb565b6008546040516370a0823160e01b8152306004820152611299918391869161124791600160701b9091046001600160701b0316906001600160a01b038516906370a08231906024016111f7565b50506001600c5550565b428410156112ea5760405162461bcd60e51b8152602060048201526014602482015273151a5919509a5d14ddd85c0e881156141254915160621b6044820152606401610482565b6003546001600160a01b038816600090815260046020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b91908761133d8361213b565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001206040516020016113b692919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015611421573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906114575750886001600160a01b0316816001600160a01b0316145b6114a35760405162461bcd60e51b815260206004820152601e60248201527f54696465426974537761703a20494e56414c49445f5349474e415455524500006044820152606401610482565b6114ae89898961198f565b505050505050505050565b600c546001146114db5760405162461bcd60e51b815260040161048290612052565b6000600c556006546040516370a0823160e01b81523060048201526115f4916001600160a01b0316906370a082319060240160206040518083038186803b15801561152557600080fd5b505afa158015611539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155d91906120cb565b6007546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b1580156115a057600080fd5b505afa1580156115b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d891906120cb565b6008546001600160701b0380821691600160701b900416611803565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b179052915160009283928716916116879190612156565b6000604051808303816000865af19150503d80600081146116c4576040519150601f19603f3d011682016040523d82523d6000602084013e6116c9565b606091505b50915091508180156116f35750805115806116f35750808060200190518101906116f39190612172565b61173f5760405162461bcd60e51b815260206004820152601c60248201527f54696465426974537761703a205452414e534645525f4641494c4544000000006044820152606401610482565b5050505050565b600081158061176a5750828261175c8183612194565b92506117689083612127565b145b6109d05760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b6044820152606401610482565b6000826117ba83826120fa565b91508111156109d05760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b6044820152606401610482565b6000611814640100000000426121b3565b60085490915060009061183490600160e01b900463ffffffff16836121c7565b905060008163ffffffff1611801561185457506001600160701b03841615155b801561186857506001600160701b03831615155b156118f7578063ffffffff166118908561188186611d84565b6001600160e01b031690611d9d565b6001600160e01b03166118a39190612194565b600960008282546118b491906121ec565b909155505063ffffffff81166118cd8461188187611d84565b6001600160e01b03166118e09190612194565b600a60008282546118f191906121ec565b90915550505b6008805463ffffffff8416600160e01b026001600160e01b036001600160701b03898116600160701b9081026001600160e01b03199095168c83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a1505050505050565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316600090815260016020526040902054611a1490826117ad565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611a439082611db2565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119e49085815260200190565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611ae857600080fd5b505afa158015611afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b209190612204565b600b546001600160a01b038216158015945091925090611bcf578015611bca576000611b5b610c7e6001600160701b03888116908816611746565b90506000611b6883611be3565b905080821115611bc7576000611b8a611b8184846117ad565b60005490611746565b90506000611ba383611b9d866005611746565b90611db2565b90506000611bb18284612127565b90508015611bc357611bc38782611c53565b5050505b50505b611bdb565b8015611bdb576000600b555b505092915050565b60006003821115611c445750806000611bfd600283612127565b611c089060016121ec565b90505b81811015611c3e57905080600281611c238186612127565b611c2d91906121ec565b611c379190612127565b9050611c0b565b50919050565b8115611c4e575060015b919050565b600054611c609082611db2565b60009081556001600160a01b038316815260016020526040902054611c859082611db2565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611cd69085815260200190565b60405180910390a35050565b6000818310611cf15781611cf3565b825b9392505050565b6001600160a01b038216600090815260016020526040902054611d1d90826117ad565b6001600160a01b03831660009081526001602052604081209190915554611d4490826117ad565b60009081556040518281526001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611cd6565b60006109d0600160701b6001600160701b038416612221565b6000611cf36001600160701b03831684612250565b600082611dbf83826121ec565b91508110156109d05760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b6044820152606401610482565b6001600160a01b0381168114611e1c57600080fd5b50565b600080600080600060808688031215611e3757600080fd5b85359450602086013593506040860135611e5081611e07565b9250606086013567ffffffffffffffff80821115611e6d57600080fd5b818801915088601f830112611e8157600080fd5b813581811115611e9057600080fd5b896020828501011115611ea257600080fd5b9699959850939650602001949392505050565b60005b83811015611ed0578181015183820152602001611eb8565b83811115611edf576000848401525b50505050565b6020815260008251806020840152611f04816040850160208701611eb5565b601f01601f19169190910160400192915050565b60008060408385031215611f2b57600080fd5b8235611f3681611e07565b946020939093013593505050565b600080600060608486031215611f5957600080fd5b8335611f6481611e07565b92506020840135611f7481611e07565b929592945050506040919091013590565b60008060408385031215611f9857600080fd5b8235611fa381611e07565b91506020830135611fb381611e07565b809150509250929050565b600060208284031215611fd057600080fd5b8135611cf381611e07565b600080600080600080600060e0888a031215611ff657600080fd5b873561200181611e07565b9650602088013561201181611e07565b95506040880135945060608801359350608088013560ff8116811461203557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b602080825260139082015272151a5919509a5d14ddd85c0e881313d0d2d151606a1b604082015260600190565b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b6000602082840312156120dd57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008282101561210c5761210c6120e4565b500390565b634e487b7160e01b600052601260045260246000fd5b60008261213657612136612111565b500490565b600060001982141561214f5761214f6120e4565b5060010190565b60008251612168818460208701611eb5565b9190910192915050565b60006020828403121561218457600080fd5b81518015158114611cf357600080fd5b60008160001904831182151516156121ae576121ae6120e4565b500290565b6000826121c2576121c2612111565b500690565b600063ffffffff838116908316818110156121e4576121e46120e4565b039392505050565b600082198211156121ff576121ff6120e4565b500190565b60006020828403121561221657600080fd5b8151611cf381611e07565b60006001600160e01b0382811684821681151582840482111615612247576122476120e4565b02949350505050565b60006001600160e01b038381168061226a5761226a612111565b9216919091049291505056fea26469706673582212201c73a1aee077750fbdda6e1a5d05ab08b39ce6a7c641ffd98fbb162264457cdb64736f6c63430008090033a26469706673582212208585cbf063cc64c82fff78990c6804a3d7898203ce37ac198dc07944ac79733564736f6c63430008090033