0x608060405234801561001057600080fd5b50614f9c806100206000396000f3fe6080604052600436106101445760003560e01c80639f865422116100b6578063d1660f991161006f578063d1660f9914610365578063d3e1c28414610385578063e5b07cdb146103a5578063eb5625d9146103c5578063fa461e33146103e5578063fa483e721461040557600080fd5b80639f865422146102b2578063a8920d2b146102d2578063aa37e8aa146102e5578063aeba9ec114610305578063bbf717e014610325578063cac460ee1461034557600080fd5b806351a743161161010857806351a74316146101f257806357618804146102125780635c6913d7146102325780638a6a1e8514610252578063923b8a2a14610272578063981f3a601461029257600080fd5b80630c7e120914610150578063187806841461017257806323a69e75146101925780632c8958f6146101b25780633afe5f00146101d257600080fd5b3661014b57005b600080fd5b34801561015c57600080fd5b5061017061016b366004614143565b610425565b005b34801561017e57600080fd5b5061017061018d3660046141bf565b610462565b34801561019e57600080fd5b506101706101ad3660046141bf565b610476565b3480156101be57600080fd5b506101706101cd3660046141bf565b610642565b3480156101de57600080fd5b506101706101ed366004614229565b6107ce565b3480156101fe57600080fd5b5061017061020d36600461431d565b610af5565b34801561021e57600080fd5b5061017061022d3660046143fe565b610cd2565b34801561023e57600080fd5b5061017061024d366004614492565b610f04565b34801561025e57600080fd5b5061017061026d3660046144dd565b61100e565b34801561027e57600080fd5b5061017061028d3660046141bf565b611081565b34801561029e57600080fd5b506101706102ad36600461451e565b611257565b3480156102be57600080fd5b506101706102cd366004614570565b6112fc565b6101706102e03660046145d0565b6113db565b3480156102f157600080fd5b50610170610300366004614604565b6114d0565b34801561031157600080fd5b50610170610320366004614492565b6116b2565b34801561033157600080fd5b50610170610340366004614229565b611797565b34801561035157600080fd5b50610170610360366004614229565b611a91565b34801561037157600080fd5b506101706103803660046144dd565b611d07565b34801561039157600080fd5b506101706103a03660046141bf565b611d1b565b3480156103b157600080fd5b506101706103c0366004614492565b611d29565b3480156103d157600080fd5b506101706103e03660046144dd565b611e0e565b3480156103f157600080fd5b506101706104003660046141bf565b611e22565b34801561041157600080fd5b506101706104203660046141bf565b611fb4565b6000806104318361214f565b915091508161045d578060405162461bcd60e51b815260040161045491906146b8565b60405180910390fd5b505050565b610470848460018585612363565b50505050565b60008413806104855750600083135b6104c45760405162461bcd60e51b815260206004820152601060248201526f50616e63616b6556333a2044454c544160801b6044820152606401610454565b60006104d2828401846146cb565b90506000806000806104e7856000015161259b565b93509350935093506000610505610500868686866125e4565b61266e565b9050336001600160a01b0382161461052f5760405162461bcd60e51b81526004016104549061475a565b60008060008c1361055557866001600160a01b0316866001600160a01b0316108b61056c565b856001600160a01b0316876001600160a01b0316108c5b9150915081156105bf57876020015181146105ba5760405162461bcd60e51b815260206004820152600e60248201526d50616e63616b6556333a2054494160901b6044820152606401610454565b610612565b876020015160008d136105d2578c6105d4565b8b5b146106125760405162461bcd60e51b815260206004820152600e60248201526d50616e63616b6556333a20544f4160901b6044820152606401610454565b6106343382846106225788610624565b895b6001600160a01b031691906127df565b505050505050505050505050565b60008413806106515750600083135b61068e5760405162461bcd60e51b815260206004820152600e60248201526d416c67656272613a2044454c544160901b6044820152606401610454565b600061069c828401846146cb565b90506000806000806106b1856000015161259b565b935093509350935060006106ca610500868686866125e4565b9050336001600160a01b038216146106f45760405162461bcd60e51b81526004016104549061475a565b60008060008c1361071a57866001600160a01b0316866001600160a01b0316108b610731565b856001600160a01b0316876001600160a01b0316108c5b91509150811561077d57876020015181146105ba5760405162461bcd60e51b815260206004820152600c60248201526b416c67656272613a2054494160a01b6044820152606401610454565b876020015160008d13610790578c610792565b8b5b146106125760405162461bcd60e51b815260206004820152600c60248201526b416c67656272613a20544f4160a01b6044820152606401610454565b6001600160a01b038316600160ff1b84161515600f60f886901c1660008161088357600080856001600160a01b031663392f37e96040518163ffffffff1660e01b815260040160e06040518083038186803b15801561082c57600080fd5b505afa158015610840573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108649190614791565b50505093509350505084610878578161087a565b805b9250505061092a565b600182141561092a57600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160806040518083038186803b1580156108c857600080fd5b505afa1580156108dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109009190614833565b50506001600160701b031691506001600160701b03169150846109235781610925565b805b925050505b6040516370a0823160e01b81526001600160a01b0385811660048301526000916109b4918491908a16906370a08231906024015b60206040518083038186803b15801561097657600080fd5b505afa15801561098a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ae9190614887565b90612842565b905060008315610a43576040516378a051ad60e11b8152600481018390526001600160a01b03898116602483015287169063f140a35a9060440160206040518083038186803b158015610a0657600080fd5b505afa158015610a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3e9190614887565b610a5c565b610a5c86838760a063ffffffff60a01b8e16901c612857565b905060008086610a6e57600083610a72565b8260005b6040805160008152602081019182905263022c0d9f60e01b90915291935091506001600160a01b0389169063022c0d9f90610ab690859085908e90602481016148a0565b600060405180830381600087803b158015610ad057600080fd5b505af1158015610ae4573d6000803e3d6000fd5b505050505050505050505050505050565b8051825114610b165760405162461bcd60e51b8152600401610454906148d7565b6000610b2b6001600160a01b03861630612a69565b905060008111610b4d5760405162461bcd60e51b815260040161045490614919565b600080610b5986612b0a565b915091506000610b8e826001600160801b0316610b88856001600160801b031687612b5190919063ffffffff16565b90612b5d565b905060005b8651811015610cc757610bae896001600160a01b0316612b69565b8015610bd85750868181518110610bc757610bc761495e565b602002602001015160000151600014155b15610c015781878281518110610bf057610bf061495e565b602002602001015160400181815250505b6000868281518110610c1557610c1561495e565b60200260200101511115610c6a57610c6a82878381518110610c3957610c3961495e565b6020026020010151898481518110610c5357610c5361495e565b6020026020010151612bb49092919063ffffffff16565b600080610c8f898481518110610c8257610c8261495e565b602002602001015161214f565b9150915081610cb2578060405162461bcd60e51b815260040161045491906146b8565b50508080610cbf9061498a565b915050610b93565b505050505050505050565b6000600f85900b8181139113610ce85784610cf1565b610cf1856149a5565b94506000604051806040016040528085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250600f88900b60209091015290508615610e26578115610dff57876001600160a01b031663857f812f8688620c34fe1985604051602001610d7991906149d5565b6040516020818303038152906040526040518563ffffffff1660e01b8152600401610da79493929190614a07565b6040805180830381600087803b158015610dc057600080fd5b505af1158015610dd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df89190614a40565b5050610efa565b876001600160a01b03166359dd14368688620c35001985604051602001610d7991906149d5565b8115610e5257876001600160a01b0316632c4812528688620c34ff85604051602001610d7991906149d5565b876001600160a01b031663f094685a8688620c350185604051602001610e7891906149d5565b6040516020818303038152906040526040518563ffffffff1660e01b8152600401610ea69493929190614a07565b6040805180830381600087803b158015610ebf57600080fd5b505af1158015610ed3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef79190614a40565b50505b5050505050505050565b6040805160606020601f8501819004028201810183529181018381526000928291908690869081908501838280828437600092018290525093855250505060209091018790529091506001600160a01b0388169063c51c90299086908812610f6c5787610f75565b610f7588614a64565b8960008a12600087604051602001610f8d91906149d5565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610fbd96959493929190614a81565b6040805180830381600087803b158015610fd657600080fd5b505af1158015610fea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc79190614a40565b60006110236001600160a01b03851630612a69565b9050816001600160f01b03811682111561107a5760f083901c6000611061612710610b888461105b886001600160f01b038916612842565b90612b51565b90506110776001600160a01b0388168783612bef565b50505b5050505050565b6000841180156110915750600083115b6110d15760405162461bcd60e51b81526020600482015260116024820152704d6176657269636b56313a2044454c544160781b6044820152606401610454565b60006110df828401846146cb565b905060008060006110f38460000151612cb3565b6040516315e3ab2960e21b815233600482015292955090935091506001600160a01b0384169063578eaca49060240160206040518083038186803b15801561113a57600080fd5b505afa15801561114e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111729190614abe565b61118e5760405162461bcd60e51b81526004016104549061475a565b602084015160001280156111e75784602001518911156111e25760405162461bcd60e51b815260206004820152600f60248201526e4d6176657269636b56313a2054494160881b6044820152606401610454565b611236565b84602001516111f590614a64565b8810156112365760405162461bcd60e51b815260206004820152600f60248201526e4d6176657269636b56313a20544f4160881b6044820152606401610454565b610cc7338a836112465784610624565b856001600160a01b031691906127df565b600061129a61126e83670de0b6b3a7640000614adb565b610b88670de0b6b3a764000061105b611288886012614af3565b61129390600a614bee565b8a90612b5d565b604051638d7ef9bb60e01b81526001600160a01b0388811660048301526024820183905291925090851690638d7ef9bb90604401600060405180830381600087803b1580156112e857600080fd5b505af1158015610ef7573d6000803e3d6000fd5b60006113116001600160a01b03861630612a69565b905060008061131f86612b0a565b91509150600061134e826001600160801b0316610b88856001600160801b031687612b5190919063ffffffff16565b9050600081116113705760405162461bcd60e51b815260040161045490614919565b611382886001600160a01b0316612b69565b801561138e5750855115155b1561139b57604086018190525b84156113ac576113ac868287612bb4565b6000806113b88861214f565b9150915081610ef7578060405162461bcd60e51b815260040161045491906146b8565b60008151116114365760405162461bcd60e51b815260206004820152602160248201527f4f70656e4f6365616e3a20496e76616c69642063616c6c20706172616d6574656044820152603960f91b6064820152608401610454565b60005b81518110156114cc57306001600160a01b0316630c7e12098383815181106114635761146361495e565b60200260200101516040518263ffffffff1660e01b81526004016114879190614bfa565b600060405180830381600087803b1580156114a157600080fd5b505af11580156114b5573d6000803e3d6000fd5b5050505080806114c49061498a565b915050611439565b5050565b6000826001600160a01b0316846001600160a01b03161190506000806000806000896001600160a01b031663d66940276040518163ffffffff1660e01b815260040160a06040518083038186803b15801561152a57600080fd5b505afa15801561153e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115629190614c33565b945094509450945094508561157857848461157b565b83855b90955093508561158c57828261158f565b81835b6040516370a0823160e01b81526001600160a01b038d811660048301529295509093506000916115d5916001600160701b038916918d16906370a082319060240161095e565b905060006115f7856001600160701b0316856001600160701b03168486612ce3565b9050600080896116095760008361160d565b8260005b90925090506001600160a01b038e1663022c0d9f83838e60006040519080825280601f01601f191660200182016040528015611650576020820181803683370190505b506040518563ffffffff1660e01b815260040161167094939291906148a0565b600060405180830381600087803b15801561168a57600080fd5b505af115801561169e573d6000803e3d6000fd5b505050505050505050505050505050505050565b6000856116dd576116d8600173fffd8963efd1fc6a506488495d951d5263988d26614c91565b6116ed565b6116ed6401000276a36001614cb9565b90506000604051806040016040528085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060209081018890526040519192506001600160a01b038a16916324b31a0c9188918a918c918891611768918991016149d5565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610ea6959493929190614ce4565b604051632e0ae37560e01b81524260048201526001600160a01b03841690600160ff1b85161515908290632e0ae37590602401600060405180830381600087803b1580156117e457600080fd5b505af11580156117f8573d6000803e3d6000fd5b50505050600080600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561183b57600080fd5b505afa15801561184f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118739190614d1f565b50909250905084611885578181611888565b80825b6040516370a0823160e01b81526001600160a01b0389811660048301526001600160701b039384169750919092169450600093506118d592508591908a16906370a082319060240161095e565b905060008461195457856001600160a01b0316630ece72366040518163ffffffff1660e01b815260040160206040518083038186803b15801561191757600080fd5b505afa15801561192b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194f9190614d64565b6119c5565b856001600160a01b0316637d316e286040518163ffffffff1660e01b815260040160206040518083038186803b15801561198d57600080fd5b505afa1580156119a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c59190614d64565b6001600160701b031690506119da8183614af3565b915060006119f785858560a063ffffffff60a01b8f16901c612d48565b905060008087611a0957600083611a0d565b8260005b6040805160008152602081019182905263022c0d9f60e01b90915291935091506001600160a01b038a169063022c0d9f90611a5190859085908f90602481016148a0565b600060405180830381600087803b158015611a6b57600080fd5b505af1158015611a7f573d6000803e3d6000fd5b50505050505050505050505050505050565b6001600160a01b038316600160ff1b841615156000808080600160fc1b8916611b3057856001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611aed57600080fd5b505afa158015611b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b259190614d1f565b509092509050611ba6565b856001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401604080518083038186803b158015611b6857600080fd5b505afa158015611b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba09190614d7f565b90925090505b84611bb2578181611bb5565b80825b6040516370a0823160e01b81526001600160a01b0389811660048301526001600160701b03938416975091909216945060009350611c0292508591908a16906370a082319060240161095e565b90506000611c1f84848460a063ffffffff60a01b8e16901c612d48565b905060008086611c3157600083611c35565b8260005b91509150600160fd1b8b1660001415611cbe576040805160008152602081019182905263022c0d9f60e01b9091526001600160a01b0389169063022c0d9f90611c8790859085908e90602481016148a0565b600060405180830381600087803b158015611ca157600080fd5b505af1158015611cb5573d6000803e3d6000fd5b50505050611cfa565b6040516336cd320560e11b815260048101839052602481018290526001600160a01b038a81166044830152891690636d9a640a90606401610ab6565b5050505050505050505050565b61045d6001600160a01b0384168383612bef565b610470848460008585612363565b600085611d5457611d4f600173fffd8963efd1fc6a506488495d951d5263988d26614c91565b611d64565b611d646401000276a36001614cb9565b90506000604051806040016040528085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060209081018890526040519192506001600160a01b038a169163128acb089188918b918b918891611ddf918991016149d5565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610ea6959493929190614db2565b61045d6001600160a01b0384168383612d7f565b6000841380611e315750600083135b611e705760405162461bcd60e51b815260206004820152601060248201526f556e697377617056333a2044454c544160801b6044820152606401610454565b6000611e7e828401846146cb565b9050600080600080611e93856000015161259b565b93509350935093506000611eac610500868686866125e4565b9050336001600160a01b03821614611ed65760405162461bcd60e51b81526004016104549061475a565b60008060008c13611efc57866001600160a01b0316866001600160a01b0316108b611f13565b856001600160a01b0316876001600160a01b0316108c5b915091508115611f6157876020015181146105ba5760405162461bcd60e51b815260206004820152600e60248201526d556e697377617056333a2054494160901b6044820152606401610454565b876020015160008d13611f74578c611f76565b8b5b146106125760405162461bcd60e51b815260206004820152600e60248201526d556e697377617056333a20544f4160901b6044820152606401610454565b6000841380611fc35750600083135b6120055760405162461bcd60e51b81526020600482015260136024820152724b79626572456c61737469633a2044454c544160681b6044820152606401610454565b6000612013828401846146cb565b9050600080600080612028856000015161259b565b93509350935093506000612041610500868686866125e4565b9050336001600160a01b0382161461206b5760405162461bcd60e51b81526004016104549061475a565b60008060008c1361209157866001600160a01b0316866001600160a01b0316108b6120a8565b856001600160a01b0316876001600160a01b0316108c5b9150915081156120f957876020015181146105ba5760405162461bcd60e51b81526020600482015260116024820152704b79626572456c61737469633a2054494160781b6044820152606401610454565b876020015160008d1361210c578c61210e565b8b5b146106125760405162461bcd60e51b81526020600482015260116024820152704b79626572456c61737469633a20544f4160781b6044820152606401610454565b600060606121608360600151612ea3565b156121a65760405162461bcd60e51b815260206004820152601660248201527513dc195b93d8d9585b8e88139bdd08185b1b1bddd95960521b6044820152606401610454565b82516001600160a01b0381166121b95750305b83604001514710156122275760405162461bcd60e51b815260206004820152603160248201527f4f70656e4f6365616e3a20496e73756666696369656e742062616c616e636520604482015270199bdc88195e1d195c9b985b0818d85b1b607a1b6064820152608401610454565b600060606000866020015111156122ad57826001600160a01b03168660400151876020015190886060015160405161225f9190614ded565b600060405180830381858888f193505050503d806000811461229d576040519150601f19603f3d011682016040523d82523d6000602084013e6122a2565b606091505b509092509050612317565b826001600160a01b0316866040015187606001516040516122ce9190614ded565b60006040518083038185875af1925050503d806000811461230b576040519150601f19603f3d011682016040523d82523d6000602084013e612310565b606091505b5090925090505b81612357826040518060400160405280602081526020017f4f70656e4f6365616e2065787465726e616c2063616c6c206661696c65643a20815250612f73565b94509450505050915091565b60008511806123725750600084115b6123ad5760405162461bcd60e51b815260206004820152600c60248201526b695a554d693a2044454c544160a01b6044820152606401610454565b60006123bb828401846146cb565b90506000806000806123d085600001516131df565b604051635f65e63560e11b81526001600160a01b038085166004830152808416602483015262ffffff83166044830152949850929650909450925060009186169063becbcc6a9060640160206040518083038186803b15801561243257600080fd5b505afa158015612446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246a9190614e09565b9050336001600160a01b038216146124945760405162461bcd60e51b81526004016104549061475a565b6000808a6124b757856001600160a01b0316856001600160a01b0316108c6124ce565b846001600160a01b0316866001600160a01b0316108d5b91509150811561251e5787602001518111156125195760405162461bcd60e51b815260206004820152600a602482015269695a554d693a2054494160b01b6044820152606401610454565b61256b565b87602001518b61252e578d612530565b8c5b101561256b5760405162461bcd60e51b815260206004820152600a602482015269695a554d693a20544f4160b01b6044820152606401610454565b61258c33828461257b5787610624565b886001600160a01b031691906127df565b50505050505050505050505050565b60008080806125aa858261321e565b93506125b78560146132d2565b91506125c485601761321e565b9250602e8551106125dd576125da85602b6132d2565b90505b9193509193565b604080516080810182526000808252602082018190529181018290526060810191909152836001600160a01b0316856001600160a01b03161115612626579293925b6040518060800160405280866001600160a01b03168152602001856001600160a01b031681526020018462ffffff1681526020018362ffffff1681525090505b949350505050565b60008060006126a7846060015162ffffff16600781111561269157612691614e26565b60078111156126a2576126a2614e26565b61337d565b915091506126df846060015162ffffff1660078111156126c9576126c9614e26565b60078111156126da576126da614e26565b6136e5565b1561275e5781846000015185602001516040516020016127159291906001600160a01b0392831681529116602082015260400190565b604051602081830303815290604052805190602001208260405160200161273e93929190614e3c565b6040516020818303038152906040528051906020012060001c92506127d8565b835160208086015160408088015181516001600160a01b0395861681860152949092168482015262ffffff909116606080850191909152815180850390910181526080840190915280519101206127bc91849190849060a001614e3c565b6040516020818303038152906040528051906020012060001c92505b5050919050565b6040516001600160a01b03831660248201526044810182905261045d90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613739565b600061284e8284614af3565b90505b92915050565b6000600c82901c8061286857506127105b610fff909216918061287a8487614e74565b6128849190614e93565b61288e9086614af3565b945060008060008060008a6001600160a01b031663392f37e96040518163ffffffff1660e01b815260040160e06040518083038186803b1580156128d157600080fd5b505afa1580156128e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129099190614791565b5050945094509450945094508015612a2557600061292a848488888661380b565b90508561293f85670de0b6b3a7640000614e74565b6129499190614e93565b93508461295e84670de0b6b3a7640000614e74565b6129689190614e93565b92506000808b61297957858561297c565b84865b915091508b6129a757876129988e670de0b6b3a7640000614e74565b6129a29190614e93565b6129c4565b866129ba8e670de0b6b3a7640000614e74565b6129c49190614e93565b9c5060006129de838f6129d79190614adb565b85846138fc565b6129e89083614af3565b9050670de0b6b3a76400008d6129fe5788612a00565b895b612a0a9083614e74565b612a149190614e93565b9a5050505050505050505050612666565b6000808a612a34578484612a37565b83855b9092509050612a468c83614adb565b612a50828e614e74565b612a5a9190614e93565b98505050505050505050612666565b6000612a7483612b69565b15612a8a57506001600160a01b03811631612851565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a082319060240160206040518083038186803b158015612acb57600080fd5b505afa158015612adf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b039190614887565b9050612851565b600080608083901c838115801590612b2b57506000816001600160801b0316115b612b475760405162461bcd60e51b8152600401610454906148d7565b9094909350915050565b600061284e8284614e74565b600061284e8284614e93565b60006001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480612ba057506001600160a01b038216611010145b806128515750506001600160a01b03161590565b600082604051602001612bc991815260200190565b60408051601f198184030181529190526060909401516020948501519201909301525050565b801561045d57612bfe83612b69565b15612c9f576000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612c50576040519150601f19603f3d011682016040523d82523d6000602084013e612c55565b606091505b50509050806104705760405162461bcd60e51b815260206004820152601660248201527508cc2d2d8cac840e8de40e8e4c2dce6cccae4408aa8960531b6044820152606401610454565b61045d6001600160a01b03841683836127df565b60008080612cc1848261321e565b9250612cce84601461321e565b9150612cdb84602861321e565b929491935050565b600080612d06670de0b6b3a7640000610b88612cff8287612842565b8790612b51565b90506000612d148287612b51565b90506000612d228884613a0e565b90508015612d3957612d348282612b5d565b612d3c565b60005b98975050505050505050565b600080612d558484612b51565b90506000612d638287612b51565b90506000612d2283612d798a633b9aca00612b51565b90613a0e565b612d8883612b69565b15612dcd5760405162461bcd60e51b8152602060048201526015602482015274082e0e0e4deecca40c6c2d8d8cac840dedc408aa89605b1b6044820152606401610454565b80612de75761045d6001600160a01b038416836000613a1a565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e9060440160206040518083038186803b158015612e3257600080fd5b505afa158015612e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6a9190614887565b905081811015610470578015612e8f57612e8f6001600160a01b038516846000613a1a565b6104706001600160a01b0385168484613a1a565b600081516064148015612edb575081600081518110612ec457612ec461495e565b6020910101516001600160f81b031916602360f81b145b8015612f0c575081600181518110612ef557612ef561495e565b6020910101516001600160f81b031916601760fb1b145b8015612f3d575081600281518110612f2657612f2661495e565b6020910101516001600160f81b031916603960f91b145b8015612851575081600381518110612f5757612f5761495e565b6020910101516001600160f81b03191660dd60f81b1492915050565b60606044835110158015612fac575082600081518110612f9557612f9561495e565b6020910101516001600160f81b031916600160fb1b145b8015612fdd575082600181518110612fc657612fc661495e565b6020910101516001600160f81b03191660c360f81b145b801561300e575082600281518110612ff757612ff761495e565b6020910101516001600160f81b031916607960f81b145b801561303f5750826003815181106130285761302861495e565b6020910101516001600160f81b031916600560fd1b145b156130c9576044838101805190916130579190614adb565b8451101561309f5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103932bb32b93a103932b0b9b7b760591b6044820152606401610454565b82816040516020016130b2929190614eb5565b604051602081830303815290604052915050612851565b825160241480156130ff5750826000815181106130e8576130e861495e565b6020910101516001600160f81b031916602760f91b145b80156131305750826001815181106131195761311961495e565b6020910101516001600160f81b031916600960fb1b145b801561316157508260028151811061314a5761314a61495e565b6020910101516001600160f81b031916607b60f81b145b801561319257508260038151811061317b5761317b61495e565b6020910101516001600160f81b031916607160f81b145b156131b7576024830151826131a682613b3e565b6040516020016130b2929190614f04565b816040516020016131c89190614f39565b604051602081830303815290604052905092915050565b60008080806131ee858261321e565b93506131fb85601461321e565b92506132088560286132d2565b905061321585602b61321e565b91509193509193565b60008161322c816014614adb565b101561326f5760405162461bcd60e51b8152602060048201526012602482015271746f416464726573735f6f766572666c6f7760701b6044820152606401610454565b61327a826014614adb565b835110156132c25760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610454565b500160200151600160601b900490565b6000816132e0816003614adb565b10156133225760405162461bcd60e51b8152602060048201526011602482015270746f55696e7432345f6f766572666c6f7760781b6044820152606401610454565b61332d826003614adb565b835110156133745760405162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b6044820152606401610454565b50016003015190565b600080600183600781111561339457613394614e26565b141561346d574660388114156133e35773db1d10011ad0ff90774d0c6bb92e5c5c8b4461f792507fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b549150613467565b8061a4ec141561342c5773afe208a311b21f13ef87e33a90049fc17a7acdec92507fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b549150613467565b731f98431c8ad98523631ae4a59f267346ea31f98492507fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5491505b50915091565b600283600781111561348157613481614e26565b14156134ef574661044d8114156134ae57730d500b1d8e8ef31e21c99d1db9a6444d3adf127092506134c6565b732d98e2fa9da15aa6dc9581ab097ced7af697cb9292505b507f6ec6c9c8091d160c0aa74b2b14ba9c1717e95093bd3ac085cee99a49aab294a49050915091565b600383600781111561350357613503614e26565b141561354757507341ff9aa7e16b8b1a8a8dc4f0efacd93d02d071c990507f6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2915091565b600483600781111561355b5761355b614e26565b141561359f57507324e85f5f94c6017d2d87b434394e87df4e4d56e390507f6ec6c9c8091d160c0aa74b2b14ba9c1717e95093bd3ac085cee99a49aab294a4915091565b60058360078111156135b3576135b3614e26565b14156135f7575073fb48cab056b673bacde3a806c9e1f957275cfd0d90507f92f328fdbad51f108a4a63e08661a6a329a25ccd4d30f112a81aaa3d0abdad80915091565b600683600781111561360b5761360b614e26565b141561364f575073c89f69baa3ff17a842ab2de89e5fc8a8e2cc735890507fd61302e7691f3169f5ebeca3a0a4ab8f7f998c01e55ec944e62cfb1109fd2736915091565b600783600781111561366357613663614e26565b14156136a7575073a3792b3678b61001839c404ffcd20ef103473f6890507f146a9a61ada215bdbc7346c169e030cf383f441b85d40c70970f98c8aa070cd4915091565b50735f1dddbf348ac2fbe22a163e30f99f9ece3dd50a90507fc597aba1bb02db42ba24a8878837965718c032f8b46be94a6e46452a9f89ca01915091565b600060028260078111156136fb576136fb614e26565b14806137185750600482600781111561371657613716614e26565b145b806128515750600682600781111561373257613732614e26565b1492915050565b600061378e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613b6a9092919063ffffffff16565b80519091501561045d57808060200190518101906137ac9190614abe565b61045d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610454565b600081156138e65760008461382888670de0b6b3a7640000614e74565b6138329190614e93565b905060008461384988670de0b6b3a7640000614e74565b6138539190614e93565b90506000670de0b6b3a764000061386a8385614e74565b6138749190614e93565b90506000670de0b6b3a764000061388b8480614e74565b6138959190614e93565b670de0b6b3a76400006138a88680614e74565b6138b29190614e93565b6138bc9190614adb565b9050670de0b6b3a76400006138d18284614e74565b6138db9190614e93565b9450505050506138f3565b6138f08587614e74565b90505b95945050505050565b6000805b60ff811015613a02578260006139168783613b79565b90508581101561396657600061392c8887613c16565b6139368389614af3565b61394890670de0b6b3a7640000614e74565b6139529190614e93565b905061395e8187614adb565b9550506139a8565b60006139728887613c16565b61397c8884614af3565b61398e90670de0b6b3a7640000614e74565b6139989190614e93565b90506139a48187614af3565b9550505b818511156139d15760016139bc8387614af3565b116139cc57849350505050613a07565b6139ed565b60016139dd8684614af3565b116139ed57849350505050613a07565b505080806139fa9061498a565b915050613900565b508190505b9392505050565b600061284e8284614adb565b801580613aa35750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b158015613a6957600080fd5b505afa158015613a7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa19190614887565b155b613b0e5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610454565b6040516001600160a01b03831660248201526044810182905261045d90849063095ea7b360e01b9060640161280b565b606061285182604051602001613b5691815260200190565b604051602081830303815290604052613c7e565b60606126668484600085613e96565b6000670de0b6b3a764000082818581613b928280614e74565b613b9c9190614e93565b613ba69190614e74565b613bb09190614e93565b613bba9190614e74565b613bc49190614e93565b670de0b6b3a7640000808481613bda8280614e74565b613be49190614e93565b613bee9190614e74565b613bf89190614e93565b613c029086614e74565b613c0c9190614e93565b61284e9190614adb565b6000670de0b6b3a76400008381613c2d8280614e74565b613c379190614e93565b613c419190614e74565b613c4b9190614e93565b670de0b6b3a764000080613c5f8580614e74565b613c699190614e93565b613c74866003614e74565b613c029190614e74565b60408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b6020820152815160609190600090613cb9906002614e74565b613cc4906002614adb565b6001600160401b03811115613cdb57613cdb61400c565b6040519080825280601f01601f191660200182016040528015613d05576020820181803683370190505b509050600360fc1b81600081518110613d2057613d2061495e565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613d4f57613d4f61495e565b60200101906001600160f81b031916908160001a90535060005b8451811015613e8e57826004868381518110613d8757613d8761495e565b016020015182516001600160f81b031990911690911c60f81c908110613daf57613daf61495e565b01602001516001600160f81b03191682613dca836002614e74565b613dd5906002614adb565b81518110613de557613de561495e565b60200101906001600160f81b031916908160001a90535082858281518110613e0f57613e0f61495e565b602091010151815160f89190911c600f16908110613e2f57613e2f61495e565b01602001516001600160f81b03191682613e4a836002614e74565b613e55906003614adb565b81518110613e6557613e6561495e565b60200101906001600160f81b031916908160001a90535080613e868161498a565b915050613d69565b509392505050565b606082471015613ef75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610454565b600080866001600160a01b03168587604051613f139190614ded565b60006040518083038185875af1925050503d8060008114613f50576040519150601f19603f3d011682016040523d82523d6000602084013e613f55565b606091505b5091509150613f6687838387613f71565b979650505050505050565b60608315613fdd578251613fd6576001600160a01b0385163b613fd65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610454565b5081612666565b6126668383815115613ff25781518083602001fd5b8060405162461bcd60e51b815260040161045491906146b8565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561404a5761404a61400c565b604052919050565b600082601f83011261406357600080fd5b81356001600160401b0381111561407c5761407c61400c565b61408f601f8201601f1916602001614022565b8181528460208386010111156140a457600080fd5b816020850160208301376000918101602001919091529392505050565b6000608082840312156140d357600080fd5b604051608081016001600160401b0382821081831117156140f6576140f661400c565b81604052829350843583526020850135602084015260408501356040840152606085013591508082111561412957600080fd5b5061413685828601614052565b6060830152505092915050565b60006020828403121561415557600080fd5b81356001600160401b0381111561416b57600080fd5b612666848285016140c1565b60008083601f84011261418957600080fd5b5081356001600160401b038111156141a057600080fd5b6020830191508360208285010111156141b857600080fd5b9250929050565b600080600080606085870312156141d557600080fd5b843593506020850135925060408501356001600160401b038111156141f957600080fd5b61420587828801614177565b95989497509550505050565b6001600160a01b038116811461422657600080fd5b50565b60008060006060848603121561423e57600080fd5b83359250602084013561425081614211565b9150604084013561426081614211565b809150509250925092565b60006001600160401b038211156142845761428461400c565b5060051b60200190565b600082601f83011261429f57600080fd5b813560206142b46142af8361426b565b614022565b82815260059290921b840181019181810190868411156142d357600080fd5b8286015b848110156143125780356001600160401b038111156142f65760008081fd5b6143048986838b01016140c1565b8452509183019183016142d7565b509695505050505050565b6000806000806080858703121561433357600080fd5b843561433e81614211565b9350602085810135935060408601356001600160401b038082111561436257600080fd5b61436e89838a0161428e565b9450606088013591508082111561438457600080fd5b508601601f8101881361439657600080fd5b80356143a46142af8261426b565b81815260059190911b8201830190838101908a8311156143c357600080fd5b928401925b828410156143e1578335825292840192908401906143c8565b979a9699509497505050505050565b801515811461422657600080fd5b60008060008060008060a0878903121561441757600080fd5b863561442281614211565b95506020870135614432816143f0565b94506040870135600f81900b811461444957600080fd5b9350606087013561445981614211565b925060808701356001600160401b0381111561447457600080fd5b61448089828a01614177565b979a9699509497509295939492505050565b60008060008060008060a087890312156144ab57600080fd5b86356144b681614211565b955060208701356144c6816143f0565b945060408701359350606087013561445981614211565b6000806000606084860312156144f257600080fd5b83356144fd81614211565b9250602084013561450d81614211565b929592945050506040919091013590565b600080600080600060a0868803121561453657600080fd5b853561454181614211565b945060208601359350604086013561455881614211565b94979396509394606081013594506080013592915050565b6000806000806080858703121561458657600080fd5b843561459181614211565b93506020850135925060408501356001600160401b038111156145b357600080fd5b6145bf878288016140c1565b949793965093946060013593505050565b6000602082840312156145e257600080fd5b81356001600160401b038111156145f857600080fd5b6126668482850161428e565b6000806000806080858703121561461a57600080fd5b843561462581614211565b9350602085013561463581614211565b9250604085013561464581614211565b9150606085013561465581614211565b939692955090935050565b60005b8381101561467b578181015183820152602001614663565b838111156104705750506000910152565b600081518084526146a4816020860160208601614660565b601f01601f19169290920160200192915050565b60208152600061284e602083018461468c565b6000602082840312156146dd57600080fd5b81356001600160401b03808211156146f457600080fd5b908301906040828603121561470857600080fd5b6040516040810181811083821117156147235761472361400c565b60405282358281111561473557600080fd5b61474187828601614052565b8252506020830135602082015280935050505092915050565b60208082526018908201527f4f70656e4f6365616e3a204163636573732044656e6965640000000000000000604082015260600190565b600080600080600080600060e0888a0312156147ac57600080fd5b8751965060208801519550604088015194506060880151935060808801516147d3816143f0565b60a08901519093506147e481614211565b60c08901519092506147f581614211565b8091505092959891949750929550565b80516001600160701b038116811461481c57600080fd5b919050565b805161ffff8116811461481c57600080fd5b6000806000806080858703121561484957600080fd5b61485285614805565b935061486060208601614805565b925061486e60408601614821565b915061487c60608601614821565b905092959194509250565b60006020828403121561489957600080fd5b5051919050565b84815283602082015260018060a01b03831660408201526080606082015260006148cd608083018461468c565b9695505050505050565b60208082526022908201527f4f70656e4f6365616e3a20496e76616c69642063616c6c20706172616d657465604082015261727360f01b606082015260800190565b60208082526025908201527f4f70656e4f6365616e3a20496e73756666696369656e7420746f6b656e2062616040820152646c616e636560d81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561499e5761499e614974565b5060010190565b600081600f0b6f7fffffffffffffffffffffffffffffff198114156149cc576149cc614974565b60000392915050565b6020815260008251604060208401526149f1606084018261468c565b9050602084015160408401528091505092915050565b60018060a01b03851681526001600160801b03841660208201528260020b60408201526080606082015260006148cd608083018461468c565b60008060408385031215614a5357600080fd5b505080516020909101519092909150565b6000600160ff1b821415614a7a57614a7a614974565b5060000390565b60018060a01b03871681528560208201528415156040820152831515606082015282608082015260c060a08201526000612d3c60c083018461468c565b600060208284031215614ad057600080fd5b8151613a07816143f0565b60008219821115614aee57614aee614974565b500190565b600082821015614b0557614b05614974565b500390565b600181815b80851115614b45578160001904821115614b2b57614b2b614974565b80851615614b3857918102915b93841c9390800290614b0f565b509250929050565b600082614b5c57506001612851565b81614b6957506000612851565b8160018114614b7f5760028114614b8957614ba5565b6001915050612851565b60ff841115614b9a57614b9a614974565b50506001821b612851565b5060208310610133831016604e8410600b8410161715614bc8575081810a612851565b614bd28383614b0a565b8060001904821115614be657614be6614974565b029392505050565b600061284e8383614b4d565b602081528151602082015260208201516040820152604082015160608201526000606083015160808084015261266660a084018261468c565b600080600080600060a08688031215614c4b57600080fd5b614c5486614805565b9450614c6260208701614805565b9350614c7060408701614805565b9250614c7e60608701614805565b9150608086015190509295509295909350565b60006001600160a01b0383811690831681811015614cb157614cb1614974565b039392505050565b60006001600160a01b03828116848216808303821115614cdb57614cdb614974565b01949350505050565b6001600160a01b0386811682526020820186905284151560408301528316606082015260a060808201819052600090613f669083018461468c565b600080600060608486031215614d3457600080fd5b614d3d84614805565b9250614d4b60208501614805565b9150604084015163ffffffff8116811461426057600080fd5b600060208284031215614d7657600080fd5b61284e82614805565b60008060408385031215614d9257600080fd5b614d9b83614805565b9150614da960208401614805565b90509250929050565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a060808201819052600090613f669083018461468c565b60008251614dff818460208701614660565b9190910192915050565b600060208284031215614e1b57600080fd5b8151613a0781614211565b634e487b7160e01b600052602160045260246000fd5b6001600160f81b0319815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b6000816000190483118215151615614e8e57614e8e614974565b500290565b600082614eb057634e487b7160e01b600052601260045260246000fd5b500490565b60008351614ec7818460208801614660565b6508ae4e4dee4560d31b9083019081528351614eea816006840160208801614660565b602960f81b60069290910191820152600701949350505050565b60008351614f16818460208801614660565b650a0c2dcd2c6560d31b9083019081528351614eea816006840160208801614660565b60008251614f4b818460208701614660565b68556e6b6e6f776e282960b81b92019182525060090191905056fea264697066735822122022ab28c14f1216477c302b41b1ac13f04513f0fda806c0829e5446dbeac221f664736f6c63430008090033