/// <summary>
        /// DownloadAndSaveHaircutPointsAsync implementation
        /// </summary>
        private IEnumerator DownloadAndSaveHaircutPointsFunc(string avatarCode, AvatarHaircutData haircutData, AsyncRequest request)
        {
            var haircutPointsRequest = connection.DownloadHaircutPointCloudZipAsync(haircutData);

            yield return(request.AwaitSubrequest(haircutPointsRequest, 0.9f));

            if (request.IsError)
            {
                yield break;
            }

            var saveHaircutPointsRequest = CoreTools.SaveAvatarHaircutPointCloudZipFileAsync(haircutPointsRequest.Result, avatarCode, haircutData.identity);

            yield return(request.AwaitSubrequest(saveHaircutPointsRequest, 0.95f));

            if (request.IsError)
            {
                yield break;
            }

            var unzipPointsRequest = CoreTools.UnzipFileAsync(saveHaircutPointsRequest.Result);

            yield return(request.AwaitSubrequest(unzipPointsRequest, 1.0f));

            if (request.IsError)
            {
                yield break;
            }

            request.IsDone = true;
        }