	ProfunctorCopy:	
	      ++T1;	
	      D = L + ACTSIZE;	
	      R0 = *D;
	      deref(R0);
	      switch (tag(R0))
	      {
	        default:
	          goto Fail;
	        case ATOM:
	        case INT:
	          R1 = *(D+1);
	          if (!in_unatomic(R1,R0)) goto Fail;
	          R1 = *(D+2);
	          if (!in_unatomic(R1,makeword(INT,0))) goto Fail;
	          break;
	        case CONS:
	          R1 = *(D+1);
	          if (!in_unatomic(R1,syswords[SWDOT])) goto Fail;
	          R1 = *(D+2);
	          if (!in_unatomic(R1,makeword(INT,2))) goto Fail;
	          break;
	        case TERM:
	          R0 = val(termfunctor(R0));
	          R1 = *(D+1);
	          if (!in_unatomic(R1,mem(R0+FUNATOFF))) goto Fail;
	          R1 = *(D+2);
	          if (!in_unatomic(R1,mem(R0+FUNAROFF))) goto Fail;
	          break;
	        case UNDEF:
	          R0 = *(D+1);
	          deref(R0);
	          R1 = *(D+2);
	          deref(R1);
	          if (tag(R1) != INT) goto Fail;
	          R1 = val(R1);
	          if (R1 == 0)
	          {
	            R1 = *D;
	            if (!in_unatomic(R1,R0)) goto Fail;
	          }
	          else
	          {
	            checkglobal(R1+10);
	            if (R0 == syswords[SWDOT] && R1 == 2)
	            {
	              R0 = makeword(CONS, (int) G);
	              *G = makeword(UNDEF, (int) G);
	              ++G;
	              *G = makeword(UNDEF, (int) G);
	              ++G;
	              R1 = *D;
	              if (unify()) goto CopyMode; else goto Fail;
	            }
	            *G = findfunct(R0,R1,TRUE);
	            R0 = makeword(TERM, (int) G);
	            G++;
	            while (R1--) {*G = makeword(UNDEF,(int) G); ++G;}
	            R1 = *D;
	            if (unify()) goto CopyMode; else goto Fail;
	          }
	    }
	    goto CopyMode;
