60806040526001600c55348015610014575f80fd5b50604080518082018252600a8152692ab734b9bbb0b8102b1960b11b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fbfcc8ef98ffbf7b6c3fec7bf5185b566b9863e35a9d83acd49ad6824b5969738818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b03191633179055612127806101055f395ff3fe608060405234801561000f575f80fd5b5060043610610147575f3560e01c8063022c0d9f1461014b57806306fdde03146101605780630902f1ac1461019f578063095ea7b3146101d35780630dfe1681146101f657806318160ddd1461021657806323b872dd1461022c57806330adf81f1461023f578063313ce567146102535780633644e5151461026d578063485cc955146102765780635909c0d5146102895780635a3d5493146102925780636a6278421461029b57806370a08231146102ae5780637464fc3d146102cd5780637ecebe00146102d657806389afcb44146102f557806395d89b411461031d578063a9059cbb14610342578063ba9a7a5614610355578063bc25cf771461035e578063c45a015514610371578063d21220a714610384578063d505accf14610397578063dd62ed3e146103aa578063fff6cae9146103d4575b5f80fd5b61015e610159366004611c71565b6103dc565b005b6101896040518060400160405280600a8152602001692ab734b9bbb0b8102b1960b11b81525081565b6040516101969190611d20565b60405180910390f35b6101a76108c4565b604080516001600160701b03948516815293909216602084015263ffffffff1690820152606001610196565b6101e66101e1366004611d52565b6108ee565b6040519015158152602001610196565b600654610209906001600160a01b031681565b6040516101969190611d7c565b61021e5f5481565b604051908152602001610196565b6101e661023a366004611d90565b610904565b61021e5f805160206120d283398151915281565b61025b601281565b60405160ff9091168152602001610196565b61021e60035481565b61015e610284366004611dce565b610994565b61021e60095481565b61021e600a5481565b61021e6102a9366004611e05565b610a13565b61021e6102bc366004611e05565b60016020525f908152604090205481565b61021e600b5481565b61021e6102e4366004611e05565b60046020525f908152604090205481565b610308610303366004611e05565b610cc4565b60408051928352602083019190915201610196565b610189604051806040016040528060068152602001652aa72496ab1960d11b81525081565b6101e6610350366004611d52565b611019565b61021e6103e881565b61015e61036c366004611e05565b611025565b600554610209906001600160a01b031681565b600754610209906001600160a01b031681565b61015e6103a5366004611e20565b611140565b61021e6103b8366004611dce565b600260209081525f928352604080842090915290825290205481565b61015e61133c565b600c546001146104075760405162461bcd60e51b81526004016103fe90611e91565b60405180910390fd5b5f600c558415158061041857505f84115b6104725760405162461bcd60e51b815260206004820152602560248201527f556e697377617056323a20494e53554646494349454e545f4f55545055545f416044820152641353d5539560da1b60648201526084016103fe565b5f8061047c6108c4565b5091509150816001600160701b0316871080156104a15750806001600160701b031686105b6104e45760405162461bcd60e51b815260206004820152602160248201525f805160206120928339815191526044820152605960f81b60648201526084016103fe565b6006546007545f9182916001600160a01b039182169190811690891682148015906105215750806001600160a01b0316896001600160a01b031614155b6105655760405162461bcd60e51b8152602060048201526015602482015274556e697377617056323a20494e56414c49445f544f60581b60448201526064016103fe565b8a1561057657610576828a8d611465565b891561058757610587818a8c611465565b86156105ef576040516304347a1760e21b81526001600160a01b038a16906310d1e85c906105c19033908f908f908e908e90600401611ebc565b5f604051808303815f87803b1580156105d8575f80fd5b505af11580156105ea573d5f803e3d5ffd5b505050505b6040516370a0823160e01b81526001600160a01b038316906370a082319061061b903090600401611d7c565b602060405180830381865afa158015610636573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065a9190611f07565b6040516370a0823160e01b81529094506001600160a01b038216906370a0823190610689903090600401611d7c565b602060405180830381865afa1580156106a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c89190611f07565b925050505f89856001600160701b03166106e29190611f32565b83116106ee575f61070b565b6107018a6001600160701b038716611f32565b61070b9084611f32565b90505f6107218a6001600160701b038716611f32565b831161072d575f61074a565b6107408a6001600160701b038716611f32565b61074a9084611f32565b90505f82118061075957505f81115b6107b15760405162461bcd60e51b8152602060048201526024808201527f556e697377617056323a20494e53554646494349454e545f494e5055545f414d60448201526313d5539560e21b60648201526084016103fe565b5f6107d26107c08460036115a4565b6107cc876103e86115a4565b9061160a565b90505f6107e36107c08460036115a4565b9050610808620f42406108026001600160701b038b8116908b166115a4565b906115a4565b61081283836115a4565b101561084f5760405162461bcd60e51b815260206004820152600c60248201526b556e697377617056323a204b60a01b60448201526064016103fe565b505061085d8484888861165f565b60408051838152602081018390529081018c9052606081018b90526001600160a01b038a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350506001600c55505050505050505050565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b5f6108fa338484611845565b5060015b92915050565b6001600160a01b0383165f9081526002602090815260408083203384529091528120545f191461097f576001600160a01b0384165f90815260026020908152604080832033845290915290205461095b908361160a565b6001600160a01b0385165f9081526002602090815260408083203384529091529020555b61098a8484846118a6565b5060019392505050565b6005546001600160a01b031633146109e55760405162461bcd60e51b81526020600482015260146024820152732ab734b9bbb0b82b191d102327a92124a22222a760611b60448201526064016103fe565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b5f600c54600114610a365760405162461bcd60e51b81526004016103fe90611e91565b5f600c81905580610a456108c4565b506006546040516370a0823160e01b81529294509092505f916001600160a01b03909116906370a0823190610a7e903090600401611d7c565b602060405180830381865afa158015610a99573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610abd9190611f07565b6007546040516370a0823160e01b81529192505f916001600160a01b03909116906370a0823190610af2903090600401611d7c565b602060405180830381865afa158015610b0d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b319190611f07565b90505f610b47836001600160701b03871661160a565b90505f610b5d836001600160701b03871661160a565b90505f610b6a8787611936565b5f8054919250819003610ba257610b8f6103e86107cc610b8a87876115a4565b611a68565b9850610b9d5f6103e8611ad6565b610be9565b610be66001600160701b038916610bb986846115a4565b610bc39190611f59565b6001600160701b038916610bd786856115a4565b610be19190611f59565b611b4f565b98505b5f8911610c365760405162461bcd60e51b815260206004820152602860248201525f805160206120928339815191526044820152671657d3525395115160c21b60648201526084016103fe565b610c408a8a611ad6565b610c4c86868a8a61165f565b8115610c7657600854610c72906001600160701b0380821691600160701b9004166115a4565b600b555b604080518581526020810185905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001600c5550949695505050505050565b5f80600c54600114610ce85760405162461bcd60e51b81526004016103fe90611e91565b5f600c81905580610cf76108c4565b506006546007546040516370a0823160e01b81529395509193506001600160a01b03908116929116905f9083906370a0823190610d38903090600401611d7c565b602060405180830381865afa158015610d53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d779190611f07565b90505f826001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610da69190611d7c565b602060405180830381865afa158015610dc1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de59190611f07565b305f90815260016020526040812054919250610e018888611936565b5f5490915080610e1184876115a4565b610e1b9190611f59565b9a5080610e2884866115a4565b610e329190611f59565b99505f8b118015610e4257505f8a115b610e8c5760405162461bcd60e51b815260206004820152602860248201525f805160206120928339815191526044820152671657d0955493915160c21b60648201526084016103fe565b610e963084611b66565b610ea1878d8d611465565b610eac868d8c611465565b6040516370a0823160e01b81526001600160a01b038816906370a0823190610ed8903090600401611d7c565b602060405180830381865afa158015610ef3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f179190611f07565b6040516370a0823160e01b81529095506001600160a01b038716906370a0823190610f46903090600401611d7c565b602060405180830381865afa158015610f61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f859190611f07565b9350610f9385858b8b61165f565b8115610fbd57600854610fb9906001600160701b0380821691600160701b9004166115a4565b600b555b604080518c8152602081018c90526001600160a01b038e169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506001600c81905550915091565b5f6108fa3384846118a6565b600c546001146110475760405162461bcd60e51b81526004016103fe90611e91565b5f600c556006546007546008546040516370a0823160e01b81526001600160a01b0393841693909216916110e391849186916110de916001600160701b039091169084906370a082319061109f903090600401611d7c565b602060405180830381865afa1580156110ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107cc9190611f07565b611465565b61113681846110de6008600e9054906101000a90046001600160701b03166001600160701b0316856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161109f9190611d7c565b50506001600c5550565b428410156111855760405162461bcd60e51b8152602060048201526012602482015271155b9a5cddd85c158c8e881156141254915160721b60448201526064016103fe565b6003546001600160a01b0388165f90815260046020526040812080549192915f805160206120d2833981519152918b918b918b9190876111c483611f6c565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161123d92919061190160f01b81526002810192909252602282015260420190565b60408051601f1981840301815282825280516020918201205f80855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa1580156112a5573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116158015906112db5750886001600160a01b0316816001600160a01b0316145b6113265760405162461bcd60e51b815260206004820152601c60248201527b556e697377617056323a20494e56414c49445f5349474e415455524560201b60448201526064016103fe565b611331898989611845565b505050505050505050565b600c5460011461135e5760405162461bcd60e51b81526004016103fe90611e91565b5f600c556006546040516370a0823160e01b815261145e916001600160a01b0316906370a0823190611394903090600401611d7c565b602060405180830381865afa1580156113af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d39190611f07565b6007546040516370a0823160e01b81526001600160a01b03909116906370a0823190611403903090600401611d7c565b602060405180830381865afa15801561141e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114429190611f07565b6008546001600160701b0380821691600160701b90041661165f565b6001600c55565b60408051808201825260198152787472616e7366657228616464726573732c75696e743235362960381b60209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b17905291515f9283928716916114ec9190611f84565b5f604051808303815f865af19150503d805f8114611525576040519150601f19603f3d011682016040523d82523d5f602084013e61152a565b606091505b50915091508180156115545750805115806115545750808060200190518101906115549190611f9f565b61159d5760405162461bcd60e51b815260206004820152601a602482015279155b9a5cddd85c158c8e881514905394d1915497d1905253115160321b60448201526064016103fe565b5050505050565b5f8115806115c7575082826115b98183611fbe565b92506115c59083611f59565b145b6108fe5760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b60448201526064016103fe565b5f826116168382611f32565b91508111156108fe5760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b60448201526064016103fe565b6001600160701b03841180159061167d57506001600160701b038311155b6116bf5760405162461bcd60e51b8152602060048201526013602482015272556e697377617056323a204f564552464c4f5760681b60448201526064016103fe565b5f6116ce600160201b42611fd5565b6008549091505f906116ed90600160e01b900463ffffffff1683611fe8565b90505f8163ffffffff1611801561170c57506001600160701b03841615155b801561172057506001600160701b03831615155b156117ad578063ffffffff166117488561173986611bda565b6001600160e01b031690611bf2565b6001600160e01b031661175b9190611fbe565b60095f82825461176b919061200c565b909155505063ffffffff81166117848461173987611bda565b6001600160e01b03166117979190611fbe565b600a5f8282546117a7919061200c565b90915550505b6008805463ffffffff8416600160e01b026001600160e01b036001600160701b03898116600160701b9081026001600160e01b03199095168c83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a1505050505050565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383165f908152600160205260409020546118c8908261160a565b6001600160a01b038085165f9081526001602052604080822093909355908416815220546118f69082611c06565b6001600160a01b038084165f8181526001602052604090819020939093559151908516905f805160206120b2833981519152906118999085815260200190565b5f8060055f9054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015611988573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ac919061201f565b600b546001600160a01b038216158015945091925090611a55578015611a50575f6119e6610b8a6001600160701b038881169088166115a4565b90505f6119f283611a68565b905080821115611a4d575f611a12611a0a848461160a565b5f54906115a4565b90505f611a2a83611a248660056115a4565b90611c06565b90505f611a378284611f59565b90508015611a4957611a498782611ad6565b5050505b50505b611a60565b8015611a60575f600b555b505092915050565b5f6003821115611ac75750805f611a80600283611f59565b611a8b90600161200c565b90505b81811015611ac157905080600281611aa68186611f59565b611ab0919061200c565b611aba9190611f59565b9050611a8e565b50919050565b8115611ad1575060015b919050565b5f54611ae29082611c06565b5f9081556001600160a01b038316815260016020526040902054611b069082611c06565b6001600160a01b0383165f818152600160205260408082209390935591519091905f805160206120b283398151915290611b439085815260200190565b60405180910390a35050565b5f818310611b5d5781611b5f565b825b9392505050565b6001600160a01b0382165f90815260016020526040902054611b88908261160a565b6001600160a01b0383165f9081526001602052604081209190915554611bae908261160a565b5f9081556040518281526001600160a01b038416905f805160206120b283398151915290602001611b43565b5f6108fe600160701b6001600160701b03841661203a565b5f611b5f6001600160701b0383168461206c565b5f82611c12838261200c565b91508110156108fe5760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b60448201526064016103fe565b6001600160a01b0381168114611c6e575f80fd5b50565b5f805f805f60808688031215611c85575f80fd5b85359450602086013593506040860135611c9e81611c5a565b925060608601356001600160401b0380821115611cb9575f80fd5b818801915088601f830112611ccc575f80fd5b813581811115611cda575f80fd5b896020828501011115611ceb575f80fd5b9699959850939650602001949392505050565b5f5b83811015611d18578181015183820152602001611d00565b50505f910152565b602081525f8251806020840152611d3e816040850160208701611cfe565b601f01601f19169190910160400192915050565b5f8060408385031215611d63575f80fd5b8235611d6e81611c5a565b946020939093013593505050565b6001600160a01b0391909116815260200190565b5f805f60608486031215611da2575f80fd5b8335611dad81611c5a565b92506020840135611dbd81611c5a565b929592945050506040919091013590565b5f8060408385031215611ddf575f80fd5b8235611dea81611c5a565b91506020830135611dfa81611c5a565b809150509250929050565b5f60208284031215611e15575f80fd5b8135611b5f81611c5a565b5f805f805f805f60e0888a031215611e36575f80fd5b8735611e4181611c5a565b96506020880135611e5181611c5a565b95506040880135945060608801359350608088013560ff81168114611e74575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b602080825260119082015270155b9a5cddd85c158c8e881313d0d2d151607a1b604082015260600190565b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f909201601f19160101949350505050565b5f60208284031215611f17575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156108fe576108fe611f1e565b634e487b7160e01b5f52601260045260245ffd5b5f82611f6757611f67611f45565b500490565b5f60018201611f7d57611f7d611f1e565b5060010190565b5f8251611f95818460208701611cfe565b9190910192915050565b5f60208284031215611faf575f80fd5b81518015158114611b5f575f80fd5b80820281158282048414176108fe576108fe611f1e565b5f82611fe357611fe3611f45565b500690565b63ffffffff82811682821603908082111561200557612005611f1e565b5092915050565b808201808211156108fe576108fe611f1e565b5f6020828403121561202f575f80fd5b8151611b5f81611c5a565b6001600160e01b0382811682821681810283169291811582850482141761206357612063611f1e565b50505092915050565b5f6001600160e01b038381168061208557612085611f45565b9216919091049291505056fe556e697377617056323a20494e53554646494349454e545f4c49515549444954ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9a264697066735822122069824ac64f42d543c3aa45a0b6833f357b9af439d2530592dca9e457292ace0464736f6c63430008170033