0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80638129fc1c116100f9578063c83abb8511610097578063d06ca61f11610071578063d06ca61f146103c9578063dfab3092146103dc578063e30c3978146103ef578063f2fde38b1461040057600080fd5b8063c83abb8514610390578063c9d35da6146103a3578063ca5ff577146103b657600080fd5b80638da5cb5b116100d35780638da5cb5b14610346578063a251c70814610357578063a7bf11d81461036a578063c8389f301461037d57600080fd5b80638129fc1c14610318578063861b1d15146103205780638cd10afe1461033357600080fd5b80635b16ebb711610166578063715018a611610140578063715018a6146102ec578063782d2b53146102f457806379ba5097146102fd5780637cd40c1f1461030557600080fd5b80635b16ebb7146102a35780635da553ef146102c65780636f8a644e146102d957600080fd5b806301f84bae146101ae5780631372ab92146101d757806320bec12c1461020a57806321fccb481461021f578063422c375814610240578063472b43f314610290575b600080fd5b6101c16101bc3660046147fc565b610413565b6040516101ce9190614863565b60405180910390f35b6101fa6101e5366004614876565b60986020526000908152604090205460ff1681565b60405190151581526020016101ce565b61021d6102183660046148a1565b6108be565b005b61023261022d366004614925565b6108f1565b6040519081526020016101ce565b61027861024e366004614980565b6001600160a01b039182166000908152609960209081526040808320938516835292905220541690565b6040516001600160a01b0390911681526020016101ce565b61023261029e3660046149ae565b610c2a565b6101fa6102b1366004614876565b60976020526000908152604090205460ff1681565b61021d6102d4366004614a18565b61115c565b6101c16102e73660046147fc565b611258565b61021d61126b565b61023260001981565b61021d61127f565b610232610313366004614a63565b6112f1565b61021d6114ec565b6101c161032e366004614b67565b611605565b610232610341366004614bbf565b6121e1565b6033546001600160a01b0316610278565b610232610365366004614bbf565b61226c565b610232610378366004614925565b6124c4565b61023261038b366004614a63565b612be5565b6101c161039e366004614b67565b613043565b61021d6103b13660046148a1565b61337b565b6102326103c4366004614bf4565b6133ae565b6101c16103d7366004614c4c565b6133df565b6102326103ea366004614cf1565b61368b565b6034546001600160a01b0316610278565b61021d61040e366004614876565b613913565b6001600160a01b03821660009081526098602052604090205460609060ff16156104f057826001600160a01b031663293577506040518163ffffffff1660e01b815260040160206040518083038186803b15801561047057600080fd5b505afa158015610484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a89190614d58565b6001600160401b038111156104bf576104bf614a9e565b6040519080825280602002602001820160405280156104e8578160200160208202803683370190505b5090506108b8565b826001600160a01b03166328cc61d56040518163ffffffff1660e01b815260040160206040518083038186803b15801561052957600080fd5b505afa15801561053d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105619190614d58565b6001600160401b0381111561057857610578614a9e565b6040519080825280602002602001820160405280156105a1578160200160208202803683370190505b5090506000836001600160a01b031663c531e24f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105df57600080fd5b505afa1580156105f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106179190614d71565b9050600061062585856139d2565b905060006106bc8383886001600160a01b03166372cf105d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561066757600080fd5b505afa15801561067b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069f9190614d58565b815181106106af576106af614d8e565b60200260200101516139d2565b905060005b866001600160a01b03166328cc61d56040518163ffffffff1660e01b815260040160206040518083038186803b1580156106fa57600080fd5b505afa15801561070e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107329190614d58565b8110156108b357866001600160a01b03166372cf105d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561077257600080fd5b505afa158015610786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107aa9190614d58565b8110156107ee578281815181106107c3576107c3614d8e565b60200260200101518582815181106107dd576107dd614d8e565b6020026020010181815250506108a1565b81876001600160a01b03166372cf105d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561082857600080fd5b505afa15801561083c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108609190614d58565b61086a9083614dba565b8151811061087a5761087a614d8e565b602002602001015185828151811061089457610894614d8e565b6020026020010181815250505b806108ab81614dd1565b9150506106c1565b505050505b92915050565b6108c6613cb8565b6001600160a01b03919091166000908152609760205260409020805460ff1916911515919091179055565b6001600160a01b038416600090815260976020526040812054859060ff166109345760405162461bcd60e51b815260040161092b90614dec565b60405180910390fd5b84849050866001600160a01b031663293577506040518163ffffffff1660e01b815260040160206040518083038186803b15801561097157600080fd5b505afa158015610985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a99190614d58565b146109c65760405162461bcd60e51b815260040161092b90614e30565b610a0386868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613d1292505050565b60005b866001600160a01b031663293577506040518163ffffffff1660e01b815260040160206040518083038186803b158015610a3f57600080fd5b505afa158015610a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a779190614d58565b811015610b125760405163c661065760e01b815260048101829052610b00906001600160a01b0389169063c66106579060240160206040518083038186803b158015610ac257600080fd5b505afa158015610ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afa9190614d71565b88613e0e565b80610b0a81614dd1565b915050610a06565b506040516318b7662d60e31b81526001600160a01b0387169063c5bb316890610b4390889088908890600401614e77565b602060405180830381600087803b158015610b5d57600080fd5b505af1158015610b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b959190614d58565b91506000866001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610bd257600080fd5b505afa158015610be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0a9190614d71565b9050610c206001600160a01b0382163385613eb1565b5050949350505050565b6000610c34613fcc565b6000610c73878686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133df92505050565b9050858160018351610c859190614dba565b81518110610c9557610c95614d8e565b60200260200101511015610cbb5760405162461bcd60e51b815260040161092b90614ebd565b610cfa33308988886000818110610cd457610cd4614d8e565b9050602002016020810190610ce99190614876565b6001600160a01b0316929190614026565b60008585610d09600182614dba565b818110610d1857610d18614d8e565b9050602002016020810190610d2d9190614876565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a082319060240160206040518083038186803b158015610d6e57600080fd5b505afa158015610d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da69190614d58565b905060005b610db6600187614dba565b811015611029576000610e1a888884818110610dd457610dd4614d8e565b9050602002016020810190610de99190614876565b8989610df6866001614f09565b818110610e0557610e05614d8e565b905060200201602081019061024e9190614876565b90506001600160a01b038116610e425760405162461bcd60e51b815260040161092b90614f21565b6000610e74828a8a86818110610e5a57610e5a614d8e565b9050602002016020810190610e6f9190614876565b61414a565b90506000610e98838b8b610e89886001614f09565b818110610e5a57610e5a614d8e565b9050610eca8a8a86818110610eaf57610eaf614d8e565b9050602002016020810190610ec49190614876565b84613e0e565b6001600160a01b03831660009081526098602052604090205460ff1615610f8157604051630b68372160e31b81526004810183905260248101829052604481018d9052600060648201526001600160a01b03841690635b41b90890608401602060405180830381600087803b158015610f4257600080fd5b505af1158015610f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7a9190614d58565b9b50611013565b604051631190c9d560e21b81526004810183905260248101829052604481018d9052600060648201526001600160a01b03841690634643275490608401602060405180830381600087803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110109190614d58565b9b505b505050808061102190614dd1565b915050610dab565b50808686611038600182614dba565b81811061104757611047614d8e565b905060200201602081019061105c9190614876565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a082319060240160206040518083038186803b15801561109d57600080fd5b505afa1580156110b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d59190614d58565b6110df9190614dba565b9250868310156111015760405162461bcd60e51b815260040161092b90614ebd565b61114784848888611113600182614dba565b81811061112257611122614d8e565b90506020020160208101906111379190614876565b6001600160a01b03169190613eb1565b50506111536001606555565b95945050505050565b611164613cb8565b6000611170828561414a565b9050600061117e838561414a565b9050600019821415801561119457506000198114155b6111fd5760405162461bcd60e51b815260206004820152603460248201527f537461626c655377617048656c7065723a20746f6b656e20646f6573206e6f74604482015273081b585d18da081d1bc81cdd18589b19541bdbdb60621b606482015260840161092b565b50506001600160a01b03928316600081815260996020818152604080842096881684529581528583208054979095166001600160a01b0319978816811790955590815284822092825291909152919091208054909216179055565b606061126483836139d2565b9392505050565b611273613cb8565b61127d60006144f0565b565b6034546001600160a01b031633146112e85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206f6e6c792070656e64696e67206f776e65722063616e206044820152651858d8d95c1d60d21b606482015260840161092b565b61127d336144f0565b6001600160a01b038416600090815260976020526040812054859060ff1661132b5760405162461bcd60e51b815260040161092b90614dec565b6000866001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561136657600080fd5b505afa15801561137a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139e9190614d71565b90506113b56001600160a01b038216333089614026565b6113bf8188613e0e565b6040516343a50ad760e01b81526004810187905260248101869052604481018590526000906001600160a01b038916906343a50ad790606401602060405180830381600087803b15801561141257600080fd5b505af1158015611426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144a9190614d58565b60405163c661065760e01b8152600481018890529091506000906001600160a01b038a169063c66106579060240160206040518083038186803b15801561149057600080fd5b505afa1580156114a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c89190614d71565b90506114de6001600160a01b0382163384613eb1565b509250505b50949350505050565b600054610100900460ff161580801561150c5750600054600160ff909116105b806115265750303b158015611526575060005460ff166001145b6115895760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161092b565b6000805460ff1916600117905580156115ac576000805461ff0019166101001790555b6115b4614542565b6115bc614571565b8015611602576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b038316600090815260976020526040902054606090849060ff166116425760405162461bcd60e51b815260040161092b90614dec565b6001600160a01b03851660009081526098602052604090205460ff16156116ab5760405162461bcd60e51b815260206004820152601f60248201527f537461626c655377617048656c7065723a206f6e6c79206d657461506f6f6c00604482015260640161092b565b8251856001600160a01b03166328cc61d56040518163ffffffff1660e01b815260040160206040518083038186803b1580156116e657600080fd5b505afa1580156116fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171e9190614d58565b1461173b5760405162461bcd60e51b815260040161092b90614f6a565b6000856001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561177657600080fd5b505afa15801561178a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ae9190614d71565b90506117c56001600160a01b038216333088614026565b6117cf8187613e0e565b506000856001600160a01b031663293577506040518163ffffffff1660e01b815260040160206040518083038186803b15801561180b57600080fd5b505afa15801561181f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118439190614d58565b6001600160401b0381111561185a5761185a614a9e565b604051908082528060200260200182016040528015611883578160200160208202803683370190505b5090506000866001600160a01b0316633da575a16040518163ffffffff1660e01b815260040160206040518083038186803b1580156118c157600080fd5b505afa1580156118d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f99190614d58565b6001600160401b0381111561191057611910614a9e565b604051908082528060200260200182016040528015611939578160200160208202803683370190505b5090506000876001600160a01b03166328cc61d56040518163ffffffff1660e01b815260040160206040518083038186803b15801561197757600080fd5b505afa15801561198b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119af9190614d58565b6001600160401b038111156119c6576119c6614a9e565b6040519080825280602002602001820160405280156119ef578160200160208202803683370190505b50905060005b886001600160a01b03166372cf105d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a2e57600080fd5b505afa158015611a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a669190614d58565b811015611ab657868181518110611a7f57611a7f614d8e565b6020026020010151848281518110611a9957611a99614d8e565b602090810291909101015280611aae81614dd1565b9150506119f5565b506040516311ff98d160e11b81526000906001600160a01b038a16906323ff31a290611ae8908b908890600401614fb4565b600060405180830381600087803b158015611b0257600080fd5b505af1158015611b16573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b3e9190810190614fcd565b90506000818a6001600160a01b03166372cf105d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b7c57600080fd5b505afa158015611b90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb49190614d58565b81518110611bc457611bc4614d8e565b6020026020010151905060005b8a6001600160a01b0316633da575a16040518163ffffffff1660e01b815260040160206040518083038186803b158015611c0a57600080fd5b505afa158015611c1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c429190614d58565b811015611d0d5788818c6001600160a01b03166372cf105d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8457600080fd5b505afa158015611c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbc9190614d58565b611cc69190614f09565b81518110611cd657611cd6614d8e565b6020026020010151858281518110611cf057611cf0614d8e565b602090810291909101015280611d0581614dd1565b915050611bd1565b5060008a6001600160a01b031663c531e24f6040518163ffffffff1660e01b815260040160206040518083038186803b158015611d4957600080fd5b505afa158015611d5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d819190614d71565b90506000816001600160a01b03166323ff31a284886040518363ffffffff1660e01b8152600401611db3929190614fb4565b600060405180830381600087803b158015611dcd57600080fd5b505af1158015611de1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e099190810190614fcd565b905060005b8c6001600160a01b03166328cc61d56040518163ffffffff1660e01b815260040160206040518083038186803b158015611e4757600080fd5b505afa158015611e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7f9190614d58565b8110156121d05760008d6001600160a01b03166372cf105d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ec157600080fd5b505afa158015611ed5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef99190614d58565b821015611fb75760405163c661065760e01b8152600481018390526001600160a01b038f169063c66106579060240160206040518083038186803b158015611f4057600080fd5b505afa158015611f54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f789190614d71565b9050858281518110611f8c57611f8c614d8e565b6020026020010151878381518110611fa657611fa6614d8e565b602002602001018181525050612164565b8d6001600160a01b03166395910b878f6001600160a01b03166372cf105d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611fff57600080fd5b505afa158015612013573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120379190614d58565b6120419085614dba565b6040518263ffffffff1660e01b815260040161205f91815260200190565b60206040518083038186803b15801561207757600080fd5b505afa15801561208b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120af9190614d71565b9050828e6001600160a01b03166372cf105d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156120eb57600080fd5b505afa1580156120ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121239190614d58565b61212d9084614dba565b8151811061213d5761213d614d8e565b602002602001015187838151811061215757612157614d8e565b6020026020010181815250505b600087838151811061217857612178614d8e565b602002602001015111156121bd576121bd3388848151811061219c5761219c614d8e565b6020026020010151836001600160a01b0316613eb19092919063ffffffff16565b50806121c881614dd1565b915050611e0e565b50939b9a5050505050505050505050565b604051636aa5072d60e01b815260048101839052602481018290526000906001600160a01b03851690636aa5072d906044015b60206040518083038186803b15801561222c57600080fd5b505afa158015612240573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122649190614d58565b949350505050565b6001600160a01b03831660009081526098602052604081205460ff161561229f576122988484846121e1565b9050611264565b6000846001600160a01b031663c531e24f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156122da57600080fd5b505afa1580156122ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123129190614d71565b90506000856001600160a01b03166372cf105d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561234f57600080fd5b505afa158015612363573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123879190614d58565b9050808410156123a55761239c8686866121e1565b92505050611264565b60006123b18286614dba565b604051636aa5072d60e01b815260048101889052602481018490529091506000906001600160a01b03891690636aa5072d9060440160206040518083038186803b1580156123fe57600080fd5b505afa158015612412573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124369190614d58565b604051636aa5072d60e01b815260048101829052602481018490529091506001600160a01b03851690636aa5072d9060440160206040518083038186803b15801561248057600080fd5b505afa158015612494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b89190614d58565b98975050505050505050565b6001600160a01b038416600090815260976020526040812054859060ff166124fe5760405162461bcd60e51b815260040161092b90614dec565b6001600160a01b03861660009081526098602052604090205460ff16156125675760405162461bcd60e51b815260206004820152601f60248201527f537461626c655377617048656c7065723a206f6e6c79206d657461506f6f6c00604482015260640161092b565b84849050866001600160a01b03166328cc61d56040518163ffffffff1660e01b815260040160206040518083038186803b1580156125a457600080fd5b505afa1580156125b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125dc9190614d58565b146125f95760405162461bcd60e51b815260040161092b90614e30565b60608061267787878a6001600160a01b03166372cf105d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561263a57600080fd5b505afa15801561264e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126729190614d58565b6145a0565b80925081935050506000886001600160a01b031663c531e24f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156126ba57600080fd5b505afa1580156126ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f29190614d71565b90506126fe8183613d12565b60005b816001600160a01b031663293577506040518163ffffffff1660e01b815260040160206040518083038186803b15801561273a57600080fd5b505afa15801561274e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127729190614d58565b81101561280d5760405163c661065760e01b8152600481018290526127fb906001600160a01b0384169063c66106579060240160206040518083038186803b1580156127bd57600080fd5b505afa1580156127d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f59190614d71565b83613e0e565b8061280581614dd1565b915050612701565b506040516318b7662d60e31b81526000906001600160a01b0383169063c5bb31689061283f908690859060040161505d565b602060405180830381600087803b15801561285957600080fd5b505af115801561286d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128919190614d58565b90506000848b6001600160a01b03166372cf105d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156128cf57600080fd5b505afa1580156128e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129079190614d58565b8151811061291757612917614d8e565b60200260200101818152505061292d8a85613d12565b80848b6001600160a01b03166372cf105d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561296857600080fd5b505afa15801561297c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a09190614d58565b815181106129b0576129b0614d8e565b60200260200101818152505060005b8a6001600160a01b031663293577506040518163ffffffff1660e01b815260040160206040518083038186803b1580156129f857600080fd5b505afa158015612a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a309190614d58565b811015612acb5760405163c661065760e01b815260048101829052612ab9906001600160a01b038d169063c66106579060240160206040518083038186803b158015612a7b57600080fd5b505afa158015612a8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab39190614d71565b8c613e0e565b80612ac381614dd1565b9150506129bf565b506040516318b7662d60e31b81526001600160a01b038b169063c5bb316890612afa9087908b9060040161505d565b602060405180830381600087803b158015612b1457600080fd5b505af1158015612b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4c9190614d58565b955060008a6001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015612b8957600080fd5b505afa158015612b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc19190614d71565b9050612bd76001600160a01b0382163389613eb1565b505050505050949350505050565b6001600160a01b038416600090815260976020526040812054859060ff16612c1f5760405162461bcd60e51b815260040161092b90614dec565b6001600160a01b03861660009081526098602052604090205460ff1615612c5357612c4c868686866112f1565b91506114e3565b6000866001600160a01b03166372cf105d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612c8e57600080fd5b505afa158015612ca2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc69190614d58565b905080851015612ce457612cdc878787876112f1565b9250506114e3565b6000876001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d1f57600080fd5b505afa158015612d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d579190614d71565b9050612d6e6001600160a01b03821633308a614026565b612d788189613e0e565b6040516343a50ad760e01b81526004810188905260248101839052600060448201819052906001600160a01b038a16906343a50ad790606401602060405180830381600087803b158015612dcb57600080fd5b505af1158015612ddf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e039190614d58565b90506000896001600160a01b031663c531e24f6040518163ffffffff1660e01b815260040160206040518083038186803b158015612e4057600080fd5b505afa158015612e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e789190614d71565b90506000816001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015612eb557600080fd5b505afa158015612ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eed9190614d71565b905060006001600160a01b03831663c6610657612f0a888d614dba565b6040518263ffffffff1660e01b8152600401612f2891815260200190565b60206040518083038186803b158015612f4057600080fd5b505afa158015612f54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f789190614d71565b9050612f84828d613e0e565b60006001600160a01b0384166343a50ad786612fa08a8f614dba565b6040516001600160e01b031960e085901b16815260048101929092526024820152604481018d9052606401602060405180830381600087803b158015612fe557600080fd5b505af1158015612ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061301d9190614d58565b90506130336001600160a01b0383163383613eb1565b9c9b505050505050505050505050565b6001600160a01b038316600090815260976020526040902054606090849060ff166130805760405162461bcd60e51b815260040161092b90614dec565b8251856001600160a01b031663293577506040518163ffffffff1660e01b815260040160206040518083038186803b1580156130bb57600080fd5b505afa1580156130cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f39190614d58565b146131105760405162461bcd60e51b815260040161092b90614f6a565b6000856001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561314b57600080fd5b505afa15801561315f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131839190614d71565b905061319a6001600160a01b038216333088614026565b6131a48187613e0e565b6040516311ff98d160e11b81526000906001600160a01b038816906323ff31a2906131d59089908990600401614fb4565b600060405180830381600087803b1580156131ef57600080fd5b505af1158015613203573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261322b9190810190614fcd565b905060005b876001600160a01b031663293577506040518163ffffffff1660e01b815260040160206040518083038186803b15801561326957600080fd5b505afa15801561327d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a19190614d58565b8110156133705760405163c661065760e01b8152600481018290526000906001600160a01b038a169063c66106579060240160206040518083038186803b1580156132eb57600080fd5b505afa1580156132ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133239190614d71565b9050600083838151811061333957613339614d8e565b6020026020010151111561335d5761335d3384848151811061219c5761219c614d8e565b508061336881614dd1565b915050613230565b509695505050505050565b613383613cb8565b6001600160a01b03919091166000908152609860205260409020805460ff1916911515919091179055565b604051635bf2741f60e01b81526000906001600160a01b03851690635bf2741f90612214908690869060040161507f565b606060028251101561343d5760405162461bcd60e51b815260206004820152602160248201527f537461626c655377617048656c7065723a2070617468206c656e677468203c206044820152601960f91b606482015260840161092b565b81516001600160401b0381111561345657613456614a9e565b60405190808252806020026020018201604052801561347f578160200160208202803683370190505b509050828160008151811061349657613496614d8e565b60200260200101818152505060005b600183516134b39190614dba565b8110156136845760006135298483815181106134d1576134d1614d8e565b6020026020010151858460016134e79190614f09565b815181106134f7576134f7614d8e565b60200260200101516001600160a01b039182166000908152609960209081526040808320938516835292905220541690565b90506001600160a01b0381166135515760405162461bcd60e51b815260040161092b90614f21565b60006135768286858151811061356957613569614d8e565b602002602001015161414a565b9050600061359a838761358a876001614f09565b8151811061356957613569614d8e565b9050826001600160a01b031663c5a1528683838888815181106135bf576135bf614d8e565b60200260200101516040518463ffffffff1660e01b81526004016135f6939291909283526020830191909152604082015260600190565b60206040518083038186803b15801561360e57600080fd5b505afa158015613622573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136469190614d58565b85613652866001614f09565b8151811061366257613662614d8e565b602002602001018181525050505050808061367c90614dd1565b9150506134a5565b5092915050565b6001600160a01b03841660009081526098602052604081205460ff16156136b457506000612264565b6060806136f58686896001600160a01b03166372cf105d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561263a57600080fd5b80925081935050506000876001600160a01b031663c531e24f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561373857600080fd5b505afa15801561374c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137709190614d71565b90506000816001600160a01b0316635bf2741f84886040518363ffffffff1660e01b81526004016137a292919061507f565b60206040518083038186803b1580156137ba57600080fd5b505afa1580156137ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f29190614d58565b90506000896001600160a01b03166372cf105d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561382f57600080fd5b505afa158015613843573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138679190614d58565b90508185828151811061387c5761387c614d8e565b6020908102919091010152604051635bf2741f60e01b81526001600160a01b038b1690635bf2741f906138b59088908b9060040161507f565b60206040518083038186803b1580156138cd57600080fd5b505afa1580156138e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139059190614d58565b9a9950505050505050505050565b61391b613cb8565b6001600160a01b0381166139805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161092b565b603480546001600160a01b0319166001600160a01b03838116918217909255603354604051919216907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270090600090a350565b60606000836001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015613a0f57600080fd5b505afa158015613a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a479190614d71565b90506000816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015613a8457600080fd5b505afa158015613a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613abc9190614d58565b9050846001600160a01b031663293577506040518163ffffffff1660e01b815260040160206040518083038186803b158015613af757600080fd5b505afa158015613b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2f9190614d58565b6001600160401b03811115613b4657613b46614a9e565b604051908082528060200260200182016040528015613b6f578160200160208202803683370190505b50925060005b856001600160a01b031663293577506040518163ffffffff1660e01b815260040160206040518083038186803b158015613bae57600080fd5b505afa158015613bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be69190614d58565b811015613caf57604051634903b0d160e01b8152600481018290526000906001600160a01b03881690634903b0d19060240160206040518083038186803b158015613c3057600080fd5b505afa158015613c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c689190614d58565b905082613c7587836150a3565b613c7f91906150c2565b858381518110613c9157613c91614d8e565b60209081029190910101525080613ca781614dd1565b915050613b75565b50505092915050565b6033546001600160a01b0316331461127d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161092b565b60005b8151811015613e095760405163c661065760e01b8152600481018290526000906001600160a01b0385169063c66106579060240160206040518083038186803b158015613d6157600080fd5b505afa158015613d75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d999190614d71565b90506000838381518110613daf57613daf614d8e565b60200260200101511115613df657613df63330858581518110613dd457613dd4614d8e565b6020026020010151846001600160a01b0316614026909392919063ffffffff16565b5080613e0181614dd1565b915050613d15565b505050565b604051636eb1769f60e11b81523060048201526001600160a01b038281166024830152600019919084169063dd62ed3e9060440160206040518083038186803b158015613e5a57600080fd5b505afa158015613e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e929190614d58565b14613ead57613ead6001600160a01b038316826000196145e2565b5050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691613f0d91906150e4565b6000604051808303816000865af19150503d8060008114613f4a576040519150601f19603f3d011682016040523d82523d6000602084013e613f4f565b606091505b5091509150818015613f79575080511580613f79575080806020019051810190613f79919061511f565b613fc55760405162461bcd60e51b815260206004820152601a60248201527f5361666545524332303a205452414e534645525f4641494c4544000000000000604482015260640161092b565b5050505050565b6002606554141561401f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161092b565b6002606555565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b179052915160009283929088169161408a91906150e4565b6000604051808303816000865af19150503d80600081146140c7576040519150601f19603f3d011682016040523d82523d6000602084013e6140cc565b606091505b50915091508180156140f65750805115806140f65750808060200190518101906140f6919061511f565b6141425760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a205452414e534645525f46524f4d5f4641494c454400604482015260640161092b565b505050505050565b6001600160a01b038216600090815260986020526040812054819060ff161561429d57836001600160a01b031663293577506040518163ffffffff1660e01b815260040160206040518083038186803b1580156141a657600080fd5b505afa1580156141ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141de9190614d58565b905060005b818110156142975760405163c661065760e01b8152600481018290526001600160a01b0386169063c66106579060240160206040518083038186803b15801561422b57600080fd5b505afa15801561423f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142639190614d71565b6001600160a01b0316846001600160a01b031614156142855791506108b89050565b8061428f81614dd1565b9150506141e3565b506144de565b6000846001600160a01b03166372cf105d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156142d857600080fd5b505afa1580156142ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143109190614d58565b9050846001600160a01b03166328cc61d56040518163ffffffff1660e01b815260040160206040518083038186803b15801561434b57600080fd5b505afa15801561435f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143839190614d58565b915060005b828110156144db576000828210156144195760405163c661065760e01b8152600481018390526001600160a01b0388169063c66106579060240160206040518083038186803b1580156143da57600080fd5b505afa1580156143ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144129190614d71565b90506144a3565b6001600160a01b0387166395910b876144328585614dba565b6040518263ffffffff1660e01b815260040161445091815260200190565b60206040518083038186803b15801561446857600080fd5b505afa15801561447c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144a09190614d71565b90505b806001600160a01b0316866001600160a01b031614156144c8575092506108b8915050565b50806144d381614dd1565b915050614388565b50505b506000199392505050565b6001606555565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166145695760405162461bcd60e51b815260040161092b9061513c565b61127d6146f6565b600054610100900460ff166145985760405162461bcd60e51b815260040161092b9061513c565b61127d61471d565b6060806145c7856000866145b5876001614f09565b926145c293929190615187565b614744565b91506145d86145c285858189615187565b9050935093915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b179052915160009283929087169161463e91906150e4565b6000604051808303816000865af19150503d806000811461467b576040519150601f19603f3d011682016040523d82523d6000602084013e614680565b606091505b50915091508180156146aa5750805115806146aa5750808060200190518101906146aa919061511f565b613fc55760405162461bcd60e51b815260206004820152601960248201527f5361666545524332303a20415050524f56455f4641494c454400000000000000604482015260640161092b565b600054610100900460ff166112e85760405162461bcd60e51b815260040161092b9061513c565b600054610100900460ff166144e95760405162461bcd60e51b815260040161092b9061513c565b60606000826001600160401b0381111561476057614760614a9e565b604051908082528060200260200182016040528015614789578160200160208202803683370190505b50905060005b838110156147df578484828181106147a9576147a9614d8e565b905060200201358282815181106147c2576147c2614d8e565b6020908102919091010152806147d781614dd1565b91505061478f565b509392505050565b6001600160a01b038116811461160257600080fd5b6000806040838503121561480f57600080fd5b823561481a816147e7565b946020939093013593505050565b600081518084526020808501945080840160005b838110156148585781518752958201959082019060010161483c565b509495945050505050565b6020815260006112646020830184614828565b60006020828403121561488857600080fd5b8135611264816147e7565b801515811461160257600080fd5b600080604083850312156148b457600080fd5b82356148bf816147e7565b915060208301356148cf81614893565b809150509250929050565b60008083601f8401126148ec57600080fd5b5081356001600160401b0381111561490357600080fd5b6020830191508360208260051b850101111561491e57600080fd5b9250929050565b6000806000806060858703121561493b57600080fd5b8435614946816147e7565b935060208501356001600160401b0381111561496157600080fd5b61496d878288016148da565b9598909750949560400135949350505050565b6000806040838503121561499357600080fd5b823561499e816147e7565b915060208301356148cf816147e7565b6000806000806000608086880312156149c657600080fd5b853594506020860135935060408601356001600160401b038111156149ea57600080fd5b6149f6888289016148da565b9094509250506060860135614a0a816147e7565b809150509295509295909350565b600080600060608486031215614a2d57600080fd5b8335614a38816147e7565b92506020840135614a48816147e7565b91506040840135614a58816147e7565b809150509250925092565b60008060008060808587031215614a7957600080fd5b8435614a84816147e7565b966020860135965060408601359560600135945092505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614adc57614adc614a9e565b604052919050565b60006001600160401b03821115614afd57614afd614a9e565b5060051b60200190565b600082601f830112614b1857600080fd5b81356020614b2d614b2883614ae4565b614ab4565b82815260059290921b84018101918181019086841115614b4c57600080fd5b8286015b848110156133705780358352918301918301614b50565b600080600060608486031215614b7c57600080fd5b8335614b87816147e7565b92506020840135915060408401356001600160401b03811115614ba957600080fd5b614bb586828701614b07565b9150509250925092565b600080600060608486031215614bd457600080fd5b8335614bdf816147e7565b95602085013595506040909401359392505050565b600080600060608486031215614c0957600080fd5b8335614c14816147e7565b925060208401356001600160401b03811115614c2f57600080fd5b614c3b86828701614b07565b9250506040840135614a5881614893565b60008060408385031215614c5f57600080fd5b823591506020808401356001600160401b03811115614c7d57600080fd5b8401601f81018613614c8e57600080fd5b8035614c9c614b2882614ae4565b81815260059190911b82018301908381019088831115614cbb57600080fd5b928401925b82841015614ce2578335614cd3816147e7565b82529284019290840190614cc0565b80955050505050509250929050565b60008060008060608587031215614d0757600080fd5b8435614d12816147e7565b935060208501356001600160401b03811115614d2d57600080fd5b614d39878288016148da565b9094509250506040850135614d4d81614893565b939692955090935050565b600060208284031215614d6a57600080fd5b5051919050565b600060208284031215614d8357600080fd5b8151611264816147e7565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015614dcc57614dcc614da4565b500390565b6000600019821415614de557614de5614da4565b5060010190565b60208082526024908201527f537461626c655377617048656c7065723a204e6f74204b6f6e76657274657220604082015263141bdbdb60e21b606082015260800190565b60208082526027908201527f537461626c655377617048656c7065723a20616d6f756e7473206c656e206e6f6040820152660e840dac2e8c6d60cb1b606082015260800190565b6040808252810183905260006001600160fb1b03841115614e9757600080fd5b8360051b8086606085013760009083016060019081526020909201929092529392505050565b6020808252602c908201527f537461626c655377617048656c7065723a20696e73756666696369656e74206f60408201526b1d5d1c1d5d08185b5bdd5b9d60a21b606082015260800190565b60008219821115614f1c57614f1c614da4565b500190565b60208082526029908201527f537461626c655377617048656c7065723a2063616e6e6f742066696e6420737460408201526818589b19481c1bdbdb60ba1b606082015260800190565b6020808252602a908201527f537461626c655377617048656c7065723a206d696e416d6f756e7473206c656e604082015269040dcdee840dac2e8c6d60b31b606082015260800190565b8281526040602082015260006122646040830184614828565b60006020808385031215614fe057600080fd5b82516001600160401b03811115614ff657600080fd5b8301601f8101851361500757600080fd5b8051615015614b2882614ae4565b81815260059190911b8201830190838101908783111561503457600080fd5b928401925b8284101561505257835182529284019290840190615039565b979650505050505050565b6040815260006150706040830185614828565b90508260208301529392505050565b6040815260006150926040830185614828565b905082151560208301529392505050565b60008160001904831182151516156150bd576150bd614da4565b500290565b6000826150df57634e487b7160e01b600052601260045260246000fd5b500490565b6000825160005b8181101561510557602081860181015185830152016150eb565b81811115615114576000828501525b509190910192915050565b60006020828403121561513157600080fd5b815161126481614893565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000808585111561519757600080fd5b838611156151a457600080fd5b5050600583901b019391909203915056fea2646970667358221220e7c5b012fc4d36ced389658483bf0858403645d5ac13bd33ea062ac3b349ec5164736f6c63430008090033