protected void appExec(int param1) throws Exception
	{
		if (param1 != cmdlineArgs.length) {
			cmdParser.usage(cmdlineArgs, 0, "Excess params="+(cmdlineArgs.length-param1));
			return;
		}
		long systime_boot = System.currentTimeMillis();
        System.out.println(new java.util.Date(systime_boot)+" - NAF BOOTING in "+new java.io.File(".").getCanonicalPath());

		String cp = SysProps.get(SYSPROP_CP);
		if (cp != null) {
			System.out.println("Loading classpath - "+cp);
			DynLoader.load(cp);
		}
		System.out.println("Loading NAF config file: "+baseOptions.cfgpath+" => "+new java.io.File(baseOptions.cfgpath).getCanonicalPath());
		java.io.File fh = new java.io.File(baseOptions.cfgpath);
		if (!fh.exists()) {
			//avoid big ugly stack dump for what is likely to be a common problem
			System.out.println("NAF Config file not found");
			return;
		}
		com.grey.naf.Config nafcfg = com.grey.naf.Config.load(baseOptions.cfgpath);
		com.grey.logging.Logger bootlog = createBootLogger(baseOptions);
		bootlog.info("Created NAF Boot Logger");
		nafcfg.announce(bootlog);
		java.util.ArrayList<Dispatcher> dispatchers;

		try {
			dispatchers = Dispatcher.launchConfigured(nafcfg, bootlog);
			if (dispatchers == null) throw new com.grey.base.ConfigException("No Dispatchers are configured");
		} catch (Throwable ex) {
			String errmsg = "Failed to launch NAF - "+com.grey.base.GreyException.summary(ex, true);
			System.out.println(errmsg);
			return;
		}
        long systime2 = System.currentTimeMillis();
		bootlog.info("NAF BOOTED - Dispatchers="+dispatchers.size()+", Time="+(systime2-systime_boot)/1000f+"s");
		FileOps.flush(bootlog);

		while (dispatchers.size() != 0) {
			for (int idx = 0; idx != dispatchers.size(); idx++) {
				Dispatcher d = dispatchers.get(idx);
				Dispatcher.STOPSTATUS stopsts = d.waitStopped(5000, false);
				if (stopsts != Dispatcher.STOPSTATUS.ALIVE) {
					dispatchers.remove(d);
					bootlog.info("Launcher has reaped Dispatcher="+d.name+" - remaining="+dispatchers.size());
					break;
				}
			}
		}
		bootlog.info("All Dispatchers have exited - terminating\n\n");
		FileOps.flush(bootlog);
	}