caoang(not debugged)