60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff16815250348015610042575f80fd5b5061005161005660201b60201c565b6101b6565b5f61006561015460201b60201c565b9050805f0160089054906101000a900460ff16156100af576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff16146101515767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff604051610148919061019d565b60405180910390a15b50565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b5f67ffffffffffffffff82169050919050565b6101978161017b565b82525050565b5f6020820190506101b05f83018461018e565b92915050565b60805161503a6101dc5f395f8181611871015281816118c60152611a80015261503a5ff3fe6080604052600436106101e2575f3560e01c806379cc679011610101578063a9059cbb11610094578063d505accf11610063578063d505accf1461070c578063dd62ed3e14610734578063f1127ed814610770578063f2fde38b146107ac576101e2565b8063a9059cbb14610656578063ad3cb1cc14610692578063c3cda520146106bc578063c4d66de8146106e4576101e2565b80638e539e8c116100d05780638e539e8c1461058a57806391ddadf4146105c657806395d89b41146105f05780639ab24eb01461061a576101e2565b806379cc6790146104cc5780637ecebe00146104f457806384b0196e146105305780638da5cb5b14610560576101e2565b80634bf5d7e9116101795780635c19a95c116101485780635c19a95c146104165780636fcfff451461043e57806370a082311461047a578063715018a6146104b6576101e2565b80634bf5d7e91461036a5780634f1ef2861461039457806352d1902d146103b0578063587cde1e146103da576101e2565b8063313ce567116101b5578063313ce567146102b25780633644e515146102dc5780633a46b1a81461030657806342966c6814610342576101e2565b806306fdde03146101e6578063095ea7b31461021057806318160ddd1461024c57806323b872dd14610276575b5f80fd5b3480156101f1575f80fd5b506101fa6107d4565b6040516102079190613c74565b60405180910390f35b34801561021b575f80fd5b5061023660048036038101906102319190613d32565b610872565b6040516102439190613d8a565b60405180910390f35b348015610257575f80fd5b50610260610894565b60405161026d9190613db2565b60405180910390f35b348015610281575f80fd5b5061029c60048036038101906102979190613dcb565b6108ab565b6040516102a99190613d8a565b60405180910390f35b3480156102bd575f80fd5b506102c66108d9565b6040516102d39190613e36565b60405180910390f35b3480156102e7575f80fd5b506102f06108e1565b6040516102fd9190613e67565b60405180910390f35b348015610311575f80fd5b5061032c60048036038101906103279190613d32565b6108ef565b6040516103399190613db2565b60405180910390f35b34801561034d575f80fd5b5061036860048036038101906103639190613e80565b6109d3565b005b348015610375575f80fd5b5061037e6109e7565b60405161038b9190613c74565b60405180910390f35b6103ae60048036038101906103a99190613fd7565b610a24565b005b3480156103bb575f80fd5b506103c4610a43565b6040516103d19190613e67565b60405180910390f35b3480156103e5575f80fd5b5061040060048036038101906103fb9190614031565b610a74565b60405161040d919061406b565b60405180910390f35b348015610421575f80fd5b5061043c60048036038101906104379190614031565b610ae6565b005b348015610449575f80fd5b50610464600480360381019061045f9190614031565b610aff565b60405161047191906140a2565b60405180910390f35b348015610485575f80fd5b506104a0600480360381019061049b9190614031565b610b10565b6040516104ad9190613db2565b60405180910390f35b3480156104c1575f80fd5b506104ca610b63565b005b3480156104d7575f80fd5b506104f260048036038101906104ed9190613d32565b610b76565b005b3480156104ff575f80fd5b5061051a60048036038101906105159190614031565b610b96565b6040516105279190613db2565b60405180910390f35b34801561053b575f80fd5b50610544610ba7565b60405161055797969594939291906141ac565b60405180910390f35b34801561056b575f80fd5b50610574610cb0565b604051610581919061406b565b60405180910390f35b348015610595575f80fd5b506105b060048036038101906105ab9190613e80565b610ce5565b6040516105bd9190613db2565b60405180910390f35b3480156105d1575f80fd5b506105da610d8d565b6040516105e7919061424e565b60405180910390f35b3480156105fb575f80fd5b50610604610d94565b6040516106119190613c74565b60405180910390f35b348015610625575f80fd5b50610640600480360381019061063b9190614031565b610e32565b60405161064d9190613db2565b60405180910390f35b348015610661575f80fd5b5061067c60048036038101906106779190613d32565b610ea9565b6040516106899190613d8a565b60405180910390f35b34801561069d575f80fd5b506106a6610ecb565b6040516106b39190613c74565b60405180910390f35b3480156106c7575f80fd5b506106e260048036038101906106dd91906142bb565b610f04565b005b3480156106ef575f80fd5b5061070a60048036038101906107059190614031565b610fc9565b005b348015610717575f80fd5b50610732600480360381019061072d9190614344565b611240565b005b34801561073f575f80fd5b5061075a600480360381019061075591906143e1565b611385565b6040516107679190613db2565b60405180910390f35b34801561077b575f80fd5b5061079660048036038101906107919190614449565b611415565b6040516107a391906144f7565b60405180910390f35b3480156107b7575f80fd5b506107d260048036038101906107cd9190614031565b61142f565b005b60605f6107df6114b3565b90508060030180546107f09061453d565b80601f016020809104026020016040519081016040528092919081815260200182805461081c9061453d565b80156108675780601f1061083e57610100808354040283529160200191610867565b820191905f5260205f20905b81548152906001019060200180831161084a57829003601f168201915b505050505091505090565b5f8061087c6114da565b90506108898185856114e1565b600191505092915050565b5f8061089e6114b3565b9050806002015491505090565b5f806108b56114da565b90506108c28582856114f3565b6108cd858585611585565b60019150509392505050565b5f6012905090565b5f6108ea611675565b905090565b5f806108f9611683565b90505f610904610d8d565b90508065ffffffffffff1684106109545783816040517fecd3f81e00000000000000000000000000000000000000000000000000000000815260040161094b92919061456d565b60405180910390fd5b6109ad610960856116aa565b836001015f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2061170390919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169250505092915050565b6109e46109de6114da565b826117f0565b50565b60606040518060400160405280600e81526020017f6d6f64653d74696d657374616d70000000000000000000000000000000000000815250905090565b610a2c61186f565b610a3582611955565b610a3f8282611960565b5050565b5f610a4c611a7e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b905090565b5f80610a7e611683565b9050805f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b5f610aef6114da565b9050610afb8183611b05565b5050565b5f610b0982611c22565b9050919050565b5f80610b1a6114b3565b9050805f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054915050919050565b610b6b611c85565b610b745f611d0c565b565b610b8882610b826114da565b836114f3565b610b9282826117f0565b5050565b5f610ba082611ddd565b9050919050565b5f6060805f805f60605f610bb9611dee565b90505f801b815f0154148015610bd457505f801b8160010154145b610c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0a906145de565b60405180910390fd5b610c1b611e15565b610c23611eb3565b46305f801b5f67ffffffffffffffff811115610c4257610c41613eb3565b5b604051908082528060200260200182016040528015610c705781602001602082028036833780820191505090505b507f0f0000000000000000000000000000000000000000000000000000000000000095949392919097509750975097509750975097505090919293949596565b5f80610cba611f51565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b5f80610cef611683565b90505f610cfa610d8d565b90508065ffffffffffff168410610d4a5783816040517fecd3f81e000000000000000000000000000000000000000000000000000000008152600401610d4192919061456d565b60405180910390fd5b610d68610d56856116aa565b8360020161170390919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff1692505050919050565b5f42905090565b60605f610d9f6114b3565b9050806004018054610db09061453d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ddc9061453d565b8015610e275780601f10610dfe57610100808354040283529160200191610e27565b820191905f5260205f20905b815481529060010190602001808311610e0a57829003601f168201915b505050505091505090565b5f80610e3c611683565b9050610e85816001015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20611f78565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b5f80610eb36114da565b9050610ec0818585611585565b600191505092915050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b83421115610f4957836040517f4683af0e000000000000000000000000000000000000000000000000000000008152600401610f409190613db2565b60405180910390fd5b5f610faa610fa27fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf898989604051602001610f8794939291906145fc565b60405160208183030381529060405280519060200120611fda565b858585611ff3565b9050610fb68187612021565b610fc08188611b05565b50505050505050565b5f610fd2612078565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f808267ffffffffffffffff1614801561101a5750825b90505f60018367ffffffffffffffff1614801561104d57505f3073ffffffffffffffffffffffffffffffffffffffff163b145b90508115801561105b575080155b15611092576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083156110df576001855f0160086101000a81548160ff0219169083151502179055505b6111536040518060400160405280600a81526020017f5375706572446172696f000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f534454000000000000000000000000000000000000000000000000000000000081525061209f565b61115b6120b5565b6111996040518060400160405280600a81526020017f5375706572446172696f000000000000000000000000000000000000000000008152506120bf565b6111a1612109565b6111aa86612113565b6111b2612127565b6111de336111be6108d9565b600a6111ca919061479b565b630ee6b2806111d991906147e5565b612131565b8315611238575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2600160405161122f919061487b565b60405180910390a15b505050505050565b8342111561128557836040517f6279130200000000000000000000000000000000000000000000000000000000815260040161127c9190613db2565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886112b38c6121b0565b896040516020016112c996959493929190614894565b6040516020818303038152906040528051906020012090505f6112eb82611fda565b90505f6112fa82878787611ff3565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461136e57808a6040517f4b800e460000000000000000000000000000000000000000000000000000000081526004016113659291906148f3565b60405180910390fd5b6113798a8a8a6114e1565b50505050505050505050565b5f8061138f6114b3565b9050806001015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205491505092915050565b61141d613bc8565b6114278383612210565b905092915050565b611437611c85565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114a7575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161149e919061406b565b60405180910390fd5b6114b081611d0c565b50565b5f7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00905090565b5f33905090565b6114ee838383600161227d565b505050565b5f6114fe8484611385565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461157f5781811015611570578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016115679392919061491a565b60405180910390fd5b61157e84848484035f61227d565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115f5575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016115ec919061406b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611665575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161165c919061406b565b60405180910390fd5b61167083838361245a565b505050565b5f61167e61246a565b905090565b5f7fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d00905090565b5f65ffffffffffff80168211156116fb576030826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016116f2929190614988565b60405180910390fd5b819050919050565b5f80835f018054905090505f808290506005831115611784575f611726846124cd565b8461173191906149af565b905061173f875f01826125c3565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff16101561177257809150611782565b60018161177f91906149e2565b92505b505b5f611793875f018785856125d5565b90505f81146117e2576117b4875f016001836117af91906149af565b6125c3565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff166117e4565b5f5b94505050505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611860575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611857919061406b565b60405180910390fd5b61186b825f8361245a565b5050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148061191c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661190361264a565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611953576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b61195d611c85565b50565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156119c857506040513d601f19601f820116820180604052508101906119c59190614a29565b60015b611a0957816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401611a00919061406b565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b8114611a6f57806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401611a669190613e67565b60405180910390fd5b611a79838361269d565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611b03576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f611b0e611683565b90505f611b1a84610a74565b905082825f015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611c1c8184611c178761270f565b612720565b50505050565b5f80611c2c611683565b9050611c7d611c78826001015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206129a0565b6129af565b915050919050565b611c8d6114da565b73ffffffffffffffffffffffffffffffffffffffff16611cab610cb0565b73ffffffffffffffffffffffffffffffffffffffff1614611d0a57611cce6114da565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611d01919061406b565b60405180910390fd5b565b5f611d15611f51565b90505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b5f611de782612a06565b9050919050565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100905090565b60605f611e20611dee565b9050806002018054611e319061453d565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5d9061453d565b8015611ea85780601f10611e7f57610100808354040283529160200191611ea8565b820191905f5260205f20905b815481529060010190602001808311611e8b57829003601f168201915b505050505091505090565b60605f611ebe611dee565b9050806003018054611ecf9061453d565b80601f0160208091040260200160405190810160405280929190818152602001828054611efb9061453d565b8015611f465780601f10611f1d57610100808354040283529160200191611f46565b820191905f5260205f20905b815481529060010190602001808311611f2957829003601f168201915b505050505091505090565b5f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b5f80825f018054905090505f8114611fd057611fa2835f01600183611f9d91906149af565b6125c3565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff16611fd2565b5f5b915050919050565b5f611fec611fe6611675565b83612a59565b9050919050565b5f805f8061200388888888612a99565b9250925092506120138282612b80565b829350505050949350505050565b5f61202b836121b0565b90508082146120735782816040517f752d88c000000000000000000000000000000000000000000000000000000000815260040161206a929190614a54565b60405180910390fd5b505050565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b6120a7612ce2565b6120b18282612d22565b5050565b6120bd612ce2565b565b6120c7612ce2565b612106816040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250612d5e565b50565b612111612ce2565b565b61211b612ce2565b61212481612daf565b50565b61212f612ce2565b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121a1575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401612198919061406b565b60405180910390fd5b6121ac5f838361245a565b5050565b5f806121ba612e33565b9050805f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81548092919060010191905055915050919050565b612218613bc8565b5f612221611683565b905061227483826001015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20612e5a90919063ffffffff16565b91505092915050565b5f6122866114b3565b90505f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036122f8575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016122ef919061406b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612368575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161235f919061406b565b60405180910390fd5b82816001015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508115612453578373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161244a9190613db2565b60405180910390a35b5050505050565b612465838383612f29565b505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612494612fd7565b61249c61304d565b46306040516020016124b2959493929190614a7b565b60405160208183030381529060405280519060200120905090565b5f8082036124dd575f90506125be565b5f60016124e9846130c4565b901c6001901b9050600181848161250357612502614acc565b5b048201901c9050600181848161251c5761251b614acc565b5b048201901c9050600181848161253557612534614acc565b5b048201901c9050600181848161254e5761254d614acc565b5b048201901c9050600181848161256757612566614acc565b5b048201901c905060018184816125805761257f614acc565b5b048201901c9050600181848161259957612598614acc565b5b048201901c90506125ba818285816125b4576125b3614acc565b5b0461319b565b9150505b919050565b5f825f528160205f2001905092915050565b5f5b8183101561263f575f6125ea84846131b3565b90508465ffffffffffff166125ff87836125c3565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff16111561262957809250612639565b60018161263691906149e2565b93505b506125d7565b819050949350505050565b5f6126767f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6131d8565b5f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6126a6826131e1565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a25f81511115612702576126fc82826132aa565b5061270b565b61270a61332a565b5b5050565b5f61271982610b10565b9050919050565b5f612729611683565b90508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561276657505f82115b1561299a575f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612882575f806127f3836001015f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206133666127ee8761337b565b6133e8565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508573ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612877929190614af9565b60405180910390a250505b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612999575f8061290a836001015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206134276129058761337b565b6133e8565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161298e929190614af9565b60405180910390a250505b5b50505050565b5f815f01805490509050919050565b5f63ffffffff80168211156129fe576020826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016129f5929190614b59565b60405180910390fd5b819050919050565b5f80612a10612e33565b9050805f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054915050919050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115612ad5575f600385925092509250612b76565b5f6001888888886040515f8152602001604052604051612af89493929190614b80565b6020604051602081039080840390855afa158015612b18573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612b69575f60015f801b93509350935050612b76565b805f805f1b935093509350505b9450945094915050565b5f6003811115612b9357612b92614bc3565b5b826003811115612ba657612ba5614bc3565b5b0315612cde5760016003811115612bc057612bbf614bc3565b5b826003811115612bd357612bd2614bc3565b5b03612c0a576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115612c1e57612c1d614bc3565b5b826003811115612c3157612c30614bc3565b5b03612c7557805f1c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401612c6c9190613db2565b60405180910390fd5b600380811115612c8857612c87614bc3565b5b826003811115612c9b57612c9a614bc3565b5b03612cdd57806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401612cd49190613e67565b60405180910390fd5b5b5050565b612cea61343c565b612d20576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b612d2a612ce2565b5f612d336114b3565b905082816003019081612d469190614d84565b5081816004019081612d589190614d84565b50505050565b612d66612ce2565b5f612d6f611dee565b905082816002019081612d829190614d84565b5081816003019081612d949190614d84565b505f801b815f01819055505f801b8160010181905550505050565b612db7612ce2565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612e27575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401612e1e919061406b565b60405180910390fd5b612e3081611d0c565b50565b5f7f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00905090565b612e62613bc8565b825f018263ffffffff1681548110612e7d57612e7c614e53565b5b905f5260205f20016040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b612f3483838361345a565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612fc7575f612f70610894565b90505f612f7b613689565b905080821115612fc45781816040517f1cb15d26000000000000000000000000000000000000000000000000000000008152600401612fbb929190614af9565b60405180910390fd5b50505b612fd28383836136ac565b505050565b5f80612fe1611dee565b90505f612fec611e15565b90505f815111156130085780805190602001209250505061304a565b5f825f015490505f801b81146130235780935050505061304a565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f80613057611dee565b90505f613062611eb3565b90505f8151111561307e578080519060200120925050506130c1565b5f826001015490505f801b811461309a578093505050506130c1565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b5f805f90505f608084901c11156130e357608083901c92506080810190505b5f604084901c11156130fd57604083901c92506040810190505b5f602084901c111561311757602083901c92506020810190505b5f601084901c111561313157601083901c92506010810190505b5f600884901c111561314b57600883901c92506008810190505b5f600484901c111561316557600483901c92506004810190505b5f600284901c111561317f57600283901c92506002810190505b5f600184901c1115613192576001810190505b80915050919050565b5f8183106131a957816131ab565b825b905092915050565b5f60028284186131c39190614e80565b8284166131d091906149e2565b905092915050565b5f819050919050565b5f8173ffffffffffffffffffffffffffffffffffffffff163b0361323c57806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401613233919061406b565b60405180910390fd5b806132687f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f1b6131d8565b5f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040516132d39190614ef4565b5f60405180830381855af49150503d805f811461330b576040519150601f19603f3d011682016040523d82523d5f602084013e613310565b606091505b5091509150613320858383613774565b9250505092915050565b5f341115613364576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f81836133739190614f0a565b905092915050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff80168211156133e05760d0826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016133d7929190614f90565b60405180910390fd5b819050919050565b5f8061341b6133f5610d8d565b61340b61340188611f78565b868863ffffffff16565b876138019092919063ffffffff16565b91509150935093915050565b5f81836134349190614fb7565b905092915050565b5f613445612078565b5f0160089054906101000a900460ff16905090565b5f6134636114b3565b90505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036134b75781816002015f8282546134ab91906149e2565b92505081905550613589565b5f815f015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015613542578481846040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016135399392919061491a565b60405180910390fd5b828103825f015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036135d25781816002015f828254039250508190555061361e565b81815f015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161367b9190613db2565b60405180910390a350505050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b5f6136b5611683565b90505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361370557613702816002016134276136fd8561337b565b6133e8565b50505b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613753576137508160020161336661374b8561337b565b6133e8565b50505b61376e61375f85610a74565b61376885610a74565b84612720565b50505050565b606082613789576137848261381c565b6137f9565b5f82511480156137af57505f8473ffffffffffffffffffffffffffffffffffffffff163b145b156137f157836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016137e8919061406b565b60405180910390fd5b8190506137fa565b5b9392505050565b5f80613810855f018585613860565b91509150935093915050565b5f8151111561382e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f858054905090505f811115613ae0575f6138898760018461388491906149af565b6125c3565b6040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16815f015165ffffffffffff161115613974576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16815f015165ffffffffffff16036139f657846139a5886001856139a091906149af565b6125c3565b5f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550613acf565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050613bc0565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505f8492509250505b935093915050565b60405180604001604052805f65ffffffffffff1681526020015f79ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613c4682613c04565b613c508185613c0e565b9350613c60818560208601613c1e565b613c6981613c2c565b840191505092915050565b5f6020820190508181035f830152613c8c8184613c3c565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613cce82613ca5565b9050919050565b613cde81613cc4565b8114613ce8575f80fd5b50565b5f81359050613cf981613cd5565b92915050565b5f819050919050565b613d1181613cff565b8114613d1b575f80fd5b50565b5f81359050613d2c81613d08565b92915050565b5f8060408385031215613d4857613d47613c9d565b5b5f613d5585828601613ceb565b9250506020613d6685828601613d1e565b9150509250929050565b5f8115159050919050565b613d8481613d70565b82525050565b5f602082019050613d9d5f830184613d7b565b92915050565b613dac81613cff565b82525050565b5f602082019050613dc55f830184613da3565b92915050565b5f805f60608486031215613de257613de1613c9d565b5b5f613def86828701613ceb565b9350506020613e0086828701613ceb565b9250506040613e1186828701613d1e565b9150509250925092565b5f60ff82169050919050565b613e3081613e1b565b82525050565b5f602082019050613e495f830184613e27565b92915050565b5f819050919050565b613e6181613e4f565b82525050565b5f602082019050613e7a5f830184613e58565b92915050565b5f60208284031215613e9557613e94613c9d565b5b5f613ea284828501613d1e565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613ee982613c2c565b810181811067ffffffffffffffff82111715613f0857613f07613eb3565b5b80604052505050565b5f613f1a613c94565b9050613f268282613ee0565b919050565b5f67ffffffffffffffff821115613f4557613f44613eb3565b5b613f4e82613c2c565b9050602081019050919050565b828183375f83830152505050565b5f613f7b613f7684613f2b565b613f11565b905082815260208101848484011115613f9757613f96613eaf565b5b613fa2848285613f5b565b509392505050565b5f82601f830112613fbe57613fbd613eab565b5b8135613fce848260208601613f69565b91505092915050565b5f8060408385031215613fed57613fec613c9d565b5b5f613ffa85828601613ceb565b925050602083013567ffffffffffffffff81111561401b5761401a613ca1565b5b61402785828601613faa565b9150509250929050565b5f6020828403121561404657614045613c9d565b5b5f61405384828501613ceb565b91505092915050565b61406581613cc4565b82525050565b5f60208201905061407e5f83018461405c565b92915050565b5f63ffffffff82169050919050565b61409c81614084565b82525050565b5f6020820190506140b55f830184614093565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6140ef816140bb565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61412781613cff565b82525050565b5f614138838361411e565b60208301905092915050565b5f602082019050919050565b5f61415a826140f5565b61416481856140ff565b935061416f8361410f565b805f5b8381101561419f578151614186888261412d565b975061419183614144565b925050600181019050614172565b5085935050505092915050565b5f60e0820190506141bf5f83018a6140e6565b81810360208301526141d18189613c3c565b905081810360408301526141e58188613c3c565b90506141f46060830187613da3565b614201608083018661405c565b61420e60a0830185613e58565b81810360c08301526142208184614150565b905098975050505050505050565b5f65ffffffffffff82169050919050565b6142488161422e565b82525050565b5f6020820190506142615f83018461423f565b92915050565b61427081613e1b565b811461427a575f80fd5b50565b5f8135905061428b81614267565b92915050565b61429a81613e4f565b81146142a4575f80fd5b50565b5f813590506142b581614291565b92915050565b5f805f805f8060c087890312156142d5576142d4613c9d565b5b5f6142e289828a01613ceb565b96505060206142f389828a01613d1e565b955050604061430489828a01613d1e565b945050606061431589828a0161427d565b935050608061432689828a016142a7565b92505060a061433789828a016142a7565b9150509295509295509295565b5f805f805f805f60e0888a03121561435f5761435e613c9d565b5b5f61436c8a828b01613ceb565b975050602061437d8a828b01613ceb565b965050604061438e8a828b01613d1e565b955050606061439f8a828b01613d1e565b94505060806143b08a828b0161427d565b93505060a06143c18a828b016142a7565b92505060c06143d28a828b016142a7565b91505092959891949750929550565b5f80604083850312156143f7576143f6613c9d565b5b5f61440485828601613ceb565b925050602061441585828601613ceb565b9150509250929050565b61442881614084565b8114614432575f80fd5b50565b5f813590506144438161441f565b92915050565b5f806040838503121561445f5761445e613c9d565b5b5f61446c85828601613ceb565b925050602061447d85828601614435565b9150509250929050565b6144908161422e565b82525050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b6144c481614496565b82525050565b604082015f8201516144de5f850182614487565b5060208201516144f160208501826144bb565b50505050565b5f60408201905061450a5f8301846144ca565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061455457607f821691505b60208210810361456757614566614510565b5b50919050565b5f6040820190506145805f830185613da3565b61458d602083018461423f565b9392505050565b7f4549503731323a20556e696e697469616c697a656400000000000000000000005f82015250565b5f6145c8601583613c0e565b91506145d382614594565b602082019050919050565b5f6020820190508181035f8301526145f5816145bc565b9050919050565b5f60808201905061460f5f830187613e58565b61461c602083018661405c565b6146296040830185613da3565b6146366060830184613da3565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156146c15780860481111561469d5761469c61463f565b5b60018516156146ac5780820291505b80810290506146ba8561466c565b9450614681565b94509492505050565b5f826146d95760019050614794565b816146e6575f9050614794565b81600181146146fc576002811461470657614735565b6001915050614794565b60ff8411156147185761471761463f565b5b8360020a91508482111561472f5761472e61463f565b5b50614794565b5060208310610133831016604e8410600b841016171561476a5782820a9050838111156147655761476461463f565b5b614794565b6147778484846001614678565b9250905081840481111561478e5761478d61463f565b5b81810290505b9392505050565b5f6147a582613cff565b91506147b083613e1b565b92506147dd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846146ca565b905092915050565b5f6147ef82613cff565b91506147fa83613cff565b925082820261480881613cff565b9150828204841483151761481f5761481e61463f565b5b5092915050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f819050919050565b5f61486561486061485b84614826565b614842565b61482f565b9050919050565b6148758161484b565b82525050565b5f60208201905061488e5f83018461486c565b92915050565b5f60c0820190506148a75f830189613e58565b6148b4602083018861405c565b6148c1604083018761405c565b6148ce6060830186613da3565b6148db6080830185613da3565b6148e860a0830184613da3565b979650505050505050565b5f6040820190506149065f83018561405c565b614913602083018461405c565b9392505050565b5f60608201905061492d5f83018661405c565b61493a6020830185613da3565b6149476040830184613da3565b949350505050565b5f819050919050565b5f61497261496d6149688461494f565b614842565b613e1b565b9050919050565b61498281614958565b82525050565b5f60408201905061499b5f830185614979565b6149a86020830184613da3565b9392505050565b5f6149b982613cff565b91506149c483613cff565b92508282039050818111156149dc576149db61463f565b5b92915050565b5f6149ec82613cff565b91506149f783613cff565b9250828201905080821115614a0f57614a0e61463f565b5b92915050565b5f81519050614a2381614291565b92915050565b5f60208284031215614a3e57614a3d613c9d565b5b5f614a4b84828501614a15565b91505092915050565b5f604082019050614a675f83018561405c565b614a746020830184613da3565b9392505050565b5f60a082019050614a8e5f830188613e58565b614a9b6020830187613e58565b614aa86040830186613e58565b614ab56060830185613da3565b614ac2608083018461405c565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f604082019050614b0c5f830185613da3565b614b196020830184613da3565b9392505050565b5f819050919050565b5f614b43614b3e614b3984614b20565b614842565b613e1b565b9050919050565b614b5381614b29565b82525050565b5f604082019050614b6c5f830185614b4a565b614b796020830184613da3565b9392505050565b5f608082019050614b935f830187613e58565b614ba06020830186613e27565b614bad6040830185613e58565b614bba6060830184613e58565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302614c4c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614c11565b614c568683614c11565b95508019841693508086168417925050509392505050565b5f614c88614c83614c7e84613cff565b614842565b613cff565b9050919050565b5f819050919050565b614ca183614c6e565b614cb5614cad82614c8f565b848454614c1d565b825550505050565b5f90565b614cc9614cbd565b614cd4818484614c98565b505050565b5b81811015614cf757614cec5f82614cc1565b600181019050614cda565b5050565b601f821115614d3c57614d0d81614bf0565b614d1684614c02565b81016020851015614d25578190505b614d39614d3185614c02565b830182614cd9565b50505b505050565b5f82821c905092915050565b5f614d5c5f1984600802614d41565b1980831691505092915050565b5f614d748383614d4d565b9150826002028217905092915050565b614d8d82613c04565b67ffffffffffffffff811115614da657614da5613eb3565b5b614db0825461453d565b614dbb828285614cfb565b5f60209050601f831160018114614dec575f8415614dda578287015190505b614de48582614d69565b865550614e4b565b601f198416614dfa86614bf0565b5f5b82811015614e2157848901518255600182019150602085019450602081019050614dfc565b86831015614e3e5784890151614e3a601f891682614d4d565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f614e8a82613cff565b9150614e9583613cff565b925082614ea557614ea4614acc565b5b828204905092915050565b5f81519050919050565b5f81905092915050565b5f614ece82614eb0565b614ed88185614eba565b9350614ee8818560208601613c1e565b80840191505092915050565b5f614eff8284614ec4565b915081905092915050565b5f614f1482614496565b9150614f1f83614496565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115614f5157614f5061463f565b5b92915050565b5f819050919050565b5f614f7a614f75614f7084614f57565b614842565b613e1b565b9050919050565b614f8a81614f60565b82525050565b5f604082019050614fa35f830185614f81565b614fb06020830184613da3565b9392505050565b5f614fc182614496565b9150614fcc83614496565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff811115614ffe57614ffd61463f565b5b9291505056fea264697066735822122040a1b80cd49425e40597b0b08b9ffe357954f6a42feedd46d6ae772f2d4af98b64736f6c634300081a0033