
coro1 = coroutine.create(function(x)
	print('[coro1] current coro:', coro_t[coroutine.running()])
	print('[coro1] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	ok, x = coroutine.resume(coro2, x .. "a")
	print('[coro1] ', ok, x)
	print('[coro1] current coro:', coro_t[coroutine.running()])
	print('[coro1] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	ok, x = coroutine.resume(coro2, x .. "a")
	print('[coro1] ', ok, x)
	print('[coro1] current coro:', coro_t[coroutine.running()])
	print('[coro1] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	return x
end)

coro2 = coroutine.create(function(x)
	print('[coro2] current coro:', coro_t[coroutine.running()])
	print('[coro2] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	ok, x = coroutine.resume(coro3, x .. "a")
	print('[coro2] ', ok, x)
	print('[coro2] current coro:', coro_t[coroutine.running()])
	print('[coro2] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	ok, x = coroutine.resume(coro3, x .. "a")
	print('[coro2] ', ok, x)
	print('[coro2] current coro:', coro_t[coroutine.running()])
	print('[coro2] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	ok, x = coroutine.resume(coro3, x .. "a")
	print('[coro2] ', ok, x)
	print('[coro2] current coro:', coro_t[coroutine.running()])
	print('[coro2] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	ok, x = coroutine.resume(coro3, x .. "a")
	print('[coro2] ', ok, x)
	print('[coro2] current coro:', coro_t[coroutine.running()])
	print('[coro2] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	return x
end)

coro3 = coroutine.create(function(x)
	print('[coro3] current coro:', coro_t[coroutine.running()])
	print('[coro3] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	ok, x = coroutine.resume(coro4, x .. "a")
	print('[coro3] ', ok, x)
	print('[coro3] current coro:', coro_t[coroutine.running()])
	print('[coro3] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	ok, x = coroutine.resume(coro4, x .. "a")
	print('[coro3] ', ok, x)
	print('[coro3] current coro:', coro_t[coroutine.running()])
	print('[coro3] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	ok, x = coroutine.resume(coro4, x .. "a")
	print('[coro3] ', ok, x)
	print('[coro3] current coro:', coro_t[coroutine.running()])
	print('[coro3] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	ok, x = coroutine.resume(coro4, x .. "a")
	print('[coro3] ', ok, x)
	print('[coro3] current coro:', coro_t[coroutine.running()])
	print('[coro3] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	ok, x = coroutine.resume(coro4, x .. "a")
	print('[coro3] ', ok, x)
	print('[coro3] current coro:', coro_t[coroutine.running()])
	print('[coro3] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	ok, x = coroutine.resume(coro4, x .. "a")
	print('[coro3] ', ok, x)
	print('[coro3] current coro:', coro_t[coroutine.running()])
	print('[coro3] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	print('[coro3] ', ok, x)
	print('[coro3] current coro:', coro_t[coroutine.running()])
	print('[coro3] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	ok, x = coroutine.resume(coro4, x .. "a")
	print('[coro3] ', ok, x)
	print('[coro3] current coro:', coro_t[coroutine.running()])
	print('[coro3] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	ok, x = coroutine.resume(coro4, x .. "a")
	print('[coro3] ', ok, x)
	print('[coro3] current coro:', coro_t[coroutine.running()])
	print('[coro3] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	ok, x = coroutine.resume(coro4, x .. "a")
	print('[coro3] ', ok, x)
	print('[coro3] current coro:', coro_t[coroutine.running()])
	print('[coro3] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	ok, x = coroutine.resume(coro4, x .. "a")
	print('[coro3] ', ok, x)
	print('[coro3] current coro:', coro_t[coroutine.running()])
	print('[coro3] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	ok, x = coroutine.resume(coro4, x .. "a")
	print('[coro3] ', ok, x)
	print('[coro3] current coro:', coro_t[coroutine.running()])
	print('[coro3] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	return x
end)

coro4 = coroutine.create(function(x)
	print('[coro4] current coro:', coro_t[coroutine.running()])
	print('[coro4] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	x = coroutine.yield(x .. "a")
	print('[coro4] ', x)
	print('[coro4] current coro:', coro_t[coroutine.running()])
	print('[coro4] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	x = coroutine.yield(x .. "a")
	print('[coro4] ', x)
	print('[coro4] current coro:', coro_t[coroutine.running()])
	print('[coro4] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	x = coroutine.yield(x .. "a")
	print('[coro4] ', x)
	print('[coro4] current coro:', coro_t[coroutine.running()])
	print('[coro4] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	x = coroutine.yield(x .. "a")
	print('[coro4] ', x)
	print('[coro4] current coro:', coro_t[coroutine.running()])
	print('[coro4] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	x = coroutine.yield(x .. "a")
	print('[coro4] ', x)
	print('[coro4] current coro:', coro_t[coroutine.running()])
	print('[coro4] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	x = coroutine.yield(x .. "a")
	print('[coro4] ', x)
	print('[coro4] current coro:', coro_t[coroutine.running()])
	print('[coro4] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	x = coroutine.yield(x .. "a")
	print('[coro4] ', x)
	print('[coro4] current coro:', coro_t[coroutine.running()])
	print('[coro4] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	x = coroutine.yield(x .. "a")
	print('[coro4] ', x)
	print('[coro4] current coro:', coro_t[coroutine.running()])
	print('[coro4] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	x = coroutine.yield(x .. "a")
	print('[coro4] ', x)
	print('[coro4] current coro:', coro_t[coroutine.running()])
	print('[coro4] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	x = coroutine.yield(x .. "a")
	print('[coro4] ', x)
	print('[coro4] current coro:', coro_t[coroutine.running()])
	print('[coro4] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	x = coroutine.yield(x .. "a")
	print('[coro4] ', x)
	print('[coro4] current coro:', coro_t[coroutine.running()])
	print('[coro4] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	x = coroutine.yield(x .. "a")
	print('[coro4] ', x)
	print('[coro4] current coro:', coro_t[coroutine.running()])
	print('[coro4] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	x = coroutine.yield(x .. "a")
	print('[coro4] ', x)
	print('[coro4] current coro:', coro_t[coroutine.running()])
	print('[coro4] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	x = coroutine.yield(x .. "a")
	print('[coro4] ', x)
	print('[coro4] current coro:', coro_t[coroutine.running()])
	print('[coro4] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	x = coroutine.yield(x .. "a")
	print('[coro4] ', x)
	print('[coro4] current coro:', coro_t[coroutine.running()])
	print('[coro4] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	x = coroutine.yield(x .. "a")
	print('[coro4] ', x)
	print('[coro4] current coro:', coro_t[coroutine.running()])
	print('[coro4] coro status:', coroutine.status(coro1), coroutine.status(coro2), coroutine.status(coro3), coroutine.status(coro4))
	return x
end)

coro_t = {}
coro_t[coro1] = 'coroutine-1'
coro_t[coro2] = 'coroutine-2'
coro_t[coro3] = 'coroutine-3'
coro_t[coro4] = 'coroutine-4'

ok, x = coroutine.resume(coro1, "a")
print('[main] ', ok, x)

