/// <summary>
        /// isLastFile param true by default to correctly restore identities and compare exchange from V41 ravendbdump file.
        /// </summary>
        /// <param name="ensureStepsProcessed"></param>
        /// <param name="isLastFile"></param>
        /// <returns></returns>
        public async Task <SmugglerResult> ExecuteAsync(bool ensureStepsProcessed = true, bool isLastFile = true)
        {
            var result = _result ?? new SmugglerResult();

            using (_patcher?.Initialize())
                using (var initializeResult = await _source.InitializeAsync(_options, result))
                    await using (_destination.InitializeAsync(_options, result, initializeResult.BuildNumber))
                    {
                        ModifyV41OperateOnTypes(initializeResult.BuildNumber, isLastFile);

                        var buildType   = BuildVersion.Type(initializeResult.BuildNumber);
                        var currentType = await _source.GetNextTypeAsync();

                        while (currentType != DatabaseItemType.None)
                        {
                            await ProcessTypeAsync(currentType, result, buildType, ensureStepsProcessed);

                            currentType = await _source.GetNextTypeAsync();
                        }

                        if (ensureStepsProcessed)
                        {
                            EnsureProcessed(result);
                        }

                        return(result);
                    }
        }