From fdc075517b50afa6cdf1c83d523d112fb79e8abc Mon Sep 17 00:00:00 2001
From: sparky4 <sparky4@cock.li>
Date: Fri, 11 Aug 2017 14:13:16 -0500
Subject: [PATCH] dots for a simple port but damn it!

---
 dots/a            | Bin 0 -> 13440 bytes
 dots/asm.asm      | 251 +++++++++++++++++++++++++++++++++++++++
 dots/asm.c        |   0
 dots/asm.h        |   0
 dots/clink.inc    |  41 +++++++
 dots/cut          |  86 ++++++++++++++
 dots/dots.c       | 291 ++++++++++++++++++++++++++++++++++++++++++++++
 dots/dots.lnk     |   6 +
 dots/dots.meh     | 255 ++++++++++++++++++++++++++++++++++++++++
 dots/dots.obj     | Bin 0 -> 7513 bytes
 dots/dp_prefs     | Bin 0 -> 324 bytes
 dots/face.c       |  26 +++++
 dots/face.exe     | Bin 0 -> 29250 bytes
 dots/face.inc     |   1 +
 dots/main.c       | 291 ++++++++++++++++++++++++++++++++++++++++++++++
 dots/makefile     |  48 ++++++++
 dots/makefile.old |  24 ++++
 dots/sin1024.inc  |  33 ++++++
 plzpart/makefile  | 133 +++++++++++++++++++++
 19 files changed, 1486 insertions(+)
 create mode 100755 dots/a
 create mode 100755 dots/asm.asm
 create mode 100755 dots/asm.c
 create mode 100755 dots/asm.h
 create mode 100755 dots/clink.inc
 create mode 100755 dots/cut
 create mode 100755 dots/dots.c
 create mode 100755 dots/dots.lnk
 create mode 100755 dots/dots.meh
 create mode 100755 dots/dots.obj
 create mode 100755 dots/dp_prefs
 create mode 100755 dots/face.c
 create mode 100755 dots/face.exe
 create mode 100755 dots/face.inc
 create mode 100755 dots/main.c
 create mode 100755 dots/makefile
 create mode 100755 dots/makefile.old
 create mode 100755 dots/sin1024.inc
 create mode 100755 plzpart/makefile

diff --git a/dots/a b/dots/a
new file mode 100755
index 0000000000000000000000000000000000000000..d01757e036f8906013fa844617c30311433d9a26
GIT binary patch
literal 13440
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

literal 0
HcmV?d00001

