@Override
	protected List<List<String>> loadRecipes()
	{
		final String filename=parametersFile();
		List<List<String>> recipes=(List<List<String>>)Resources.getResource("PARSED_RECIPE: "+filename);
		if(recipes==null)
		{
			final StringBuffer str=new CMFile(Resources.buildResourcePath("skills")+filename,null,CMFile.FLAG_LOGERRORS).text();
			recipes=loadList(str);
			if(recipes.size()==0)
				Log.errOut("LeatherWorking","Recipes not found!");
			else
			{
				final List<List<String>> pleaseAdd1=new Vector();
				final List<List<String>> pleaseAdd2=new Vector();
				for(int r=0;r<recipes.size();r++)
				{
					final List<String> V=recipes.get(r);
					if(V.size()>0)
					{
						final List<String> V1=new XVector<String>(V);
						final List<String> V2=new XVector<String>(V);
						final String name=V.get(RCP_FINALNAME);
						V1.set(RCP_FINALNAME,"Hard "+name);
						V1.set(RCP_LEVEL,""+(CMath.s_int(V.get(RCP_LEVEL))+9));
						V2.set(RCP_FINALNAME,"Studded "+name);
						V2.set(RCP_LEVEL,""+(CMath.s_int(V.get(RCP_LEVEL))+18));
						pleaseAdd1.add(V1);
						pleaseAdd2.add(V2);
					}
				}
				for(int i=0;i<pleaseAdd1.size();i++)
					recipes.add(pleaseAdd1.get(i));
				for(int i=0;i<pleaseAdd2.size();i++)
					recipes.add(pleaseAdd2.get(i));
			}
			Resources.submitResource("PARSED_RECIPE: "+filename,recipes);
		}
		return recipes;
	}