0x608060405234801561001057600080fd5b5061292f806100206000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80639ed4bf66116100a2578063c8b86bd011610071578063c8b86bd01461026a578063cd494aa114610313578063d1a03a5814610326578063eb9e634514610339578063fab670981461034c57600080fd5b80639ed4bf66146101ca578063a19e7f7c146101dd578063a3b4b1c0146101f0578063a3d558f51461024057600080fd5b8063306497fa116100de578063306497fa14610171578063454ca409146101845780634f0e0ef31461019757806390877b9e146101b757600080fd5b8063061e68c2146101105780630dd5a83614610136578063146a12a9146101495780631d2ddd731461015c575b600080fd5b61012361011e366004611f3d565b61036e565b6040519081526020015b60405180910390f35b610123610144366004611fbb565b61064f565b610123610157366004611ffc565b61099c565b61016f61016a36600461204b565b610b20565b005b61012361017f366004611fbb565b610c91565b61016f61019236600461208c565b610e07565b61019f610fa2565b6040516001600160a01b03909116815260200161012d565b61016f6101c536600461208c565b611048565b6101236101d8366004611ffc565b611213565b61016f6101eb3660046120c5565b611372565b6102306101fe3660046121ce565b6001600160a01b031660009081526000805160206128ba8339815191526020526040902054600160a01b900460ff1690565b604051901515815260200161012d565b61025361024e3660046121ce565b6114db565b6040805192835260ff90911660208301520161012d565b6102e66102783660046121ce565b6040805160608082018352600080835260208084018290529284018190526001600160a01b0394851681526000805160206128ba83398151915283528390208351918201845280549485168252600160a01b90940460ff161515918101919091526001909201549082015290565b6040805182516001600160a01b03168152602080840151151590820152918101519082015260600161012d565b61019f6103213660046121ce565b6115fc565b610123610334366004611fbb565b6116ab565b61016f6103473660046121ce565b61194f565b61035f61035a3660046121eb565b611a15565b60405161012d9392919061225e565b60008060005b865181101561062e57600080306001600160a01b031663dc8cb8d38985815181106103a1576103a16122f5565b60200260200101516040518263ffffffff1660e01b81526004016103d491906001600160a01b0391909116815260200190565b602060405180830381865afa1580156103f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610415919061231b565b604051637b0c68e960e01b81526001600160a01b03821660048201529091503090637b0c68e990602401602060405180830381865afa15801561045c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104809190612338565b1561055d57306001600160a01b031663146a12a982898b87815181106104a8576104a86122f5565b60200260200101518d88815181106104c2576104c26122f5565b60209081029190910101516040516001600160e01b031960e087901b1681526001600160a01b0394851660048201529284166024840152921660448201526064810191909152608401602060405180830381865afa158015610528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054c9190612355565b6105569083612384565b915061060d565b306001600160a01b0316630dd5a83689858151811061057e5761057e6122f5565b6020026020010151898c8781518110610599576105996122f5565b60200260200101516040518463ffffffff1660e01b81526004016105bf9392919061239c565b602060405180830381865afa1580156105dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106009190612355565b61060a9083612384565b91505b6106178285612384565b935050508080610626906123c0565b915050610374565b508261063b8260646123db565b61064591906123fa565b9695505050505050565b60405163028ed2c760e61b81526001600160a01b0384166004820152600090309063a3b4b1c090602401602060405180830381865afa158015610696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ba9190612338565b8015610729575060405163028ed2c760e61b81526001600160a01b0384166004820152309063a3b4b1c090602401602060405180830381865afa158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190612338565b1561092a5760405163a3d558f560e01b81526001600160a01b0385166004820152600090309063a3d558f5906024016040805180830381865afa158015610774573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610798919061242d565b5060405163a3d558f560e01b81526001600160a01b0386166004820152909150600090309063a3d558f5906024016040805180830381865afa1580156107e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610806919061242d565b5090506000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086d9190612459565b60ff1690506000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d69190612459565b60ff1690506000836108e983600a61255a565b6108f390876123db565b6108fd91906123fa565b905061090a83600a61255a565b61091482896123db565b61091e91906123fa565b95505050505050610995565b6040516318324bfd60e11b8152309063306497fa906109519087908790879060040161239c565b602060405180830381865afa15801561096e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109929190612355565b90505b9392505050565b604051637133f0bf60e11b81526001600160a01b03851660048201526000908190309063e267e17e90602401600060405180830381865afa1580156109e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a0d91908101906125c1565b6040516318324bfd60e11b81529091506000908190309063306497fa90610a3c908b908b908a9060040161239c565b602060405180830381865afa158015610a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d9190612355565b60208401515190915060005b81811015610afb57876001600160a01b031685602001518281518110610ab157610ab16122f5565b60200260200101516001600160a01b03161415610ae95784604001518181518110610ade57610ade6122f5565b602002602001015193505b80610af3816123c0565b915050610a89565b50612710610b0984846123db565b610b1391906123fa565b9998505050505050505050565b3360008181526000805160206128da833981519152602081905260409091205462010000900460ff16610b6e5760405162461bcd60e51b8152600401610b65906126cb565b60405180910390fd5b6001600160a01b0386811660009081526000805160206128ba833981519152602081905260409091205490911615610be85760405162461bcd60e51b815260206004820152601d60248201527f4750433a20616c726561647920616464656420707269636520666565640000006044820152606401610b65565b604080516060810182526001600160a01b0388811680835288151560208085018281528587018b81528e861660008181528a85528990209751885493511515600160a01b026001600160a81b03199094169716969096179190911786555160019095019490945584519081529283018890529290917fc6cf2a5220b33a86a45644f5ce90ac98fd5f789a5838d87fae6fe48929bde700910160405180910390a350505050505050565b60006000805160206128ba83398151915281610cb4610cae610fa2565b86611d2e565b90506001600160a01b038116610ccf57600092505050610995565b60028201546000906001600160a01b0316638c86f1e48887610cef610fa2565b60405160e085901b6001600160e01b03191681526001600160a01b03938416600482015260248101929092529091166044820152606401602060405180830381865afa158015610d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d679190612355565b60028401549091506001600160a01b0316638c86f1e4610d85610fa2565b6040516001600160e01b031960e084901b1681526001600160a01b039182166004820152602481018590529089166044820152606401602060405180830381865afa158015610dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfc9190612355565b979650505050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320547fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c906001600160a01b03163314610e9b5760405162461bcd60e51b815260206004820152601660248201527526bab9ba1037bbb7103a34329031b7b73a3930b1ba1760511b6044820152606401610b65565b7f4c1a6c8c1bcacb76238a0a6ada3e822f131c00c7ec99b37afe0974a8ac8046d6546000805160206128ba83398151915290600160a01b900460ff1615610f2f5760405162461bcd60e51b815260206004820152602260248201527f416c726561647920696e697469616c697a656420507269636520436f6e73756d60448201526132b960f11b6064820152608401610b65565b6002810180546001830180546001600160a01b038089166001600160a01b031990921682179092559086166001600160a81b031990921691909117600160a01b179091556040517f62e4eda6ede74e63f7ab0d011e7ffcc60756bab96bf6ccc3230e63929b85d64d90600090a250505050565b7f4c1a6c8c1bcacb76238a0a6ada3e822f131c00c7ec99b37afe0974a8ac8046d554604080516312a9293f60e21b815290516000926000805160206128ba833981519152926001600160a01b0390911691634aa4a4fc916004808201926020929091908290030181865afa15801561101e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611042919061231b565b91505090565b3360008181526000805160206128da833981519152602081905260409091205462010000900460ff1661108d5760405162461bcd60e51b8152600401610b65906126cb565b6001600160a01b03841660009081526000805160206128ba8339815191526020819052604090912054600160a01b900460ff161561110d5760405162461bcd60e51b815260206004820152601a60248201527f4750433a207072696365206665656420697320656e61626c65640000000000006044820152606401610b65565b6001600160a01b0385166111635760405162461bcd60e51b815260206004820152601760248201527f4750433a20746f6b656e2061646472657373206e756c6c0000000000000000006044820152606401610b65565b6001600160a01b0384166111b25760405162461bcd60e51b815260206004820152601660248201527511d410ce8819995959081859191c995cdcc81b9d5b1b60521b6044820152606401610b65565b6001600160a01b0380861660008181526020849052604080822080549489166001600160a81b03199095168517600160a01b179055517f6471dce0518061dac24889e06526368f6f7ee7d7640122e1fb5f9ac4d081a2509190a35050505050565b604051637133f0bf60e11b81526001600160a01b03841660048201526000908190309063e267e17e90602401600060405180830381865afa15801561125c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261128491908101906125c1565b6040516318324bfd60e11b81529091506000908190309063306497fa906112b3908b908b908a9060040161239c565b602060405180830381865afa1580156112d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f49190612355565b60208401515190915060005b81811015610afb57876001600160a01b031685602001518281518110611328576113286122f5565b60200260200101516001600160a01b031614156113605784604001518181518110611355576113556122f5565b602002602001015193505b8061136a816123c0565b915050611300565b3360008181526000805160206128da833981519152602081905260409091205462010000900460ff166113b75760405162461bcd60e51b8152600401610b65906126cb565b845186511480156113c9575082518451145b80156113d6575085518451145b6113df57600080fd5b60005b865181101561146d5761145b878281518110611400576114006122f5565b602002602001015187838151811061141a5761141a6122f5565b6020026020010151878481518110611434576114346122f5565b602002602001015187858151811061144e5761144e6122f5565b6020026020010151610b20565b80611465816123c0565b9150506113e2565b508460405161147c91906126f7565b60405180910390208660405161149291906126f7565b60405180910390207ff55807824f6d60e882981d24ca7156661d8f6f1b214f45540aa273055d319eff86866040516114cb929190612736565b60405180910390a3505050505050565b6001600160a01b0381811660009081526000805160206128ba83398151915260208190526040808320548151633fabe5a360e21b81529151939485948593929091169163feaf968c9160048083019260a09291908290030181865afa158015611548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156c91906127cd565b5050506001600160a01b0380881660009081526020868152604080832054815163313ce56760e01b81529151959750929550919092169263313ce567926004808401939192918290030181865afa1580156115cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ef9190612459565b9196919550909350505050565b6000806000805160206128ba833981519152604051631462c94560e21b81526001600160a01b0385166004820152909150600090309063518b25149060240160a060405180830381865afa158015611658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167c919061281d565b80519091506001600160a01b03161561169757519392505050565b50600101546001600160a01b031692915050565b60405163028ed2c760e61b81526001600160a01b0383166004820152600090309063a3b4b1c090602401602060405180830381865afa1580156116f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117169190612338565b8015611785575060405163028ed2c760e61b81526001600160a01b0385166004820152309063a3b4b1c090602401602060405180830381865afa158015611761573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117859190612338565b1561092a5760405163a3d558f560e01b81526001600160a01b0384166004820152600090309063a3d558f5906024016040805180830381865afa1580156117d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f4919061242d565b5060405163a3d558f560e01b81526001600160a01b0387166004820152909150600090309063a3d558f5906024016040805180830381865afa15801561183e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611862919061242d565b5090506000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c99190612459565b60ff1690506000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561190e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119329190612459565b60ff16905060008461194583600a61255a565b6108f390866123db565b3360008181526000805160206128da833981519152602081905260409091205462010000900460ff166119945760405162461bcd60e51b8152600401610b65906126cb565b60006000805160206128ba8339815191526001600160a01b038516600081815260208390526040808220805460ff600160a01b808304821615810260ff60a01b19909316929092179283905592519596509004161515927f1b1a2a50fbdc2466c36fc27c4ba1ca85021f06b81901cbc68f2da1d9307dd8eb9190a350505050565b6060808060006000805160206128ba8339815191529050845167ffffffffffffffff811115611a4657611a46611dc2565b604051908082528060200260200182016040528015611a6f578160200160208202803683370190505b509150845167ffffffffffffffff811115611a8c57611a8c611dc2565b604051908082528060200260200182016040528015611ab5578160200160208202803683370190505b509350845167ffffffffffffffff811115611ad257611ad2611dc2565b604051908082528060200260200182016040528015611afb578160200160208202803683370190505b50925060005b8551811015611d25576000826000016000888481518110611b2457611b246122f5565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc491906127cd565b505050915050826000016000888481518110611be257611be26122f5565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c829190612459565b848381518110611c9457611c946122f5565b602002602001019060ff16908160ff1681525050868281518110611cba57611cba6122f5565b6020026020010151868381518110611cd457611cd46122f5565b60200260200101906001600160a01b031690816001600160a01b03168152505080858381518110611d0757611d076122f5565b60209081029190910101525080611d1d816123c0565b915050611b01565b50509193909250565b6000806000805160206128ba833981519152600281015460405163298d501f60e11b81526001600160a01b038781166004830152868116602483015292935091169063531aa03e90604401602060405180830381865afa158015611d96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dba919061231b565b949350505050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715611dfb57611dfb611dc2565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611e2a57611e2a611dc2565b604052919050565b600067ffffffffffffffff821115611e4c57611e4c611dc2565b5060051b60200190565b600082601f830112611e6757600080fd5b81356020611e7c611e7783611e32565b611e01565b82815260059290921b84018101918181019086841115611e9b57600080fd5b8286015b84811015611eb65780358352918301918301611e9f565b509695505050505050565b6001600160a01b0381168114611ed657600080fd5b50565b600082601f830112611eea57600080fd5b81356020611efa611e7783611e32565b82815260059290921b84018101918181019086841115611f1957600080fd5b8286015b84811015611eb6578035611f3081611ec1565b8352918301918301611f1d565b60008060008060808587031215611f5357600080fd5b843567ffffffffffffffff80821115611f6b57600080fd5b611f7788838901611e56565b95506020870135915080821115611f8d57600080fd5b50611f9a87828801611ed9565b9350506040850135611fab81611ec1565b9396929550929360600135925050565b600080600060608486031215611fd057600080fd5b8335611fdb81611ec1565b92506020840135611feb81611ec1565b929592945050506040919091013590565b6000806000806080858703121561201257600080fd5b843561201d81611ec1565b9350602085013561202d81611ec1565b92506040850135611fab81611ec1565b8015158114611ed657600080fd5b6000806000806080858703121561206157600080fd5b843561206c81611ec1565b9350602085013561207c81611ec1565b92506040850135611fab8161203d565b6000806040838503121561209f57600080fd5b82356120aa81611ec1565b915060208301356120ba81611ec1565b809150509250929050565b600080600080608085870312156120db57600080fd5b843567ffffffffffffffff808211156120f357600080fd5b6120ff88838901611ed9565b955060209150818701358181111561211657600080fd5b61212289828a01611ed9565b95505060408701358181111561213757600080fd5b8701601f8101891361214857600080fd5b8035612156611e7782611e32565b81815260059190911b8201840190848101908b83111561217557600080fd5b928501925b8284101561219c57833561218d8161203d565b8252928501929085019061217a565b965050505060608701359150808211156121b557600080fd5b506121c287828801611e56565b91505092959194509250565b6000602082840312156121e057600080fd5b813561099581611ec1565b6000602082840312156121fd57600080fd5b813567ffffffffffffffff81111561221457600080fd5b611dba84828501611ed9565b600081518084526020808501945080840160005b8381101561225357815160ff1687529582019590820190600101612234565b509495945050505050565b606080825284519082018190526000906020906080840190828801845b828110156122a05781516001600160a01b03168452928401929084019060010161227b565b5050508381038285015285518082528683019183019060005b818110156122d5578351835292840192918401916001016122b9565b505084810360408601526122e98187612220565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b805161231681611ec1565b919050565b60006020828403121561232d57600080fd5b815161099581611ec1565b60006020828403121561234a57600080fd5b81516109958161203d565b60006020828403121561236757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156123975761239761236e565b500190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006000198214156123d4576123d461236e565b5060010190565b60008160001904831182151516156123f5576123f561236e565b500290565b60008261241757634e487b7160e01b600052601260045260246000fd5b500490565b805160ff8116811461231657600080fd5b6000806040838503121561244057600080fd5b825191506124506020840161241c565b90509250929050565b60006020828403121561246b57600080fd5b6109958261241c565b600181815b808511156124af5781600019048211156124955761249561236e565b808516156124a257918102915b93841c9390800290612479565b509250929050565b6000826124c657506001612554565b816124d357506000612554565b81600181146124e957600281146124f35761250f565b6001915050612554565b60ff8411156125045761250461236e565b50506001821b612554565b5060208310610133831016604e8410600b8410161715612532575081810a612554565b61253c8383612474565b80600019048211156125505761255061236e565b0290505b92915050565b600061099583836124b7565b600082601f83011261257757600080fd5b81516020612587611e7783611e32565b82815260059290921b840181019181810190868411156125a657600080fd5b8286015b84811015611eb657805183529183019183016125aa565b600060208083850312156125d457600080fd5b825167ffffffffffffffff808211156125ec57600080fd5b908401906080828703121561260057600080fd5b612608611dd8565b82518152838301518281111561261d57600080fd5b8301601f8101881361262e57600080fd5b805161263c611e7782611e32565b81815260059190911b8201860190868101908a83111561265b57600080fd5b928701925b8284101561268257835161267381611ec1565b82529287019290870190612660565b808886015250505050604083015193508184111561269f57600080fd5b6126ab87858501612566565b60408201526126bc6060840161230b565b60608201529695505050505050565b6020808252601290820152716e6f742061646420746f6b656e20726f6c6560701b604082015260600190565b815160009082906020808601845b8381101561272a5781516001600160a01b031685529382019390820190600101612705565b50929695505050505050565b604080825283519082018190526000906020906060840190828701845b82811015612771578151151584529284019290840190600101612753565b5050508381038285015284518082528583019183019060005b818110156127a65783518352928401929184019160010161278a565b5090979650505050505050565b805169ffffffffffffffffffff8116811461231657600080fd5b600080600080600060a086880312156127e557600080fd5b6127ee866127b3565b9450602086015193506040860151925060608601519150612811608087016127b3565b90509295509295909350565b600060a0828403121561282f57600080fd5b60405160a0810181811067ffffffffffffffff8211171561285257612852611dc2565b604052825161286081611ec1565b8152602083015161287081611ec1565b602082015260408301516128838161203d565b604082015260608301516002811061289a57600080fd5b606082015260808301516128ad8161203d565b6080820152939250505056fe4c1a6c8c1bcacb76238a0a6ada3e822f131c00c7ec99b37afe0974a8ac8046d47eab9f6194b2afda22cb00495e5224632ea597f3f4acdafa99041919662a1475a26469706673582212202bd91aeee888433aa4aab48eead581d3d7906228d68cea985e264b2e4a04c61264736f6c634300080a0033