diff --git a/dots/asm.asm b/dots/asm.asm
new file mode 100755
index 0000000..16b8e52
--- /dev/null
+++ b/dots/asm.asm
@@ -0,0 +1,251 @@
+include clink.inc
+code SEGMENT para public 'CODE'
+ASSUME cs:code
+
+.386
+
+MAXDOTS equ 1024
+
+BOTTOM equ 8000
+
+public _gravitybottom
+_gravitybottom dw BOTTOM
+
+public _bpmin,_bpmax
+_bpmin dw	30000
+_bpmax dw	-30000
+
+public _gravity
+_gravity dw	0
+
+public _dotnum
+_dotnum dw	0
+
+public _gravityd
+_gravityd dw	16
+
+dw -1280
+dw -960
+dw -640
+dw -320
+public _rows
+_rows	dw  200 dup(0)
+
+public _dot
+_dot LABEL WORD
+dot dw	MAXDOTS dup(0,0,0,0,0,0,0,0) ;x,y,z,oldposshadow,oldpos,-,-,-
+
+public _rotsin,_rotcos
+_rotsin dw 0
+_rotcos dw 0
+
+public _bgpic
+_bgpic	dw 0,0
+
+public _depthtable1,_depthtable2,_depthtable3,_depthtable4
+_depthtable1 dd 128 dup(0)
+_depthtable2 dd 128 dup(0)
+_depthtable3 dd 128 dup(0)
+_depthtable4 dd 128 dup(0)
+
+public _drawdots
+_drawdots PROC FAR
+	CBEG
+	mov	ax,0a000h
+	mov	es,ax
+	mov	ax,cs
+	mov	ds,ax
+	mov	fs,cs:_bgpic[2]
+	mov	cx,cs:_dotnum
+	mov	si,OFFSET dot
+@@loo:
+@@1:	push	cx
+
+	mov	ax,ds:[si+0] ;X
+	imul	ds:_rotsin
+	mov	ax,ax
+	mov	cx,dx
+	mov	ax,ds:[si+4] ;Z
+	imul	ds:_rotcos
+	sub	ax,bx
+	sub	dx,cx
+	mov	bp,dx
+	add	bp,9000
+	
+	mov	ax,ds:[si+0] ;X
+	imul	ds:_rotcos
+	mov	bx,ax
+	mov	cx,dx
+	mov	ax,ds:[si+4] ;Z
+	imul	ds:_rotsin
+	add	ax,bx
+	adc	dx,cx
+	shrd	ax,dx,8
+	sar	dx,8
+	
+	mov	bx,ax
+	mov	cx,dx
+	shrd	ax,dx,3
+	sar	dx,3
+	add	ax,bx
+	adc	dx,cx
+	
+	idiv	bp
+	add	ax,160
+	push	ax
+	cmp	ax,319
+	ja	@@2
+	
+	;shadow
+
+	xor	ax,ax
+	mov	dx,8
+	idiv	bp
+	add	ax,100
+	cmp	ax,199
+	ja	@@2
+	mov	bx,ax
+	shl	bx,1
+	mov	bx,ds:_rows[bx]
+	pop	ax
+	add	bx,ax
+	push	ax
+	
+	mov	di,ds:[si+6]
+	mov	ax,fs:[di]
+	mov	es:[di],ax
+	mov	ax,87+87*256
+	mov	word ptr es:[bx],ax
+	mov	ds:[si+6],bx
+	
+	;ball
+	
+	mov	ax,ds:_gravity
+	add	ds:[si+14],ax
+	mov	ax,ds:[si+2] ;Y
+	add	ax,ds:[si+14]
+	cmp	ax,ds:_gravitybottom
+	jl	@@4
+	push	ax
+	mov	ax,ds:[si+14]
+	neg	ax
+	imul	cs:_gravityd
+	sar	ax,4
+	mov	ds:[si+14],ax
+	pop	ax
+	add	ax,ds:[si+14]
+@@4:	mov	ds:[si+2],ax
+	cwd
+	shld	dx,ax,6
+	shl	ax,6
+	idiv	bp
+	add	ax,100
+	cmp	ax,199
+	ja	@@3
+	mov	bx,ax
+	shl	bx,1
+	mov	bx,ds:_rows[bx]
+	pop	ax
+	add	bx,ax
+
+	mov	di,ds:[si+8]
+	mov	eax,fs:[di]
+	mov	es:[di],eax
+	add	di,320
+	mov	eax,fs:[di]
+	mov	es:[di],eax
+	add	di,320
+	mov	eax,fs:[di]
+	mov	es:[di],eax
+;	add	di,320
+;	mov	eax,fs:[di]
+;	mov	es:[di],eax
+	shr	bp,6
+	and	bp,not 3
+	
+	cmp	bp,cs:_bpmin
+	jge	@@t1
+	mov	cs:_bpmin,bp
+@@t1:	cmp	bp,cs:_bpmax
+	jle	@@t2
+	mov	cs:_bpmax,bp
+@@t2:
+	mov	ax,word ptr ds:_depthtable1[bp]
+	mov	word ptr es:[bx+1],ax
+	mov	eax,ds:_depthtable2[bp]
+	mov	dword ptr es:[bx+320],eax
+	mov	ax,word ptr ds:_depthtable3[bp]
+	mov	word ptr es:[bx+641],ax
+	mov	ds:[si+8],bx
+
+@@z:	pop	cx
+	add	si,16
+	loop	@@1oo
+@@0:	CEND
+
+@@2:	mov	di,ds:[si+8]
+	mov	eax,fs:[di]
+	mov	es:[di],eax
+	add	di,320
+	mov	eax,fs:[di]
+	mov	es:[di],eax
+	add	di,320
+	mov	eax,fs:[di]
+	mov	es:[di],eax
+	mov	di,ds:[si+6]
+	mov	ds:[si+6],ax
+	mov	ax,fs:[di]
+	mov	es:[di],ax
+	pop	bx
+	pop	cx
+	add	si,16
+	loop	@@1
+	jmp	@@0
+@@3:	mov	di,ds:[si+8]
+	mov	eax,fs:[di]
+	mov	es:[di],eax
+	add	di,320
+	mov	eax,fs:[di]
+	mov	es:[di],eax
+	add	di,320
+	mov	eax,fs:[di]
+	mov	es:[di],eax
+	pop	bx
+	pop	cx
+	add	si,16
+	loop	@@1
+	jmp	@@0
+_drawdots ENDP
+
+PUBLIC _setpalette
+_setpalette PROC FAR
+	push	bp
+	mov	bp,sp
+	push	si
+	push	di
+	push	ds
+	mov	si,[bp+6]
+	mov	ds,[bp+8]
+	mov	dx,3c8h
+	mov	al,0
+	out	dx,al
+	inc	dx
+	mov	cx,768
+	rep	outsb
+	pop	ds
+	pop	di
+	pop	si
+	pop	bp
+	ret
+_setpalette ENDP
+
+_face	LABEL WORD
+public _face
+include face.inc
+dw	30000,30000,30000
+
+PUBLIC _sin1024
+include sin1024.inc
+
+code ENDS
+END
diff --git a/dots/asm.c b/dots/asm.c
new file mode 100755
index 0000000..e69de29
diff --git a/dots/asm.h b/dots/asm.h
new file mode 100755
index 0000000..e69de29
diff --git a/dots/clink.inc b/dots/clink.inc
new file mode 100755
index 0000000..3d5effb
--- /dev/null
+++ b/dots/clink.inc
@@ -0,0 +1,41 @@
+FIXWORD	MACRO ;go to word boundary
+	if ($-start) mod 1
+	db 0
+	endif
+	ENDM
+	
+CDS	MACRO
+	mov	ax,cs
+	mov	ds,ax
+	ENDM
+
+CBEG	MACRO ;C/Assembler procedure begin
+	push	bp
+	mov	bp,sp
+	push	si
+	push	di
+	push	ds
+	ENDM
+
+CEND	MACRO ;C/Assembler procedure end
+	pop	ds
+	pop	di
+	pop	si
+	pop	bp
+	ret
+	ENDM
+
+CBEG0	MACRO ;C/Assembler procedure begin, minimal
+	push	bp
+	mov	bp,sp
+	ENDM
+
+CEND0	MACRO ;C/Assembler procedure end, minimal
+	pop	bp
+	ret
+	ENDM
+
+movpar	MACRO	reg,par ;loads parameter [par(0..)] to register [reg]
+	mov	reg,[bp+par*2+6]
+	ENDM
+
diff --git a/dots/cut b/dots/cut
new file mode 100755
index 0000000..0dd2c9c
--- /dev/null
+++ b/dots/cut
@@ -0,0 +1,86 @@
+	#if 0
+	switch(mode=c)
+	{
+	case 0:
+		for(a=0;a<dotnum;a++)
+		{
+			dot[a].x=(rand()-16384)/2;
+			dot[a].y=(rand()-16384)/2;
+			dot[a].z=(rand()-16384)/2;
+		}
+		break;
+	case 1 :
+		for(a=0;a<dotnum;a++)
+		{
+			dot[a].x=sin(f*2)*3500+cos(f*5)*3500;
+			dot[a].y=sin(f*3)*3500+cos(f*6)*3500;
+			dot[a].z=sin(f*4)*3500+cos(f*7)*3500;
+			f+=.05;
+		}
+		break;
+	case 2 :
+		for(a=0;a<dotnum;a++)
+		{
+			dot[a].x=sin(a*4)*3500+cos(a*7)*3500;
+			dot[a].y=cos(a*5)*3500+sin(a*8)*3500;
+			dot[a].z=sin(a*6)*3500+cos(a*9)*3500;
+			f+=.05;
+		}
+		break;
+	case 3 :
+		for(a=0;a<dotnum;a++)
+		{
+			dot[a].x=sin(a)*7500*sin(3.141592*a/dotnum);
+			dot[a].y=-4000+a*8;
+			dot[a].z=cos(a)*7500*sin(3.141592*a/dotnum);
+			f+=.05;
+		}
+		gravity=3;
+		break;
+	case 4 :
+		for(a=0;a<dotnum;a++)
+		{
+			dot[a].x=sin(a*4)*3500+cos(a*7)*3500;
+			dot[a].y=cos(a*5)*3500+sin(a*8)*3500;
+			dot[a].z=sin(a*6)*3500+cos(a*9)*3500;
+			f+=.05;
+		}
+		gravity=3;
+		break;
+	case 5 :
+		b=0;
+		for(a=0;a<dotnum && face[b]!=30000;a++)
+		{
+			dot[a].x=face[b++];
+			dot[a].y=face[b++];
+			dot[a].z=face[b++];
+		}
+		break;
+	case 6 :
+		gravity=0;
+		i=0;
+		break;
+	default :
+		timer=15000;
+	case 7 :
+		for(a=0;a<dotnum;a++)
+		{
+			dot[a].x=0;
+			dot[a].y=0;
+			dot[a].z=-19000;
+		}
+		mode=7;
+		gravity=3;
+		gravityd=13;
+		i=-1;
+		break;
+	case 8:
+		for(a=0;a<dotnum;a++)
+		{
+			dot[a].x=(rand()-16384)/2;
+			dot[a].y=8000;
+			dot[a].z=(rand()-16384)/2;
+		}
+		break;
+	}
+	#endif
diff --git a/dots/dots.c b/dots/dots.c
new file mode 100755
index 0000000..a994da8
--- /dev/null
+++ b/dots/dots.c
@@ -0,0 +1,291 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <conio.h>
+#include <malloc.h>
+#include <math.h>
+#include "../dis/dis.h"
+
+extern int face[];
+
+extern int bpmin,bpmax;
+
+extern char *bgpic;
+extern int rotsin,rotcos;
+extern int rows[];
+extern long depthtable1[];
+extern long depthtable2[];
+extern long depthtable3[];
+extern long depthtable4[];
+
+extern int dotnum;
+
+extern void drawdots(void);
+
+char far *vram=(char far *)0xa0000000L;
+
+char	pal[768];
+char	pal2[768];
+
+extern sin1024[];
+
+int	isin(int deg)
+{
+	return(sin1024[deg&1023]);
+}
+
+int	icos(int deg)
+{
+	return(sin1024[(deg+256)&1023]);
+}
+
+extern struct
+{
+	int	x;
+	int	y;
+	int	z;
+	int	old1;
+	int	old2;
+	int	old3;
+	int	old4;
+	int	yadd;
+} dot[];
+
+extern int gravity;
+extern int gravitybottom;
+extern int gravityd;
+
+void setborder(unsigned char color)
+{
+	_asm
+	{
+		mov	dx,3dah
+		in	al,dx
+		mov	dx,3c0h
+		mov	al,11h+32
+		out	dx,al
+		mov	al,color
+		out	dx,al
+	}
+}
+
+int	cols[]={
+0,0,0,
+4,25,30,
+8,40,45,
+16,55,60};
+int	dottaul[1024];
+
+int main(int argc,char *argv[])
+{
+	int	timer=30000;
+	int	dropper,repeat;
+	int	frame=0;
+	int	rota=-1*64;
+	int	fb=0;
+	int	rot=0,rots=0;
+	int	a,b,c,d,i,j,mode;
+	int	grav,gravd;
+	int	f=0;
+	dis_partstart();
+	dotnum=512;
+	for(a=0;a<dotnum;a++)  dottaul[a]=a;
+	for(a=0;a<500;a++)
+	{
+		b=rand()%dotnum;
+		c=rand()%dotnum;
+		d=dottaul[b];
+		dottaul[b]=dottaul[c];
+		dottaul[c]=d;
+	}
+	{
+		dropper=22000;
+		for(a=0;a<dotnum;a++)
+		{
+			dot[a].x=0;
+			dot[a].y=2560-dropper;
+			dot[a].z=0;
+			dot[a].yadd=0;
+		}
+		mode=7;
+		grav=3;
+		gravd=13;
+		gravitybottom=8105;
+		i=-1;
+	}
+	for(a=0;a<500;a++)
+	{ // scramble
+		b=rand()%dotnum;
+		c=rand()%dotnum;
+		d=dot[b].x; dot[b].x=dot[c].x; dot[c].x=d;
+		d=dot[b].y; dot[b].y=dot[c].y; dot[c].y=d;
+		d=dot[b].z; dot[b].z=dot[c].z; dot[c].z=d;
+	}
+	for(a=0;a<200;a++) rows[a]=a*320;
+	_asm mov ax,13h
+	_asm int 10h
+	outp(0x3c8,0);
+	for(a=0;a<16;a++) for(b=0;b<4;b++)
+	{
+		c=100+a*9;
+		outp(0x3c9,cols[b*3+0]);
+		outp(0x3c9,cols[b*3+1]*c/256);
+		outp(0x3c9,cols[b*3+2]*c/256);
+	}
+	outp(0x3c8,255);
+	outp(0x3c9,31);
+	outp(0x3c9,0);
+	outp(0x3c9,15);
+	outp(0x3c8,64);
+	for(a=0;a<100;a++)
+	{
+		c=64-256/(a+4);
+		c=c*c/64;
+		outp(0x3c9,c/4);
+		outp(0x3c9,c/4);
+		outp(0x3c9,c/4);
+	}
+	outp(0x3c7,0);
+	for(a=0;a<768;a++) pal[a]=inp(0x3c9);
+	outp(0x3c8,0);
+	for(a=0;a<768;a++) outp(0x3c9,0);
+	for(a=0;a<100;a++)
+	{
+		memset(vram+(100+a)*320,a+64,320);
+	}
+	for(a=0;a<128;a++)
+	{
+		c=a-(43+20)/2;
+		c=c*3/4;
+		c+=8;
+		if(c<0) c=0; else if(c>15) c=15;
+		c=15-c;
+		depthtable1[a]=0x202+0x04040404*c;
+		depthtable2[a]=0x02030302+0x04040404*c;
+		depthtable3[a]=0x202+0x04040404*c;
+		//depthtable4[a]=0x02020302+0x04040404*c;
+	}
+	bgpic=halloc(64000L,1L);
+	memcpy(bgpic,vram,64000);
+	a=0;
+	for(b=64;b>=0;b--)
+	{	
+		for(c=0;c<768;c++)
+		{
+			a=pal[c]-b;
+			if(a<0) a=0;
+			pal2[c]=a;
+		}
+		dis_waitb();
+		dis_waitb();
+		outp(0x3c8,0);
+		for(c=0;c<768;c++) outp(0x3c9,pal2[c]);
+	}
+	
+	while(!dis_exit() && frame<2450)
+	{
+		//setborder(0);
+		repeat=dis_waitb();
+		if(frame>2300) setpalette(pal2);
+		//setborder(1);
+		if(dis_indemo())
+		{
+			a=dis_musplus();
+			if(a>-4 && a<0) break;
+		}
+		while(repeat--)
+		{
+			frame++;
+			if(frame==500) f=0;
+			i=dottaul[j];
+			j++; j%=dotnum;
+			if(frame<500)
+			{
+				dot[i].x=isin(f*11)*40;
+				dot[i].y=icos(f*13)*10-dropper;
+				dot[i].z=isin(f*17)*40;
+				dot[i].yadd=0;
+			}
+			else if(frame<900)
+			{
+				dot[i].x=icos(f*15)*55;
+				dot[i].y=dropper;
+				dot[i].z=isin(f*15)*55;
+				dot[i].yadd=-260;
+			}
+			else if(frame<1700)
+			{	
+				a=sin1024[frame&1023]/8;
+				dot[i].x=icos(f*66)*a;
+				dot[i].y=8000;
+				dot[i].z=isin(f*66)*a;
+				dot[i].yadd=-300;
+			}
+			else if(frame<2360)
+			{
+				/*
+				a=rand()/128+32;
+				dot[i].y=8000-a*80;
+				b=rand()&1023;
+				a+=rand()&31;
+				dot[i].x=sin1024[b]*a/3+(a-50)*7;
+				dot[i].z=sin1024[(b+256)&1023]*a/3+(a-40)*7;
+				dot[i].yadd=300;
+				if(frame>1640 && !(frame&31) && grav>-2) grav--;
+				*/
+				dot[i].x=rand()-16384;
+				dot[i].y=8000-rand()/2;
+				dot[i].z=rand()-16384;
+				dot[i].yadd=0;
+				if(frame>1900 && !(frame&31) && grav>0) grav--;
+			}
+			else if(frame<2400)
+			{
+				a=frame-2360;
+				for(b=0;b<768;b+=3)
+				{
+					c=pal[b+0]+a*3;
+					if(c>63) c=63;
+					pal2[b+0]=c;
+					c=pal[b+1]+a*3;
+					if(c>63) c=63;
+					pal2[b+1]=c;
+					c=pal[b+2]+a*4;
+					if(c>63) c=63;
+					pal2[b+2]=c;
+				}
+			}
+			else if(frame<2440)
+			{
+				a=frame-2400;
+				for(b=0;b<768;b+=3)
+				{
+					c=63-a*2;
+					if(c<0) c=0;
+					pal2[b+0]=c;
+					pal2[b+1]=c;
+					pal2[b+2]=c;
+				}
+			}
+			if(dropper>4000) dropper-=100;
+			rotcos=icos(rot)*64; rotsin=isin(rot)*64;
+			rots+=2;
+			if(frame>1900) 
+			{
+				rot+=rota/64;
+				rota--;
+			}
+			else rot=isin(rots);
+			f++;
+			gravity=grav;
+			gravityd=gravd;
+		}
+		drawdots();
+	}
+	if(!dis_indemo())
+	{
+		_asm mov ax,3h
+		_asm int 10h
+	}
+	return(0);
+}
diff --git a/dots/dots.lnk b/dots/dots.lnk
new file mode 100755
index 0000000..69615a8
--- /dev/null
+++ b/dots/dots.lnk
@@ -0,0 +1,6 @@
+debug dwarf all
+option stack=32768
+system dos
+file dots.obj
+name dots.exe
+option map=dots.meh
diff --git a/dots/dots.meh b/dots/dots.meh
new file mode 100755
index 0000000..c5864b4
--- /dev/null
+++ b/dots/dots.meh
@@ -0,0 +1,255 @@
+Open Watcom Linker Version 2.0 beta Nov 19 2016 01:49:19 (64-bit)
+Copyright (c) 2002-2016 The Open Watcom Contributors. All Rights Reserved.
+Portions Copyright (c) 1985-2002 Sybase, Inc. All Rights Reserved.
+Created on:       17/08/11 14:12:27
+Executable Image: dots.exe
+creating a DOS executable
+Error! E2028: _sin1024 is an undefined reference
+Error! E2028: dis_partstart_ is an undefined reference
+Error! E2028: _dotnum is an undefined reference
+Error! E2028: _dot is an undefined reference
+Error! E2028: _gravitybottom is an undefined reference
+Error! E2028: _rows is an undefined reference
+Error! E2028: _depthtable1 is an undefined reference
+Error! E2028: _depthtable2 is an undefined reference
+Error! E2028: _depthtable3 is an undefined reference
+Error! E2028: _bgpic is an undefined reference
+Error! E2028: dis_waitb_ is an undefined reference
+Error! E2028: dis_exit_ is an undefined reference
+Error! E2028: setpalette_ is an undefined reference
+Error! E2028: dis_indemo_ is an undefined reference
+Error! E2028: dis_musplus_ is an undefined reference
+Error! E2028: _rotcos is an undefined reference
+Error! E2028: _rotsin is an undefined reference
+Error! E2028: _gravity is an undefined reference
+Error! E2028: _gravityd is an undefined reference
+Error! E2028: drawdots_ is an undefined reference
+
+
+                        +------------+
+                        |   Groups   |
+                        +------------+
+
+Group                           Address              Size
+=====                           =======              ====
+
+DGROUP                          01b9:0000            00008ee0
+
+
+
+                        +--------------+
+                        |   Segments   |
+                        +--------------+
+
+Segment                Class          Group          Address         Size
+=======                =====          =====          =======         ====
+
+dots_TEXT              CODE           AUTO           0000:0000       0000092e
+_TEXT                  CODE           AUTO           0000:0930       00001255
+FAR_DATA               FAR_DATA       AUTO           01b8:0005       00000000
+_NULL                  BEGDATA        DGROUP         01b9:0000       00000020
+_AFTERNULL             BEGDATA        DGROUP         01bb:0000       00000002
+CONST                  DATA           DGROUP         01bb:0002       00000000
+CONST2                 DATA           DGROUP         01bb:0002       00000000
+_DATA                  DATA           DGROUP         01bc:0000       0000006e
+XIB                    DATA           DGROUP         01c2:000e       00000000
+XI                     DATA           DGROUP         01c2:000e       00000012
+XIE                    DATA           DGROUP         01c4:0000       00000000
+YIB                    DATA           DGROUP         01c4:0000       00000000
+YI                     DATA           DGROUP         01c4:0000       00000006
+YIE                    DATA           DGROUP         01c4:0006       00000000
+STRINGS                DATA           DGROUP         01c4:0006       00000000
+DATA                   DATA           DGROUP         01c4:0006       00000000
+_BSS                   BSS            DGROUP         01c4:0006       00000e1c
+STACK                  STACK          DGROUP         02a7:0000       00008000
+
+
+                        +----------------+
+                        |   Memory Map   |
+                        +----------------+
+
+* = unreferenced symbol
++ = symbol only referenced locally
+
+Address        Symbol
+=======        ======
+
+Module: dots.obj(/dos/z/plz/dots/dots.c)
+0000:0000+     isin_
+0000:0026+     icos_
+0000:004e+     setborder_
+0000:0082      main_
+01b9:0030+     _vram
+01b9:0034+     _cols
+01b9:00b6+     _dottaul
+01b9:08b6+     _pal2
+01b9:0bb6+     _pal
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(stk086.asm)
+0000:0935      __STK
+0000:0955*     __STKOVERFLOW_
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(rand.c)
+0000:0972      rand_
+0000:09b4*     srand_
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(i4m.asm)
+0000:09d8      __I4M
+0000:09d8      __U4M
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(haloc.c)
+0000:0a05      halloc_
+0000:0aae*     hfree_
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(cstart)
+01b9:0000*     __nullarea
+01b9:0052*     __ovlflag
+01b9:0053*     __intno
+01b9:0054*     __ovlvec
+0000:0ab6      _cstart_
+0000:0b89*     _Not_Enough_Memory_
+0000:0cbb      __exit_
+0000:0cd8      __do_exit_with_msg__
+0000:0d31      __GETDS
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(cmodel.asm)
+0000:0d3c      _big_code_
+0000:0d3c*     CodeModelMismatch
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(argcv.c)
+01b9:0eb6      __argv
+01b9:0eba      ___argv
+01b9:0ebe      __argc
+01b9:0ec0      ___argc
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(xmsg.c)
+0000:0d3c*     __exit_with_msg_
+0000:0d41      __fatal_runtime_error_
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(crwdata)
+01b9:0058      __curbrk
+01b9:0060      __STACKLOW
+01b9:0062      __STACKTOP
+01b9:0064      __cbyte
+01b9:0066      __child
+01b9:0068      __no87
+01b9:0075      ___FPE_handler
+01b9:005a      __psp
+01b9:0069      __get_ovl_stack
+01b9:006d      __restore_ovl_stack
+01b9:0071      __close_ovl_file
+01b9:0079      __LpCmdLine
+01b9:007d      __LpPgmName
+01b9:005c      __osmajor
+01b9:005d      __osminor
+01b9:005e      __osmode
+01b9:005f      __HShift
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(pia.asm)
+0000:0d63      __PIA
+0000:0d5c*     __PIS
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(cmain086.c)
+0000:0d7a      __CMain
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(initrtns.c)
+0000:0ddb      __InitRtns
+0000:0ddb*     __FInitRtns
+0000:0e36      __FiniRtns
+0000:0e36*     __FFiniRtns
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(uselfn.c)
+01b9:0082      ___uselfn
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(dosseg)
+0000:0e9a      __DOSseg__
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(initargv.c)
+0000:1098      __Init_Argv_
+0000:10fa      __Fini_Argv_
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(enterdb.c)
+0000:1124      __EnterWVIDEO_
+01b9:0084+     ___WD_Present
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(___argc.c)
+01b9:0ec6      ____Argv
+01b9:0eca      ____Argc
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(amblksiz.c)
+01b9:0086      __amblksiz
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(exit.c)
+0000:1148+     __null_int23_exit_
+0000:1149      exit_
+0000:1161*     _exit_
+01b9:0088+     ___int23_exit
+01b9:008c+     ___FPE_handler_exit
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(sgdef086)
+01b9:009e      __Start_XI
+01b9:00b0      __End_XI
+01b9:00b0      __Start_YI
+01b9:00b6      __End_YI
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(nmalloc.c)
+0000:117c      _nmalloc_
+01b9:0090      ___nheapbeg
+01b9:0092      ___MiniHeapRover
+01b9:0094      ___LargestSizeB4MiniHeapRover
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(fmalloc.c)
+0000:1253*     _fmalloc_
+0000:1253      malloc_
+01b9:0096+     ___fheap
+01b9:0098      ___fheapRover
+01b9:009a      ___LargestSizeB4Rover
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(histsplt.c)
+01b9:0ecc      ___historical_splitparms
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(ffree.c)
+0000:1365*     _ffree_
+0000:1365      free_
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(mem.c)
+0000:13b0      __MemAllocator
+0000:147a      __MemFree
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(nmemneed.c)
+0000:15e6      __nmemneed_
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(grownear.c)
+0000:166e      __LastFree_
+0000:16e8      __ExpandDGROUP_
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(growseg.c)
+0000:17f9      __GrowSeg_
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(allocseg.c)
+0000:18e9      __AllocSeg_
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(fmemneed.c)
+0000:1980      __fmemneed_
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(heapgrow.c)
+0000:1983*     _heapgrow_
+0000:1983*     _fheapgrow_
+0000:1984      _nheapgrow_
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(nfree.c)
+0000:19fb      _nfree_
+01b9:0ece+     ___MiniHeapFreeRover
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(heapen.c)
+0000:1af6*     _heapenable_
+01b9:009c      ___heap_enabled
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(sbrk.c)
+0000:1b07      __brk_
+0000:1b6e*     sbrk_
+Module: /dos/fdos/watcom2/lib286/dos/clibl.lib(errno.c)
+0000:1b7e*     __get_errno_ptr_
+01b9:0ed0      _errno
+
+
+                        +---------------------------+
+                        |   Unresolved References   |
+                        +---------------------------+
+
+Undefined Symbol                Referenced by
+================                =============
+
+_sin1024                        dots.obj(/dos/z/plz/dots/dots.c)
+dis_partstart_                  dots.obj(/dos/z/plz/dots/dots.c)
+_dotnum                         dots.obj(/dos/z/plz/dots/dots.c)
+_dot                            dots.obj(/dos/z/plz/dots/dots.c)
+_gravitybottom                  dots.obj(/dos/z/plz/dots/dots.c)
+_rows                           dots.obj(/dos/z/plz/dots/dots.c)
+_depthtable1                    dots.obj(/dos/z/plz/dots/dots.c)
+_depthtable2                    dots.obj(/dos/z/plz/dots/dots.c)
+_depthtable3                    dots.obj(/dos/z/plz/dots/dots.c)
+_bgpic                          dots.obj(/dos/z/plz/dots/dots.c)
+dis_waitb_                      dots.obj(/dos/z/plz/dots/dots.c)
+dis_exit_                       dots.obj(/dos/z/plz/dots/dots.c)
+setpalette_                     dots.obj(/dos/z/plz/dots/dots.c)
+dis_indemo_                     dots.obj(/dos/z/plz/dots/dots.c)
+dis_musplus_                    dots.obj(/dos/z/plz/dots/dots.c)
+_rotcos                         dots.obj(/dos/z/plz/dots/dots.c)
+_rotsin                         dots.obj(/dos/z/plz/dots/dots.c)
+_gravity                        dots.obj(/dos/z/plz/dots/dots.c)
+_gravityd                       dots.obj(/dos/z/plz/dots/dots.c)
+drawdots_                       dots.obj(/dos/z/plz/dots/dots.c)
+
+
+                        +--------------------+
+                        |   Libraries Used   |
+                        +--------------------+
+
+/dos/fdos/watcom2/lib286/dos/clibl.lib
diff --git a/dots/dots.obj b/dots/dots.obj
new file mode 100755
index 0000000000000000000000000000000000000000..7735faf2c2b0fb2c4f268088103328aacdb6e05a
GIT binary patch
literal 7513
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

