608060405234801561000f575f80fd5b5060405161268138038061268183398181016040528101906100319190610534565b806040518060400160405280600d81526020017f5765696768746564546f6b656e000000000000000000000000000000000000008152506040518060400160405280600381526020017f57544b000000000000000000000000000000000000000000000000000000000081525081600390816100ad9190610799565b5080600490816100bd9190610799565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610130575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101279190610877565b60405180910390fd5b61013f8161017560201b60201c565b5061015381620f424061023860201b60201c565b600760018160018154018082558091505003905f5260205f209050505061094d565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102a8575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161029f9190610877565b60405180910390fd5b6102b95f83836102bd60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361030d578060025f82825461030191906108bd565b925050819055506103db565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610396578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161038d939291906108ff565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610422578060025f828254039250508190555061046c565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516104c99190610934565b60405180910390a3505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610503826104da565b9050919050565b610513816104f9565b811461051d575f80fd5b50565b5f8151905061052e8161050a565b92915050565b5f60208284031215610549576105486104d6565b5b5f61055684828501610520565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806105da57607f821691505b6020821081036105ed576105ec610596565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261064f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610614565b6106598683610614565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61069d61069861069384610671565b61067a565b610671565b9050919050565b5f819050919050565b6106b683610683565b6106ca6106c2826106a4565b848454610620565b825550505050565b5f90565b6106de6106d2565b6106e98184846106ad565b505050565b5b8181101561070c576107015f826106d6565b6001810190506106ef565b5050565b601f82111561075157610722816105f3565b61072b84610605565b8101602085101561073a578190505b61074e61074685610605565b8301826106ee565b50505b505050565b5f82821c905092915050565b5f6107715f1984600802610756565b1980831691505092915050565b5f6107898383610762565b9150826002028217905092915050565b6107a28261055f565b67ffffffffffffffff8111156107bb576107ba610569565b5b6107c582546105c3565b6107d0828285610710565b5f60209050601f831160018114610801575f84156107ef578287015190505b6107f9858261077e565b865550610860565b601f19841661080f866105f3565b5f5b8281101561083657848901518255600182019150602085019450602081019050610811565b86831015610853578489015161084f601f891682610762565b8355505b6001600288020188555050505b505050505050565b610871816104f9565b82525050565b5f60208201905061088a5f830184610868565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6108c782610671565b91506108d283610671565b92508282019050808211156108ea576108e9610890565b5b92915050565b6108f981610671565b82525050565b5f6060820190506109125f830186610868565b61091f60208301856108f0565b61092c60408301846108f0565b949350505050565b5f6020820190506109475f8301846108f0565b92915050565b611d278061095a5f395ff3fe608060405234801561000f575f80fd5b5060043610610109575f3560e01c80638615d855116100a0578063976b31131161006f578063976b311314610293578063a9059cbb146102ca578063d5abeb01146102fa578063dd62ed3e14610318578063f2fde38b1461034857610109565b80638615d8551461020b5780638da5cb5b1461023b578063943e82161461025957806395d89b411461027557610109565b8063313ce567116100dc578063313ce567146101a95780634e71d92d146101c757806370a08231146101d1578063715018a61461020157610109565b806306fdde031461010d578063095ea7b31461012b57806318160ddd1461015b57806323b872dd14610179575b5f80fd5b610115610364565b6040516101229190611405565b60405180910390f35b610145600480360381019061014091906114c3565b6103f4565b604051610152919061151b565b60405180910390f35b610163610416565b6040516101709190611543565b60405180910390f35b610193600480360381019061018e919061155c565b61041f565b6040516101a0919061151b565b60405180910390f35b6101b161044d565b6040516101be91906115c7565b60405180910390f35b6101cf610455565b005b6101eb60048036038101906101e691906115e0565b610580565b6040516101f89190611543565b60405180910390f35b6102096105c5565b005b61022560048036038101906102209190611737565b6105d8565b6040516102329190611543565b60405180910390f35b6102436106bd565b60405161025091906117a0565b60405180910390f35b610273600480360381019061026e91906117dc565b6106e5565b005b61027d610916565b60405161028a9190611405565b60405180910390f35b6102ad60048036038101906102a8919061181a565b6109a6565b6040516102c1989796959493929190611845565b60405180910390f35b6102e460048036038101906102df91906114c3565b610ab8565b6040516102f1919061151b565b60405180910390f35b610302610ada565b60405161030f9190611543565b60405180910390f35b610332600480360381019061032d91906118c8565b610ae1565b60405161033f9190611543565b60405180910390f35b610362600480360381019061035d91906115e0565b610b63565b005b60606003805461037390611933565b80601f016020809104026020016040519081016040528092919081815260200182805461039f90611933565b80156103ea5780601f106103c1576101008083540402835291602001916103ea565b820191905f5260205f20905b8154815290600101906020018083116103cd57829003601f168201915b5050505050905090565b5f806103fe610be7565b905061040b818585610bee565b600191505092915050565b5f600254905090565b5f80610429610be7565b9050610436858285610c00565b610441858585610c92565b60019150509392505050565b5f6012905090565b5f61045e610416565b03610495576040517fcbe2483100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610516576040517f0b1327a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061057e6105766106bd565b336064610c92565b565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6105cd610d82565b6105d65f610e09565b565b5f806105e333610580565b0361061a576040517f8439960d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610622610416565b82111561066657816040517f589a495200000000000000000000000000000000000000000000000000000000815260040161065d9190611543565b60405180910390fd5b5f600760018160018154018082558091505003905f5260205f2090600902019050838160020190816106989190611b00565b5082816007018190555060016007805490506106b49190611bfc565b91505092915050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f600783815481106106fa576106f9611c2f565b5b905f5260205f20906009020190508060080160019054906101000a900460ff1615610751576040517f66b6cb4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61076633825f01610ecc90919063ffffffff16565b1561079d576040517f7c9a1cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b233825f01610ef990919063ffffffff16565b505f6107bd33610580565b9050600160028111156107d3576107d2611c5c565b5b8360028111156107e6576107e5611c5c565b5b0361080a5780826003015f8282546107fe9190611c89565b9250508190555061089c565b5f600281111561081d5761081c611c5c565b5b8360028111156108305761082f611c5c565b5b036108545780826004015f8282546108489190611c89565b9250508190555061089b565b60028081111561086757610866611c5c565b5b83600281111561087a57610879611c5c565b5b0361089a5780826005015f8282546108929190611c89565b925050819055505b5b5b80826006015f8282546108af9190611c89565b9250508190555081600701548260060154106109105760018260080160016101000a81548160ff02191690831515021790555081600401548260030154111561090f576001826008015f6101000a81548160ff0219169083151502179055505b5b50505050565b60606004805461092590611933565b80601f016020809104026020016040519081016040528092919081815260200182805461095190611933565b801561099c5780601f106109735761010080835404028352916020019161099c565b820191905f5260205f20905b81548152906001019060200180831161097f57829003601f168201915b5050505050905090565b60605f805f805f805f8060078a815481106109c4576109c3611c2f565b5b905f5260205f20906009020190508060020181600301548260040154836005015484600601548560070154866008015f9054906101000a900460ff168760080160019054906101000a900460ff16878054610a1e90611933565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4a90611933565b8015610a955780601f10610a6c57610100808354040283529160200191610a95565b820191905f5260205f20905b815481529060010190602001808311610a7857829003601f168201915b505050505097509850985098509850985098509850985050919395975091939597565b5f80610ac2610be7565b9050610acf818585610c92565b600191505092915050565b620f424081565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610b6b610d82565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bdb575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610bd291906117a0565b60405180910390fd5b610be481610e09565b50565b5f33905090565b610bfb8383836001610f26565b505050565b5f610c0b8484610ae1565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c8c5781811015610c7d578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610c7493929190611cbc565b60405180910390fd5b610c8b84848484035f610f26565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d02575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610cf991906117a0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d72575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d6991906117a0565b60405180910390fd5b610d7d8383836110f5565b505050565b610d8a610be7565b73ffffffffffffffffffffffffffffffffffffffff16610da86106bd565b73ffffffffffffffffffffffffffffffffffffffff1614610e0757610dcb610be7565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610dfe91906117a0565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f610ef1835f018373ffffffffffffffffffffffffffffffffffffffff165f1b61130e565b905092915050565b5f610f1e835f018373ffffffffffffffffffffffffffffffffffffffff165f1b61132e565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f96575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610f8d91906117a0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611006575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610ffd91906117a0565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156110ef578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110e69190611543565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611145578060025f8282546111399190611c89565b92505081905550611213565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156111ce578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016111c593929190611cbc565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361125a578060025f82825403925050819055506112a4565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113019190611543565b60405180910390a3505050565b5f80836001015f8481526020019081526020015f20541415905092915050565b5f611339838361130e565b61138b57825f0182908060018154018082558091505060019003905f5260205f20015f9091909190915055825f0180549050836001015f8481526020019081526020015f20819055506001905061138f565b5f90505b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6113d782611395565b6113e1818561139f565b93506113f18185602086016113af565b6113fa816113bd565b840191505092915050565b5f6020820190508181035f83015261141d81846113cd565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61145f82611436565b9050919050565b61146f81611455565b8114611479575f80fd5b50565b5f8135905061148a81611466565b92915050565b5f819050919050565b6114a281611490565b81146114ac575f80fd5b50565b5f813590506114bd81611499565b92915050565b5f80604083850312156114d9576114d861142e565b5b5f6114e68582860161147c565b92505060206114f7858286016114af565b9150509250929050565b5f8115159050919050565b61151581611501565b82525050565b5f60208201905061152e5f83018461150c565b92915050565b61153d81611490565b82525050565b5f6020820190506115565f830184611534565b92915050565b5f805f606084860312156115735761157261142e565b5b5f6115808682870161147c565b93505060206115918682870161147c565b92505060406115a2868287016114af565b9150509250925092565b5f60ff82169050919050565b6115c1816115ac565b82525050565b5f6020820190506115da5f8301846115b8565b92915050565b5f602082840312156115f5576115f461142e565b5b5f6116028482850161147c565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611649826113bd565b810181811067ffffffffffffffff8211171561166857611667611613565b5b80604052505050565b5f61167a611425565b90506116868282611640565b919050565b5f67ffffffffffffffff8211156116a5576116a4611613565b5b6116ae826113bd565b9050602081019050919050565b828183375f83830152505050565b5f6116db6116d68461168b565b611671565b9050828152602081018484840111156116f7576116f661160f565b5b6117028482856116bb565b509392505050565b5f82601f83011261171e5761171d61160b565b5b813561172e8482602086016116c9565b91505092915050565b5f806040838503121561174d5761174c61142e565b5b5f83013567ffffffffffffffff81111561176a57611769611432565b5b6117768582860161170a565b9250506020611787858286016114af565b9150509250929050565b61179a81611455565b82525050565b5f6020820190506117b35f830184611791565b92915050565b600381106117c5575f80fd5b50565b5f813590506117d6816117b9565b92915050565b5f80604083850312156117f2576117f161142e565b5b5f6117ff858286016114af565b9250506020611810858286016117c8565b9150509250929050565b5f6020828403121561182f5761182e61142e565b5b5f61183c848285016114af565b91505092915050565b5f610100820190508181035f83015261185e818b6113cd565b905061186d602083018a611534565b61187a6040830189611534565b6118876060830188611534565b6118946080830187611534565b6118a160a0830186611534565b6118ae60c083018561150c565b6118bb60e083018461150c565b9998505050505050505050565b5f80604083850312156118de576118dd61142e565b5b5f6118eb8582860161147c565b92505060206118fc8582860161147c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061194a57607f821691505b60208210810361195d5761195c611906565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026119bf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611984565b6119c98683611984565b95508019841693508086168417925050509392505050565b5f819050919050565b5f611a046119ff6119fa84611490565b6119e1565b611490565b9050919050565b5f819050919050565b611a1d836119ea565b611a31611a2982611a0b565b848454611990565b825550505050565b5f90565b611a45611a39565b611a50818484611a14565b505050565b5b81811015611a7357611a685f82611a3d565b600181019050611a56565b5050565b601f821115611ab857611a8981611963565b611a9284611975565b81016020851015611aa1578190505b611ab5611aad85611975565b830182611a55565b50505b505050565b5f82821c905092915050565b5f611ad85f1984600802611abd565b1980831691505092915050565b5f611af08383611ac9565b9150826002028217905092915050565b611b0982611395565b67ffffffffffffffff811115611b2257611b21611613565b5b611b2c8254611933565b611b37828285611a77565b5f60209050601f831160018114611b68575f8415611b56578287015190505b611b608582611ae5565b865550611bc7565b601f198416611b7686611963565b5f5b82811015611b9d57848901518255600182019150602085019450602081019050611b78565b86831015611bba5784890151611bb6601f891682611ac9565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611c0682611490565b9150611c1183611490565b9250828203905081811115611c2957611c28611bcf565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f611c9382611490565b9150611c9e83611490565b9250828201905080821115611cb657611cb5611bcf565b5b92915050565b5f606082019050611ccf5f830186611791565b611cdc6020830185611534565b611ce96040830184611534565b94935050505056fea2646970667358221220f1abbc403fec7a59bd8d2a04cdd5ab0f566b4edf68f4557043d872c391ca831564736f6c634300081a0033000000000000000000000000a6d5076f10c550eaf85ed71efef22709345fc1f1