0x60c060405234801561000f575f80fd5b506040516140a13803806140a183398101604081905261002e916100b8565b6100373361004e565b6001600160a01b039182166080521660a0526100e9565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146100b3575f80fd5b919050565b5f80604083850312156100c9575f80fd5b6100d28361009d565b91506100e06020840161009d565b90509250929050565b60805160a051613f6661013b5f395f81816104cb015281816126d8015261279c01525f81816105620152818161219c0152818161220201528181612565015281816125df01526126510152613f665ff3fe6080604052600436106101c5575f3560e01c8063a4a78f0c116100f2578063eb1432f011610092578063f44e537a11610062578063f44e537a1461051f578063fb6890881461053e578063fbfa77cf14610551578063fc31d54a14610584575f80fd5b8063eb1432f0146104a7578063f2428621146104ba578063f2fde38b146104ed578063f3995c671461050c575f80fd5b8063b2118a8d116100cd578063b2118a8d14610421578063b956b3fb14610440578063c2e3140a14610481578063d7570e4514610494575f80fd5b8063a4a78f0c146103cf578063ac9650d8146103e2578063ad271fa314610402575f80fd5b80636291027c116101685780637b2151e5116101385780637b2151e5146103615780637d10c9d6146103745780638da5cb5b146103935780639dd41df2146103bc575f80fd5b80636291027c14610308578063688ee44c146103275780636cc781cd1461033a578063715018a61461034d575f80fd5b806339be5126116101a357806339be51261461025f5780634659a494146102805780634f25b8581461029357806353c43f15146102dc575f80fd5b8063099a04e5146101c95780632b4abadb146101ea578063353766c614610233575b5f80fd5b3480156101d4575f80fd5b506101e86101e3366004612aad565b610597565b005b3480156101f5575f80fd5b50610209610204366004612aad565b6105b7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561023e575f80fd5b5061025261024d366004612d48565b6105f8565b60405161022a9190612e29565b61027261026d366004612fc6565b610710565b60405190815260200161022a565b6101e861028e3660046130ba565b61092b565b34801561029e575f80fd5b506102cc6102ad366004613110565b600160209081525f928352604080842090915290825290205460ff1681565b604051901515815260200161022a565b3480156102e7575f80fd5b506102fb6102f6366004613147565b6109e1565b60405161022a91906131de565b348015610313575f80fd5b506101e861032236600461320d565b610a0d565b6101e861033536600461325d565b610aa2565b6101e861034836600461325d565b610b50565b348015610358575f80fd5b506101e8610be0565b6102fb61036f36600461351b565b610bf3565b34801561037f575f80fd5b506102fb61038e3660046135b6565b610d44565b34801561039e575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610209565b6102096103ca366004613671565b610df1565b6101e86103dd3660046130ba565b610e8f565b6103f56103f03660046136c2565b610f5f565b60405161022a919061376c565b34801561040d575f80fd5b5061025261041c3660046137ec565b6110c9565b34801561042c575f80fd5b506101e861043b3660046138b0565b61114e565b34801561044b575f80fd5b5061027261045a3660046138ee565b73ffffffffffffffffffffffffffffffffffffffff165f9081526002602052604090205490565b6101e861048f3660046130ba565b61132f565b6102fb6104a2366004613910565b6113d7565b6102726104b536600461395a565b611438565b3480156104c5575f80fd5b506102097f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f8575f80fd5b506101e86105073660046138ee565b611456565b6101e861051a3660046130ba565b61150d565b34801561052a575f80fd5b506101e861053936600461320d565b61158a565b61027261054c366004612fc6565b6115f8565b34801561055c575f80fd5b506102097f000000000000000000000000000000000000000000000000000000000000000081565b61027261059236600461395a565b611617565b61059f611706565b805f036105a95750475b6105b382826117a2565b5050565b6002602052815f5260405f2081815481106105d0575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b8051602082015160408084015190517f2c0198cc00000000000000000000000000000000000000000000000000000000815260609373ffffffffffffffffffffffffffffffffffffffff8f1693632c0198cc9361065f933393309390929091600401613a2c565b5f604051808303815f87803b158015610676575f80fd5b505af1158015610688573d5f803e3d5ffd5b505050506107018b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284375f920191909152508c92508b91508a905061183d565b9b9a5050505050505050505050565b81516040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a081018290529091905f5b828110156108385785818151811061076157610761613a70565b6020908102919091018101518051918101516040808301516060840151608085015160a086015193517fd505accf0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810195909552606485019290925260ff16608484015260a483015260c482015290935073ffffffffffffffffffffffffffffffffffffffff9091169063d505accf9060e4015f604051808303815f87803b158015610817575f80fd5b505af1158015610829573d5f803e3d5ffd5b50505050806001019050610747565b5061084a8e8e8e8e8e8e8e8e8e611a2e565b925073ffffffffffffffffffffffffffffffffffffffff84161561091a575f6108758b8d018d613110565b91505073ffffffffffffffffffffffffffffffffffffffff811615610918576040517f7acb77570000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff8281166024830152861690637acb7757906044015f604051808303815f87803b158015610901575f80fd5b505af1158015610913573d5f803e3d5ffd5b505050505b505b50509b9a5050505050505050505050565b6040517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101869052606481018590526001608482015260ff841660a482015260c4810183905260e4810182905273ffffffffffffffffffffffffffffffffffffffff871690638fcbaf0c90610104015b5f604051808303815f87803b1580156109c3575f80fd5b505af11580156109d5573d5f803e3d5ffd5b50505050505050505050565b604080518082019091525f8082526020820152610a02878787878787611b86565b979650505050505050565b610a18848484611d0a565b6040517f7acb77570000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8281166024830152851690637acb7757906044015b5f604051808303815f87803b158015610a86575f80fd5b505af1158015610a98573d5f803e3d5ffd5b5050505050505050565b6040517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152849073ffffffffffffffffffffffffffffffffffffffff87169063dd62ed3e90604401602060405180830381865afa158015610b12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b369190613a9d565b1015610b4957610b498585858585610b50565b5050505050565b6040517f2c0198cc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861690632c0198cc90610bac90339030908990899089908990600401613afb565b5f604051808303815f87803b158015610bc3575f80fd5b505af1158015610bd5573d5f803e3d5ffd5b505050505050505050565b610be8611706565b610bf15f611dde565b565b604080518082019091525f80825260208201528280421115610c41576040517f203d82d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c4e60208401846138ee565b73ffffffffffffffffffffffffffffffffffffffff1663d505accf333060208701356040880135610c8560808a0160608b01613b40565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff95861660048201529490931660248501526044840191909152606483015260ff166084820152608086013560a482015260a086013560c482015260e4015f604051808303815f87803b158015610d1a575f80fd5b505af1158015610d2c573d5f803e3d5ffd5b50505050610d3a8686611e52565b9695505050505050565b604080518082019091525f808252602082015273ffffffffffffffffffffffffffffffffffffffff8816632c0198cc333085356020870135610d896040890189613b59565b6040518763ffffffff1660e01b8152600401610daa96959493929190613afb565b5f604051808303815f87803b158015610dc1575f80fd5b505af1158015610dd3573d5f803e3d5ffd5b50505050610de5888888888888611b86565b98975050505050505050565b6040517f13b8683f0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff8516906313b8683f90610e479086908690600401613bba565b6020604051808303815f875af1158015610e63573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e879190613bcd565b949350505050565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9073ffffffffffffffffffffffffffffffffffffffff88169063dd62ed3e90604401602060405180830381865afa158015610f1f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f439190613a9d565b1015610f5757610f5786868686868661092b565b505050505050565b60608167ffffffffffffffff811115610f7a57610f7a612b6d565b604051908082528060200260200182016040528015610fad57816020015b6060815260200190600190039081610f985790505b5090505f5b828110156110c2575f8030868685818110610fcf57610fcf613a70565b9050602002810190610fe19190613b59565b604051610fef929190613be8565b5f60405180830381855af49150503d805f8114611027576040519150601f19603f3d011682016040523d82523d5f602084013e61102c565b606091505b50915091508161109a57604481511015611044575f80fd5b6004810190508080602001905181019061105e9190613bf7565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110919190613c60565b60405180910390fd5b808484815181106110ad576110ad613a70565b60209081029190910101525050600101610fb2565b5092915050565b60606111408a8a8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284375f920191909152508b92508a915089905061183d565b9a9950505050505050505050565b611156611706565b73ffffffffffffffffffffffffffffffffffffffff8216158015906111a757508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61120d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f496e76616c696420746f000000000000000000000000000000000000000000006044820152606401611091565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9073ffffffffffffffffffffffffffffffffffffffff8516906370a0823190602401602060405180830381865afa158015611277573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061129b9190613a9d565b9050815f036112b4576112af8484836122f3565b611329565b8082111561131e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f457863656564732062616c616e636500000000000000000000000000000000006044820152606401611091565b6113298484846122f3565b50505050565b6040517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152859073ffffffffffffffffffffffffffffffffffffffff88169063dd62ed3e90604401602060405180830381865afa15801561139f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c39190613a9d565b1015610f5757610f5786868686868661150d565b604080518082019091525f80825260208201528180421115611425576040517f203d82d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61142f8585611e52565b95945050505050565b5f61144b8b8b8b8b8b8b8b8b8b8b611617565b90506111408b61242c565b61145e611706565b73ffffffffffffffffffffffffffffffffffffffff8116611501576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401611091565b61150a81611dde565b50565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c4810182905273ffffffffffffffffffffffffffffffffffffffff87169063d505accf9060e4016109ac565b611595848484611d0a565b6040517f294091cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052828116604483015285169063294091cd90606401610a6f565b5f61160c8c8c8c8c8c8c8c8c8c8c8c610710565b90506107018c61242c565b5f6116298b8b8b8b8b8b8b8b8b611a2e565b905073ffffffffffffffffffffffffffffffffffffffff821615611140575f611654888a018a613110565b91505073ffffffffffffffffffffffffffffffffffffffff8116156116f7576040517f7acb77570000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8281166024830152841690637acb7757906044015f604051808303815f87803b1580156116e0575f80fd5b505af11580156116f2573d5f803e3d5ffd5b505050505b509a9950505050505050505050565b336117255f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611091565b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146117f8576040519150601f19603f3d011682016040523d82523d5f602084013e6117fd565b606091505b5050905080611838576040517fb12d13eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff881660248201819052604482018890526060916323b872dd906064016020604051808303815f875af11580156118b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118da9190613c72565b506040517ff66eab5b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89169063f66eab5b906119359089903390899089908990600401613c8d565b5f604051808303815f875af1158015611950573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526119959190810190613d2f565b80519091505f5b81811015611a21575f8382815181106119b7576119b7613a70565b602002602001015190508782815181106119d3576119d3613a70565b602002602001015181602001511015611a18576040517fc9f52c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060010161199c565b5050979650505050505050565b604080516060810182525f8082526020820181905291810182905288905f5b82811015611a9e578b8b82818110611a6757611a67613a70565b905060600201803603810190611a7d9190613dc0565b9150611a96825f01518e846020015185604001516124f7565b600101611a4d565b506040517f03e7286a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8d16906303e7286a90611afb908c908c9033908c908c908c90600401613e09565b6020604051808303815f875af1158015611b17573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b3b9190613a9d565b925086831015611b77576040517f249942be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50509998505050505050505050565b6040805180820182525f808252602082015290517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff88166024820181905260448201889052906323b872dd906064016020604051808303815f875af1158015611c0e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c329190613c72565b506040517f27b0bcea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8816906327b0bcea90611c8b908890339088908890600401613e60565b60408051808303815f875af1158015611ca6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cca9190613ea8565b90508381602001511015610d3a576040517fc9f52c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d1682333084612812565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015282919084169063dd62ed3e90604401602060405180830381865afa158015611d89573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dad9190613a9d565b10156118385761183882847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612953565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080518082019091525f80825260208201528251604080516060808201835281525f6020820181905291810191909152611ee06040518060a001604052805f73ffffffffffffffffffffffffffffffffffffffff168152602001606081526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001606081526020015f151581525090565b604080518082019091525f80825260208201525f5b848110156122aa57878181518110611f0f57611f0f613a70565b60200260200101519350835f01515f81518110611f2e57611f2e613a70565b60200260200101519250611f538460200151845f0151866040015186608001516124f7565b8351515f5b611f63600183613eef565b810361203357845f015173ffffffffffffffffffffffffffffffffffffffff16637132bb7f866020015133886040015189606001516040518563ffffffff1660e01b8152600401611fb79493929190613e60565b60408051808303815f875af1158015611fd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff69190613ea8565b805173ffffffffffffffffffffffffffffffffffffffff168952602080820151908a018051929650909161202b908390613f02565b9052506122a0565b845f015173ffffffffffffffffffffffffffffffffffffffff16637132bb7f866020015133886040015189606001516040518563ffffffff1660e01b81526004016120819493929190613e60565b60408051808303815f875af115801561209c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120c09190613ea8565b6080860151875180519296506001909301929091839081106120e4576120e4613a70565b60200260200101519550801580156120fd575085608001515b1561229a5784516040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f9173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561216d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121919190613a9d565b90506121c1865f01517f0000000000000000000000000000000000000000000000000000000000000000836122f3565b855187516040517ff9609f0800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263f9609f08926122579260040173ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b6020604051808303815f875af1158015612273573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122979190613a9d565b50505b50611f58565b5050600101611ef5565b5085856020015110156122e9576040517fc9f52c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505092915050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291515f928392908716916123899190613f15565b5f604051808303815f865af19150503d805f81146123c2576040519150601f19603f3d011682016040523d82523d5f602084013e6123c7565b606091505b50915091508115806123f557508051158015906123f55750808060200190518101906123f39190613c72565b155b15610b49576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f90815260016020908152604080832033845290915290205460ff1661150a5773ffffffffffffffffffffffffffffffffffffffff165f818152600160208181526040808420338552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016841790556002825283208054928301815583529091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091179055565b80156126bb5773ffffffffffffffffffffffffffffffffffffffff84166125d8576040517ff9609f0800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063f9609f0890849060440160206040518083038185885af11580156125ad573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906125d29190613a9d565b50611329565b61260484337f000000000000000000000000000000000000000000000000000000000000000085612812565b6040517ff9609f0800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063f9609f08906044016020604051808303815f875af1158015612697573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125d29190613a9d565b73ffffffffffffffffffffffffffffffffffffffff841661280a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b15801561273c575f80fd5b505af115801561274e573d5f803e3d5ffd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303815f875af11580156127e6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125d29190613c72565b611329843385855b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291515f928392908816916128b09190613f15565b5f604051808303815f865af19150503d805f81146128e9576040519150601f19603f3d011682016040523d82523d5f602084013e6128ee565b606091505b509150915081158061291c575080511580159061291c57508080602001905181019061291a9190613c72565b155b15610f57576040517f7939f42400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291515f928392908716916129e99190613f15565b5f604051808303815f865af19150503d805f8114612a22576040519150601f19603f3d011682016040523d82523d5f602084013e612a27565b606091505b5091509150811580612a555750805115801590612a55575080806020019051810190612a539190613c72565b155b15610b49576040517f3e3f8f7300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461150a575f80fd5b5f8060408385031215612abe575f80fd5b8235612ac981612a8c565b946020939093013593505050565b8035612ae281612a8c565b919050565b5f8083601f840112612af7575f80fd5b50813567ffffffffffffffff811115612b0e575f80fd5b602083019150836020828501011115612b25575f80fd5b9250929050565b5f8083601f840112612b3c575f80fd5b50813567ffffffffffffffff811115612b53575f80fd5b6020830191508360208260051b8501011115612b25575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715612bbd57612bbd612b6d565b60405290565b60405160c0810167ffffffffffffffff81118282101715612bbd57612bbd612b6d565b60405160a0810167ffffffffffffffff81118282101715612bbd57612bbd612b6d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612c5057612c50612b6d565b604052919050565b5f67ffffffffffffffff821115612c7157612c71612b6d565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112612cac575f80fd5b8135612cbf612cba82612c58565b612c09565b818152846020838601011115612cd3575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608284031215612cff575f80fd5b612d07612b9a565b90508135815260208201356020820152604082013567ffffffffffffffff811115612d30575f80fd5b612d3c84828501612c9d565b60408301525092915050565b5f805f805f805f805f8060e08b8d031215612d61575f80fd5b612d6a8b612ad7565b995060208b0135985060408b013567ffffffffffffffff80821115612d8d575f80fd5b612d998e838f01612ae7565b909a50985060608d0135915080821115612db1575f80fd5b612dbd8e838f01612b2c565b9098509650869150612dd160808e01612ad7565b955060a08d0135915080821115612de6575f80fd5b612df28e838f01612ae7565b909550935060c08d0135915080821115612e0a575f80fd5b50612e178d828e01612cef565b9150509295989b9194979a5092959850565b602080825282518282018190525f919060409081850190868401855b82811015612e8857612e78848351805173ffffffffffffffffffffffffffffffffffffffff168252602090810151910152565b9284019290850190600101612e45565b5091979650505050505050565b5f8083601f840112612ea5575f80fd5b50813567ffffffffffffffff811115612ebc575f80fd5b602083019150836020606083028501011115612b25575f80fd5b5f67ffffffffffffffff821115612eef57612eef612b6d565b5060051b60200190565b803560ff81168114612ae2575f80fd5b5f82601f830112612f18575f80fd5b81356020612f28612cba83612ed6565b82815260c09283028501820192828201919087851115612f46575f80fd5b8387015b85811015612fb95781818a031215612f60575f80fd5b612f68612bc3565b8135612f7381612a8c565b81528186013586820152604080830135908201526060612f94818401612ef9565b908201526080828101359082015260a080830135908201528452928401928101612f4a565b5090979650505050505050565b5f805f805f805f805f805f6101008c8e031215612fe1575f80fd5b612fea8c612ad7565b9a5067ffffffffffffffff8060208e01351115613005575f80fd5b6130158e60208f01358f01612e95565b909b50995060408d013581101561302a575f80fd5b61303a8e60408f01358f01612ae7565b909950975060608d0135965061305260808e01612ad7565b95508060a08e01351115613064575f80fd5b6130748e60a08f01358f01612ae7565b909550935060c08d0135811015613089575f80fd5b5061309a8d60c08e01358e01612f09565b91506130a860e08d01612ad7565b90509295989b509295989b9093969950565b5f805f805f8060c087890312156130cf575f80fd5b86356130da81612a8c565b955060208701359450604087013593506130f660608801612ef9565b92506080870135915060a087013590509295509295509295565b5f8060408385031215613121575f80fd5b823561312c81612a8c565b9150602083013561313c81612a8c565b809150509250929050565b5f805f805f8060c0878903121561315c575f80fd5b863561316781612a8c565b955060208701359450604087013567ffffffffffffffff8082111561318a575f80fd5b6131968a838b01612c9d565b955060608901359450608089013591506131af82612a8c565b90925060a088013590808211156131c4575f80fd5b506131d189828a01612c9d565b9150509295509295509295565b815173ffffffffffffffffffffffffffffffffffffffff16815260208083015190820152604081015b92915050565b5f805f8060808587031215613220575f80fd5b843561322b81612a8c565b9350602085013561323b81612a8c565b925060408501359150606085013561325281612a8c565b939692955090935050565b5f805f805f60808688031215613271575f80fd5b853561327c81612a8c565b94506020860135935060408601359250606086013567ffffffffffffffff8111156132a5575f80fd5b6132b188828901612ae7565b969995985093965092949392505050565b801515811461150a575f80fd5b8035612ae2816132c2565b5f82601f8301126132e9575f80fd5b6132f6612cba8335612ed6565b82358082526020808301929160051b850101851015613313575f80fd5b602084015b6020853560051b8601018110156135125767ffffffffffffffff808235111561333f575f80fd5b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0833588018903011215613373575f80fd5b61337b612b9a565b816020843589010135111561338e575f80fd5b82358701602081013501603f810189136133a6575f80fd5b6133b6612cba6020830135612ed6565b602082810135808352908201919060051b83016040018b10156133d7575f80fd5b604083015b6040602085013560051b8501018110156134d55785813511156133fd575f80fd5b8035840160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0828f03011215613432575f80fd5b61343a612be6565b6134476040830135612a8c565b60408201358152876060830135111561345e575f80fd5b6134718e60406060850135850101612c9d565b60208201526134836080830135612a8c565b608082013560408201528760a0830135111561349d575f80fd5b6134b08e604060a0850135850101612c9d565b60608201526134c160c083016132cf565b6080820152845250602092830192016133dc565b508352506134ea905083358801604001612ad7565b6020820152606083358801013560408201528085525050602083019250602081019050613318565b50949350505050565b5f805f80848603610120811215613530575f80fd5b853567ffffffffffffffff811115613546575f80fd5b613552888289016132da565b955050602086013593506040860135925060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa082011215613592575f80fd5b509295919450926060019150565b5f606082840312156135b0575f80fd5b50919050565b5f805f805f805f60e0888a0312156135cc575f80fd5b87356135d781612a8c565b965060208801359550604088013567ffffffffffffffff808211156135fa575f80fd5b6136068b838c01612c9d565b965060608a0135955060808a0135915061361f82612a8c565b90935060a08901359080821115613634575f80fd5b6136408b838c01612c9d565b935060c08a0135915080821115613655575f80fd5b506136628a828b016135a0565b91505092959891949750929550565b5f805f60408486031215613683575f80fd5b833561368e81612a8c565b9250602084013567ffffffffffffffff8111156136a9575f80fd5b6136b586828701612ae7565b9497909650939450505050565b5f80602083850312156136d3575f80fd5b823567ffffffffffffffff8111156136e9575f80fd5b6136f585828601612b2c565b90969095509350505050565b5f5b8381101561371b578181015183820152602001613703565b50505f910152565b5f815180845261373a816020860160208601613701565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b828110156137df577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526137cd858351613723565b94509285019290850190600101613793565b5092979650505050505050565b5f805f805f805f805f60c08a8c031215613804575f80fd5b893561380f81612a8c565b985060208a0135975060408a013567ffffffffffffffff80821115613832575f80fd5b61383e8d838e01612ae7565b909950975060608c0135915080821115613856575f80fd5b6138628d838e01612b2c565b909750955060808c0135915061387782612a8c565b90935060a08b0135908082111561388c575f80fd5b506138998c828d01612ae7565b915080935050809150509295985092959850929598565b5f805f606084860312156138c2575f80fd5b83356138cd81612a8c565b925060208401356138dd81612a8c565b929592945050506040919091013590565b5f602082840312156138fe575f80fd5b813561390981612a8c565b9392505050565b5f805f60608486031215613922575f80fd5b833567ffffffffffffffff811115613938575f80fd5b613944868287016132da565b9660208601359650604090950135949350505050565b5f805f805f805f805f8060e08b8d031215613973575f80fd5b8a3561397e81612a8c565b995060208b013567ffffffffffffffff8082111561399a575f80fd5b6139a68e838f01612e95565b909b50995060408d01359150808211156139be575f80fd5b6139ca8e838f01612ae7565b909950975060608d0135965060808d013591506139e682612a8c565b90945060a08c013590808211156139fb575f80fd5b50613a088d828e01612ae7565b9094509250613a1b905060c08c01612ad7565b90509295989b9194979a5092959850565b5f73ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a06080830152610a0260a0830184613723565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215613aad575f80fd5b5051919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525085604083015284606083015260a06080830152610de560a083018486613ab4565b5f60208284031215613b50575f80fd5b61390982612ef9565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613b8c575f80fd5b83018035915067ffffffffffffffff821115613ba6575f80fd5b602001915036819003821315612b25575f80fd5b602081525f610e87602083018486613ab4565b5f60208284031215613bdd575f80fd5b815161390981612a8c565b818382375f9101908152919050565b5f60208284031215613c07575f80fd5b815167ffffffffffffffff811115613c1d575f80fd5b8201601f81018413613c2d575f80fd5b8051613c3b612cba82612c58565b818152856020838501011115613c4f575f80fd5b61142f826020830160208601613701565b602081525f6139096020830184613723565b5f60208284031215613c82575f80fd5b8151613909816132c2565b608081525f613c9f6080830188613723565b73ffffffffffffffffffffffffffffffffffffffff8781166020850152861660408401528281036060840152610de5818587613ab4565b5f60408284031215613ce6575f80fd5b6040516040810181811067ffffffffffffffff82111715613d0957613d09612b6d565b80604052508091508251613d1c81612a8c565b8152602092830151920191909152919050565b5f6020808385031215613d40575f80fd5b825167ffffffffffffffff811115613d56575f80fd5b8301601f81018513613d66575f80fd5b8051613d74612cba82612ed6565b8082825260208201915060208360061b850101925087831115613d95575f80fd5b6020840193505b82841015610a0257613dae8885613cd6565b82528482019150604084019350613d9c565b5f60608284031215613dd0575f80fd5b613dd8612b9a565b8235613de381612a8c565b8152602083810135908201526040830135613dfd816132c2565b60408201529392505050565b608081525f613e1c60808301888a613ab4565b73ffffffffffffffffffffffffffffffffffffffff8781166020850152861660408401528281036060840152613e53818587613ab4565b9998505050505050505050565b608081525f613e726080830187613723565b73ffffffffffffffffffffffffffffffffffffffff8681166020850152851660408401528281036060840152610a028185613723565b5f60408284031215613eb8575f80fd5b6139098383613cd6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561320757613207613ec2565b8082018082111561320757613207613ec2565b5f8251613f26818460208701613701565b919091019291505056fea2646970667358221220e7e228b0257ec786322a8338c89336fcf2b285e97fddf24624ec476bb6daccd064736f6c634300081900330000000000000000000000007160570bb153edd0ea1775ec2b2ac9b65f1ab61b0000000000000000000000005300000000000000000000000000000000000004