public async Task <InvokeResult> PopulateDeviceConfigToDeviceAsync(Device device, EntityHeader instanceEH, EntityHeader org, EntityHeader user)
        {
            Console.WriteLine("Hhhhh...eeerrre");

            var result = new InvokeResult();

            if (EntityHeader.IsNullOrEmpty(instanceEH))
            {
                result.AddSystemError($"Device does not have a valid device configuration Device Id={device.Id}");
                return(result);
            }

            Console.WriteLine("H1");

            var deviceConfig = await GetDeviceConfigurationAsync(device.DeviceConfiguration.Id, org, user);

            if (deviceConfig == null)
            {
                result.AddSystemError($"Could Not Load Device Configuration with Device Configuration {device.DeviceConfiguration.Text}, Id={device.DeviceConfiguration.Id}.");
                return(result);
            }

            var instance = await _deploymentInstanceManager.GetInstanceAsync(instanceEH.Id, org, user);

            Console.WriteLine("H2");

            if (instance != null && instance.Status.Value == DeploymentInstanceStates.Running)
            {
                if (instance.InputCommandSSL)
                {
                    device.DeviceURI = $"https://{instance.DnsHostName}:{instance.InputCommandPort}/devices/{device.Id}";
                }
                else
                {
                    device.DeviceURI = $"http://{instance.DnsHostName}:{instance.InputCommandPort}/devices/{device.Id}";
                }

                var endpoints = new List <InputCommandEndPoint>();
                foreach (var route in deviceConfig.Routes)
                {
                    Console.WriteLine("H3");

                    foreach (var module in route.PipelineModules)
                    {
                        Console.WriteLine("H4");

                        if (module.ModuleType.Value == Pipeline.Admin.Models.PipelineModuleType.Workflow)
                        {
                            Console.WriteLine("H4.1");
                            var wfLoadResult = await _deviceAdminManager.LoadFullDeviceWorkflowAsync(module.Module.Id, org, user);

                            Console.WriteLine("H4.2");
                            if (wfLoadResult.Successful)
                            {
                                Console.WriteLine("H4.3");
                                if (wfLoadResult.Result.Attributes != null)
                                {
                                    foreach (var attribute in wfLoadResult.Result.Attributes)
                                    {
                                        if (device.AttributeMetaData == null)
                                        {
                                            device.AttributeMetaData = new List <DeviceAdmin.Models.Attribute>();
                                        }
                                        if (!device.AttributeMetaData.Where(attr => attr.Key == attribute.Key).Any())
                                        {
                                            device.AttributeMetaData.Add(attribute);
                                        }
                                    }
                                }

                                Console.WriteLine("H4.4");

                                if (wfLoadResult.Result.StateMachines != null)
                                {
                                    if (device.StateMachineMetaData == null)
                                    {
                                        device.StateMachineMetaData = new List <StateMachine>();
                                    }
                                    foreach (var stateMachine in wfLoadResult.Result.StateMachines)
                                    {
                                        if (!device.StateMachineMetaData.Where(attr => attr.Key == stateMachine.Key).Any())
                                        {
                                            device.StateMachineMetaData.Add(stateMachine);
                                        }
                                    }
                                }

                                Console.WriteLine("H4.5");

                                if (wfLoadResult.Result.InputCommands != null)
                                {
                                    foreach (var inputCommand in wfLoadResult.Result.InputCommands)
                                    {
                                        var protocol = instance.InputCommandSSL ? "https://" : "http://";
                                        var endPoint = new InputCommandEndPoint
                                        {
                                            EndPoint     = $"{protocol}{instance.DnsHostName}:{instance.InputCommandPort}/{deviceConfig.Key}/{route.Key}/{wfLoadResult.Result.Key}/{inputCommand.Key}/{device.DeviceId}",
                                            InputCommand = inputCommand
                                        };

                                        if (!endpoints.Where(end => end.EndPoint == endPoint.EndPoint).Any())
                                        {
                                            endpoints.Add(endPoint);
                                        }
                                    }
                                }

                                Console.WriteLine("H43");
                            }
                            else
                            {
                                result.Concat(result);
                            }
                        }
                    }
                }
                device.InputCommandEndPoints = endpoints;
            }
            else
            {
                Console.WriteLine("H21");
                device.InputCommandEndPoints = new List <InputCommandEndPoint>();
                device.AttributeMetaData     = new List <DeviceAdmin.Models.Attribute>();
                device.StateMachineMetaData  = new List <StateMachine>();
            }

            Console.WriteLine("H5");

            if (deviceConfig.Properties != null)
            {
                device.PropertiesMetaData = new List <DeviceAdmin.Models.CustomField>();
                foreach (var prop in deviceConfig.Properties.OrderBy(prop => prop.Order))
                {
                    device.PropertiesMetaData.Add(prop);
                    if (prop.FieldType.Value == DeviceAdmin.Models.ParameterTypes.State)
                    {
                        prop.StateSet.Value = await _deviceAdminManager.GetStateSetAsync(prop.StateSet.Id, org, user);
                    }
                    else if (prop.FieldType.Value == DeviceAdmin.Models.ParameterTypes.ValueWithUnit)
                    {
                        prop.UnitSet.Value = await _deviceAdminManager.GetAttributeUnitSetAsync(prop.UnitSet.Id, org, user);
                    }
                }
            }

            Console.WriteLine("H6");

            return(result);
        }