literal 0
HcmV?d00001

diff --git a/dots/dp_prefs b/dots/dp_prefs
new file mode 100755
index 0000000000000000000000000000000000000000..f76dcd530974f25aa42d32b31dbc7a823ccab667
GIT binary patch
literal 324
zcmWe&U}X6Jp8*6|!6YLin1T`w96$y)vIrLTPKG+iFKh)2PAb{XAR2_lRTw_>sWE&A
z{?G71NRshHACvyQn;i@vK=_;Bk=r0T{5``5klG!JM{fK6VEEt&#H<YB_bs0@d?=A)
zJW(dYc;XUJjpj^-5Bdxjne+ZJe0T>`4>EJf2Zj$yKo`5ZF&vm8pv?GEr~UkG=4;II
z+;xtQ?2pt|0L8B9wx8bvq}KrLPhu}%xCLY*<MV9Sm_vYiUR?l60L=u+z2`b|`w?5V
PGd{c)D1Qrtq2>VqVFzeO

literal 0
HcmV?d00001

diff --git a/dots/face.c b/dots/face.c
new file mode 100755
index 0000000..7012189
--- /dev/null
+++ b/dots/face.c
@@ -0,0 +1,26 @@
+#include <stdio.h>
+
+char	buf[1024];
+
+main()
+{
+	FILE	*f1;
+	int	a,b,c=0;
+	float	x,y,z;
+	f1=fopen("face.asc","rt");
+	while(!feof(f1))
+	{
+		fgets(buf,1024,f1);
+		fgets(buf,1024,f1);
+		if(!memcmp(buf,"Vertex ",7))
+		{
+			if(c)
+			{
+				sscanf(buf,"Vertex %i: X: %f Y: %f Z: %f",&a,&x,&y,&z);
+				printf("dw %i,%i,%i\n",(int)(x*1000),-(int)(z*1000),(int)(y*1000));
+			} 
+			else c=1;
+		}
+	}
+	fclose(f1);
+}
diff --git a/dots/face.exe b/dots/face.exe
new file mode 100755
index 0000000000000000000000000000000000000000..419e4495e5d9f2d2c2f61bfbf3b5be29d67e443f
GIT binary patch
literal 29250
zcmeFadt6gT`aeE7IXMYQ2oaEa1*}S~C~Kk8T0p49XuB5i26)5nZnf=hx9#Ey>aJpF
zx=M0@(stWg?5A66TdkL_-Mafh?P4GZUP=XR6}8^L%ZbMeMM@Ac=lh<MaA|ixpYQkY
z-|I(A&YZbC^UO2P^UTaM&x}tmm_i;SghUfYCCf!x8^UICk&DDrh426W_y27Q%oDCx
z#F6qECW2&T*I7CUsmRmpz0S?ftg!l@<?-4GVz1FTEZvSQUrlazjB}cP!)P-}A%s_Z
zj4C<bC+Bxp5H_=dki9!lv^;baEu#OQQ!2D1v!WnSQBSFlMk}TKaK9k-f(~L;dp462
z%eCTTvolL9H~o(`|D%gOD%SlBNU>7&pbAm_p2O1Y$huVjh^4uHqUC1&#6$Iu9V&Mw
zMWAXW^|T}Fd!(L5>a~8U-ljnMF-O+7NI!=3wtnfE6`KQ;$xtYx_h<+xry`z<AOxjF
z`J)_d3A-d$xV-qtzcJA63H2kAndO=U7ngZt|8-7CWJs*H&_~R9>PlknDm__P^Fh$v
z<)IN#CUHKK;L0?KNtz0IM*Rq(_6zp-h3Sc#Eo9$xl30A7{gN-y@f=&>lQZ$udmHG3
z!&jH+h?zpvUI%~|yJOFJ&+LAxenet%<f|k?+r2+eyXV88*rN%q+uI_d1k(&n3nMp{
z?`0!MxltWK5^j`-t0G85l$^MQ$cdleyBXh2`2LlY(-r}zyTl#0X@IJ<sX|Q>>$r4s
zN`=_1Dw9~kCKgW4(4077)#hX-$`P}HJxa(C>Et>`D#*n85st{0NHO;cF-297(R<I6
z`Vkb5XEZHwrQE9|Mo1h-4sgHL6rWBwlPE{#YL;svqC79D5)W|85V;RE(%6V7e{Rz_
z(lWWUDnX91r4at%J;9{%8FKqm-mphro8W5u+&V(K%tdOW1n+)<e8KJ*_jq3Lu?ug~
zr$%4BO}ZHowT~sXEdtqJLDK6-<mo%AZM??zx<Jx?x$0`=Z#DaWs}c7S8hA+~enE~v
za1stlL-5$6B2p-xS=oDtO49j5D%C9gA!}r1xpsfKRxBiyFKPDYX~dNzKo?eyn5(JG
zQzCyu0)YjjT!bJRT>O9>{iRH+!Ct@-tESGv$wV|0#96h1h1(5ASdzQ=h(a#yK88?A
zL>`EE36vdOKO)LDc^5=8IP$|U$bpEzlif7Vo#b6^vfp9_jbSRox5>k$n{HrQ(M>z@
z9Alph+2vU|@}ETMDe(wHS+{~Ao><@f1;Y2SO?if-$V!r@5n5)?Ix>6KroAN13KsSl
zd~)1gl9kZ0X9|hG)V(AALi1f)`#e6xB>tCNp`!2$7(8>2yw17E>s&RV{J;4%vR6ft
z8U8_~153Ga;D+ra!S&uAVoQ+QKL6Z$ciJ?^<j=?+8E@W3p>e;8R2Gs_Fz}A#X#Q?;
z5bsS6=3myk_}@*-piv^CE+J|WqH>b&=SL+k;?+~6O9_V_-+^EkqF8mKbX=%v^n^8T
zRap;9DijRnV^QD%r0(?>K*#>1z?t3x$E0^7q8yX|O4KK(HC}DJsy;cz*6fRI7HT$c
zBE=D#iO{6J8=*~fq$U<;Gj=z7An`M@W1HS(?MkGG1Aj@K;M&%&0nl)-5oAzH1!aBZ
zl=hrJdyWCUUjw~dp!WbpZ`)7W!|hshdz;j_Yf+=;_O|8RuKTx12b3noq0Cs6`EP%j
z{!Q|iITa}L4lPp;oFby?w1m`6V+fJsT!er-?AO^yzkEfGBc<+Qi!Z^I(2*dcOAKdt
zQ;cmg6amk*eQx>O+9lMbjq+IpU*na=D|>>7=pwT-g<5eB+58D{L~J3BtZpt!I4U$H
zbS%+6*^(fziAmfu#2P*;E1QeZ?tg~t;mGYR+9kR3c|&P#w<EQ98YN+AuFp@w=6V_%
z;+V-qQQlPKEK)0Eah27Yok`WaIqe<Z_-=wrVHm+HN$)87_b@}7k}c<RCh@Qg*@}Ks
z=nCZWHa-dQ=@ZFJ&F(bF7QmwvnZwQ6L)i7E>FQaT<!n?0S@=3PT|HkoZD``v+J$bR
z%451q@&+cjC_c+OGsPh!C;pQ1q7_Y$B>6r15`Rflks}|iCy?L!ZIfRk>O5oe{mYHX
z(Ru7Hjl?B~<ukj&_SKM+8#b>dZfA|;^;6%RowZ+<g?z3fU7v=rb~8c14vr}&ky+)>
z7?eRq=oHQsO6Q2M{+P;P>59w}KV~rYIMWSdFJ+dG8$vTN2G{Cm?FC(g|5Zg3iNsLa
z8j)FUzMrP)N-S*{+l#Y&wu070e0as_-VBFFC>bQRoY7sOCz<}yP0sHs|7TB83a2(k
zK?I~#1KrwmJrU}1DG_NO*{|!$^9Dzt`+bH6D;Mi}Pa0eXKmcZv^Nn&oW(hiUPWcBx
z5hPG1)`ir5Nj?mxG^tF1$7NSs1B&7#HJT}OmRR%=$WCD>@#RI~6dfaIp}c2{Zy+Nl
zSh^IHD2%LZ(A1f(-)iTVY)!K++{##|8&yT=dcjwC>l`Vp`$o0ZXbtYrsH{5Bvsgtd
zO6MG`Y-MC#mzi+JxyUfbBz_qV@=<M_BFokxwi)_pNw53{;n!T3&SEwt%hG5k1|8eg
zS8ejER)cf3zN79{tJ)SEJ>8Mc)(lH<#W=N3IEGP;9>7gUaeI~jEpS_=K-sF|4O`9p
zd|?LXFplyWnNhcXf~|tkR-JX$R@NFx(VkxDyGD3pp|1n-S?DvVtT7$yF_!UB7_DYS
zloW8;!2bt|KOMd-KvO|{=^V88eL8np2v*baje=2_%f%j^;s_V!F;6+>vMr-$%>oT%
zo&$hg6u|tN)f}WSrf6VNmGz$qE~kZ)h9|gaebIc&9)`@y%tYR_0mutcIVc^aO{E;3
zCFFxoX*a}d)$#ZH!ItYGX+XgCtlpd8a)9jVItS}WXF#po#qOSR6@>8%<$OQ;7rMVu
z8IJJ=G($&~7$cbwWD!)6;?pJ5RF1g}z|7SFqC(REEbwP`R!y!Rov<Ng1>vW!(2e^Q
zKV#egp7N@vp2T+4TDnzr7N3g97Cp^rOC|h5dx4Me^ORCNW*jIL%MTm(2%m_Ygh=0(
zRjSk|$VdmuDuYx~dzrVEA=YO5H;ny?4+%Eu3vVrPSsMz!A!*VlO1K7LoAh4A$0{lv
zSpmVQRYX`1em1z)s6EfiGWR_Z3d};?_;W<_4TQeaY3VMSsuyxQYqccS<(SGkrm>Ex
zj6>s?s&h=`oR+SlsRp60__SXvdt`v!SIsDl61uMz0q{!DzQYKBU2^(F0gPa@PN!V;
zgrF6&8R4MeFh7EJ42TJeGL)Q5-Bi#V6lZER12Ec4gXi@2(87i27_CF=$Y!L22`=<L
zoq8xj*sm6inIEt4v7b>#L}r=9Xvzro0+#Th39cfvhIS$41j-Z?j$cnQ*;%o&V9^;Y
zoK*+qA-+PSC4LbX4vtbMGuG6ODxEdh&nX@2zfr09@d6tQFczP|RWKsc&w9=ohOswh
zm6r`y)ZQeEkJnPEpgK666Z*BbSHYFh2@cinXpsFn@TfdTVr55xPtt)8WZ7P8oRnC}
z<V8@$&HvD+wbS_X)1-@Nn##%wb&^`J_>{h>W(e(_irp$@O_rTiYpI}JY7rfl+5q!m
z0C-s&<BS?BcdUOwt>eeb8Dfb=?9qbaIc-26ivQFGShhE_^`@Y3@MsJtjJDR|B4b@e
z;2z6Ai!5zLmX0FJ&7yU)eYD1F4$EH9$6={)SgNJx%gTCSX~$j?Iy?USf|})r$d<i8
zT{zfyq49#c3g5c%69`I4kEXmx_+cx?C(q!+)<%sR%MTnkj2|ftFY{TtrJ?xkz&|O}
zXSpc_myOHdb>oKcmwc$&RyiAz^_H#RCguh;xhA{C#Ks8P7;qjq-I3K*i%i5XvBqeM
zid}w*f6y-fhL5nzf8q!9C&h6N&}ED07bTJBgjRdOUhp{;U(oR_jZo*=rJ-?F4sDSw
zzB<cS-!jFymC{IrzF{D_{&qWZzbdv=Lils7MygIM^wpQ~&x&Z037#vl9K=xQQ<ktg
ziig_sC9wPo1r{T`g@D$JWy@E!mgCW$_Xre6k)<8)$>XgdwgMMW68xF1qnx?zMY*nB
zD(4Z~MXk{2JbdiJ7wTiuSh*zQp!!szPAe?{PG9*!JZ5p_b48X`w9{!pSGGDW?L`(S
zVT9YI5rFl-0P<PdotD-O&W!f4H<GH>94mUs)rayzET&Q^kr)lyW7P}p;%bLQ@5nL=
zmQEq7%du{*&+$%{Pa&utTp(vanE07?pUgicoclt3{4R*1Zc21&<1PQ(fa$*Qjc^K0
zI^O)}YJQB;!6pGr-6>l-V~Vtrrc4INzTT>3g;r@3m^+{e#jC8p=1ItA4Vr|yf!(t#
zg#;4Eva+QXY=F3EwzOJkih(xt3}nmpKTGVs@m9`fX_L4zyD!!n1yrp@1#yn@oMh^&
zH50YkeG>pMTh$l)7-ExG@@#UBHM}o&6k_+UB%bledCe}b<hlJX6Hk<?AI=GE<pcsN
zNtvyn8$1T4-)~XS(NJ`Bzy>wlAV3Juw_)@EC#pTggrep7j!>Y%cKH<^JY_+S*GR`}
zFQ{$&z+Eg@t{N=YiP=|{xLOTbO++5+IC}wx{usOOG3zkFf*!k0g_+85o#mP=?|+2=
zAxU3`H=@*{2%I$+EhtHEcu!@i9*|X|kVZ$Tr1tP~UxO29HECrO2bQn4%P(8Q?Y>9X
zRP0js!$#VP$>Mv|U_<dc0sN$m{U|a*?XOYo86l%(l>O<*BUr8r89=wjR?tRxy*Ibo
zo>fD<xiz#=SOWuF+A<)N#{_zO5`!LBN{6GRLRJlUDaN6V!9e2~&Xgg}AK@`Gf<=Tq
zsM?WLBYjh{E(coetKzIm$`)ZlQ(~=le95}`fye-l3_$Dq8vYm)&>Y&r0^ed)!FZ_m
z#VRSLm+eP_ew3NNqLNtzz1yR62udpSvL3hl;xLBx2+E{D=2~r>G^jWBe}q$^>VxB_
zLm?4rlb3=gr&?F^mj8V()TMnmtVUVd){x%B@sh5rOp%3&Jw>g<q5b|}S`^oZNxyD=
zN)_my<0Q~M<(M#0icmSEG^Ybpmz<B;O2>xGQf`+fMvk0~xw&5YLz!QnkG+&s%ZK&@
z`Xd3ymzDW4Din3`r2QomD?L#*{x>9L5Lt1!@xohi@|I;`p9V*m|1yAn#)Q2VGA7Lb
zDH;%A)|+YgtKczV5lU#il3Ek&!<5&em!kV<ltYA8V1ZaDRv^*}Y2#(8%+#Jgcj8GE
zMlD3xR!~8BjbN#j7@^ibp~8qQ<g#=$W|86sZ3XwJ^W(K-abP^hO1dVOjge=vD+dM!
zvlv+`G?i8>l}TD|PWhX#CSsLS%_=hhdjaOySRrw8K8w+-+=Vq1P34qS%vf~*;7^8~
z#m^c#t4J-5)jCpkAzTVq4V*aeR|8)d_~yWxfpkvs2UzCfZ)RmDKp%7#S?<>4>tl8}
z^7Ta)AFKtOy`Yn<!8)na^AC3431(b$a?T3P$x$H^vx{K-xxiTNp7d266H#)5(A3xh
z%C8J}X8Evy5EEJH3ktT?Vd-#KZq`}4qsep!2B3{jiw{E_XUphjrPAbBC8UyGOOCc`
z5yyB|$;l&?pw07=j2NBgIoX-vv)vhM4G|Zq4X#!9d7G5dAvVv1_#1+yW1pUQThvvk
z%9AA5S=tHlB=nRqieqS*aJug5DbU_qpxvXFDMBwQXqct@lPyXpS{js`K|}Y<k|}wH
z5@ID5?>bMDkCu2Adgm{y<QMQLQ6*dPaH=pCs67r<@=834RLL*n@sTR|H~f&~<*?Pf
z#Lr58g?}b_Dz8nR1|Hf+JpUk~lPRfu-4~(VHWOs?{Gbxc7=vsLEp{1PR%4`g|1Z>n
zX`<TGq{<dD+FP{o)OM+wIY0K!`lBAVO8hkxS?Bf+OShSa9cjBK$%pU+t454xq)B2T
z(_y(c$U33cB5U`UVdtHlaIB>AU0)?j#9a(xN-E#<<s=-V?;kR?>)!G`21|`Js5d{&
z{-%<>klDi``|Cc>(-_-sq65-E24nOFss`K1+Av-V%5xY<Ql3*xl<g`dyPSVh&Tr3(
zfW5_xH4N}!c|GitYE0wwl1`3%iiULd8YFew_z()r8ieeTS#&vX_dRDddyx`|%%G7G
zT3B_*TQ$?rA1YXPvUicT&jU318=<JxTDtVoMA{6A#qR?O>;ZL_RtD3qwh4cq#bn7v
zS+|i5{i`I>zGd*P!<(7cz?LnU#2W-}FtofUF$u?%V2I(^8UwA?+hjjRyr(I;YiP@{
z!eMR8y1hb^;WQncS_vsBkRr6sj4tqKe!G~aLfaYM)WQMz2|PD5rdBiIamio9LrBAt
z9=Kr~X$7ok)aH+f^+$vtg5iUZBU*_7+s9VLT3Xj&JAlicg;XPK!3X~yE$$<k5!#Z1
zHX)-`e1qg5MaKu@msQdyh#SfLCE83eUrAzlf1!26L%M77O))zi`6jm#5E^23zDeIu
zHk#Lo9vO3}PPf=33!Pw2b*al8sdaDQvTJfVMUk0fgjDFDn9^y?HmvHj?pd?BIk5Il
zx&?E~g89@YB1&S*P{FIp=*)&`euwCi4V}$igS><X$vS1(-7?sp=ByS!{(0KH?6(XZ
zYxRaRR?cwD%1A@rOgQHK;VthEZ>~SiPDq}VuVyUrHlaF0YMLK=bXvFDzuls&#8_n^
z28Dz%y<1ZEEW=_H``Hh4!Ahu|3Ns@Z7wBpd3(MMcgY3xfF3$A{mTn=-r)=H;S~koS
zoKS$Nn#_lGOx3Hb^w-97_+@yGYMRMq!c?7MDpsG7+2UffA9i-wOC}*Ec+xzbRcBwr
z66<%eMxM$FwQ_LHa7+<wOZB&GPwQ1<FZHd;g<LKv(n0dL3KDcjGVGp=tq4smEGfkE
zj^uAyPZkZbNMpSgJ+blA?FB}{4@o#AG*+mlpv*7579-3JCbdNumZe`crh-J=krH8p
z138d~L7qTTu#n*svao%JD5*)v(g_)Qr^UFNLebC-k$awp0yW3We&eOuS%4*g$zd@n
zyB!$Y;^m?OP)#o!gk^(#Mr>B|XV@Olc5su_HY-H3+ZK5siyNiZ*X>ThZp8A?6kr$R
zts*LD#!tu{PyMyGgsRa*lR`AsAlmE-GC&e*AtuUx4Bd@^$abfJIjJS|JV9-r5r&Wa
zOpUo?!Xaw6^&BF!B(14}Jb`MY7m(cswY-abhWgZ=t#mgb(0=c!$cU(tEO~b-a$?;w
z&{iN1v4(h01=9U66_P5n`8|*!LWWV?K^z&z4$R`LT2P<DwO#blN_QvIrl~!uYj5>W
zewZTVwCK@#i$5PFL0%Iw-BVd3&{HbHhu99O6vR~&@w|Psoz~R8rU+H>hejhG^99tS
zUWfIL?NGGBDtbS)26^`Q^cmd%Q-n<`!A<R@@rR`EHx&?X!^o<HLt8-zq*BuhEEPRm
z#NDB6v>bN13}efS)bzqwm-aV^BOX}j6e=xecLzz+XeJw<MtS3IR(7PeG*{m(v<Y3p
z!IlSh2iubMR;WDS!0vdgh98zZ#Hv$X8A(&5nbv$wsEe)UqL$=(PK)+CDp**O^}I*A
z#6|h-KEss$_Etv|YjD2~%KK)QUYdXisCUxSYk7OnZ-c@6D%drZj-||xffZe;=e4_n
zfw<(PKSeagdPdr-v|iWKdMy<*&n&TjgDD!(ya6&o`yNto-rwNW#kpOj7CoRP1oTQb
zG((rr=2+HAiI=)dkFk1IWNB_!d23_@N!d#BpNgWS{(diEQpPaL)q8COdqv+0T@hN8
z*nx%{lkW0^w>7tmF+^ImD>&({RV@xB+je0Z+AXzU&rfR3T>^;G?<=}xlgMAnoHHwu
zZllB=ZV8=*W>CJLpJ!58d`SmaXrtyY%n`cWe~p5vRk3i4{y^!oQ2^m5uL->+<mzmx
zL#*mf$%x(`CSlI!i-lfT)~VFxdHgD{GaRyNu)#6$s?z(Y1-qvTtP2<nzV`z&2&Z8p
zP#_&vAk~oh3pQ1fq?+a0*cxvWHVPA5(w%D~VbLYm%=8!Z&#KAiimO^QF}4{#Rc?>b
zJA<>|5m&qrxhWa*H-7qleYB96u09YsSsj^`EuUPHyF9k|^noSDq!ZR#IZ=@{iIdea
z0v~!H@-cPs>7)khsi??8d0jMb+P^MZs>v;s_0fEYq}Ou$A5)7yRh~&)L!ulJX=(>R
zN^BH%8mSqY%N9D-cO7flnKQ>nkdhVQbsC@SSgW7zV2h)K+Tzot)g^1W?(N&BO~ZT(
ze;DUtgsIq2u?EEyFJ@vK!=-R8rUp!2yvP*eSY#}o7V21G)*?|K<5-O7#T=fj`*CQA
zIo-kvov=ioAWI_!_d;wzPMIUD;DjZ*q;q`YFA;4lE1By{I==j(x;1a)PT2ih1>f|f
zs^uf`9ws!<m~-lC4MPO4Bi$!m5?l*~X`Ex4?v6Bgp<{-R4^rQWt(xx8#NJWgajezR
zCUm-IWp}_1&My<cBZ5z00Yn{p@X5y?7gn%_4t}Qko8>_XuDz{tOM*0|;yPFAirF+>
zodPk4*h_3l4S8JSHEXAIzr9PBH@vY~sGcq~sH>J^D&jphvU;`{M;0s(ws*DinhMIX
zcch_0Lu|HUga!sH^iMg$r>NWNSWtF_e#v~d&;WE;KIAFXpOJJTPctdow>)vmoLR-^
zN~wc`XjNAbvyw-zt`)Fx8tX1~3r*C6VgABAvrw(1u}?X&eVvl(jyoG<O<JM1szJ=1
zDHx}9f^U>h-72-soGEyhxP?Z0^#iu%R^hbwjQ7lsjb|Dq`q@1l;vJL3<&ymNByJJO
zS8rZKN}CeSpofi)X^c=Up1UW8`0D`Y3MYkgku?QeVE3@ZD%TX~mF-4vW9*$`S7}qJ
zMYkRUA?K~7y87cMu`T;a*rD4W3%7-?sN!mc*%c@U^0C=e+*Io7-H8NTp$<LsKbGpN
z7~7U_2wna?l<X{tg*A|)vodU92u+Gj*m?sd$xN&rxpIrLRmTQQ!sV6lf5DPlqa*wB
zw8CAXHBuW{dioRmMZv%q*dU-%n*F5;Y5;9XIA*`2x2oQYJW!zX6sr9iv?kXW1IB|@
z7LGyGDog9H)lN_>qutmkmSV7`@1zz)J_LwSzaeTB>BQQYhLII2PR`KV3-n~|cm60C
zc=Tj-l)v1>)e*1=Dj74nX}T?S65kr*11O9ysSjDP7h{Z(r!i6pR@=qZX|pqD&r$X?
z>Cgu(=YS^qm^!TrUIp5Ph&-&L>W4<72Z4=0lBJO}Rqs#5#Ddn~2qbeo$;vizBxXlK
zuK7Tgkt*H<7u|_IY*eyXbg>rW&|_*>*iXL}4l9RPi{5^kPz-2ZY<*<u4aW+yo)U76
z=vHix%oAp^Em28_^BLiA<bg+a>u2rQ_E^n@uAC^xBYeVx)7aPssfn92I}$r-$t{>*
zE?B6=44c<&!zeQ7De0@E0uD3MY0!Fls5Z$ITZKZ{)<*|oQrENNhPhf+E%%!CNq_Wa
zo7NHWs<!fvT4f^#o?8KK*<7G4v6!gAhHk@F{81a3S^lt5*;iGj#dMEC$S_4_XJMRB
zd;Uhi&uB<w7MERqWh5*W879NAmD#aXX!Y{UC)GbJ*A_Qvh`F>$eFs4o4Z0o|s;0-*
z4Lvi`t*(o$Ri3qJZ^TyJyZv$Z8!d~d$pxjx(^7UUCK`)fH0+WNqMUHjdn~qEDN`++
z=nK>GJwo?J%OFDs1))@oWp-VlVyV*K{M;o`3a8N7kEvxQT5}+ugGm2h;NSk#I`oZ}
z;Xj3aqz88OP}gu-RzNF!fvLfx*;KesdQbDl*hb)dT-~_7F}4w$=DYx8w?jj0Ti@7X
zE_N5X(L#4m+!8;U@bt+r`Gb%_J*HgUZ^2*_M#U0jUZvkPew+7<vOX2OSR`TmWPY+x
zV%P_;PBOTy%|)7-JJxB6(&dtLRZ?AETk+`}OvR|c5NF8P8&3$w|ARk-vR6x|qPri*
z+|(0%p0+D;&VgL$7iE`z1tULV5@U(7#kVjjAZSVs|BhjX-Xu=$OXd_Qz=j>2XB>n`
zSz-O<yccP~Io^vx6Mb7|R4dPm>f;M(Li~*u4!capn!ApWW!<v!=S!{s+W&VqwKAWr
zV^tH-mknuOMr++zGwSVkI{Eu-7en~q%2HO@0<2umO1jFoSxH^Fk;RsTHo@iQs2=X#
z|64X2Hjmq%<YJfI_N;d8m(c=iNM{V`tk7Uc=lBl{hgLCPj`uctt6JB38~G3B)K8qe
znXOOB{BSe-(I;$9{lvIW*!oFq{X|#&BgyqC33BBh*d5N!ox;Jr=BK^QZ|r)y<C6Md
z*vVbx9ar(}D)h967M_11EZcj&^0%z`2(vHifhG0H8-G#%@TvMqlQ#i&2lo;CIB%G?
z@0kabgvSnLQ`i&ZXvI6<-TC&;H+R0Z^Nm7}FBK~nY?!wgF|wU*JllA#;rr(H!V~4{
zFgQDfo!Y;Gg#jquHEYi7d0Ckaml{tre%E-c@pwZ+|M2|K%k#s2m>=euAJ#ZO>{K}U
zNg_L8Tl2qWKDlecz1yF6+p9uB@**R4K%tA=@C2fNA2Mn9rGE!CY08t3E?pp$_P#L?
z%5;YWLZjM4{UO^s8zTIn=&vdV(-6D=(9qI{)5xY9Uw<>S`glg#2mg2_cI(aq|Mf!J
zz0sG4l+GM1+0#zG{e($V^5EY-Nc%ATMq%jdg|F^O`|i`D@{>_3tB<E$DE8P6P22m{
z*2jN0?}14r-d8THo>F@5&VSvN3bxI9BERM9wg-RlT479j9~<dUZhj>NKb@&b=Vz9@
z`%<X=$JB942RG;3_uq{_q>g-T+R$k`4s5xZ`p*|${F~-qkF1kYznb#L%isNF|B0)q
z_rCenYXeq%z5P<^!i!JWRQ~1dD~D3&Bw5qz!z;`Gmb&*Zlcw&B{Nm_eQfr&P+MD#y
zuY^CQ&aW!?V$SN&eM?e*QNmTe`R9Rm(^Eh3O#0-3YiqZTP2F_qt7lhR8qUs}%zZs_
z?h3p7Mq$chga7!O(N8?&+L7G&=&RG-tswVKChdD~j6q(d*_ZvG_k8w}Lbrt&Wc~r6
zuJIQAWRKPo-ZQ7+g7ZQHK1@ygC3RDPnHEY7ZqnEIp3v7{-%W*#+pin3z)Ntgw_uR>
z2?f}G3r(z@%0ze6*m$FDS=d_oHh#3c7Smxf)S1CzG+0aqi<y5~TACuSwLa4uDOk+b
z`zov16s#SGq`>h(UwM#Cw5?&r^M=aZEX)PGx^f?zSf^3Ja9OfOop8u$eEjyu@GxAZ
zLe)qhM5!D<@cyiw$`a2a6%4-x1Ax~5gNT(_bP<`^%7(qDUQ$>PDyQa|rzx=&pN}<V
zid$I812aCn@US5AS~yJMICb4BMzW<0#N4oAAORK9VAV!_;~{TN@b$_yQ{9X$QOxHG
zbkNFXh~Fs);JL>04d43?T3aKuj)D#}pkxiZzMv!C<;V?nWSAXUCP%)}QJ^nc76chP
z32{8u*ccGUes9dOps)gcSiUhV%M_Mj4$BQyWU^llb^^d|!&lB|w|*#~u6)*hi%FiC
zH@0L3D;Z#ZoMat9t&cO4j^_U`jfN6sHpYh~f^hzc#G*xNX&{V1EjqtkV>o}^_jqE_
z3^hpQ9~`R9kjB8@hfG=^)L+E=2{|EsVh%UqUO^|MSJVmV6LuUu2#9;1z>_|ak8bS~
z`i8}QV*iJC`UL;Z{yx#)pWG+>FW2^o|5tzRQvhF`?Nb4puJkE^G3NWWb$)JcIZ)G;
zE^YbtwpY6N)F0nII(6ySb#ItH{rtnhEt@UDOYbvU3)flm4^4kMXUe55Z%s;?Sn>B8
zbDrLEd2z~t#Yw^kZ!VA*f7-e!+BNr+;zxefcu!a$G>u;DxO3*YZEttpeqjGc2N$2U
zy)@&{#&@Hg%<N}sMqBH@?vcB@seholC!l~9Jlm&&+{gQrP(w(c8cO@LPZ1@g^r@oi
zdwt627c=_Q(VI1W3hCT)eJW|x$Udd?t9gBD>Ez8m#Wbp)YFe|SPdWYOPkrj?jjlcg
zHNw%SqP{Q6(GC4VY+3iII;r-xsZ+H7e9!vGnYhOi{xIy=$TRUbpDbH2>C^R<uI$sF
zy!z=!|A=pX{_g{}%>HZo{QowO8~x;^@re)5ob&lNzZ?DfeD-74x#~4{#oEXZt`;rG
zej|B*rv3gw8NXcm>wEUs|Hl1g&45ee&;9kAV+Yx@pEl_gEyiKOUBK;oejL=|AE75}
z#(U4#!BuhsbuF^Oz}^);p?+e4uRaBWAN(l9yt{tlOR$gY>XXmB$Yd|EyXT_l$e(D`
zYtX2Eo$A-9^0Kal(sv5Pi26rx<lrTrAHZrRrVjSz`V?iNh0QtW-j^AiMUalh$t(2u
z>hR_8W#fdIOq`&Fj<h$*voeJmzk6gvrf9&T%_x1~c~Rw=t5O;j3V-t;QruALDk-=L
zKmP3p@^v*((dqgaVKFSR2}cSq5}PB#w^v>}vKs!e?vbaHPV@i5(*1a0*S-BKzAWt8
zpPIi5s(Zkco|z8jIfir{zY#|Fh$%6GCI;T(__FwN`0Dt=!fU=%$6UR=PPa!xN^)<)
zdl&h<qY_ox!~xk%qCJ}>_F4uSsQD^fdF^h7zE#QA6GFaD$Z8cb+JszaP^iRC`)aKH
z!lfmR%WnF$Ut>e#NqL5ze;UKtwL-Xc*z%%QaNcTY;`{8?DtjZbA14Fh2yl`t=k^nu
zoUSiit(Vs>&vL9*?D&gV#|#F(iWXl`y1s|rfQWIh39Ejpm~(I1v$_dNTCdsRlEH7V
zXWUdtZ^EdTuJ73mP@K$Isj>ni8@3SAv84K0(q=jbR>nunRWT%>t1<KJ#MJd5Hd377
z7U?l~fq{`6xm}J7ERZ|IKM}b9tFt=7GCIR@yTUBpVFf;M8Hr)SEw&S+f7_@gud2*Q
zlY#-!Eu0b#V-0@O3>Lh#GNiGYjuVtp8KBY+)Q2+h^>lqAD3FM)j6}yGj9@dEL{Oo&
z_*f4O`bq_S=1dVKmX5&s&hH(Cjb`ze1ai<;|Hw-nLT;P=$RI~<J9rshSYYS&`sA}w
z^^*!{3|`y7IQO9|VFYpyg0Csg3V7W*Si>=FU_nuB@>A$x%pkC;0s$>;#ksAH{G0Gd
zQQX<C)mg3#rel4<*M0u*dj2*%-fvNdc+V|Wax5Q2caQ5V*NJUM@`OAV+dk&xIBN@i
zIhQ<X#c63Eg8W?+&}IO*r&5LF&>eEdHAKU+=o-f4D^e`YKLYuOkDIVf&bVT|wF5~3
zfbBGM96v-Ffuh4{&Oyi-uH?K%Ghe51v}&(6_lg}@mn@PUxi=HeU~|_54-9>BI?p9P
z%QMpK9epT^vP{dR0#*{7;)EvpHVSXi<0cf|UB<02HnynUjV<_XTGg^oPVKEFAy<se
z6;-*{Xp8IxS3p$H6@r1A%*5NE{QF{@8u|v@(2AMKn!Iof=h8sM^Cv{o&h#fJXJKxm
zpT9;wUn#M)XNphW6D-%TK8#Gs3|~zh%2RepYpLH6a<wDZHOd5syXXd3ZkLb&H?NLD
zY<b%9h6ThhyuTPO=WJiw;4~uS`wD%K!g*K{>xEXsZNm?SHvaJg`6jxz)+dt&^nALG
zn!YSI9hgkEV&6@$v;`&^CSuQMV`~abFo|i%?d{SDysM;}_+<b}kwsd*E}g>>5eQ^J
zO8=%vqGGh^HGrvju4Gy?^~3O+#Zs0MKJ4dKGS+&7T6(A_o)31WxZZR)L}IfW79#3b
zYr&Z}xCT<26S1DBOJ$`#ofL$aINlg2MN@AEvhi7xxeTdG`B3~$Rq{|oXdaQ;s^kpl
z40@c7+U_zqf7%4TokFz2+a4yWZkWe_S^#>H77TukR!%K1*i-;c5JzqOqY;1C)K6-H
zSYq^YE|WjV)B5G_NUSS>D|RU?+;sl&>3p=`=e|7GZxW<Fauf)BN$QhNMM)85f%LD_
zsHF!UD|GxztxpN;PyVztEQh71YYKFV>9B7H(|%o_on@PR4nDh+Y9iNZ9l6vR7-LVx
z20k#8m{^w@8--c$&!=X?*_rkN6Di<mlDdrg?%vNz3u(7tNW>RDGb@-F`H}KL$rLB7
zLnzsBvczIa^B3)b3X;JiM5(A3n%dIguMC#0V@jjJdVQ5st0G0r81NPxkI8+ff=?*5
zK{}_YzynV>5CnHrG_jGHv|*~DE^m`sae-7@On@9XN8xXfy}(R(kd&603VSE5qh>Ao
z9!>y@N<j%>1(UHVSg7?jQGX+vZ9KBseb25QDAewGmb~Y^L!*gSs6|j{Qxf$`BE0H;
zmWa({T7{BbX_&tw6dqw~IUwuz!{~pU!X#$<XcE=ZeqJ^OIxOvH9oCPIexkKGvf2gH
z1$I(~$-0;lP52?EmP}BedjicM(o_HUexu|NrZFH~=6~RcfA1z*<A3U=HYIW`L)H$4
zzlogR1_sI$uc&Hr+kgse%WV=|hOy~kX;V7%SN(Fi0=XdYy<pa)`FS>o7V<X1rtA+S
zSxg0R&c<dpe6eUfnPMSmYO0t(kHgT29-m)7WA$1`VQCG}|0l;>Ok!~#@%^%_Xs-Xv
z?VBM#5k*?sEfk&Un=i239Mt}EF8BA2Uov_ay|)k!4kU3G*aCK!N@B*kK5B;M?E<8f
zZh5r^?OQ$kKk>-Edzf%i4zW#chAhJqThT~Vg|!Rl#M)^-;#Ua0M|eykC-?AFfoUoA
zC^JokS7CmrQbFH=9+UXpUEwm#T81pktP%f~{@gw39JJBD7yR1STLZ8f9XKLEt=7Wj
zH1r5P1_X5nlegN!f}NUh92h0wHmAshaSrCIy;FVL*U&=BRKGq6(;Cd!1uX8fIxugg
z`vr>K(|(<+coXLD5=$2~hg0}eOYMc58*+EWTDZ-{+B(jOvvb(=XL(Ku!x78J;QXk`
zsf8bqPep@*R#oBD7N1ty4Q#TqyQ$%^B%j-VlTG}@|Eavm&J%wxE#BY33I}&=c;oiR
zZ*1Ft2@V#H;f{HX<7u{TD%ZglFV+E0UBGg?U;z$nm!8IPuknRs^B7I}`wSW#IY!gi
zBD}8G?7Ls%n8}uJgCB0iJ(5}eXH5jzG)ALY8VHx4!b#t(Y>G?eSk3;Y)O(Duf-cGR
z>xLnInTEIFPxLX>zbPuRhR*i<?(bJJ#UnTRb5e=rN(9`2`so?$CiQWuK*v3uy^3{Y
zbU?+@YHVwnpDJVQ`_Ndpcnqw`?U13~m7OFyG{RqeAl*r#VF*0U=$od7KawKuPxhw7
z(G=%2^#-^jc0Fh@VU+uKP;y2WJsoGgEE)R2lrv1Leo*vza4)#2{c|j(umvq3x8rC|
zsJDqO1bR>!-#=$;il|;aWDky=d+)FlAV2;lfZY&5m8zxPuloOEV)Y(H^Z#3#t-2Q!
zX5s--P|p}@kfPG1@cjSWgFqU?aVG6TbQTtw*Lx*8(0LkVknqF77DQj~DJ>6iWVDye
zq#alc4}PWhLi!D*R3A}?xq{g}eUM~nr`oh#=?WY@=!zLLO)Z7}haQ1wp;NHLxI`h~
zoJmF>WhY2dzg|-M`;}g@_x5+JrQO@4LWe`Y_HYTRmT6zDzTSfoF!{gK|I_j&FonUj
z7Ue11{X4BGHf!PBW>Vqs2c5wDTyQ{PkX#}6`&fWp=`PR-mMfDirZtfe9*EU+Xc?+1
z13hq{JD`V=6pK#!N#e3TZTP?I+l20Z`c_fQmj9r2kKU7-%Knqqy}wtlUpHad7?D|$
z(H1ewuMOdDGfNEfuNf)N^;!p&z}wjC>HqiioT*Pg`Upp!Tec!DE^b=(B63vqxvEul
zlhbM+)V`!OXwRv#n75g7#(vkhBBZe;GOiSNk;KXGMw6%`!Eo|vkUBGFKKe*Xus$NP
zA`3cfC-xg7E5Z?aord7hkXKr3ib{~NWsJ)JmSQncIgbP`1E3DI{8cFv_X6ySzWw>k
z80SF!G5%4y3%^!454Y0TyEvnK7p9keDjWdLo`n+(U(*du<=wP@0m;S=*_=S^!l+sf
zrX6W*S(JTpI3d<4XIf_M2`A0I`3bJgIpoyj91?ghjL9LXA%%!YRa-;P_9diwxg6X&
zz{8v3BbG?Pk<YW_x9Z=L@|CF8HW}dgXg_ehICk{%a9s6p$NgKg>G=vK^7;Eo`NzoS
zPuGY=M2b*~SVMlRH9fz<82NmpKZlr3D&oV$#W=CQnUKv4sn}prO7ZH7M$_gk<U^Kh
zaQoqy0moml=1hxtd6ZjD%p&D()Z_L?GiO>hnaE}{Hr5|Q`+4=oGtHZgWV4RA0o)P6
z5ceJfsd#we{zy_kBF!<pcq(JBW1Da9{mNK5)wq9*(GMqRZ-TDUr`;c`i^Me$50Bmh
z+t`S-=DWfPJcN_jZ1lq!4LFep2I4)9f@yar9P<MhW4~?^zTcR5>JfZ@ktj@K;aChP
za8DN-MSF|depk(_rZnH$WG1nkiF|47xUH^sD{bBUF`8q#4~G^N8mnzzGs-*bKKg_-
zICGx;`Y_@8##8yEVmGti678@sb0V?jDQMX-%g?RDc^aK$4&*{6P~h$yKd;gguuQyc
zpZqZxLTx*$>Zns$_3-TA5XNzatqdF(eTZeP#;q)`vmIqcPA#44sM8^vj%L$&&NI$P
zEOU>zY%TXXj^FP_@hB{Mbhb;{lrEK3lVh|=P{_K`kHSw!m1AWdRsn^Lr(PmKoQ^~-
zwATz<{F%Jp%H+5+=Lp|Z(j+>jaSL;B7~IpvWX+j1I~#i)LI&eK?yR?6e6+#S;5mMz
zqt3<8#^kB6?SiVK+GUM~Bc95d)=_P?>N=`*)(Gk0GFw+DZ?biT^Fh)BW!`GD${KCE
znkpokNm61cS}bn$!Qa+__l>7IHl9iLXjC0;HLsSQD(i#H2Pq}h(!?@cCBWgf04cW2
z55q*w9hGRidgCeY#xvvkV#Qpa{iXuB!)>%?3b*Z7S|RR3HlCUM6rm11;wp4R9KtZF
zpu9A`rz}6xcEm`*DG-5IPXf>l>H*q^oz<YUdoXRcTC$Wm4`UN~Z%yX$=2bt?s;}Fd
zwGGX}Vd41k!yVOX>nN-j8jmy{0eG()vz6O!+t=`VWk7*tWXXd03v)fs!68YEQu$x5
z-?N!?gqbB|=xi5VwmUBV_XrkVd{k|}1MhA79W&VC;spDh3D&u^ONRfHz|-#iguo~|
z3$|Xiu!>bVGIU}U5p&6W`^86X0H(76Se)$#UE!fBj;3xTQj)(iZQ-3UYCag%stWH=
zPh4>=5l0benC<H{g_#a*Y--$i>d?lsO&iZnjvyQLTm+dv>Yiu(y^UuILN^K-L%db;
zT7E=_Ww6Z}vGM#%p-Q~HU<f^X?wOpX%0S<|6zWbm<jBCTSGXf1!jUn^kugLPDKn3D
zsch}46c@=^t`^nA^IdmGO`3HPs)sAatU17;_@rM+vBKmmIF;yde(<u^R^Mc6aoKLW
z_#iN@?GOu#(mIc$AiSg?!ch=fYl+zC$hfc8GWdv`8@g~lTrv94cSp|oQs}5*t&e``
z?5JU^4}Dn#$Jp2}9UV0)>!>da;gT2mr5(rU2YvY(4%CN!`RA=>tMSWqTcfSqm+NsL
zpD5$eCPEAxTz@rh(aTugS}0?Tipn{<nIof<;U!I#wr=wfbbs6svRO~un>gYQC`*GM
znGYk#s8j=Fb+jBs73XLYP>RtTPfga7je-e|-Is40s(Qd|Jk<?wfJIYgAxVF^D8@kM
ziPr`$ex1`3@wt9L9{itxoQYJh(vwX?h!8RC-=RGlzF4Rhj*EjyKM}do6_7hx5fF$V
zLEvAV$w)dHopI1p_0_h^srq{Qb{_##oaaxy;d#q<cVp(f$SmPHwkDjc&FIR2K~vWt
z(oaXjs6ob<bv3&-I@mcFYo%ypu1NVv;^;GeQBOIg$b;;hgfnw<l4`7Dgf!LYyAx7Q
zO|WX6X-sl!UIdMieJN*}c>{te=P&T;TDELqZq(wOqh*VNLxa<TcLy&B4iBD!=j>oM
zI3CZ;U?zA1p3epk37(E;t8q}U1<z-K+l}|*dEFQhoQ`Lrd6@Zj)Xk^}v)Me#9A}OR
z2{KOzc?`b`@m(77a>&&XIixk@Pa*D*qakNPK8yIr&^HH>q0ioD80H%M{Lr$fry_&Q
zzaREq)KgI(M%4{#i#`>7F8bT(mS{2hMs$$*iP66s?HKisQ9)+^r((o_m~ZY6GS3{o
zC5pxjivD%<-00_{Uye>yo^$a_KMV1h8=a3-8ox05mU+JU_vXd;_@BQs|IU0I-}%aW
ztvM=`M|zQ&$LIIvH<98`FG85ce;DRZx0_4M&zkMM={@;bE^UfRt-&hS|EF^GyB;o$
zr~}b1l4fK4zB%|!rLnfPvb=V!KfM)U`gbevPHg?)*k~T-7r*Uj|7e24Clm6)oTb%M
zPJVfo#*ZAg@pn~k=-0`Jf9=_GcM@*1|Df@KKO4QPZesQGBR)DEa)^d~&Y|_cTv`4t
z4S&^o-=YVTw&8{&0t4F7yRVf;ms9vVRvm5h-k0|Ug{dar{%Jwe<V7#Mt|2z^$kQjs
zbvAr^!iW;bzrSzU&3$`c4MqHsH*#`?b=;4b>Y>Etb<rwDv+DgIr2J;t(V|!WKIu>h
zQr_vZ)cK76eJSi`C0G)_P<Qmu$C;nrLyg}w9{%o^TU#4&(G2;kBer?#?5Ey`ivw9Y
zC3D_U&#f{#aW4Di&QVt`Kk+e*R}-`S(JcMUU$;_XU)>$~`?6V?H)%@JsNXM)F3a5U
z^AZf%Fi6wh&GBtCmu~09@VO})ubUA5+mg-hr<z*t(RMK8<rRN=R4{Kjt;gG9@lP9H
z{X+d=D8dEypsV4X<Nq6O+o+vg@m_Uv_8&G<%Dq4Hp^k~UZ=7S%Lgz29{qe@3<9~;1
zBRMoCX!tKK)i|NL0C!*hE0Y&8J4z`<pShLrSwj^2KF#&cKKqLo+LyQ}-Tq*-8S{;+
zjRA4zsJL@=tiuKIJ^BYE<Rin~Ob!FW>{)YQ_{Ng9TR1M%9ViH&HcfciC!A_<H@Gp?
zYjop4Vv4bpuK0@2l)5Fh_&B|@h>@~|<IYnqiLtkEv;?w68@qczMgSnSr2w7~Y_DT%
zRb!SP#Ul1N6w*)fP#>|LiUGyudAQ*~!vW`6drOpZ7Sg5@+9V#wqhAs7NvVZ#YBo%R
z2lB6lR(1dP*+Q+l0UEY7kUqtqTRjnVV=~l}+y6egtS7hsePD08gnbruo5TteaZ6S~
zxO2ENEEPq5O6o93ljw#U{tv~^)KR74^%cA+6HRZ>mCX@OffQI$wdxj9s}EK5g3o@-
z=$QNtk!F`E@Df~c!el~9&zIIwsGB2*^K66U{{%n=0mKEJ=XFvh&LDYdj>LCJM-|Jn
z6ikO(ha)PtnT{%kAC7!3UC(fWyBGX(I4N5!ZI{{tc)4_<t=*21MI|Y7Nx|p*&elB4
z+17A{IT7Cx+m$rgL^{{1esqgps-$6Mi!qU1IDY{Kcdch^XTP_cqnj{1VPMs97@iuO
zlQBFUt;PgOU)Ry_nS9=QK#tjh_06ZG-g*#2Q$e`BPVMhd+a2wSe+U+%kj28E2b@%#
z#r(XJou*HT?aoF%+;*o7r*?jbw%zH>vng;Sv+|hc3=TwJb^czZuoRZ~|0~cyhiqxZ
z1V`zbEuB4~cM(#i)+Um#3sBB2&buw$?#W7mdO|v!sN(4C`Pu-_rU3}+_)&#Fs2OjS
znzIflyu%ja)F!Axh+7#<f49j<9F|Zw&S9B(BYs(w4I1DP&4F-Th-Y62?RWGzc*h*n
z7mn^1p5U){m?v|9?FUxD!3?94$2p**isR`eakc@pYt!6iI8PvrEW<$<+ys(vY+q53
zGzic2-hEqxBomFnlcUe)gPc<h)WbrbZrFf(MVjKR`uMqe;c1<a4u6RU1h4aiIExg`
z)4M5X7KgFDe)dVJYzT^Pvt6;_Bn?(n{^ZK<gQROp#!4|r$tQqI<38#8fd4^WH;qp6
z@<zI?^~ooJ$PUf`3LS_)v9d~9C)5h(?X{e}j)S}Cz1v&5^XNSlcHy?CK#r|ity}M1
z*QP$`ZSppyJV6S6F>khD)%{CF;!mt%yk~`h!qbefm=)G=h8ru@o@ZG5HI@Aov7aIK
z^TZ>l=gpoKf8u>X+=;^;!oi(F)6RsB^*6D~dByHCtsY{y!K>|uRl+r)Q8<FT)Lifj
zSaF%3llP$A$E{9y8@t_D$*P<+&gQqBC!9Yx>z$JGytC5@uRr@u-HHMHn8wRJ&K4Hy
zZE5iOZ@dTKq_4KuM`O`^299g+9&K*NT^(Mb(|bTprAey)%2|28Iy`I!6SjyATg@#u
zH=YmpQ=DB+)6;}j&tKHB;X`LILl?0_kz+_ghxerSINW8AdC&eBb|UPXuybKPWZS|B
ztvR-KTc+o~n0ZcLeA{ewRa)l#T?uCd32kDrJ#7>Q!Y7{dHVdL~cwWK{CDM!&m52@U
zHp6%JwEa6Gz&Y2&hbVdbVsi{tnK-#c!Jq^iDA5#l4IUQ$68!-6MAO`Tfc&vJ1~+c{
zQUK|_OF6X|b{O6#y&!rZ_e2LO>_M?7n(IX`5c6H(WjQs+a3C|`#%w<@1$s}Deuj5X
zH23qy&q5p1X=bH#PdkvU2d~~Jiu(b$^Df3=HHB$%P>S|huBSnDXJ}P?+q~IX*+1dv
zCAkU*D(nY7d=uAZZXi@166F8NGc;ZcIMbY;I?pkA2oawm*>&6ys1-4dWQ)o8K1%+j
zvNc{*{8WzR-CwzZB+ccl#-wzdN={nDSeYc_a-*TzP-SrI!I|jhlk*qiOyDe)koW;f
zkdsa<|1})A*`(GLk9#|2&v_R-@Z+Wp^lD7jdsS%5+*D4(ocF4_HSF4^_vwocFCx6)
z-xMN-kcF|whkmng=-I_X#kb#l<E`akGu5UIBrLL=gmLeau!s-H@*D1%v4|UrxS@zs
zn~)ZXv}z$@1Nl)pRJM!7nSp2snC~Ds@-Fqm5xz^fA$g!+sG7)G?D^N-GH)G`t-~N&
z?>a9y>zsF;XPqABH_o<q-*$fMyb$kto93`tS7!9e-ANk3-;$OZzB3%wLqH9O_;jk1
zq8r4#q4<ViIc{4qJnsQmj`;hf@ErJS=M9mJNb-jn$!M!nQ7<SKUQiYg=R4uB^OW>U
ze_h6Yb(MW+APwU3{00%KBetiO9Dtfpcn`H`aW_@9iXV`01D+jW^<ihj?)iakdWXF0
z80dJK!QnOBA(pe)cF9(>RF7+F)7F>@eJWSMT!&RxJJmqkp0z|l@oQ-h;MOYPze$yz
zNEtQXd0StjuXbL6<;r%Y^KD@9Ne>pIk$W((U{^elm)KFO;~$bDL0j>;E>z@Jz(gsn
z9;}2J30T@{b^WnSxDkKMGe@QnbxKR=+A`0C@BL8u;&25L-t<bH@LRTumF+>IMv3o<
z<G+=z#q1P1V|F?l8eOAQ4F}iN_y=9Zp4B7;%q_OVw)l=@nIDl%_=KWo_2brVfImtR
zZz!6pb*#oXR}}C`aU-#Ur2Uhzb=j=ngNvGM->9VHh@}xmMCdA1E*iI=;=lk<+VsY&
z4afAyR(YlEm^4{&FhOYYY`}~P=goyh8fUuJ`K-S2!fv^-$x}!W_Iye_rNq-jkMz+Q
zT)H0jm*LXcD(4J6#>f;KS#v(6P%b#ju5~`ET}Pe2FE%y_;fA@49y2PyG|W}=k0?ZN
zn!qKn05*8?#^D=Z*roXVXgb^~exS3#?pDF;F1}$^kkHWBY{LP&h_|*2?(J^m?a*IZ
zc~)x0?{&C8qBUds0ULx255)<Qj2_&h?~dC<^t7B*i+By~jTR(wO5#<gdwbj_R=-{P
z3<>;U=`sa2!P}&HRmNp6YaV$+LETxcuNCI9!Xi!?>JF>uafjt<+hJAnkLxajET~8k
z!*k9yu*PUvp<|}J-Y1%`t@mNxJQ;?{$)S*cdmU!HW`dp<@x}EA!a;m-r9-cz_KcK)
zr|pQXXpz=2L*tmMcD$%E)Ef>v+cD87;`Q+zMGxC9t)*sX`bm+sd<ebBdiZ!*?dK7<
zpCRtrthaDxN}`>A#fCQn-r%$2`lkvGPm~!@LKr8^WrP{DmEem&?S?a}Zac=&YYb<w
zjzwI2hx93B6r9||vDEFJAu7r$DZ*Tput+VWYn(H*4IV{NpZ@vtP1*-S^>*AvX}fBx
zXkDwns;}A(PI4~N+gfa%o5a&VJO-8Y*D^nE`5CK~GS-VaDzIzL72Z>I7o2gjs4vhF
z9o1TXw!%$)g7_FjZ$d{k%TMa4Ht-MkVrILz)?TgiJ9F9^$*LGcOr?NV50mCJTwH!a
zf|)3fZMc~Cb^kIyZ%EI3PlJR58d*)RqN5)@6$INwoBrZ<xBV99XHBJn{TMVHj5xef
zrw_~ncj{ZVOO1$Q^=F_d%zEjH{tSO!`cdJ<!UM7zQ@DC;T040?I^H=~3o#O21ie)a
z*DxVE+t}3Hv0XS2Ah5I!4Alw0&4-|(&kDyYLIPGbMX%Vd2J}k&p`sZE;i&Dh4O7JP
zMK9_-^O=77C#NSLoZkG`AL196Sn5<RXq4TmqGt{6ESkR~-N0BM#jna5C(O{<?}V%!
zE4;`GxSumzSj3298Tj=Mf{f@dtzvN+jZLUt8MFk9fDIMNKYOP0^BX{#N<^pO0H1;x
z(D90>{%9Y%^6zLH?OxgbqijDw2PHHBP3CZ4j^|NXxR-EayqS2`tFlBLp_Ng+(TnZl
z3byeIwoz*n`eVCVWw>D-;m6i!zb)I_Wa@l)oFuqca==(P?KYg|J7~|S_Q50Ym>W1#
zDQ@b+-{3Y>^Qjf7{qYa_5BRHbb&7(vH3XF!FxX#9IFoQ}d^GWVLp*uDEL`XN?wd=L
zZbj#UV!bVxskC6C(t^~rkN0oEUaF=+Yqgj_66#hCO-iJD8{&q`J?ppxS>cQCq|1hT
zhP#F?+;Vb8X%9wq=@O>T-(doM`bV@G(_K(jsnuW8n&|#DWnwGNP-i%xv{#GviuVz>
z!Xf=Q1{a*DBu~O2_yQlt;jfc<OmjP?@n^xer*WMUZbAunEMgolvX0fDugmVik+LUO
z{|d8)J85ecVl$#3%y8WB9nTn5!pQ_#xP^6)X98TS6$s0jhKA<0p0|c?F(ZqiZHcCf
zC)WBPedw$Y>8tO*&~SaZ0q`;3XbKa<I^DZe@t6GYgp*R8KjSrA)nc=rlA4w0_tH_n
zCJJmZO}!N0!S%jk7d@n3+C-<PJ>i(0_FGto^(bd3=J*aANAj!W(c|UR{wld}H7o?y
z8z86QMaD4B+Co+HIpIal&=V6-&xaKykZ=P^_(g?GFLKgly15rc>xO@-{>pa0*ec!p
zMN4ltQw?1~Y}@}WPf2f{jylHrrC*iz2l8TXhMrMgr;$_r+DCuIx!RzYtu?gz?U;cE
z`0LTWGEfS*M|Z8lH#Vp&hzPbLuuVaCBn01fH!J}3LD5!BKwpG7r|L$9j6En!<&KNa
zr}cUqdW5@Uy6zQI3TA$W6ioa=KtA`XAPi_=DYf(iMlXf8L>#E3S0{ND6BN&&2QVpF
zs#mUcZD?s|(JwYM(0jwug5oc%wCG){SS*&$W3rMoRkwP`+9)ij{p%2ASsk>(RLce9
zcHA`jP)U>MgGll8@wgOA`NYh(jk2x0fNoG;E@SXtc}i;VznzS~fOmeM^gR}V;r)8%
zzUH2up^>{Dr*z{@Lb`rk4W@tEeFuZ$PJR^Zmo~Iul#MDuT=}fn`JM^d_o7}Jwr{0g
zx^LfWdMR{YnO+Ls_dag7+BZlqsrQZ2`>RrP{QDOJj4Irw6OTS~L)<5BG2+H@c7cbx
z0n0_LF$t)w)rsqFVOk>HQmk=iLQONn_@UHFCyLi;?xyRwCS72K;oBX<ES6@N!yrwF
zcU|vSYfMkAwBUNL_|Po?a;bQ;xLL{k7EGR{)#8v_5YqmH@m=U4%sh%MHRL7SsN+7u
z(hfM@G~$+{*mT|I4@s{XV=9L$<E%PqN?B4mmp6JvXwo7!FLH$;X$F&b-wHM<JZ}JQ
zsIpJ~5OblS;(B6jlEVFO!J>d$$cVU{SZgFA;L3(IdMu$bg#-4>-G;c2h%+Xb*e>10
zj-1AJ>7GP4=y6eZ5Ec+4Y?t=a_cZL&(f4TEB_DlP6`@GN4bRlJ4}-DIPRsf8(O3L$
z1vK0D$R?enQ%|EG4-Ix6rCaWv0}`_7L(+ITPvxe~RuOlvNh6(`s)&g=j<_4XUmo4i
zkQa)H4z>q}N<nlh@mj<8xSGNT`;z!6y0j3wuMj+xuK&!Yww}w{{}id43KKiHeLCiK
zbapqF!M46OEpTG66PGpH@A~r8cce+PE3CV`E&poDR$p7L{ujJnj^mick7}_IlL(>8
z`{SLk-XM%A-XAf!IB2g@g`J~D8OLHyaTLVP0zEW|3ovL$itk>pe2RbpWSG#r?(F@}
zpKxQPlPqyRc0<Z4K2&;2P$o_>!aTjL+4fkYbt+C!K@sS1^^A7Ccl}}8WtHuU>aicK
zWAryx9L9iDSS6<-yRNWWPE9&&9T1S>EmrLoE4#(2+S0uwS6f_Fddj`OfQTRAPOUln
z^N9G~bp^8@rQEokZ!8gCR$gaiRU+x4lnbHA!riZ8tCTyx*(03G&6*<~R-%!6VYYBr
zoP1r$tN=mE{8_XJExlRF%@T*o;y?UF=@lRlFENrR^Q6EaLeBNbCU`wpG+uY_+o~5A
z%di1L8+y@mkix)5s9(4gy?*L!kB}(!rb)YSqpDu4#T6#7lYqo-DXTJBFTU?n(g#VE
zqx9nIJ~2qj%?5iQ<<*`PR4VOKWeVPXMuT|CAKQ8@2NUX`%ISJ>flq9|=EoeIxNo&V
zbosK^dlj(zuJ!cm{%i77+N1wF)+2kd&H|PTh&Wsle7V{Cmk}{c5*F*~rebTRa;{$V
z-CMzeMV^>L(Qdk@RF;9t7A~11zCadYo^ghsBs8pI|8Dc1!IAPO8(Ws&&2BscNEqel
z!lH^!kWfYCGDU-k5xuC!pf&$1ZP$F?L)&ah$yL{~DxcAdv;A0zo?P*JkJ8wE2MywG
zf2_;XLx|5kZYZjrKk8D%DF4w+UQ98^$Lu{8Q^DZBLa7+3MCK!MWz62aF%=_~{~skX
zb2gIW4n*X|)Q?z@6XnjF9f>>e5Ro6qvLGi;j?0fJi#t2{m6%z3)YQu>u7i6e23M1b
z?PqY9FD@^pr*{AIGdyOgNE!J;r6PYP$Jt#^&xxLGeQEsM7k<Aqdd3UC&ihr~s_602
zPrUrfs=ODTd!COT^P2~wADT32!no+CU-(Vl%gbM0#v?WFl|g`Xfo^6J%@cq$knCFW
z#1hMsGo~(iGQ%=6B^YtT$gXfwSXii1Y4J9g?AnR{Y==cKnCzmPt{>9<JwhTFW>9dD
z(P-4_A|hlaIFykWkwr-OP>cVYNBLF#0;LRO7o%bj&?CSE0<WoiVptm3O?Ck%hE{T&
z?5bAz>obyF(Lv*b7n8*V06Az;{Fh>Cj&O{bojP@@hW<^2|2)MeI(kB8j#ft|Oqh_J
zsip5Umgt^Q{s?*Hm6iC@AqUYCoemFd?BHk2OV$_vPhZy?(^eJ5&nwV&2%|7SV^D4c
zni*iemI0*{9CR|iK!E9jezNO(El=9Ma^EY1PtIvHp|u}0e(=MLiBp$sF&)vwKXH=6
zqEQnGI9(QF2pU~75=ofZj5z$=H_#cUw|)1v=bm@Yx#ynu?#n&*of~`5J_gPh!Ql~Q
z=dtMdPKO`|?bp#P+eNv(A{F6x1?BqDC$2KeJ%<*;y)P2fhXid(l{>H#Rw|)c+ct>d
zbb5_)c2C{m!Ja`B!zhY8b?6BzKPXsw;r)%&)A5z|>G_@@{SWd^EQ_Gp2rV1|@n*`&
z9@#6m$ou71xlL}DeR79K_INzrqJcKg)D+P*e>HvGiUopg)uf;t5hY&R5gq-vfBkzB
zACbg5Oh35`HR%<*f>&uy<5<B4BHW}%D6H-a8DTo2a#NjRJ7t6BXQO`B5Mhs7`4b{1
z<rr(wnyhaz?CUhdby6-67#ui!s2dK$kv24<w78iWW+*()^huRRV*0VtVz`h+U5lvG
z5~dneIa9PrO;Op=X@*m1mxa(F5E8n{)P$ajjxi$%`B+5f08DCJPsG)P3G7WmwnZFQ
zlPRtym2=?0?JT%>1rhKKnOY*+oYcXP8L4Da=cYv)HHxZ$fMlV2ES|6^W}!l|kYQ-i
z9aevkpAGap+J6V47FRzbm9)fUD5eRTP!eS4@lXtZqV&&3j?rx@(I}Nr{!-9WprKBM
z!lHHKs8QpoSje=*jFB;s3UQTjT^H4H(f9=YOUL>)=ytM6Qm2wJEv%WbX%<xzD&Hph
zo;15ve(T<F%WRNWlJNF>ZRC93p*Ti*(^nAJ#)VzF-YCQ+Tte^`@5b}zZwRY}Fg-)>
z@28<JGV_^B{fK=v_emLHK*()vymJV{=X}2fIfsas*B6(sWG*)@8ikoljZ4cb1?yS3
z+%0I{g3ejc8`=EXnZ-fO!}ZPN>u&~fsiL#k-pC%9O~p4(&E)a4bnd)Y+FhHzzmPUt
zmVo%fo^-xoK0Alm3d9I9%iYp_s~ecTTsNzq$&>5qcbT~Z*|}$baiIe8TwP6L1ae|J
z0QR^pVF?%JCWPo8A%a2noAl4Wr!VZ=dg$E)SmgUbHDx}}UjDE~!k{5GUmJo!s|t%~
zF_mcs3+tSxl4cTii)F{uK*KbOe&h5sy+B!7pf72eHmF?kNIvOdX;iw`JR!MkRkj*i
zyKTbuWbe5CQbD7m&)MOub>4KWIzD#1?aVl%&Wldjd`o{_KRy9>Uh$iE9W60Rt4ovS
zaM{UHrDCLFq5MqMi&dkwQ5I)=9@wb+v2Llpgu8epzlYaw#+%(0?#J90dcW#*2Lr*A
z!G+*Y!KQ=EtT*?Xk95B55BvK%)_iAtt-iZ`*V|VEp9L;<zS{X|*SB43UB7lo-S+M^
UW8JuB+%Pr`GMh~62J)ZTpG%NP)Bpeg

literal 0
HcmV?d00001

diff --git a/dots/face.inc b/dots/face.inc
new file mode 100755
index 0000000..301b1c0
--- /dev/null
+++ b/dots/face.inc
@@ -0,0 +1 @@
+dw 2248,-2306,0
diff --git a/dots/main.c b/dots/main.c
new file mode 100755
index 0000000..8bc0af6
--- /dev/null
+++ b/dots/main.c
@@ -0,0 +1,291 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <conio.h>
+#include <malloc.h>
+#include <math.h>
+#include "..\dis\dis.h"
+
+extern int face[];
+
+extern int bpmin,bpmax;
+
+extern char *bgpic;
+extern int rotsin,rotcos;
+extern int rows[];
+extern long depthtable1[];
+extern long depthtable2[];
+extern long depthtable3[];
+extern long depthtable4[];
+
+extern int dotnum;
+
+extern void drawdots(void);
+
+char far *vram=(char far *)0xa0000000L;
+
+char	pal[768];
+char	pal2[768];
+
+extern sin1024[];
+
+int	isin(int deg)
+{
+	return(sin1024[deg&1023]);
+}
+
+int	icos(int deg)
+{
+	return(sin1024[(deg+256)&1023]);
+}
+
+extern struct
+{
+	int	x;
+	int	y;
+	int	z;
+	int	old1;
+	int	old2;
+	int	old3;
+	int	old4;
+	int	yadd;
+} dot[];
+
+extern int gravity;
+extern int gravitybottom;
+extern int gravityd;
+
+void setborder(int color)
+{
+	_asm
+	{
+		mov	dx,3dah
+		in	al,dx
+		mov	dx,3c0h
+		mov	al,11h+32
+		out	dx,al
+		mov	al,color
+		out	dx,al
+	}
+}
+
+int	cols[]={
+0,0,0,
+4,25,30,
+8,40,45,
+16,55,60};
+int	dottaul[1024];
+
+main(int argc,char *argv[])
+{
+	int	timer=30000;
+	int	dropper,repeat;
+	int	frame=0;
+	int	rota=-1*64;
+	int	fb=0;
+	int	rot=0,rots=0;
+	int	a,b,c,d,i,j,mode;
+	int	grav,gravd;
+	int	f=0;
+	dis_partstart();
+	dotnum=512;
+	for(a=0;a<dotnum;a++)  dottaul[a]=a;
+	for(a=0;a<500;a++)
+	{
+		b=rand()%dotnum;
+		c=rand()%dotnum;
+		d=dottaul[b];
+		dottaul[b]=dottaul[c];
+		dottaul[c]=d;
+	}
+	{
+		dropper=22000;
+		for(a=0;a<dotnum;a++)
+		{
+			dot[a].x=0;
+			dot[a].y=2560-dropper;
+			dot[a].z=0;
+			dot[a].yadd=0;
+		}
+		mode=7;
+		grav=3;
+		gravd=13;
+		gravitybottom=8105;
+		i=-1;
+	}
+	for(a=0;a<500;a++)
+	{ // scramble
+		b=rand()%dotnum;
+		c=rand()%dotnum;
+		d=dot[b].x; dot[b].x=dot[c].x; dot[c].x=d;
+		d=dot[b].y; dot[b].y=dot[c].y; dot[c].y=d;
+		d=dot[b].z; dot[b].z=dot[c].z; dot[c].z=d;
+	}
+	for(a=0;a<200;a++) rows[a]=a*320;
+	_asm mov ax,13h
+	_asm int 10h
+	outp(0x3c8,0);
+	for(a=0;a<16;a++) for(b=0;b<4;b++)
+	{
+		c=100+a*9;
+		outp(0x3c9,cols[b*3+0]);
+		outp(0x3c9,cols[b*3+1]*c/256);
+		outp(0x3c9,cols[b*3+2]*c/256);
+	}
+	outp(0x3c8,255);
+	outp(0x3c9,31);
+	outp(0x3c9,0);
+	outp(0x3c9,15);
+	outp(0x3c8,64);
+	for(a=0;a<100;a++)
+	{
+		c=64-256/(a+4);
+		c=c*c/64;
+		outp(0x3c9,c/4);
+		outp(0x3c9,c/4);
+		outp(0x3c9,c/4);
+	}
+	outp(0x3c7,0);
+	for(a=0;a<768;a++) pal[a]=inp(0x3c9);
+	outp(0x3c8,0);
+	for(a=0;a<768;a++) outp(0x3c9,0);
+	for(a=0;a<100;a++)
+	{
+		memset(vram+(100+a)*320,a+64,320);
+	}
+	for(a=0;a<128;a++)
+	{
+		c=a-(43+20)/2;
+		c=c*3/4;
+		c+=8;
+		if(c<0) c=0; else if(c>15) c=15;
+		c=15-c;
+		depthtable1[a]=0x202+0x04040404*c;
+		depthtable2[a]=0x02030302+0x04040404*c;
+		depthtable3[a]=0x202+0x04040404*c;
+		//depthtable4[a]=0x02020302+0x04040404*c;
+	}
+	bgpic=halloc(64000L,1L);
+	memcpy(bgpic,vram,64000);
+	a=0;
+	for(b=64;b>=0;b--)
+	{	
+		for(c=0;c<768;c++)
+		{
+			a=pal[c]-b;
+			if(a<0) a=0;
+			pal2[c]=a;
+		}
+		dis_waitb();
+		dis_waitb();
+		outp(0x3c8,0);
+		for(c=0;c<768;c++) outp(0x3c9,pal2[c]);
+	}
+	
+	while(!dis_exit() && frame<2450)
+	{
+		//setborder(0);
+		repeat=dis_waitb();
+		if(frame>2300) setpalette(pal2);
+		//setborder(1);
+		if(dis_indemo())
+		{
+			a=dis_musplus();
+			if(a>-4 && a<0) break;
+		}
+		while(repeat--)
+		{
+			frame++;
+			if(frame==500) f=0;
+			i=dottaul[j];
+			j++; j%=dotnum;
+			if(frame<500)
+			{
+				dot[i].x=isin(f*11)*40;
+				dot[i].y=icos(f*13)*10-dropper;
+				dot[i].z=isin(f*17)*40;
+				dot[i].yadd=0;
+			}
+			else if(frame<900)
+			{
+				dot[i].x=icos(f*15)*55;
+				dot[i].y=dropper;
+				dot[i].z=isin(f*15)*55;
+				dot[i].yadd=-260;
+			}
+			else if(frame<1700)
+			{	
+				a=sin1024[frame&1023]/8;
+				dot[i].x=icos(f*66)*a;
+				dot[i].y=8000;
+				dot[i].z=isin(f*66)*a;
+				dot[i].yadd=-300;
+			}
+			else if(frame<2360)
+			{
+				/*
+				a=rand()/128+32;
+				dot[i].y=8000-a*80;
+				b=rand()&1023;
+				a+=rand()&31;
+				dot[i].x=sin1024[b]*a/3+(a-50)*7;
+				dot[i].z=sin1024[(b+256)&1023]*a/3+(a-40)*7;
+				dot[i].yadd=300;
+				if(frame>1640 && !(frame&31) && grav>-2) grav--;
+				*/
+				dot[i].x=rand()-16384;
+				dot[i].y=8000-rand()/2;
+				dot[i].z=rand()-16384;
+				dot[i].yadd=0;
+				if(frame>1900 && !(frame&31) && grav>0) grav--;
+			}
+			else if(frame<2400)
+			{
+				a=frame-2360;
+				for(b=0;b<768;b+=3)
+				{
+					c=pal[b+0]+a*3;
+					if(c>63) c=63;
+					pal2[b+0]=c;
+					c=pal[b+1]+a*3;
+					if(c>63) c=63;
+					pal2[b+1]=c;
+					c=pal[b+2]+a*4;
+					if(c>63) c=63;
+					pal2[b+2]=c;
+				}
+			}
+			else if(frame<2440)
+			{
+				a=frame-2400;
+				for(b=0;b<768;b+=3)
+				{
+					c=63-a*2;
+					if(c<0) c=0;
+					pal2[b+0]=c;
+					pal2[b+1]=c;
+					pal2[b+2]=c;
+				}
+			}
+			if(dropper>4000) dropper-=100;
+			rotcos=icos(rot)*64; rotsin=isin(rot)*64;
+			rots+=2;
+			if(frame>1900) 
+			{
+				rot+=rota/64;
+				rota--;
+			}
+			else rot=isin(rots);
+			f++;
+			gravity=grav;
+			gravityd=gravd;
+		}
+		drawdots();
+	}
+	if(!dis_indemo())
+	{
+		_asm mov ax,3h
+		_asm int 10h
+	}
+	return(0);
+}
diff --git a/dots/makefile b/dots/makefile
new file mode 100755
index 0000000..53048b3
--- /dev/null
+++ b/dots/makefile
@@ -0,0 +1,48 @@
+MEMORYMODE=l
+# symbolic debug for wsample/wprof/wd
+D_FLAGS=-d1+
+
+# stacksize
+STKSIZ=32768
+#STKSIZ=24576#40960
+
+#
+# compile flags
+#
+S_FLAGS=-sg -st -of+ -zu -zdf -zff -zgf -k$(STKSIZ)
+Z_FLAGS=-zk0 -zc#### -zp4 -ei# -zm
+O_FLAGS=-opnr -oe=24 -oil+ -outback -ohm
+T_FLAGS=-bt=dos -wx -m$(MEMORYMODE) -0 -fpi87 $(D_FLAGS) -fo=.obj## -e=65536
+
+DBUGFLAGS=-fm=$^&.meh -fd=$^& $(D_FLAGS)
+CPPFLAGS=-DTARGET_MSDOS=16 -DMSDOS=1 -DSTACKSIZE=$(STKSIZ)
+
+AFLAGS=$(T_FLAGS)
+CFLAGS=$(T_FLAGS) -wo -i"$(DOSLIBDIR)" $(O_FLAGS) $(S_FLAGS) $(Z_FLAGS)
+LFLAGS=-l=dos $(S_FLAGS) $(DBUGFLAGS)
+#asm_f	= /ML /m2 /s /JJUMPS
+#c_f	= /AL /c /W3
+
+#.asm.obj : 
+#	tasm $(asm_f) $<
+#
+#.c.obj : 
+#	cl /qc $(c_f) $<
+
+.c.obj:
+	*wcl $(CFLAGS) $(extra_$^&_obj_opts) $(CPPFLAGS) -c $[@
+.asm.obj:
+	*wcl $(AFLAGS) $(extra_$^&_obj_opts) -c $[@
+.obj.exe :
+	*wcl $(LFLAGS) $(extra_$^&_exe_opts)$< -fe=$@
+
+#	link /E $(objs),dots.exe,nul;
+#	copy dots.exe ..\main\data\minvball.exe
+
+DOTSOBJS=dots.obj ../dis/disc.obj# asm.obj
+
+all : dots.exe
+
+dots.exe : $(DOTSOBJS)
+
+#asm.asm : face.inc
diff --git a/dots/makefile.old b/dots/makefile.old
new file mode 100755
index 0000000..945ebad
--- /dev/null
+++ b/dots/makefile.old
@@ -0,0 +1,24 @@
+all : dots.exe face.exe
+
+face.exe : face.c
+	cl /qc /AL face.c
+	face > face.inc
+
+objs=main.obj asm.obj ..\dis\disc.obj
+
+asm_f	= /ML /m2 /s /JJUMPS
+c_f	= /AL /c /W3
+
+.asm.obj : 
+	tasm $(asm_f) $<
+	
+.c.obj : 
+	cl /qc $(c_f) $<
+
+dots.exe : $(objs)
+	link /E $(objs),dots.exe,nul;
+	copy dots.exe ..\main\data\minvball.exe
+	
+asm.asm : face.inc
+
+
diff --git a/dots/sin1024.inc b/dots/sin1024.inc
new file mode 100755
index 0000000..6614fbe
--- /dev/null
+++ b/dots/sin1024.inc
@@ -0,0 +1,33 @@
+_sin1024 LABEL WORD
+dw 0,1,3,4,6,7,9,10,12,14,15,17,18,20,21,23,25,26,28,29,31,32,34,36,37,39,40,42,43,45,46,48
+dw 49,51,53,54,56,57,59,60,62,63,65,66,68,69,71,72,74,75,77,78,80,81,83,84,86,87,89,90,92,93,95,96
+dw 97,99,100,102,103,105,106,108,109,110,112,113,115,116,117,119,120,122,123,124,126,127,128,130,131,132,134,135,136,138,139,140
+dw 142,143,144,146,147,148,149,151,152,153,155,156,157,158,159,161,162,163,164,166,167,168,169,170,171,173,174,175,176,177,178,179
+dw 181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,211
+dw 212,213,214,215,216,217,217,218,219,220,221,221,222,223,224,225,225,226,227,227,228,229,230,230,231,232,232,233,234,234,235,235
+dw 236,237,237,238,238,239,239,240,241,241,242,242,243,243,244,244,244,245,245,246,246,247,247,247,248,248,249,249,249,250,250,250
+dw 251,251,251,251,252,252,252,252,253,253,253,253,254,254,254,254,254,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255
+dw 256,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,254,254,254,254,253,253,253,253,252,252,252,252,251,251,251
+dw 251,250,250,250,249,249,249,248,248,247,247,247,246,246,245,245,244,244,244,243,243,242,242,241,241,240,239,239,238,238,237,237
+dw 236,235,235,234,234,233,232,232,231,230,230,229,228,227,227,226,225,225,224,223,222,221,221,220,219,218,217,217,216,215,214,213
+dw 212,211,211,210,209,208,207,206,205,204,203,202,201,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182
+dw 181,179,178,177,176,175,174,173,171,170,169,168,167,166,164,163,162,161,159,158,157,156,155,153,152,151,149,148,147,146,144,143
+dw 142,140,139,138,136,135,134,132,131,130,128,127,126,124,123,122,120,119,117,116,115,113,112,110,109,108,106,105,103,102,100,99
+dw 97,96,95,93,92,90,89,87,86,84,83,81,80,78,77,75,74,72,71,69,68,66,65,63,62,60,59,57,56,54,53,51
+dw 49,48,46,45,43,42,40,39,37,36,34,32,31,29,28,26,25,23,21,20,18,17,15,14,12,10,9,7,6,4,3,1
+dw 0,-1,-3,-4,-6,-7,-9,-10,-12,-14,-15,-17,-18,-20,-21,-23,-25,-26,-28,-29,-31,-32,-34,-36,-37,-39,-40,-42,-43,-45,-46,-48
+dw -49,-51,-53,-54,-56,-57,-59,-60,-62,-63,-65,-66,-68,-69,-71,-72,-74,-75,-77,-78,-80,-81,-83,-84,-86,-87,-89,-90,-92,-93,-95,-96
+dw -97,-99,-100,-102,-103,-105,-106,-108,-109,-110,-112,-113,-115,-116,-117,-119,-120,-122,-123,-124,-126,-127,-128,-130,-131,-132,-134,-135,-136,-138,-139,-140
+dw -142,-143,-144,-146,-147,-148,-149,-151,-152,-153,-155,-156,-157,-158,-159,-161,-162,-163,-164,-166,-167,-168,-169,-170,-171,-173,-174,-175,-176,-177,-178,-179
+dw -181,-182,-183,-184,-185,-186,-187,-188,-189,-190,-191,-192,-193,-194,-195,-196,-197,-198,-199,-200,-201,-202,-203,-204,-205,-206,-207,-208,-209,-210,-211,-211
+dw -212,-213,-214,-215,-216,-217,-217,-218,-219,-220,-221,-221,-222,-223,-224,-225,-225,-226,-227,-227,-228,-229,-230,-230,-231,-232,-232,-233,-234,-234,-235,-235
+dw -236,-237,-237,-238,-238,-239,-239,-240,-241,-241,-242,-242,-243,-243,-244,-244,-244,-245,-245,-246,-246,-247,-247,-247,-248,-248,-249,-249,-249,-250,-250,-250
+dw -251,-251,-251,-251,-252,-252,-252,-252,-253,-253,-253,-253,-254,-254,-254,-254,-254,-254,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255
+dw -256,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-255,-254,-254,-254,-254,-254,-254,-253,-253,-253,-253,-252,-252,-252,-252,-251,-251,-251
+dw -251,-250,-250,-250,-249,-249,-249,-248,-248,-247,-247,-247,-246,-246,-245,-245,-244,-244,-244,-243,-243,-242,-242,-241,-241,-240,-239,-239,-238,-238,-237,-237
+dw -236,-235,-235,-234,-234,-233,-232,-232,-231,-230,-230,-229,-228,-227,-227,-226,-225,-225,-224,-223,-222,-221,-221,-220,-219,-218,-217,-217,-216,-215,-214,-213
+dw -212,-211,-211,-210,-209,-208,-207,-206,-205,-204,-203,-202,-201,-200,-199,-198,-197,-196,-195,-194,-193,-192,-191,-190,-189,-188,-187,-186,-185,-184,-183,-182
+dw -181,-179,-178,-177,-176,-175,-174,-173,-171,-170,-169,-168,-167,-166,-164,-163,-162,-161,-159,-158,-157,-156,-155,-153,-152,-151,-149,-148,-147,-146,-144,-143
+dw -142,-140,-139,-138,-136,-135,-134,-132,-131,-130,-128,-127,-126,-124,-123,-122,-120,-119,-117,-116,-115,-113,-112,-110,-109,-108,-106,-105,-103,-102,-100,-99
+dw -97,-96,-95,-93,-92,-90,-89,-87,-86,-84,-83,-81,-80,-78,-77,-75,-74,-72,-71,-69,-68,-66,-65,-63,-62,-60,-59,-57,-56,-54,-53,-51
+dw -49,-48,-46,-45,-43,-42,-40,-39,-37,-36,-34,-32,-31,-29,-28,-26,-25,-23,-21,-20,-18,-17,-15,-14,-12,-10,-9,-7,-6,-4,-3,-1
diff --git a/plzpart/makefile b/plzpart/makefile
new file mode 100755
index 0000000..e70bb5b
--- /dev/null
+++ b/plzpart/makefile
@@ -0,0 +1,133 @@
+#
+#	Higanbana Project makefile
+#
+#
+# Possible optimizations for 8088 class processors
+#
+# -oa   Relax alias checking
+# -ob   Try to generate straight line code
+# -oe - expand user functions inline (-oe=20 is default, adds lots of code)
+# -oh   Enable repeated optimizations
+# -oi   generate certain lib funcs inline
+# -oi+  Set max inline depth (C++ only, use -oi for C)
+# -ok   Flowing of register save into function flow graph
+# -ol   loop optimizations
+# -ol+  loop optimizations plus unrolling
+# -or   Reorder for pipelined (486+ procs); not sure if good to use
+# -os   Favor space over time
+# -ot   Favor time over space
+# -ei   Allocate an "int" for all enum types
+# -zp2  Allow compiler to add padding to structs
+# -zpw  Use with above; make sure you are warning free!
+# -0    8088/8086 class code generation
+# -s    disable stack overflow checking
+
+# -zk0u	translate kanji to unicode... wwww
+# -zk0	kanji support~
+# -zkl		current codepage
+
+#%.C
+#192x144
+#wwww will add these
+!ifdef __LINUX__
+REMOVECOMMAND=rm -f
+COPYCOMMAND=cp -f
+DIRSEP=/
+OBJ=o
+!else
+REMOVECOMMAND=del
+COPYCOMMAND=copy /y
+DIRSEP=\
+OBJ=obj
+!endif
+#!ifndef INCLUDE
+#IN=..$(DIRSEP)..$(DIRSEP)fdos$(DIRSEP)watcom2$(DIRSEP)h
+#IFLAGS=-i=$(IN)
+#!endif
+
+TARGET_OS = dos
+
+#EXMMTESTDIR=16$(DIRSEP)exmmtest$(DIRSEP)
+SRC=src$(DIRSEP)
+SRCLIB=$(SRC)lib$(DIRSEP)
+
+AFLAGS=-mh -0 -d1 -e=65536
+PLZFLAGS=-fh=plzpart.hed
+SFLAGS=-sg -st -of+ -zu -zdf -zff -zgf -k32768
+DFLAGS=-DTARGET_MSDOS=16 -DMSDOS=1 $(SFLAGS)
+ZFLAGS=-zk0 -zq -zc -zp8# -zm
+CFLAGS=$(AFLAGS) $(IFLAGS)-lr -l=dos -wo##wwww
+OFLAGS=-obmiler -out -oh -ei -zp8 -fpi87  -onac -ol+ -ok####x
+FLAGS=$(CFLAGS) $(OFLAGS) $(DFLAGS) $(ZFLAGS)
+
+
+EXEC = plzpart.exe
+OBJS = copper.$(OBJ) tweak.$(OBJ) plz.$(OBJ) asmyt.$(OBJ)
+
+all: $(EXEC)
+
+#
+#game and bakapi executables
+#
+plzpart.exe: plzpart.$(OBJ) $(OBJS)
+	wcl $(FLAGS) $(PLZFLAGS) plzpart.$(OBJ) $(OBJS) -fm=plzpart.map
+
+
+#
+#executable's objects
+#
+plzpart.$(OBJ): plzpart.h plzpart.c
+	wcl $(FLAGS) -c plzpart.c
+
+#
+#non executable objects libraries
+#
+plz.$(OBJ): plz.h plz.c
+	wcl $(FLAGS) -c plz.c
+tweak.$(OBJ): tweak.h tweak.c
+	wcl $(FLAGS) -c tweak.c
+asmyt.$(OBJ): asmyt.h asmyt.c
+	wcl $(FLAGS) -c asmyt.c
+copper.$(OBJ): copper.h copper.c
+	wcl $(FLAGS) -c copper.c
+
+
+#
+#other~
+#
+clean: .symbolic
+	@$(REMOVECOMMAND) $(EXEC)
+# 	@$(REMOVECOMMAND) *.$(OBJ)
+	@$(REMOVECOMMAND) *.o
+
+#
+# PLZPART_OBJS	= plz.o copper.o asmyt.o tweak.o vect.o vga.o opengl.o \
+# 		  plza.o plzfill.o sinit.o spline.o main.o
+#
+# PLZPART_PATH	= plzpart
+#
+# PLZPART_PATH_OBJS = $(addprefix $(PLZPART_PATH)/,$(PLZPART_OBJS))
+#
+# PLZPART_BIN	= plzpart
+#
+# OBJS += $(PLZPART_PATH_OBJS)
+#
+# default-plzpart:
+# 	$(MAKE) -C .. plzpart-all
+#
+# plzpart-all: $(PLZPART_PATH)/$(PLZPART_BIN)
+#
+# $(PLZPART_PATH)/$(PLZPART_BIN): $(PLZPART_PATH_OBJS)
+# 	$(LD) -o $@ $(LDFLAGS) $(PLZPART_PATH_OBJS) $(LIBS)
+#
+# plz.c: tweak.h ptau.pre
+asmyt.c
+copper.c
+main.c
+plza.c
+plz.c
+plzfill.c
+sinit.c
+spline.c
+tweak.c
+vect.c
-- 
2.39.5