#include "code\UznikZamkaIF\module1.txt"
#include "code\UznikZamkaIF\module2.txt"
#include "code\UznikZamkaIF\module3.txt"
#include "code\UznikZamkaIF\module4.txt"
#include "code\UznikZamkaIF\sustem.txt"
#include "code\UznikZamkaIF\generators.txt"
#include "code\UznikZamkaIF\ArhivFunctions\MasterArhivFunctions.txt"
#include "code\UznikZamkaIF\instruments.txt"




var MasterUznik(SYS,comand,param1){
	if(typeof(*SYS)!="map")*SYS=(map)0;
	nabor={
		"параметры задания",
		"подопытная функция",
		"возвращает значение",
		"список переменных в алгоритме функции",
		"списох входных значений",
		"результат проверки",
		"проверка",
		"взять извесные переменные",
		"сгенерировать входные значения",
		"сгенерировать серию входных значений"
		};
	cheng=nabor.indexOf(comand);
	if(cheng==0){
		List={1,2,3};
		if(SYS->analizeCompleate)List+={4,6,5};
		str="";
		for(i=0;i<List.size();++i){
			if(List[i]==6)if(typeof(SYS->returnValue)=="void")continue;
			if(i)str+="\n";
			str+=nabor[List[i]]+": ";
			R=MasterUznik(SYS,nabor[List[i]]);
			if(typeof(R)=="vector")R=R.export();
			str+=R;
			}
		return str;
		}
	if(cheng==1){
		if(isset(param1)){
			initSYS(SYS,param1);
			return;
			}
		if(!SYS->isset("function"))return "Функция не задана!";
		startNames=SYS->function.getNamesStart();
		str="(";
		for(i=0;i<startNames.size();++i){
			if(i)str+=",";
			str+=startNames[i];
			}
		str+=")";
		return SYS->function.getName()+str;
		}
	if(cheng==2){
		if(isset(param1)){
			SYS->returnValue=param1;
			return;
			}
		if(!SYS->isset("returnValue"))SYS->returnValue=#;
		if(typeof(SYS->returnValue)=="void")return "Функция не возвращает значение.";
		return SYS->returnValue + " ("+typeof(SYS->returnValue)+")";
		}
	if(cheng==3){
		if(!SYS->isset("AllNamesFunction"))return "Error!";
		return SYS->AllNamesFunction;
		}
	if(cheng==4){
		return getStartValueList(SYS);
		}
	if(cheng==5){
		MasterUznik(SYS,nabor[6]);
		if(!SYS->isset("returnValue"))SYS->returnValue=#;
		result=(SYS->proverka==SYS->returnValue);
		if(!result){
			tt=typeof(SYS->proverka);
			if(tt=="int" || tt=="float" || tt=="double")
				result=((double)SYS->proverka==(double)SYS->returnValue);
			}
		if(result)if(!SYS->proverkaZavershina)return "не завершена";
		return result?"пройдена":"не пройдена";
		}
	if(cheng==6){
		if(SYS->isset("proverka"))return SYS->proverka;
		W=getStartValueList(SYS);
		SYS->proverkaZavershina=0;
		SYS->proverka=#;
		if(typeof(W)=="string")return SYS->proverka;
		if(ControlOFF()){
			SYS->proverka=SYS->function.run1(W);
			SYS->proverkaZavershina=1;
			}
		ClearPsetOFF();
		return SYS->proverka;
		}
	if(cheng==7){
		if(!SYS->analizeCompleate)return "?";
		if(SYS->FineData.size()>1)return "неоднозначно";
		if(SYS->FineData.size()<1)return "нету";
		return SYS->FineData[0].Izvesno;
		}
	if(cheng==8){
		controllerUstanovkaGeneratora(SYS);
		if(SYS->isset("FGenerator"))return SYS->FGenerator.run(SYS);
		return SYS->GeneratorError="в билиотеке нет подходящего генератора.";
		}
	if(cheng==9){
		n=0;
		if(isset(param1))n=param1;
		R={};
		for(i=0;i<n;++i){
			X=MasterUznik(SYS,nabor[8]);
			if(SYS->isset("GeneratorError"))break;
			R.push(X);
			}
		return R;
		}

	nabor={
		"задний ход"
		};
	cheng=nabor.indexOf(comand);
	if(cheng==0){
		Zadanie(SYS);
		}

}

