private boolean grow(Scanner scanner, String line) {
		if (line == null || line.matches(commentRegexLn) || line.matches(spaceRegex)) //null / comment / whitespace line
			return true;
		
		if (line.matches(localRegexLn)) { //if it's a valid line
			YamlNode node;
			if (line.matches(valueRegexLn)) { //if its a value
				log(level, "VALUE: " + parseName(line));
				node = new YamlNode(level + 1, parseValues(line));
			}
			else { //if its a node (goes on to the next line in the new YamlNode)
				log(level, "NODE: " + parseName(line));
				node = new YamlNode(level + 1, scanner);
			}
			this.put(parseName(line), node); //add it to children
			
			for (String orphan : node.getOrphans()) {
				log(level, "GROWING ORPHAN: " + parseName(orphan));
				if (!grow(scanner, orphan)) //grow last amputated branch if any / return false if failed to grow: means its at least one more level down
					return false;
			}
			return true;
		}
		else { //invalid line
			if (line.matches(nodeRegexLn)) { //if it's a different level
				log(level, "ORPHAN NODE: " + parseName(line));
				orphans.add(line);
			}
			else if (line.matches(valueRegexLn)) {
				log(level, "ORPHAN VALUE: " + parseName(line));
				orphans.add(line);
			}
			else
				log(level, "INVALID LINE: " + parseName(line));
			return false;
		}
	}