diff -urN rt_v32/Makefile rt_v33/Makefile
--- rt_v32/Makefile	2018-05-01 23:19:45.000000000 +0900
+++ rt_v33/Makefile	2018-05-07 22:55:30.000000000 +0900
@@ -6,10 +6,10 @@
 all: cross rt
 
 cross: cross.c $(OBJS)
-	gcc -DSRV_CROSS -o $@ cross.c $(OBJS) $(LIBS)
+	gcc -Wall -DSRV_CROSS -o $@ cross.c $(OBJS) $(LIBS)
 
 rt: rt.c cross.c $(OBJS)
-	gcc -DSRV_RT -o $@ rt.c cross.c $(OBJS) $(LIBS)
+	gcc -Wall -DSRV_RT -o $@ rt.c cross.c $(OBJS) $(LIBS)
 
 clean:
 	rm -f cross rt
diff -urN rt_v32/cmd.py rt_v33/cmd.py
--- rt_v32/cmd.py	2018-05-03 15:43:09.000000000 +0900
+++ rt_v33/cmd.py	2018-05-07 22:58:17.000000000 +0900
@@ -25,7 +25,9 @@
 
 def func(sock):
 	s = recv_nl(sock)
-	sock.sendall( cmd_exec(s) )
+	r = cmd_exec(s)
+	sock.sendall(r)
+	sock.shutdown(socket.SHUT_RDWR)
 	sock.close()
 
 if __name__ == "__main__":
diff -urN rt_v32/dat.c rt_v33/dat.c
--- rt_v32/dat.c	2018-05-01 23:14:27.000000000 +0900
+++ rt_v33/dat.c	2018-05-07 21:48:31.000000000 +0900
@@ -22,10 +22,12 @@
 		bp = unpack_vs(bp, &xx->ax.vs);
 		break;
 	case TYP_CX:
-		bp = COPY_FROM_BP(bp, xx->cx);
+		bp = COPY_FROM_BP(bp, xx->cx.r);
+		bp = COPY_FROM_BP(bp, xx->cx.rev);
 		break;
 	case TYP_FX:
-		bp = COPY_FROM_BP(bp, xx->fx);
+		bp = COPY_FROM_BP(bp, xx->fx.dz);
+		bp = COPY_FROM_BP(bp, xx->fx.rev);
 		break;
 	default:
 		break;
diff -urN rt_v32/sock.c rt_v33/sock.c
--- rt_v32/sock.c	2018-05-01 23:12:51.000000000 +0900
+++ rt_v33/sock.c	2018-05-07 22:54:54.000000000 +0900
@@ -40,10 +40,11 @@
 int
 srv_port(int port)
 {
-	int sfd;
+	int sfd, v = 1;
 	struct sockaddr_in saddr;
 
 	if((sfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) return -1;
+	setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &v, sizeof(v));
 	memset(&saddr, 0, sizeof(saddr));
 	saddr.sin_family = AF_INET;
 	saddr.sin_addr.s_addr = htonl(INADDR_ANY);
diff -urN rt_v32/sock.py rt_v33/sock.py
--- rt_v32/sock.py	2018-05-06 14:04:03.000000000 +0900
+++ rt_v33/sock.py	2018-05-07 22:47:44.000000000 +0900
@@ -165,6 +165,7 @@
 
 	port = srvs.get_port(name)
 	sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+	sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
 	sock.bind(('localhost', port))
 	sock.listen(5)
 
diff -urN rt_v32/src_send.py rt_v33/src_send.py
--- rt_v32/src_send.py	2018-05-03 21:01:36.000000000 +0900
+++ rt_v33/src_send.py	2018-05-07 23:17:07.000000000 +0900
@@ -8,6 +8,12 @@
 def get_port(base, i):
 	return srvs.base_port + base + i
 
+def rmt_call(rmt_cmd):
+	cmd = 'echo "{}" | nc localhost {}'.format( rmt_cmd, get_port(rmt_base, 0) )
+	print('rmt_call cmd={}'.format(cmd))
+	r = ut.cmd_exec(cmd)
+	print( r.decode() )
+
 if __name__ == "__main__":
 	lcl_base = 10
 	rmt_base = ut.arg_i('base', 20)
@@ -21,19 +27,17 @@
 		d = './'
 	print('d={} n={}'.format(d, n))
 
-	rmt_cmd = 'echo "nc localhost -l {} | tar xf -" | nc localhost {}'.format( get_port(lcl_base, 9), get_port(rmt_base, 0) )
-	print('rmt_cmd={}'.format(rmt_cmd))
-	proc = ut.cmd_proc(rmt_cmd)
+	rmt_cmd = "nc -l {} </dev/null | tar xvf -".format( get_port(lcl_base, 9) )
+	th = ut.th_start(rmt_call, rmt_cmd)
 
 	ut.sleep(1)
 
-	lcl_cmd = 'tar cf - -C {} {} | nc localhost {}'.format( d, n, get_port(rmt_base, 9) )
+	lcl_cmd = 'tar cvf - -C {} {} | nc localhost {}'.format( d, n, get_port(rmt_base, 9) )
 	print('lcl_cmd={}'.format(lcl_cmd))
-	ut.cmd_exec(lcl_cmd)
+	r = ut.cmd_exec(lcl_cmd)
+	print( r.decode() )
 
-	while ut.is_alive(proc):
-		ut.sleep(1)
-		print('wait')
+	th.join()
 
 	# build
 	cmd = 'echo "cd {} ; make clean ; make" | nc localhost {}'.format( n, get_port(rmt_base, 0) )
diff -urN rt_v32/wf.py rt_v33/wf.py
--- rt_v32/wf.py	2018-05-03 20:40:10.000000000 +0900
+++ rt_v33/wf.py	2018-05-07 21:48:31.000000000 +0900
@@ -8,11 +8,20 @@
 import lstx
 import val
 
+srv_dic = {}
+
+def get_kind_str(d):
+	kind = d.get('kind')
+	if type(kind) == str:
+		return kind
+	kinds = ut.dic_cache( srv_dic, 'kinds', lambda : val.cli.get_prop('kinds') )
+	return kinds[ kind ]
+
 def wf_ps_idxs(d):
 	len_to_idxs = lambda n, add=0: ut.map_lst( lambda i: ( add+i, add+(i+1)%n ), range(n) )
 	rv_ps = lambda ps: ( ps, len_to_idxs( len(ps) ) )
 
-	kind = d.get('kind')
+	kind = get_kind_str(d)
 
 	if kind == 'square':
 		n = 4