public static XmlDocument BpmnToXml(BpmGenome genome)
        {
            var xml = Base();

            var process = xml.CreateElement("bpmn", "process", BpmnUri);

            process.SetAttribute("id", "Process_" + Guid.NewGuid());
            process.SetAttribute("isExecutable", "false");
            xml.DocumentElement.AppendChild(process);

            var start    = StartEvent(process);
            var outgoing = GeneToXml(process, genome.RootGene, start);
            var end      = EndEvent(process, outgoing);

            var diagram = xml.CreateElement("bpmndi", "BPMNDiagram", BpmndiUri);

            diagram.SetAttribute("id", "BPMNDiagram_" + Guid.NewGuid());
            xml.DocumentElement.AppendChild(diagram);

            var plane = xml.CreateElement("bpmndi", "BPMNPlane", BpmndiUri);

            plane.SetAttribute("id", "BPMNPlane_" + Guid.NewGuid());
            plane.SetAttribute("bpmnElement", process.GetAttribute("id"));
            diagram.AppendChild(plane);

            var layouter = new Layouter(xml.DocumentElement);

            layouter.auto(genome.RootGene, start, end);

            layouter.flows(process);

            foreach (var x in layouter.AllElements())
            {
                plane.AppendChild(x);
            }


            return(xml);
        }