From 10e1fad7f3456e4e00669a6944c012d26eee3fd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A9=99=E5=AD=90?= <454313500@qq.com> Date: Fri, 4 Oct 2024 00:00:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=89=BE=E5=9B=9E?= =?UTF-8?q?=E5=AF=86=E7=A0=81=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dtos/Discuss/DiscussGetListOutputDto.cs | 20 +- .../Analyses/BbsForumAnalyseService.cs | 26 +- .../Services/Forum/DiscussService.cs | 183 ++++++----- .../Consts/DiscussConst.cs | 1 + .../Services/AccountService.cs | 21 +- .../Services/FileService.cs | 9 +- Yi.Bbs.Vue3/.env.development | 5 +- Yi.Bbs.Vue3/.env.production | 5 +- Yi.Bbs.Vue3/index.html | 36 ++- Yi.Bbs.Vue3/src/apis/accountApi.js | 30 ++ Yi.Bbs.Vue3/src/apis/auth.js | 21 +- Yi.Bbs.Vue3/src/assets/styles/login.css | 9 +- Yi.Bbs.Vue3/src/assets/wechat/share.png | Bin 40121 -> 39498 bytes Yi.Bbs.Vue3/src/hooks/useAuths.js | 17 +- Yi.Bbs.Vue3/src/layout/AppHeader.vue | 5 +- Yi.Bbs.Vue3/src/router/index.js | 7 +- Yi.Bbs.Vue3/src/stores/user.js | 19 +- Yi.Bbs.Vue3/src/views/home/Index.vue | 25 +- .../src/views/login/ForgotPassword.vue | 11 - .../src/views/login/forgotPassword.vue | 153 +++++++++ .../src/views/login/{index.vue => login.vue} | 296 +++++++++--------- 21 files changed, 602 insertions(+), 297 deletions(-) delete mode 100644 Yi.Bbs.Vue3/src/views/login/ForgotPassword.vue create mode 100644 Yi.Bbs.Vue3/src/views/login/forgotPassword.vue rename Yi.Bbs.Vue3/src/views/login/{index.vue => login.vue} (93%) diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetListOutputDto.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetListOutputDto.cs index df37566f..c3be2a81 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetListOutputDto.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetListOutputDto.cs @@ -9,11 +9,11 @@ namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Discuss public class DiscussGetListOutputDto : EntityDto { /// - /// 是否禁止评论创建功能 + /// 鏄惁绂佹璇勮鍒涘缓鍔熻兘 /// public bool IsDisableCreateComment { get; set; } /// - /// 是否已点赞,默认未登录不点赞 + /// 鏄惁宸茬偣璧烇紝榛樿鏈櫥褰曚笉鐐硅禐 /// public bool IsAgree { get; set; } = false; public string Title { get; set; } @@ -23,26 +23,26 @@ namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Discuss public int AgreeNum { get; set; } public int SeeNum { get; set; } - //批量查询,不给内容,性能考虑 + //鎵归噺鏌ヨ锛屼笉缁欏唴瀹癸紝鎬ц兘鑰冭檻 //public string Content { get; set; } public string? Color { get; set; } public Guid PlateId { get; set; } - //是否置顶,默认false + //鏄惁缃《锛岄粯璁alse public bool IsTop { get; set; } public DiscussPermissionTypeEnum PermissionType { get; set; } - //是否禁止,默认false + //鏄惁绂佹锛岄粯璁alse public bool IsBan { get; set; } /// - /// 封面 + /// 灏侀潰 /// public string? Cover { get; set; } - //私有需要判断code权限 + //绉佹湁闇瑕佸垽鏂璫ode鏉冮檺 public string? PrivateCode { get; set; } public DateTime CreationTime { get; set; } @@ -55,7 +55,7 @@ namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Discuss Title = DiscussConst.Privacy; Introduction = ""; Cover = null; - //被禁止 + //琚姝 IsBan = true; } } @@ -73,14 +73,14 @@ namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Discuss case DiscussPermissionTypeEnum.Public: break; case DiscussPermissionTypeEnum.Oneself: - //当前主题是仅自己可见,同时不是当前登录用户 + //褰撳墠涓婚鏄粎鑷繁鍙锛屽悓鏃朵笉鏄綋鍓嶇櫥褰曠敤鎴 if (dto.User.Id != userId) { dto.SetBan(); } break; case DiscussPermissionTypeEnum.User: - //当前主题为部分可见,同时不是当前登录用户 也 不在可见用户列表中 + //褰撳墠涓婚涓洪儴鍒嗗彲瑙侊紝鍚屾椂涓嶆槸褰撳墠鐧诲綍鐢ㄦ埛 涔 涓嶅湪鍙鐢ㄦ埛鍒楄〃涓 if (dto.User.Id != userId && !dto.PermissionUserIds.Contains(userId)) { dto.SetBan(); diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Analyses/BbsForumAnalyseService.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Analyses/BbsForumAnalyseService.cs index 62cbb971..39727e8f 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Analyses/BbsForumAnalyseService.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Analyses/BbsForumAnalyseService.cs @@ -17,9 +17,11 @@ namespace Yi.Framework.Bbs.Application.Services.Analyses public class BbsForumAnalyseService : ApplicationService, IApplicationService { private ForumManager _forumManager; - public BbsForumAnalyseService(ForumManager forumManager) + private ISqlSugarRepository _agreeRepository; + public BbsForumAnalyseService(ForumManager forumManager, ISqlSugarRepository agreeRepository) { _forumManager = forumManager; + _agreeRepository = agreeRepository; } /// @@ -38,7 +40,7 @@ namespace Yi.Framework.Bbs.Application.Services.Analyses .Select((discuss, user, info) => new DiscussGetListOutputDto { Id = discuss.Id, - IsAgree = SqlFunc.Subqueryable().WhereIF(CurrentUser.Id != null, x => x.CreatorId == CurrentUser.Id && x.DiscussId == discuss.Id).Any(), + // IsAgree = SqlFunc.Subqueryable().WhereIF(CurrentUser.Id != null, x => x.CreatorId == CurrentUser.Id && x.DiscussId == discuss.Id).Any(), User = new BbsUserGetListOutputDto() { @@ -52,6 +54,26 @@ namespace Yi.Framework.Bbs.Application.Services.Analyses }, true) .ToPageListAsync(input.SkipCount, input.MaxResultCount); + var discussId = output.Select(x => x.Id); + //鐐硅禐瀛楀吀锛宬ey涓轰富棰榠d锛寉涓虹敤鎴穒ds + var agreeDic = + (await _agreeRepository._DbQueryable.Where(x => discussId.Contains(x.DiscussId)).ToListAsync()) + .GroupBy(x => x.DiscussId) + .ToDictionary(x => x.Key, y => y.Select(y => y.CreatorId).ToList()); + + //绛夌骇銆佹槸鍚︾偣璧炶祴鍊 + output?.ForEach(x => + { + if (CurrentUser.Id is not null) + { + //榛樿fasle + if (agreeDic.TryGetValue(x.Id,out var userIds)) + { + x.IsAgree = userIds.Contains(CurrentUser.Id); + } + } + }); + return output; } diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Forum/DiscussService.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Forum/DiscussService.cs index 2df69d8c..ccd9500e 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Forum/DiscussService.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/Forum/DiscussService.cs @@ -29,19 +29,27 @@ namespace Yi.Framework.Bbs.Application.Services.Forum /// /// Discuss搴旂敤鏈嶅姟瀹炵幇,鐢ㄤ簬鍙傛暟鏍¢獙銆侀鍩熸湇鍔′笟鍔$粍鍚堛佹棩蹇楄褰曘佷簨鍔″鐞嗐佽处鎴蜂俊鎭 /// - public class DiscussService : YiCrudAppService, - IDiscussService + public class DiscussService : YiCrudAppService, + IDiscussService { - private ISqlSugarRepository _discussTopEntityRepository; + private ISqlSugarRepository _discussTopRepository; + private ISqlSugarRepository _agreeRepository; private BbsUserManager _bbsUserManager; - public DiscussService(BbsUserManager bbsUserManager, ForumManager forumManager, ISqlSugarRepository discussTopEntityRepository, ISqlSugarRepository plateEntityRepository, ILocalEventBus localEventBus) : base(forumManager._discussRepository) + + public DiscussService(BbsUserManager bbsUserManager, ForumManager forumManager, + ISqlSugarRepository discussTopRepository, + ISqlSugarRepository plateEntityRepository, ILocalEventBus localEventBus, + ISqlSugarRepository agreeRepository) : base(forumManager._discussRepository) { _forumManager = forumManager; _plateEntityRepository = plateEntityRepository; _localEventBus = localEventBus; - _discussTopEntityRepository = discussTopEntityRepository; - _bbsUserManager=bbsUserManager; + _agreeRepository = agreeRepository; + _discussTopRepository = discussTopRepository; + _bbsUserManager = bbsUserManager; } + private readonly ILocalEventBus _localEventBus; private ForumManager _forumManager { get; set; } @@ -49,8 +57,6 @@ namespace Yi.Framework.Bbs.Application.Services.Forum private ISqlSugarRepository _plateEntityRepository { get; set; } - - /// /// 鍗曟煡 /// @@ -58,42 +64,43 @@ namespace Yi.Framework.Bbs.Application.Services.Forum /// public async override Task GetAsync(Guid id) { - //鏌ヨ涓婚鍙戝竷 娴忚涓婚 浜嬩欢锛屾祻瑙堟暟+1 - var item = await _forumManager._discussRepository._DbQueryable.LeftJoin((discuss, user) => discuss.CreatorId == user.Id) + var item = await _forumManager._discussRepository._DbQueryable + .LeftJoin((discuss, user) => discuss.CreatorId == user.Id) .LeftJoin((discuss, user, info) => user.Id == info.UserId) .LeftJoin((discuss, user, info, plate) => plate.Id == discuss.PlateId) - .Select((discuss, user, info, plate) => new DiscussGetOutputDto - { - Id = discuss.Id, - IsAgree = SqlFunc.Subqueryable().WhereIF(CurrentUser.Id != null, x => x.CreatorId == CurrentUser.Id && x.DiscussId == discuss.Id).Any(), - User = new BbsUserGetListOutputDto() - { - UserName = user.UserName, - Nick = user.Nick, - Icon = user.Icon, - Id = user.Id, - Level = info.Level, - UserLimit = info.UserLimit, - Money=info.Money, - Experience=info.Experience - }, - Plate = new Contracts.Dtos.Plate.PlateGetOutputDto() - { - Name = plate.Name, - Id = plate.Id, - Code = plate.Code, - Introduction = plate.Introduction, - Logo = plate.Logo - - } - }, true) - .SingleAsync(discuss => discuss.Id == id); + .Select((discuss, user, info, plate) => new DiscussGetOutputDto + { + Id = discuss.Id, + IsAgree = SqlFunc.Subqueryable().WhereIF(CurrentUser.Id != null, + x => x.CreatorId == CurrentUser.Id && x.DiscussId == discuss.Id).Any(), + User = new BbsUserGetListOutputDto() + { + UserName = user.UserName, + Nick = user.Nick, + Icon = user.Icon, + Id = user.Id, + Level = info.Level, + UserLimit = info.UserLimit, + Money = info.Money, + Experience = info.Experience + }, + Plate = new Contracts.Dtos.Plate.PlateGetOutputDto() + { + Name = plate.Name, + Id = plate.Id, + Code = plate.Code, + Introduction = plate.Introduction, + Logo = plate.Logo + } + }, true) + .SingleAsync(discuss => discuss.Id == id); if (item is not null) { await VerifyDiscussPermissionAsync(item.Id); - await _localEventBus.PublishAsync(new SeeDiscussEventArgs { DiscussId = item.Id, OldSeeNum = item.SeeNum }); + await _localEventBus.PublishAsync(new SeeDiscussEventArgs + { DiscussId = item.Id, OldSeeNum = item.SeeNum }); } return item; @@ -105,49 +112,65 @@ namespace Yi.Framework.Bbs.Application.Services.Forum /// /// /// - public override async Task> GetListAsync([FromQuery] DiscussGetListInputVo input) + public override async Task> GetListAsync( + [FromQuery] DiscussGetListInputVo input) { //闇瑕佸叧鑱斿垱寤鸿呯敤鎴 RefAsync total = 0; var items = await _forumManager._discussRepository._DbQueryable - .WhereIF(!string.IsNullOrEmpty(input.Title), x => x.Title.Contains(input.Title)) - .WhereIF(input.PlateId is not null, x => x.PlateId == input.PlateId) - .WhereIF(input.IsTop is not null, x => x.IsTop == input.IsTop) - .WhereIF(input.UserId is not null,x=>x.CreatorId==input.UserId) - .LeftJoin((discuss, user) => discuss.CreatorId == user.Id) - .WhereIF(input.UserName is not null, (discuss, user)=>user.UserName==input.UserName!) - - .LeftJoin((discuss, user, info) => user.Id == info.UserId) - - .OrderByDescending(discuss => discuss.OrderNum) - .OrderByIF(input.Type == QueryDiscussTypeEnum.New, discuss => discuss.CreationTime, OrderByType.Desc) - .OrderByIF(input.Type == QueryDiscussTypeEnum.Host, discuss => discuss.SeeNum, OrderByType.Desc) - .OrderByIF(input.Type == QueryDiscussTypeEnum.Suggest, discuss => discuss.AgreeNum, OrderByType.Desc) - - .Select((discuss, user, info) => new DiscussGetListOutputDto - { - Id = discuss.Id, - IsAgree = SqlFunc.Subqueryable().WhereIF(CurrentUser.Id != null, x => x.CreatorId == CurrentUser.Id && x.DiscussId == discuss.Id).Any(), - - User = new BbsUserGetListOutputDto() - { - Id = user.Id, - UserName = user.UserName, - Nick = user.Nick, - Icon = user.Icon, - Level = info.Level, - UserLimit = info.UserLimit, - Money = info.Money, - Experience = info.Experience - } - - }, true) + .WhereIF(!string.IsNullOrEmpty(input.Title), x => x.Title.Contains(input.Title)) + .WhereIF(input.PlateId is not null, x => x.PlateId == input.PlateId) + .WhereIF(input.IsTop is not null, x => x.IsTop == input.IsTop) + .WhereIF(input.UserId is not null, x => x.CreatorId == input.UserId) + .LeftJoin((discuss, user) => discuss.CreatorId == user.Id) + .WhereIF(input.UserName is not null, (discuss, user) => user.UserName == input.UserName!) + .LeftJoin((discuss, user, info) => user.Id == info.UserId) + .OrderByDescending(discuss => discuss.OrderNum) + .OrderByIF(input.Type == QueryDiscussTypeEnum.New, discuss => discuss.CreationTime, OrderByType.Desc) + .OrderByIF(input.Type == QueryDiscussTypeEnum.Host, discuss => discuss.SeeNum, OrderByType.Desc) + .OrderByIF(input.Type == QueryDiscussTypeEnum.Suggest, discuss => discuss.AgreeNum, OrderByType.Desc) + .Select((discuss, user, info) => new DiscussGetListOutputDto + { + Id = discuss.Id, + // 浼樺寲鏌ヨ锛屼笉浣跨敤瀛愭煡璇 + // IsAgree = SqlFunc.Subqueryable().WhereIF(CurrentUser.Id != null, x => x.CreatorId == CurrentUser.Id && x.DiscussId == discuss.Id).Any(), + User = new BbsUserGetListOutputDto() + { + Id = user.Id, + UserName = user.UserName, + Nick = user.Nick, + Icon = user.Icon, + Level = info.Level, + UserLimit = info.UserLimit, + Money = info.Money, + Experience = info.Experience + } + }, true) .ToPageListAsync(input.SkipCount, input.MaxResultCount, total); + var discussId = items.Select(x => x.Id); + + //鐐硅禐瀛楀吀锛宬ey涓轰富棰榠d锛寉涓虹敤鎴穒ds + var agreeDic = + (await _agreeRepository._DbQueryable.Where(x => discussId.Contains(x.DiscussId)).ToListAsync()) + .GroupBy(x => x.DiscussId) + .ToDictionary(x => x.Key, y => y.Select(y => y.CreatorId).ToList()); //鏌ヨ瀹屼富棰樹箣鍚庯紝瑕佽繃婊や竴涓嬬鏈夌殑涓婚淇℃伅 items.ApplyPermissionTypeFilter(CurrentUser.Id ?? Guid.Empty); - items?.ForEach(x => x.User.LevelName = _bbsUserManager._levelCacheDic[x.User.Level].Name); + //绛夌骇銆佹槸鍚︾偣璧炶祴鍊 + items?.ForEach(x => + { + x.User.LevelName = _bbsUserManager._levelCacheDic[x.User.Level].Name; + if (CurrentUser.Id is not null) + { + //榛樿fasle + if (agreeDic.TryGetValue(x.Id,out var userIds)) + { + x.IsAgree = userIds.Contains(CurrentUser.Id); + } + } + }); return new PagedResultDto(total, items); } @@ -157,14 +180,16 @@ namespace Yi.Framework.Bbs.Application.Services.Forum /// public async Task> GetListTopAsync() { - var output = await _discussTopEntityRepository._DbQueryable.LeftJoin((top, discuss) => top.DiscussId == discuss.Id) + var output = await _discussTopRepository._DbQueryable + .LeftJoin((top, discuss) => top.DiscussId == discuss.Id) .LeftJoin((top, discuss, user) => discuss.CreatorId == user.Id) .LeftJoin((top, discuss, user, info) => user.Id == info.UserId) .OrderByDescending(top => top.OrderNum) .Select((top, discuss, user, info) => new DiscussGetListOutputDto { Id = discuss.Id, - IsAgree = SqlFunc.Subqueryable().WhereIF(CurrentUser.Id != null, x => x.CreatorId == CurrentUser.Id && x.DiscussId == discuss.Id).Any(), + IsAgree = SqlFunc.Subqueryable().WhereIF(CurrentUser.Id != null, + x => x.CreatorId == CurrentUser.Id && x.DiscussId == discuss.Id).Any(), User = new BbsUserGetListOutputDto { Id = user.Id, @@ -206,6 +231,11 @@ namespace Yi.Framework.Bbs.Application.Services.Forum throw new UserFriendlyException(PlateConst.No_Exist); } + if (await _forumManager._discussRepository.IsAnyAsync(x => x.Title == input.Title)) + { + throw new UserFriendlyException(DiscussConst.Repeat); + } + //濡傛灉寮鍚簡绂佺敤鍒涘缓涓婚 if (plate.IsDisableCreateDiscuss == true) { @@ -233,6 +263,7 @@ namespace Yi.Framework.Bbs.Application.Services.Forum { throw new UserFriendlyException(DiscussConst.No_Exist); } + if (discuss.PermissionType == DiscussPermissionTypeEnum.Oneself) { if (discuss.CreatorId != CurrentUser.Id) @@ -240,13 +271,15 @@ namespace Yi.Framework.Bbs.Application.Services.Forum throw new UserFriendlyException(DiscussConst.Privacy); } } + if (discuss.PermissionType == DiscussPermissionTypeEnum.User) { - if (discuss.CreatorId != CurrentUser.Id && !discuss.PermissionUserIds.Contains(CurrentUser.Id ?? Guid.Empty)) + if (discuss.CreatorId != CurrentUser.Id && + !discuss.PermissionUserIds.Contains(CurrentUser.Id ?? Guid.Empty)) { throw new UserFriendlyException(DiscussConst.Privacy); } } } } -} +} \ No newline at end of file diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Consts/DiscussConst.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Consts/DiscussConst.cs index f0a7d249..05d8aae7 100644 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Consts/DiscussConst.cs +++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Consts/DiscussConst.cs @@ -11,6 +11,7 @@ namespace Yi.Framework.Bbs.Domain.Shared.Consts /// public class DiscussConst { + public const string Repeat = "鍒涘缓涓婚閲嶅"; public const string No_Exist = "浼犲叆鐨勪富棰榠d涓嶅瓨鍦"; public const string Privacy = "銆愮瀵嗐戞偍鏃犺涓婚鏉冮檺锛屽彲鑱旂郴浣滆呯敵璇峰紑鏀"; diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/AccountService.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/AccountService.cs index 8676435c..df56e25e 100644 --- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/AccountService.cs +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/AccountService.cs @@ -184,22 +184,24 @@ namespace Yi.Framework.Rbac.Application.Services /// /// /// - [HttpPost("captcha-phone")] + [HttpPost("account/captcha-phone")] [AllowAnonymous] public async Task PostCaptchaPhoneForRegisterAsync(PhoneCaptchaImageDto input) { return await PostCaptchaPhoneAsync(ValidationPhoneTypeEnum.Register, input); } + /// /// 鎵嬫満楠岃瘉鐮-鎵惧洖瀵嗙爜 /// /// /// - [HttpPost("captcha-phone/repassword")] + [HttpPost("account/captcha-phone/repassword")] public async Task PostCaptchaPhoneForRetrievePasswordAsync(PhoneCaptchaImageDto input) { return await PostCaptchaPhoneAsync(ValidationPhoneTypeEnum.RetrievePassword, input); } + /// /// 鎵嬫満楠岃瘉鐮 /// @@ -223,7 +225,7 @@ namespace Yi.Framework.Rbac.Application.Services var uuid = Guid.NewGuid(); await _aliyunManger.SendSmsAsync(input.Phone, code); - await _phoneCache.SetAsync(new CaptchaPhoneCacheKey(ValidationPhoneTypeEnum.Register, input.Phone), + await _phoneCache.SetAsync(new CaptchaPhoneCacheKey(ValidationPhoneTypeEnum.RetrievePassword, input.Phone), new CaptchaPhoneCacheItem(code), new DistributedCacheEntryOptions { SlidingExpiration = TimeSpan.FromMinutes(10) }); return new @@ -255,14 +257,11 @@ namespace Yi.Framework.Rbac.Application.Services /// [AllowAnonymous] [UnitOfWork] - public async Task PostRetrievePasswordAsync(RetrievePasswordDto input) + public async Task PostRetrievePasswordAsync(RetrievePasswordDto input) { - if (_rbacOptions.EnableCaptcha) - { - //鏍¢獙楠岃瘉鐮侊紝鏍规嵁鐢佃瘽鍙风爜鑾峰彇 value锛屾瘮瀵归獙璇佺爜宸茬粡uuid - await ValidationPhoneCaptchaAsync(ValidationPhoneTypeEnum.RetrievePassword, input.Phone, input.Code); - } - + //鏍¢獙楠岃瘉鐮侊紝鏍规嵁鐢佃瘽鍙风爜鑾峰彇 value锛屾瘮瀵归獙璇佺爜宸茬粡uuid + await ValidationPhoneCaptchaAsync(ValidationPhoneTypeEnum.RetrievePassword, input.Phone, input.Code); + var entity = await _userRepository.GetFirstAsync(x => x.Phone == input.Phone); if (entity is null) { @@ -270,6 +269,8 @@ namespace Yi.Framework.Rbac.Application.Services } await _accountManager.RestPasswordAsync(entity.Id, input.Password); + + return entity.UserName; } diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/FileService.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/FileService.cs index f0287ad9..fc999707 100644 --- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/FileService.cs +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/FileService.cs @@ -39,7 +39,8 @@ namespace Yi.Framework.Rbac.Application.Services if (!File.Exists(path)) { - throw new UserFriendlyException("鏂囦欢涓嶅瓨鍦",code:"404"); + return new NotFoundResult(); + // throw new UserFriendlyException("鏂囦欢涓嶅瓨鍦",code:"404"); } @@ -66,12 +67,6 @@ namespace Yi.Framework.Rbac.Application.Services // path = $"wwwroot/{FileTypeEnum.Thumbnail}/{file.Id}{Path.GetExtension(file.FileName)}"; //} //璺緞涓猴細 鏂囦欢璺緞/鏂囦欢id+鏂囦欢鎵╁睍鍚 - - if (!File.Exists(path)) - { - throw new UserFriendlyException("鏈湴鏂囦欢涓嶅瓨鍦", "404"); - } - return path; } diff --git a/Yi.Bbs.Vue3/.env.development b/Yi.Bbs.Vue3/.env.development index c08da086..3adabc35 100644 --- a/Yi.Bbs.Vue3/.env.development +++ b/Yi.Bbs.Vue3/.env.development @@ -7,4 +7,7 @@ VITE_APP_URL="http://localhost:19001/api/app" # ws/寮鍙戠幆澧 VITE_APP_BASE_WS = '/dev-ws' -VITE_APP_BASE_URL_WS="http://localhost:19001/hub" \ No newline at end of file +VITE_APP_BASE_URL_WS="http://localhost:19001/hub" + +# 鏄惁寮鍚疘CP澶囨妯″紡 +VITE_APP_ICP = true \ No newline at end of file diff --git a/Yi.Bbs.Vue3/.env.production b/Yi.Bbs.Vue3/.env.production index b69d6e43..e7174e00 100644 --- a/Yi.Bbs.Vue3/.env.production +++ b/Yi.Bbs.Vue3/.env.production @@ -6,4 +6,7 @@ VITE_APP_URL="http://ccnetcore.com:19001/api/app" # ws VITE_APP_BASE_WS = '/prod-ws' -VITE_APP_BASE_URL_WS="http://ccnetcore.com:19001/hub" \ No newline at end of file +VITE_APP_BASE_URL_WS="http://ccnetcore.com:19001/hub" + +# 鏄惁寮鍚疘CP澶囨妯″紡 +VITE_APP_ICP = true \ No newline at end of file diff --git a/Yi.Bbs.Vue3/index.html b/Yi.Bbs.Vue3/index.html index cb47cd78..da02cce0 100644 --- a/Yi.Bbs.Vue3/index.html +++ b/Yi.Bbs.Vue3/index.html @@ -4,20 +4,22 @@ - .Net鎰忕ぞ鍖 - - - - -
-
- - - 鎰忕ぞ鍖哄緢澶э紝浣犺绛変竴涓... -
-
-
- - - + + + 涓汉鎴愭灉灞曠ず + + + + +
+
+ + + 鎰忕ぞ鍖哄緢澶э紝浣犺绛変竴涓... +
+
+
+ + + diff --git a/Yi.Bbs.Vue3/src/apis/accountApi.js b/Yi.Bbs.Vue3/src/apis/accountApi.js index da3ed0a6..4dae948f 100644 --- a/Yi.Bbs.Vue3/src/apis/accountApi.js +++ b/Yi.Bbs.Vue3/src/apis/accountApi.js @@ -18,6 +18,24 @@ export function login(username, password, code, uuid) { }); } + +//鎵惧洖瀵嗙爜 +export function retrievePassword(password, phone, code, uuid) { + const data = { + password, + phone, + code, + uuid, + }; + return request({ + url: "/account/retrieve-password", + headers: { + isToken: false, + }, + method: "post", + data: data, + }); +} // 娉ㄥ唽鏂规硶 export function register(userName, password, phone, code, uuid) { const data = { @@ -76,3 +94,15 @@ export function getCodePhone(phone) { data: { phone }, }); } +// 鑾峰彇鐭俊楠岃瘉鐮-涓轰簡閲嶇疆瀵嗙爜 +export function getCodePhoneForRetrievePassword(phone) { + return request({ + url: "/account/captcha-phone/repassword", + headers: { + isToken: false, + }, + method: "post", + timeout: 20000, + data: { phone }, + }); +} diff --git a/Yi.Bbs.Vue3/src/apis/auth.js b/Yi.Bbs.Vue3/src/apis/auth.js index 8d2ce5d2..ad037ca1 100644 --- a/Yi.Bbs.Vue3/src/apis/auth.js +++ b/Yi.Bbs.Vue3/src/apis/auth.js @@ -1,5 +1,4 @@ import request from "@/config/axios/service"; - /** * 鐢ㄦ埛鐧诲綍 * @param {*} data 璐﹀彿瀵嗙爜 @@ -23,6 +22,17 @@ export function userRegister(data) { data, }); } +/** + * 鐢ㄦ埛鎵惧洖瀵嗙爜 + * @param {*} data 璐﹀彿瀵嗙爜 + */ +export function userRetrievePassword(data) { + return request({ + url: `/account/retrieve-password`, + method: "post", + data, + }); +} /** * 鑾峰彇鐢ㄦ埛璇︾粏淇℃伅 @@ -44,15 +54,6 @@ export function userLogout() { }); } -/** - * 鑾峰彇楠岃瘉鐮 - */ -export function getCodeImg() { - return request({ - url: `/account/captcha-image`, - method: "get", - }); -} /** * 鑾峰彇鐭俊楠岃瘉鐮 */ diff --git a/Yi.Bbs.Vue3/src/assets/styles/login.css b/Yi.Bbs.Vue3/src/assets/styles/login.css index 9a16c4dc..2c178405 100644 --- a/Yi.Bbs.Vue3/src/assets/styles/login.css +++ b/Yi.Bbs.Vue3/src/assets/styles/login.css @@ -103,13 +103,18 @@ height: 25px; .left-lable { display: flex; - align-items: center; + justify-content: space-between; font-size: 12px; } .left-lable label{ margin-left: 5px; } - +.right-forgot{ + cursor: pointer; +} +.right-forgot:hover{ + color: #7f438c; +} .bottom-div { font-size: 12px; diff --git a/Yi.Bbs.Vue3/src/assets/wechat/share.png b/Yi.Bbs.Vue3/src/assets/wechat/share.png index 2b23e44e5fcfa1f138b8762c38db4a67582fd41b..39350380f8be06e9f6cb50fc484002632974b6a3 100644 GIT binary patch literal 39498 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 E4|~&5ApigX literal 40121 zcmcG#cTiJZ)HjL+R1lD6q>Bs6)6c#dT)sog@7~z2}Pwz z=TH?0h_nC#DkaiyeBN*F%$;}U`|r+Va?aUx?Y-Atd#&GE8}&$EgOQ$#o`!~oQA-nQ zL_>1{Lql`c`{Frj3VXO+8TE19LDNW&h9*RahUWPz8kz%Y(sMEmjsGngnzhF?G>Ta? zG$8Lhf}t`sqy3St3GBkB$8;aXBxe{%SmySloHKpQ3L_|bNOUv@}i=(5XySux;e*J1@ zW;QrDoRN`9B{m=+0Eer&di5$Ek55cYeLjb4Y56!i`~CFvlxKJ~?>!b8EoQ?}7n)uzaT39}O)kJ*TH;g%D%B)17B6 zZF+0;c4r|bG2&?Z^k_ZeWXpis0}Xqx-6>`6^kC)ma4zEL%V)Kd{Vl>eGc_mg?&*oM zYx;?>yEFBxF8)+p>b6w^X zZAw0UOLV0c{AjVQCY?M(j{dLKlG+>S!{ReEG(kn}rK%^}%t1|OV$V^8XznGyX)deB zw0c6(XK2J|lOE7?TuJ0?M~MHUg{A(bmhK6D^B-H$d=!3N!(D7oeYeJ zFa7%Ks?CTo8;*bPB1h+d8R~N+();MoJ}4eRLvxF^_Pp2<|1Au)^XEc8ashv{fBZ`$ z@VenV^??xdd_;*@tD^mv_TVV$u{8Brlzen9{J+^i9Z|ZIA|`Dv{L6;^mH*N7uNn21 zRn(Sgics~#9E{W#Syo-&e+?{_#-FeGa&qZkQVKtnz<-%E_ny!ENA=B5S^teH`5u*) zq6fFuWp7-_Wz~Ns2Pfvn#$Lya6|8Bl)OItRb~{iUOU=K zs5O(ic2d$otXQF)UD2~*bExLz_z7(d7Tx*r0E(JRn!1WPewCug@ z$x#VsXg*#tiihH_bcea_6ah3ek7PPEW!=f63$>d%)SWk&|3HxIc(_axdw`Wb;iU17 zW)}crmsItxOj6gO!RR@ZvYx^Eh?Sg3NAvW2LG=TXdzkrURa35|H9DH-bvN6f?Xjvh zuNh>S-`}92QRsmHU;4rbGZSIKXK6kvq*`IB*E3ii-N?$P625j551kvs-6(>3uC=P3 zp}7t&8|zN9!X%shOj{if3!~QHOf|z;`Nv%p;fN=X=oZ3)5+b0JLl7SO-UdT z>IQ}cg9$eH=;uZ*lVLBYb@o%tFvu`6qRf;uv1qD^nau7f72l8Z&yU!H9^{a6Esxf#9D``3~}-Q z-tw)pP3s1%|I<&1Z+-ZO12c+&!4O1cSD9j4pj5qqUx!z0(iebV%MU+VOGdyy$_X8c zK!(|h{eQ2wWL6HI?F%{ar%k5&KJ(TZQx^xz zK6F@|<|?O<&r_#E_!Fsmh5gS@2Mgv68Ducl>>5o}P9-9@^U1W$eu24XpMUSk54`hQ zKrw5;k?S-Q2)?%g@dhbQ`#bE}hp@VrR=f*YL?|(;25x+{5jLjKh8)$;dWOE;{nlPP zt5&sMrAAYv>Y9v@yT%lQEry2i+g`Eg1|Pzw~g`*6(hYuRT!HvJ5n^U__w&_ou3f0yNJ<%Dd5g*|EKHF6Z7lhj4IT zG5vBKc#zob*Q%?%Bi90DKDz4JBcxSYER!5$dmUgbzW5^Gx#l_VsL3)+>s0O1%wo1ef>|9iLzu}CudB*Nx z)h3*J9+no|H}kgwBm+-QgYXG*>Q}52js>R)A#q3%t1N$a9Hr%(CFps--U9olbpypZADm!H{10-qLEYN#B0A z(D#_^+--3~%yEaq(H(N<;0<6pK0*LU2SOV9q>ELgyk37f|9o4Z8tP2o7G-TI+~|+U z%l!6oSVkKIsv}LhFQCGUrwZ)h$0ft0HIFwqXP&xV21>I%J!}W_ZGx z#%z+$-`eDnO(WpQJ16sZik;J-eSBop*xef4Ign&Fo0M0sCf|cySnA2M>>n~M&}yQK zp?Xq{t{sP}9%`Xk-B2Seqp~7_Kuwma#;M^$ceMiqh%0T@9 zI+`kVRisq;YV(&&%=5d>C#bZVLp%o99-c-`Ha$RvKO^rI*g@ixzJ`RoCqOhA&vEqt zRzQDnk0VTm1Z0?ePWdC4lSp3nFM2S#E5bTp1Pb`qqFA_%lTwdp%`CV5c0)m>C%!B@ zVf`T6%tAN|capCmefwJg59fqqw|mO_iG=mP?^V&yVjB;BX>H#ccU4nqQRNNt=)Y-h zTQzsI{kj+T`}g9X!@!49+aYf)FnHovl&H8R1W4n+ZN+7f9f%y|tq5(5JoI5dj$Hp` z4GSSW3*W8HU)Yfqe1ACW=3UKZ#w#O!@O$smQf(IBy6|aMi}Sf}VZ?@(Q%(phfM40> zfayf`bHwp%gM_e#-d4@WcVoSsbrF08qssnBiNXNVuGiUaXIKU6z>(vU1#sz-&Kr&v zL3)rQ%x`25CIi;vsw9sD<8+IO6Mk%)KaQEI^=Fj%!)}TnBq;HpNWFn?{g4H#PuK)@ z&?r>c6mgQ~SuVK*gh&=R=loi_`kCX@31X}zdwLQ+ZgVQ+{S1zjwT|!Hg&jh12qzvX zbp?XnAtu`v^WUhwk@DHOYwQOfJ4m+Lnn*5+rs0Qx|0mQso%&W2# ztKXUkzR+crG=R%I6Quo>Wq?U?{q?|t2hTCk!wC%hNctd)L^_k>^b2WZ;TQ+*Us17} z@5%*@bVr_N)l@iJvhw z!Ui3r034aoO2)Kz#vfv~VaUF)+8s^Q0i-I=5=tjFK(?;Ror~BUUX>baw2Ld+7yR$#SDyad*YdcgTCUnoVmR;zRgiLEI@4Sv%)(2>U=x5A-MFXcd$D`_C^b%s+;?Gm-LdnwZm2S6y@`G zFz(m2=>$W#t1{!CM`DSrn-y9XtX&5-c7gRjmf^~qDAwatP^gjM0m!W9?B~u+Xj0^S zx#g|}Hqg;TkTcS|=485}ddNm?&pMgxM-L)~{%nrzv9h7Wy~i+I;#Uq>!(+1BbiH5^ z=+9|brP(y5Dw#Tr#jPhOJ6kW9II9Y~wwo(#JvHl5qNlMq7po2J@w_j|0 zJFhRZ9)F)pcBF{Sy{yGdKN$XFrppu-daE9G*tJMB$c1Bq5 z>{?x>F!l}?Xr@5tT8%2x7Qn}ppmq}di^n8hs8Gb7A5QE%T7o7Tn zmNLR{sNvtvh_$e{yxcrQV-Kr;y(Rt)V(d)`{a$eo8o0jF*|!wAz3t6;)FK=92XUUz zN!n?6=U=M9+u1JR~M*7d8LH z%@UEyklz-*`Gn;#VC-(~c~oK;t29-$-nkeg+hZ{j8WAC1NZS_@6w!9)SAkXAx=U?J zDfo4|xCG!721FdLfEC6yZ=egO8*kQC$0Hz!t2O502WzVn>;B-@FCQDp_^)mytJ@*( zI`&``JLW$>_f!KT8U1fZy_>h6H1Js|HVa%3!&rm?zrWO5eFNuY$HcL~ckr`7OT1ha zj|RT4%ofAxb*qy6$1rB1>-VpNfWSZ>e}`*-k7vW18;PNAYQmnj1|}4Tyz&xq931Tf zfkGl2rrsXUT<}aQ+O&5c)6cUj;yr}T(sskt3SL3G6$zbev5rw(Ay{)D;vvQ@1(C}I z%5Q;8NP7#@OT-S{)j=U(e=07P9hN?f3)AAG#_v{AE6b^8o>`q%#o1t;JdGG7XOOR1Og`z=oYK}< z&{5#-*UkCqjgMOc3HNm^+@Tb=ezTK575wpJRew~X0&`{?9vt5nS^dvANIAHZ^;+(cU05u!aSTJ=wa%6KE%^6a4*} zM&M)l!5C{+oFZXBtbAx9zYG#`K_l>+AU6Pc_ig+@$>s2)_iQ)@bll`CbMP>@_u?)| zorfd@N3P5L7Ly&|7v<-(UZ3?B2l4hfb1pXD&P1#i`}r;9$FbF876fyG&id?po4XhW zh?PBt)opeRR4g4;#%QqSwdIo5-p^?DHeADTLY{=KGv)rwnn`Gr z`1tCSNqyG#YFv6B-cvc!bHL+VV^Hbijy_;czj7R zT7DLSu5y1?UXM;HW2|a0sr(Oh!Is}rbEDqmH!fVhrX@RfR|05zIY-(a9l!>CX@cJ* z7__7HH{J@?8gXi$7!yF+9CJo>*a_zXdFGIzaPF`kPX#2 zob4O3$%UTEy~jY5s;eTb3NGBS{<(R)r0|^l`>sBUDeQ%|9dhgV?eR75u5txJ_4KFF zUlOA&W28oOd4#p>HfWg>3FFN9@p$UG^ss_Gu z8$f_O8`UmkEK66WbqwMe$_?NCrKjRE?0?2**oCWdV&#r9RCE@-Y~@|DF9|*nQ`nB1 z7c{B$wDlZ2s3Z%bJ`}Wgnx%g%s+j2POz(@LgbD-%=dtoS!_mjA`slmZRpKTstOz)~A^0JRTR2~fQ_po{_lQTZqw>lSpg3Ag3 zVH>hs8lpfFDzZuh1@DGwG)6+pZjQoi|286ehZk>+ELz`cwKbH+L9$#Xqn7dZHBsnf zgoC)HL?nj|T_D~3=Xq!vOo>p@KNd#eQJU=q+rzrmk>buJ`FZ&Rnwa#*(rtdlXIObH zpNIgjJb6o?&UKiEZP-JMamwlq2$g50Wc-my&~NXtxh`&e_#$s{LYBAmWrA4dQ#Sl` z7;~?VQKPxAN8{J|i>9>kZ%6H|44_rIe&UvwKy0=C`#0t-Zns3?g@P4Im6{Smm-oat5G}0JKM5w$Qgl*q<1i9JlnREo#rbQ)kW$(iHYoKbhgOMq{ zBsJ-nxtNT%SSxYhJ!aqwavD+tnKG1K=8vidgDoouToDJ{R`WvX*Q7FvAzW}|_Ku#= z@I`%%^rz4mA?VNCr@J4-xVUhOwWW%fh|(S@AuG|_ndcwO1w%@MHHag6RkM_v^Z1gE z1zYZCdiuD(jpSF}HCTV7U0}*kq@QF~RGi@nJ&RQIPkX1V8O)8Rv1HpzoqAp{VJI@@ zvfjkNOCC^*q&miL012LY&O<8s^CYdQ*QmbCKQ(V{(JOe%1uVQ8pgjX0nF=kDYT^Dv zCwhQ6zG}za50Z?AT`17|yYpn3m2~MsoT*mdcQ@auOcFX=g&wsD5(CI_Cl*8~C=F{R z#SOU{cb^=nqVPUPq*7=!YUnXkWcu0n^c{JhhzkKGEgN_2+Fq~T*JyTM^uO{|-+*NS zL%asE5yJ`B`62xOisZE3N2J|O=*mxiVD|J;`KXn@T~i)iQa_k58ScmOX=JJFwg*0ZH^MRAiv7@|uQx=gacX ziC^`(a%Ai`GKTM3DIJo@MPgq%sAK;Z6491D~;$D-D zFM@P7$ojle(LR8vbc+V9h%!dWkV;7LF9%~*+_l12IHg2QS#e`b+-h9L5Z5&j&PX@n zsaoe{#>_1|9?~^!1=-4*iZpNpQUseqmB?>=3|6uj$2z^rA)pe2@g?~%PTMrPJ>oz_3A!``==pSnRTMy_;lKl-fpz@>H>Y z_eCnm@d=TmAl~SQpaAo$xCZ-kwA_*auIyv*>za$bpI0V^{x-?+qL|Eq*W|n<8ItpD zbKsyy#2>yRr_*>%0N{v;<8XjQd_qelFKV&Jl~6|Z4}t!75(V;VlrqIvx;>;-M+WIk z1dEi=+0JvDt5@aa3lqdZw=nD8$kS)Uw!l*bh!+L3(7OG5SyG|$QC(b=kD%fesem_B zG6-9cUHHI3f^O^1~07<%S1ohe6~9c%kfLUo1mW6NAzy|>Z6T}t>|!({e1U;Q3J0{ zg4e%BEO^(v<`{U{C(_SDnjT{zy~hmYxjV};Oe}d=HT5(c1e$qKBH98xmGFr%yYnrh ztIZ$OX89o6>}yKGPk-L$oddJIYz?~EHYa5>eS4}9 zKtPS*$kWxm4+|$VgtkAXQYEK<0ykuZ;ri;FVkLe^ior*K_eL;R!YvjJir!4{y#Q&M z+azxhl$6LB5g46#j`=hVN}p={u_WkdkU)sko&fbx2NmU>wAYh?W|ZoD=L4qjTMc$w z{9D?-(G(^4^`8gYdj^NWMF+EQSomkvb|>wYTX@2^f+8CY{?1DViA2;SbMVsBU#}!r z%85v&VJi}atFFSlB;xqW%G$@3-u=43Ia~+p zs-s*wdH(4g1@-_L6eFE}$om(E>n$aG7eCDQwof&bcbiO>4SocI0^MvEic&Lz_rb zHtgkXlu2CD>MhBz#;-HD*%j@ATPLgDX)Qm$XToK>U?77JGC3KueHFLvAAl&;TUz&B zC$>kAVWMJT$2-NEiMK1d+8rirY-15M&-49PH0W~sk3>fDyf30!zeoa9&y}S)kg;y) z&DMN3qHyc80)andQ|z}v-nv5y`KkESAN|O=FMS1m0<@K6=Ar!?L+2nU>ap~cFr_6v z#cqs}+od;-=Y%Mgo$ZdDHO&3zEa&ud(=>aW^s z=n^HLZ9M?hbWtTg9SHB1-&&X$Auy`cr`f}t)5+h<8?$@>ivCueE@Ja8`%CN#wap|4 zYvhbeQaYK!-S*<7@Jk~(oUHuV8mWETW+TU?*xdffC>16(SK3d_c=gp22R+@#tl)Ms zIm7{py-2&TZ-R?tsejDLI00s^aNV6N80pci_Oo+6|IHuyr~C4+d)344HZu=h?O}7T z@=x@9kumVRkh8;AY7#wJ4o-6vHSk}-2bhE}$Oi7A8BN0|4oPr`XHG}QnDnFmr)i}h z(Nd|@)@fT3Bb?oAW}b4+?~X|MoNvgh>kAopmUflIA?cLy6U<3`bc}r}esD>Fz*eq-aWwcP<^N>V2Qb2Hn*)72a3n{nVa`h)l4Ht7JePyYp-LN$ z7yyrII`TJ5(WETNwCgMvAQXE1ZsD^UqqsGZvfbQ1)73)&ueHybj7?OKge^vz(^31j z^?HBvLdFeOSREQ1k~an#kR2bo39RA}@p1p?9!o3OS{M`zxNV}o`4Tg zc0fj*_N}oAr&Kf#X^BdB&J&y2Q2FX`sTTo_?wMEamiF@<4|=uX)~_A(R>U(|Na?-FsL3pLk?B15A9iJ_evNF%f+cwB%()J(Lqn|CIEYq!}Jz`wzWVu=lF%8`Mv!Go_qOW z5y^1-&NoxmDk}crr{M?3$iLIUA*_W=kdt*UuK_RBfOUQPu#fhHWuv_mli#8C&x05h z2oD#LNMqg$!cMSt9;%=-UE@PG#Dzpzm=QagAvvJFr?A5)w&iBlJ9TUYiXG9WTJ?b+ zskS4lDC7)csP3EPaoJ10a|QH!0ey=z+QJ^_ox;f+(veAO9N2_-iuo2A_B4fjvKkeq z;^d2T!yz=Oj7@^1dDr~ofq8p}7OWLN!0XD&5Dtan1vmz3vtmX{fyQPZFKb+P=F#B~ z;*p3E7V@++?U}=>3{t#~;e!3(-}mG}Ph-`Sq7{T{yGU*aWYORXph6>!c`pxzNB&X_4>a(BE0`Lq{e)wsF zNw@GtmAN^~*al}KgUx!L`oy^u(+xyPnj7+?@Bo*A1c9V#6;=)flGZSLFv`~D9 z#62tZ)7_+vW9ng}Aq;5TGZgZ?X19CL7P3zPzqgI^3&5wv=c0FWA7EOzxAXs8WF^Nh zzlGrvTW`49N+$=r%ZAreO8a9sC-P;cyKR0^e%-VssTEV^Hx7?mKkb#C+q{I@)6RkY zo4BVSnVX}em)TCAWMyP69&ov3V?!TGU~jy8N`<2hrtOtnVB!jdOz1*+ww$ni_A|NH zm%c33(QyFz7c`N->vfV51s8~RJIJy8&v_)*+ShYN%md&l$QZov{@9^(=IpC}@Vi{1 zuuSzGYBWK0vp0<>fXl$bV?bM5^GU1#DWz{8-otuq-Zg$Lve-cA2ibF%q@ci|f#0_2 z@%w&a=!Ycs&D71~ylg(A^)*Vj&~nwOfp{U-z8$@hZkyDsYn3b78iDHU36U1`TmPobN|>^`Q(Kl4h# zPUEysaSkfP5kWc||Cv?T3_oRS9_#+GqIO2-S#U(ev;;~{iCI9L;7@T4J~@|7W3qT} zciGHm*_wq{6W_c$o1}D#<|#Eh#9K3VivqvJgc62Y%$Iky>pYvGUJu1e%_lyi3v|8} zY}byUmknnnax$Z673WGgTCOP4QyrZy9ILU*%0cpVhqvv4kSL@k{_OIxu@EXiuNQxh zdt9sjZilNwefW-7CtCGdqJFqXb#S$ovrx9W=1!QU_*Az0c5jona<}Fg z1N?txn=eBqLi^hrZ0L3S5A3L`(>*>~t?n|Wm=bKL)ROrgtj|#f;}fERcZD79_T3s4 z5+tZvf;-~&AM6@N9|&8PIN_KMC`#FaQ!VYMOtWQlT~cPrFzr_W_ehGP6TPWsYh$CL2ss+xzZ9W*WZe|L z>FvAWENwSI8)$&&vTpE9`;i%g;kVQX>|>DoQQf;jPAN=w-1MR^*Hoi)6jpHHY+np! zzk+fb$3dq}cVHSgM8;DXgMyq7lE|o)fnaXI=B~v>bA+8|Cvkcli&+)>O#{ivUw9W1 z=Z1X_1#Vh$27tSaT)M2^THqyx#dM}YB(FB#0$Z8ncie?3h)FGPu`r+stQf)Z4`x$r zin0Lu@kYDz_Ef`mHSVhKPtKe{22o(Fk*pjB9NagH(ve+`lPZ7S)%{}3YeU&0t)~ELBpn*`iGq4xaCJ-0N^dHewV;m zNv7L2EH678F?|ucWqt-9|pNF?*5sFdlJ*p8G7gXL^LQ5ej1kEO=fMeI*jq>{@m=?%n$DM6qJoPUwztB7vBBi3hR4BO*R6laQSR_m3E z!Po2t{S-ax^k=rWHLR8+?0BN4TsR#he-#t4)X?q5qb4vrr}3NTtH9)888`+)E-&vy z>%U~#!sNcM3aD!-ZcK#klP2EBvODc(ti|cSMqKq&x3}V~K_6u`8yo+_1qWe1FW2-E zo|!t8U(+aL5iDp!O*kQuIw;S+SD2IjQOx1J!eZi9Q);kh53@}`4Vs69s}MHIl(O4O zDMWY3a*^VJv$*;<5CLtWF~QCIOBrsVzYMP2IU|C20|mXTp$d^ub$w+Qi3y$X86G&2 zjq0oSxZBxO(()TVdEhRR;fQSPz%BkQm3{U|k)njf=1#{C1&+Ay31=d{mf!&Y)%A4C4DoD9xqAzySX&0hdYe_ z9GuD)qfMgPm^m98fY5}?oW$ezJVsb>l(xCqa1}TCz8`CFjp3bF$?PfQ47GDmoz{KM zqsc#d!V#afR(hb&F5(X{0){Q&czwDGY-v=7CHhmQZl0g2RrHExmJZv{HPd)_8r{58 znVIX>9;e@rq(z-%+hN4XcNsnroR~}*45NYHjEZOAj=Xr=$wpEdnEzox6}p%kTzGX-u_;|Q-m zmrtJl`EH`~1`?_zXKh#F>&o_Ak<}yW^f&)Lq;ZB-hv}56i^a(m5nIeggSn|_zNd|f zP0HD@P_Kd`T6n#79aVg}q-*4~BD`Yk6e1zlqFMVbCM5zftx#p<)1!2zoj@`GBU+>DR=9&?NfLX9JW;81Vy@CU|d{of`~a zH7l~&$xx%*_#jjAC}*O?Q_-t)_qP>5@oCNNlVvM*U5Qgw;-XqRTTIj-h7}}|L40a( z6qH{!?rD*6*c|n5T9iL=a@74GrTf>|zni4oXziXddb9Z1J5YVVq|Qg#?n_f`51b5+}6!3omj1ch)F$C zAAI^M%P>!`mt7;had{kSICXrJqRcEok+ZIGx1)+*GRyE#q5aPhmh_Cl*l;F&kXk6B2ro6PBLwCI=-*d1rEXTOH3ec(9pyb#PWce?fQ zYJ_;|DV%dkLvewYzg_2A zcHN~rcJ)u+W|F~ki8*$D#O;GIqK}LXjDqt@nGI|suZ_I9kLi2pc9QeB>C@Ddg2GEb zyKCA=9k;o%jn!@0Vfht?4;aT0gL%Pl&FuLaeGNQ$J?M9B8q&U!Y&TVd_+u3hcCc)G zcV*Pcy46;}?z2NYv~4$DA9{2Z;*YOa%n-lhyH}9`lO4 zB>wPp{^JZSamB_bo2V)-Dc~e>;^8#^KFAriQb1m_ULO8SWw!|{V3n8jhGXEbrHikT zScV7?&N%|$3LyjpYT1DIG90hBp9r*cCsiIK(LSLwhL)7Ma963NZySAXJ1FMn85w^y<@f2G#yVW^- zWR4mPrFty87FEXC-$CoXSUPCnpVwkUQ&Vd(E75S|OK9#MY^#A0SdlH^Ij0?I@t=QC z9BI zDXJ(0!K+DTiSIO#*NKB~b&#hMYt5qjV{foZSG0kb93J{?V1l^@z6vsxul&#rk)ucu zMP;n&+8W1LBzSTOyr{0Yb}^m|QKhVP8r z!c0qb0XRHnmxVO)&-cG8xKzX``BWxhH5u4DPoR6vTD zm321qnt4eBCc>8X;Kyi}pRhRq8p>?xJEyXebois?w`#fCkHVQQ$^EqD;AKj-BB8y# z*j|u8tASV0OGCW1DeRcqN%ZVR+umxGbGEBbvc*`K!s{o`j-Wr(g>h09C5?wn2?4lP z;?s5vatyS1%|4Ci$p79T-w{@B4V|%1Z1CiV3Qe7wM$&+zX!g46;*fIMUg%YaY z%fcvC!yIU$3d~7I7)Vv>K<8&PRjq*lrEuAFAx1dz+l*tr;#4m98^XI`e4V4o!d1s~ zBvFgzT{1ai7C7GCxc}Dbpxk|H9lKi5X;{-t9COH!wHL?}F>wmV`?XG-myc3b;#&3CBCk5b@CV21>uw6U{9>P8P~-Y?y~dtPLwetVjvB?%Qx44T^x*GkA`_Kbf5tJzKAQUi zY*f27L~@HRRE;p9PpHO2=}KJHFY8V!(v-*!gc4(&vuHoruv_Rf}3CE1--uhK-L z!3uwg>-e3up^Nc{i6JV`1YsZ7tBtEpyQU>RATgt1Ky?|I)FhZ|Y9TwRF7VF|^Qgiy zJjQWhq}ylx1ymkIl=$F1#7G`g18IbebU(cm4t@$6RV3In5CdlNhTg3yqX)@p#xUYc zrW*`20^0Dwk*i7?u;=9JcYTn(NRCm^hM(8bQE~KP%*f|LMQTJJKIGx{sCNYQng&O= z#~N8^G~Dx5)Mb>a%K_(zzuH||wr=b6Pt<^52`TITFX+}(=e2p;wM2}yOKR$g?nRJW z3RdZE#RoXH&?HJDS=b|(=e0=&5N$^Onkb;jCKm4LHlIIG}+bKjSwIf9wPv9bQm@SQOaScO>EjXuFr zcs(`#fK~>_feS>YGQPkbx+7Xt%9PqOxVcP|pw7(kONpC}JtCq*rL0n=J5zoM@N)#2 zgt!R>LJ5?jdX)C$c6-+0$%94q?aW37$B{;pS<@EmVcGU8O#K~o?BR=e|F=eEvQZW1 zQA~f2h|JOjN6h22zQIV|KMHTB(O1Pjc<57udtM_(V>id$fUi#8+{F#A4sEx^wvi2HL+AM!Z zcKa>?l#CTh7PfZRN#Kjb9#(2j@*lgWVThN}TX9$U&QoI;JlwkHeyQ>drw2f@o}3-- zGqD%$)+o`j`K;qYmqaUjAkaLo@%VP#O;ZFLifN}WF!V{p3G8F0cQn0CDo4w=ElS1s zd>~{z(dYvZ^1UvA;rz*l^DKFxD%ZH*sy>DO?jm?x*M3u)SKBAelWSM^oq`imf4ew63fh+D0^0|zry4J-xrjxmg4`J%a(DSkcP&sn_ zj<>>$Etsz+J4#r7n7jebqcxX=3RX2OC6;QGshA^`$ML6lx7+J>?=BzTNOod$;$|fr2}dQiNu4_e&Ul0{Fp-qt+*6M* z5wo-hchib$!hdNk9UT<&ie(}u60-eX`XUW3ZqV!0*F~*95^pIG^|NIeebB>)@cNtX zXYCj+&M7FAOLdPo^V~_uR6Q%TGxq7F(zwBb;{&SdZRlIrEBIk1_cR$ylaRftt@{M2 z)&GsB1``^w{rPrBRiG%Ve3_1+VJ$~K0N~it;g1`=D4on11kVeFzX}p>8})--hSLqM zJ5`3R$~W!?a0hvY4o?s3g{VVPy3B#z;U@;)czlwjT(vQj=6lUhnWZ8d{~JpzhPZ4o zK%yCL3G`lcae)m5U9xzMM6S=XwlM1KWFYc%e!YE&yR$B&K=FbV4@Z&)wrZV!6R=zrw|)E9-jJWk#*;ToQpwFMBrV2^2SLP^%(lYME@bI6W4lFR!&CWh0FEwoFP#yksFrrw}%g3 zxLcs5Lj|y<)^+;_rqA?~FN}G&lARO?5sIAU3$6RJ>(WY1yt;=N8>#T_BmSD%xx}f= z*GbEF2~=J9MJw6k5oUpxB!PTvG<0pNI*~adK$VWpX8%jH(_f3DT1s+Y z;Py6p7RZ;wD7jeIKl^M>3syAoF$eBkSw)At*xi+%J{i{_KJ2Mq;izhsQ8X}~0P zEHQu)H{`^wl}H@YR+<^4rNv5bpBHjuCW!T+Rqq`H%^6%*70ahadNIwzyb@2ez#zR8 zL}Du>zG%ys#y z376si71C^ghh)C+u(hUmj_-FCY(MR|4z`54TkLpCML1m) z|Nha`iI>IG13dY)WYwIz-9>gJD$bDynXZnh=AY(WtBCOAZwr-Afa0sB3?OMxH4;Cu zO%0TgOvb&1>VPpXJ0^UZ8Xc}yM3+Lfck;eWNa7H#WpcYmH3G_eV?|z6QE%`7vwIyw zqXilSAOOey+t%(iK>Zrn(cN_*Wbfe;*$NIVI}S36gZPzj?( zEG|P*drOlRY|AQoUO*naDuF^)6{<(%68Q|f0BzY+uQ$fiCYZL@gg3sHFI?#S+bye^ zcSsSN-Dnk(3)Kbm=v(LPD^1(32Eyr68#+lH@R7}GQR|5nJ$|0-(Y}u{E|u!Zvgz+Y zdy-ljBGeFV$o2iV#{nH{J3@nmL8=QRykou2u5~*kqEuyMAO*2pHRu2nMu6g^rVOdU zs8%Cz*-;+*9bwC8UzW;_pE6ZVq^_WY;u`5}}|5fsjlg(_sf=9i&X7bvNS;5ggZqi-ya13+p&VlDh!xNi; zDSlA5i*BE;T+P3m2&WwD8W)E{BV6rxe=lgmbHD)Kfp<;IFvh+TF#-%Q-&Z6sQ1$MI z$VAVK>ww86b6|WsP6xIX*qau`Z<+(R2&d5FZ?BOv#^u?^3tw1ZaFfsT#W*It7fpLc z5pR5ueMXB~n|5K%0rvgszAjr$qpfWsIt9Htp2s2uZG7duc6Kw}%zoDm26a|;7iuE% zhQuvgjLtraz@az>@-i`C%XiX&NSSVQV(gAwKGe%WP%(_^{`xsI1|-C8uKmu>o7m8p z3Uw{1vuRn`=2kz%ERmhoNnb@P7sH-0!OI~RG;#;Z3B0*9*Gekiw2_^nKKPm_MX`9+=!6M6BxI30Jgpm9hE%~MuG+A8_1keBuvj^R_= z+S>>W2aX>^wdVC2bWFgJ*w9K|dv~_T)*f$ZG2*JMQ`v0B2-+4oaIevPw~+!~SJ3fX zq8}jVsUzzlmX|)uZ7pROK8blCaL3sCyL!6hO=4CJ2dT~FP}zTMaisTo@dRo76XO4& z>b&Er4&VQ;MNtVMJ3Bj^>``&-y|*%ty$PX0b&O;0l_Mm3bF2`u9eW*;aI7PH>v!w( z`8*!q-@hIn=f2x+ctwx=WyDf+(P z-%h6yL;1T*OcW>n^*`D+Gsevf?Oe+vJ%8Yl+T_RJ*m-*3u<~qiq}nWS{>Z!=v)(Xp z>>%05u(5jDCD$`zsv;38T^N=#(2`lz-_YoE8i=@%m!C15_s2<8&(lYF3pmM8Goxqd z)OU6Ba?;?G(iuq%ym>db$CF?#g-0KqYbD51TK6JnKFV|oJDDqqo9w zV;DIGj@zz1?uOlnxt2M$>$0YE&G;5e(-|L1=+|58T3VEh)IFUtj#|e%99Ek0B}tlA z*sJ}&>?ht|#cY~h@HT1g56EI3z=hOI+alHVKIRzT@zX1Ubx!bFc0ntX&tph1&;w|` z9oq?V{b57E$ePY)bOBrFr+cL58z)5cE@9V)B+05^_>5P!llGpH(q~+gO zGZ!`~t#1X**w%r0N11*`urgQT9-ZEhAGep-=BhO0VT!%DAb8(> zCXcUY{WSlu_b66RkU=*rM^q0IDkU!*3J$*K@zE*#w%?7;H^@d+^pzGLb-j@_LW@N; zrREq<4+y~FQm(i4_R6=7LaCfmauMSsvDhri+KYF}+5|)+f4z$Il{t4E}q8TQqlKHIujzAwttQnGo*V}Qg(A8_j+e4lfGeApacHuOl=3JfK zR41Ad4|$AP3F#ti|A;GMv7*fR)p1nx@H1qeUS-&*=57sSD#&3eR@KWJMG9p{OI0P@t5LRCnX&Nb1J1A|%J?Zqi z&O2+c33DpG-I#I*)uZ%I_QS7^qB-T2;N<(?4HtiC^)R{&aFY?F=>0ChlUERJd_T~> zbjqhW_VlO8*22LHsr>ts&17_?Jyl*;wY}HuP_iCMRiG=Na)KIe)2-*ZxA5tveC-Xm zl-vdH#2Ch(=NFE?8c7$4`~2~x-{PVjua}SE{8@D%D{j!$#8WS}BK#cHv^l#opFi4Z~xZ9fyTBF^N2h zMrq9N4C0)>%aWzZK1H-Vs!1?j?j>bN&MC6`xGs_zHKJVQs6a1&csBqo|HBJT?ezHD z4g@4*LM;fVT41!}B_R7y{!P`1Tc7D#t07 zQ?#cU2y7yRc=O5o;bN#e?HvZ6_>9)?e$1~RqEjeQCR*oJ$|j1zwpS|f`99cR%-x@X zQQrZn=v2EWC2~*R?nbAAr6oq5GenG<)*$5>*CKVArc`|&9ss{nzo!^3;k`Dm ziQToRI;fGpZyeS>Mbn%lIq%5m@ObWsU`iEE?a1B``H0udNBl3QZ5{(-r2XZ{^R<%H zy1;L3zxcD5|osU4xJhz zc-9yY7z89L5=*4#iQT_jZ1N^7yNU-F=I=N@aTOSq1hMWu+iah}AkIp~qZ^}xzamQ& zjmI)GKUx!Ms#WKo`$B5=Vroa(TYkKn+Gqc(abxJTFZS#>tCiF~=c>Dsr0DIl{^VZ` zNe6of*zF?h;;$3^ZOc+Wbyd28Yj~duro!e3&0XJR7T@+!^_mSF=G4QhAV~dgfV`7- zKN`lsfgZM0Ki*xB$NJfZiRw+)cijrDlQ`xk#!IIKPOh^dDTehr{e43oK8g0ipss?alOBZS1X8zt ze`TY_Im#pXF5XH%s2R*E-xcgyO&JKY`5NZ**UF}l?ulu+ET1fcP(t^8(twaEXR|PY z&so_+c(jaw5iz?SOS_PK6KwKI?@f@^+Q+l z{T{(d_7#!mU=flZLJ4#o#f?-pcr8u0l2+Kzjaw%(_GyL@TT;O}G+1+C`5PCD|gL@#`f53BdBiR zky-aERqD=MwX}L&(X$*Be5El|FooVz;#WS@=Fi-A&2gkhPm$bNos7bsqHDmt)z_Q> za94gjMDz)(krKhKpHIrxr@JjHs4l^`zAc$Y@ar!fVrCpzBL?4QZG?NVBe4o>H^^H0 z?tZh7qT)VGTcjOcpGB1CpRaAeJs{*x+L)P(yTP_2;%YvNIOp}L5gh6JloGY~>rsbh zyfJdNV0$U>kYaL+VA^|R_CHeCtV$sXE0*`C*PofM^iDbYe)G-fpFI@ZvhAFw;`uw> zzx=YnU~4Cj#jn_jHgw~yUfwsLuo9cC&hpQzsUn}cSI~hc@_cOo4bsQXqCQU~+k>T1 z*?oc05472X!)UTUTTR&PF4gjEYUhnUEl~Jm!{19RUcFK|mA-wgE}V>2Y}jO~p!v>| zkWj>cCX10H0bGiQH<0Q}mG!=v*-Q&x@C>Cpjxs&0sv79dKye@9%EzQ+x%lz%GK^sn4j; zJD!|J&=OqdPBZhrz9pGA|GJ?+OUaYCd2>n)lodSsn7#C9e{m*YW@&r7e2bgVOGKJe z(5(?ENc|>f@rVU=oRaa&8}(yI~{uIU*KCm$_y&pldDY@1RW zDu4x|h{3pv!mUl5-}`u=&@B-dysPBZzAVONLRw+GdG4D$~42K7^wO z834wmm?((zZbStBPb>@}%h%FuGcf3wr{8xzq(~^VchSudbY*MY8WY)q(NOFl*W=f( z*|3(|SAwy)e5gF!AL_Ld`n(&#)07v)p_+C3LyoKXgrKl->h5}ae#&kjhf?2>=!3iI zrlMT7WSV}_Uw2{wpeZ^lQJ9?I7g%Isz(zQ3+k*J?@XV&1`J@et=}O04N3076CGfZp zDvSvQGp!;-uQi{a(4{Jt?FZJ_|9pV%Yw`)JarYk!-->r75-rDEyl1XYiYNxLq#ICI z3=UM{yaY-*oe&DfOdyDwiG5)aGOH|olKRQ|B0m!XRX=%oOo zYUH7^aF9nQxO&f7P1|j>#`{>Adm4f~?_Js%c|NrE=7{1u*>I!)g65Ke)}>5VjJ04j zVtoPi*srjy_lmGuHAFK~dX($!CDtGr0U6BoDoE34??UsVVTsPBlVRS%iZw{8dci~u zdp1xd42hD}rs_hH_Upifq!al65wyM?YX!>+j)h&2?&KaoX*OBg-}bk62y951$c2R8 z_=4m+A<_dVtaQA7PtSZ3io`~P#{Bk%TT>g7#u9C5;|Qpx=H7n*h%r1o zTAqD{s{3N+XQX~sUB$GKpR*zazE;M|&b)-@m48^XX|JEnVM23Dtbfp~^P6~09eJzV z^dejDa%)_&%hYs{DNN|?IWv7wm8HjAF|1hi&KCONG*gu|mHL`$Kjj@bpv7tDI>YHN zx(9TA6hTCDX-i32r=#K#2T+1yY#p}xV~+Uu3MsDCr8A@Z{~LTmWWzD*^jmizJ~YD? z-lOtN=t38l^;tvH6d}QvoI!SF45%~+009PE89t37ghym{V~1-LF9!HaBBUNHBeW9(Ef5B?DM&&EQbiTJ9uxzcXF7nH1kZ%a<{9#=|98?-M=0r5 zcdYl)$^04HPCkBxd6#2v=7v@le!l(*-3%+eO2B1AqQH(6|ME^bh9>=n&GhddIX?`M z1#Fs;#&)%F?nNqJu3XM5bIvops(f1&lGX?C@zoTmD=-73B$pUBT9eBtW!KPG*i_{9 z>_o>LTYE=(G9*uJk(FmTTDG$8VY!BvsnkA*IL^Rr0f!GPLmKdvWyo3@3om+jUPU;R zC6!9Sb7MC7HTCVNAJe&9({qHwXr9F4D%CJ0h;jw8fg?Z1iqNGvS+y-M6e3E z0z&`os<*^ZwzFY4He+<-=K^w&N(bH)-nZ@H&&@EdibO&O-pMc@VGcg3&#w+iw|DzI8hY&uUg9U>^1HFEm(C-gkeRWOW$^8-iL zJ`XAdYebpe+Set|GP9zA%xSf)Bi;5I6*}^nKKL0&NH^Mv6D=mGyox7xC7( zwt};1UvP!&nd4i0B)3ici5(Ec+LvPPE&!mWE8!>;x-V0Fa(8RVLY&?uW6yZ8`{hDy zgGm@%r+jmA##MZ7W*+yxMwRVn#b$1;M~b(Dm3WufS*5<&SH2jW!!xD5Sq&tR&T6%F zOui65&`7_b$u<3YXe^{QSmm2gsz3WHXZ4?0Fy}eB^l*C7um&$PA+^DhT}!^2Ib^Xw zkD~q3sP~8`UEsuPaj|O?FSjQ#$3kU4#DD(Mm`iY2o*Ll~F4>c83p$%D{C@qDih}2a zchov0-tXe^9m+VMjg?;cP?g`Yn!tYL-=QV9PuhPqr5^f4?;B;`5=($=0zH*TO!+lfj+~%$g37DdCStEhza@;5wz;H<{+xuplNIDZmk2qB5EgKDo(-EI zp9r8Ljce|;=S#p3im_#Wo3~j|G(Bj#b!^S6SH?$=fb#Dwqx=;dA%ypz=2a26H?scN z5rZ`9RKEg3;udO8xEs1iTs@U(#KV(aC8zZi$-|ic?29XZQ}{!BsGtWI_2OmYKR{U= z2au?LRvLCJVzLIvRo8N7pR5;h#FlLxSD*K>is86FM`82Wn&0ODMy^`I32UnI zhXQiRp_95u)@cj@9q+g*BJf$iSkY1`*z?J24ag07hb90z*Ya#`iE4{Wp zFO!gBFcHkM#J<>Z|mxoH^Nim4(7*2Rlui(NFF)%b`KMZc;_)Cv} zz$Cv2t6*N*$D8*hXGiE4)&?l_K*9Y#cfblFkIc2uTttS`dx9cDLlNZ6=}(6$JtVW9 zr^bz>nAeuiD(<2P0R{8YwAYNXn)$`>lcSp~oQ)9eEmsD=mFu>3$W9e2So~V1+ZBpO zey0ozS}Y!|%V_w%PYXyG@-GP%C#ANsRU^aiZhcFDo%%cXGMuJy+*zQ~{r&XMld*do z=)g?MzZ-Qy2Rjl!?i`y%qX0Vqsfc6pFaf}W-i7C z8KI_Rob2B7e#cjC-q#Y#NjalsMw|NAn&0kN{FZFX<6%aDex~n6+H|m+xHF$Id~c>W z{f9_rI_ij=O)%Z5Y4=wa-PZg!@u-7gGY&5|O3_XV}O-rb@d$z)! zUa2jrsk>Y7xv!LgV>d9mlbhGpWdhI(qMuX1nOXF*!?ILbmJoh$n4(VQLS#(bF=1L678xcg+p098&xR-KZn)>s6IpA{90D|Cv#~%NsZa9MOXS zfT8{FOcEkPM~>E7P4m5n*^2z)gDcpYqYAozb~8~p69c8#{fY@ zscb=+fc^F|f+ZCyU8W(k_rnH7x_Lkn@g3(49PrEiPeQu6rl=?Hqv1zNi-|a*&5+A+ z5bSiE=@)A|lkT~?wdHtU!AYwsN8Ae9h4>p*jl|@&T^^%d%9boAFQ6{Wsa0WXoa^sT zJ_e_4Ko_2sSwV=|=aqqPM$b)36{?jcTM;h0V4-3Ot%S{t>aLz5kMRnNhbaRH_4drY z^zqW4c$o)zF))lO$FYdnL#U0=VJBZe-OwXwG1f4mA2nuB#lH(pGe&1mFB4M6dA+&x z7vz;Oq)r~qlrzOy0xD~RncHJpFTOLmPkHtl`lGr=tG(;4v!XEuaJCz1$}g<=0?qe? zKBhB&AFo)x(RtFN0H1?fa)Xk9SWt3xIV<3}+OyaYOh2-FwybQY9`)g(ryL@ce-XQF zFtAYfiv}?v(fvcEXZt;a1@~!w%j{s_)uA_j{MzulU-y3Gd3Xj5CNgcpcYB`S*|wL` zne#7IlWC0LIQjfr3+Z%tQ>}cEael#~b5PzYk@#|6A?b~zPS%aP9#&DjPki57sE1c; zmFEdmR~yLnPt-B(^<~MmPd#%TN@(9u_rnL8;trvJY|OllQhkan7eOrV*2{s?e|+VA z%}Vm(?`~TmJsRbhtPok{sqrqipiU*vzSrnZJ&5h8ZG-Jg$%BnogA9XA0;v#d%KfwK z1eo=fJ7n);%E1qrOI)+v=q8pzuWDFPSrPKYoY@*ya!WDwo*yvJMA2C3pic9c_ON55 zWvW>jd2zJ#f36|>BeYybN|0RBcyd)`&-hpJhi}lN8AjQ3(mn=v>SepCn`Ge>4hxqj z%wjIT-d>i3UX=-84=RGpgp_<26iDy7DzPu)ihyp-SjypZ5;pQn(71^6<>-uFYW0BJ zq`jlU7#$G}>um2JjKyxoM?ZfF?fPM5s0YyoU_egD<+8WWafaUw3Ad{X2PjbssQA@n zCgjY7vU&$T?sIIf>suWJt~h6iDcv|`(Y^@Q;}jjV6LFP=S}_Koo7wx_fIlh}i5&n& z`F(hK6^Jh>-4U~S@;)41?do~yVrWIlihF3+{oO!kZ5~9WT`0Ym8lx8O;@$S}+lf7gW4VH|N`pSawglb!2d49vVZ?zbr9rp4%KMWg7OD9z{VDpTYZ z*^Jl01kea4%uWLmae+Z)iQ!41h8n+NXMnudgdA&XsBT}SYYqvf;~VQV({h7*^7mSa zGNzY=j?Y~4xLhdnA5-OC2{0JKdlOcUB$iUK}vh)$u!m;rSKl25Gt-J{n-2_x!C%2lmuD8o}^lTzke z*?DURN&r{S-&oL3P=>4vA%UKpV|s>U2`l6rhM$580X!**dmMm+OVrDGjPEn2R~7DL z^dVkn9gB-a;6}E>I{{DrY2@p8{|`W7>tmYfqincol!+@f$jdvo;&k3#W#C&MXSnb? z+O{Z6Zjnw3mfhVa3R0}yc&48z$3@z-Hw|9O^{4cJIm5$Zeg1BF%A6V6ga?QM)tsyipm#od+sTG|WZ)UAZm0_y)Z z9@CbBT)$y_yaZO?C(GOM<(9&Uy^?qL_HAMP3nwsxfP`uej%;v>lnfJ&#BwNvJg2ZjGc{ zum2Ri)jU!>i7(}nFdvtQU2kg<#lutR@JczXL(yThbiZ^zvPP(!_eJJ)7v_?0_D_g- zXI_~!NomV@Jee*ZUak=*LX@5Del&KXZg^V|MaVfibNht~1n-lL5*-al{T?ib+YBfh z$sY>oAyZCiwy+265f_|u5mFD(&c=>2s^ntBLW)Xz4{PA{tf{$9Z{d2=e+`gI12Zov!?pyy%%PNQ|9st_P3LnwI$ z`ll>Iiea+hSMcofMqibq*mL3)M90?+f$~m_>tt|pw{)g5g$LP}>}-psw2n+VoVmz6 z9Z?YM`dGsa9BL8_xk(@Z*FU^$(+Rpl@419r4L=ZkD`wi&fN>N}<00-#m!8{-_?zKd zn0S$&`?q!ehdJ(V#*73>_~uD{@#p-zDYix5UHQiw!}+9H&s?tIz0ryHjdF;P1@tk0 zX-4?n$VaL6#KI&pv30VQIOpEp(v;dhp|?~{zqewhJpM`=e|)J)HaKjU7YnqjDNt*>$mz_g0Y%!qQ>Z zH99hgK{XAT6Nbe9?WMnDt+6awB1-CH57iF-7{_9yO`flRGMI&a=i^`aH~GH&a!c8Z zq1r>UsYxQDS`fH*clLj2$?f_r^kv-VT-7Itus3lUqyeBifu~o5ZH37R`5)!0YI&B7L&f0Je^l)Lc-xe3s3yG z{3K4j&t?gl@53*=lloec;>ji5_NTnNq$-_7ZUBTb&=YI8=^qt@*qzq?fnN ze?xt17wVr3YJ#{>67q+yd^L>O|MX@m!ZSsg&d$%B;z*lb;taTi3k~AW0?-4B?{dVu zmcTn4H?+Vky+k-Cg?jIFG~N7UMkJ2b=BMzfQ+V#=g;5iC>v)A@y>B_L^_zKyHzf%c z(GTvX18FR&hRq#?qmi1Vo2NJo54aOzUYxh@I((IPn`1V)jfeLY2?iQuK`~Bur5pNf z*tH${gm?$253_3D9#%{h$>)S7W%hEdbEhGW+Q{ANGFrU(kwu%Pvi!tt5>s{3as6Q{ zS7~_k;^38k{tO;${BF<6sO+1J>JK_&vSwo?)r*Ev0!N=S9{{JUkMxCC0eXGlpwz@&3j(jh|zk z6yrQ(i^lvzSK2!1xmN3GDTRnOpmwqM+Cy$Nv4Fg#y%zl!{QR8fO~q?FVEg|PY3+WL zno6AiIo>e**D1K-1(rWsu4ZXP57ZfbpfvlBJxX?Dr%A zVFiTqGGCFj$-n591~1q&Ye}%giZXkszjb?XNt^#?79(eEP~hOV_5MUQdA(bn*(BPg8Kex`fT?D3cT{PJ-nraIHgKC0!(z7SHchzA?>~j`g9pQuj@;;w-n69{Y{HkoBH4z7 z2#KJ_xmT40edCgu(8;UdWs#mwV5?LD^gC%rM_A%?wO~Bfjh~dq|C7FK+;dX88If)_ zCN!ob{kPwjNbkax|F6YWAh*1q$08O*UYsRrq*X`WMCs;oL$S&L|1x~jllyNInnsWp z4+`pen(vVqqAzXGqaN7+`Si-Qb$KF#jN-jgqS2790Ph%aH^lV>cfRkheQv|CqAm)=bpwyCKy?DQbO z6Ct=XAXz!$Vfkv^Y{jh*YVISqxVphtl9jd7oQf;LV(-M7e(zjuF_TJlOPLLG0%rz7rjf0`x2Aq zdx9=*3UPqC0Z)1+)nDtF7EORw--pT%dTav2Sy2t|G;=->(`(p@Shjul;nt~ z6b$iLeKN# z5t}Gx0~j*KuTi6{a<5&aBJWR=tQvNb-NF;myzIsXb}o>laDP>WiL@VRh4UIu0P|}7 z;U&qSUuQ~>HFe94LDHyAyDMK08Dq*#CusTBy9x97^A$Wou;dZO$Q1MEStBw%z!Jvq z#Oisjx$<{FUjQNTbrvx#y2@tQdsqIr!fh_j_N=V5ew;(?jEdADn%@8$gO8_h*#SD< z1E{R0FrYme6*vMg3L6lwH7kPAM_}dZ444ksxChgwYK6xKHap6b8Wex@nDG#a@Z$ZH zy);_t2wZnywb%pp4@vuPD);otS-AYl-Fw73@*A;!3fQTLQd0%pcv8tZ|5K6Cr@S5q z{svW9T5x#|_*@BwbfEe3p@*QCPr#SlvYPw7ek?}Zhag1qA^6@0$)bQ6=jx=WE4xke zdFOJO*A+ak&bNw`5BA53XzrFOD&z=es^WcH)x31@Mqmo2;6;s-6q@>+w3w0Sns0}~ z_zaA7d(cf!ynNTP#P`5#O0x_h$!p?e&?c&%ni;DP4*PyBdq)Peg;&64VsAVFK9 z4`e)t$htxc#)VP!658b3VZI45%|By!*5vEv72#%I;hLzmnV)yTuR%T46LOM)MWIar zCCYD*Lxmwv%YqdOn}!8{Q(wcYyIh_KavlPbbrwJWXjpSb;Bu!d{D5DVe;C~aakTY= z^G=5W3i!LH(tB*(tQLb;sWWyb@!pVS18W(_k{ag-94WODl>rE2VgS78)LY?qJJokrBbIvt9wM%OW z5?O%*x2AtvU3ljqoJD!zgp}I1RaNy_l)-BkpYF=nYFE;ALc1#C>Cj}_^|}O_F467R z@mwtchT`p;Jb*JYju}Mv`_Q|4HiYj3&JS+7EXV)!gQusU`!geXVZk_%kqC&`HjMANK_C@kE}%m!J3R$RFmd^9c?Ky0C*%eO!DGw**zL$~W>v>`?fdjquE_ zFDyjOws1WNnb%%;r#Py%8PsrTa2r|r_>>_R`M#^Ng-T7LpHIiw+`jA*9kLOq%8_X* z->kn_@FScBRnk}#*TRKlR>M2%un&86$JMN-7@A&+a=PMkzi(eS`Xk=c!iATr42IQ@ z^o`oYdh0Y4JLk=qsF@-}d0Oyy(fNt1IdRs(NWm*Fv(H1yaC-j+$@?)%94^$mtD{qI zE2FBvT(x~{Z6U5%yy-U>{!y|t_bQISAs4a0#-nFu*i5iuP1nXDe3oO`=OA{ITpO|8 ztact8eQRW``DiEZTsnbgC$xBYx-IOysn6`K$F~?PBMWu9*rn?-fOZOt_!3)CoIf4B zQGJ@@Of6{9P#$e&2bfwl@n-xg6z4)G7TG<~I@+CBQBoC~4$ps6lVptNWJ=F0l;Zs^1 z2DAl`5&g!QBrALZ+>LR)?nVo9Ze`z;8UK{i+gXqQ*WghR3_Sh>S9A5OgxvxGsZrPR zGX(A-cw)v-&_my2dx_nlu(>|}M9|W<0+O?v`SbF{y@7Y&`@5LXRpk8;0!2{6%s+An zU1#;Czz`F8z%Wl{Z7e`jqF_4BRa0Z@og{f$(Au#@|c54nEWAP(wQ5@neY*Z zqyt<+uBNlQ^Jv?WOc(*P=pyaiY;7tX=Xys;Z@I*%=__D*! zf4;SP>bFAcPCDA=WyOKH4UZRYWuIb9Z>LLKE|7Ah{>bXI;_?$OgNCjA@+?f0vgWJW z%#%Xfx7KRq`$jgDX~i8SM;Cbl4U?}nouo~b`_mhYLlIj}E6tR>j#Kx_%jZ9}59)EH z?zqy_hG@U{v!GJ-6;D8Y9IRk$FL0cj4&uwQs2RXv=5>W>z{#kal%+zPC~szaY%P`N zZGO6M;d!s7cWs+mBsBWZaLpnAX^H}mFcn?Xu(=duHi?+BzJYM zWScP&!QQr)Oxi1y+uDS7_H2FR{C?zp_BBPd{avA|!N5UJ-t%_3m=Ezw?zoGa+vYp0 zz1WK>`}sFnTEASN_9 zTHr9J3GoH}s?KIwCNh{{H}c?Thc&?(|6L^)tNge5M7qauG^!6*n&3_~yI&TP7)r?w z*T-z%e7tt=^0d^BhS^v^8=^@80zL8jZz?Oguo|R?BBTh$V`3sLm`N68*t%`uNEaLW zW(P(Tsc1+gPk5`?y)-p)NA?qJ@0a+620HAx*ZcR&n{qnmANDdW{}LCq-{?GBJbF!kU-d+_C&BhDxu-j_tr>ErKeR+Jnt>1lm=9^vBmn0@MD-jJ(;*(&$sJ`Hc-d*e^kmt@cMIe-#SH26b|%rihA3aiV~4eekq+Mr^h%`5cjrewYbnH=hw*4+^kJ zD|b#n{lb8HjgT9B&RT+J(AK~HS)P+v>`18@G<9Ay8ss<*vrRXACHzu6bzAq^*mWPGAE!5n zLWcc$(o3%Szb~a30_IBG0&cTYT=fsC9=@knHCy7!<)=yq{S*VkhpWAFaA+1W?BbgjiS6hefej@ZJ-9PNBIm#jWvDHhhuIIh-F zI!wu}Eg9gmfHy{ZPBrT;+6sz=#Ppmn&nr$}|0L$MY#rLu{PXv#1(a(b80}Y~Q!~Sr zU>L(gYjdamdcGQ1c|EMD32yIo;0WDB(wt3iZ zM(25>FAWwxbQ?PA?<;Ydf6@>^IOLj)92l)G+%XT>Oy>bj*>Tjwojls2s(I9?l?azqW`5aG8&^*{8CWbsSQn3l8;Fl8?WyP}3&CTtxswP& zS@6RgongEhNT;bLYAXAxc%kjEN03o+_tz8ljBL4loHbgDcgucq+9}DAP7dVu)3{yd z`*Ii7eiGF!Czz{owC>@T;>#h{_WGOZAM76&L!sd|7hjb+)D`IE`INHCIX7hW*0i^8 z_F8cV?;X`ZVGAWdq!@baqHRyubKPprd4v|DZBhIh)FOmy@?O2ggksI=P}pmJEML1f zj6mvV4t;ZT&3y#PBOl0c46Rz-*$#m%NHmAyc`~B6FCD?#Cfxk+TZ=(foEpb1YD#;LOXjCCM0%32 zP6|jU)ZnKAj#LS`#G(^F#%1cYU?7rz-x}(2CWdA&bOT9p=mv{%S{NL=OqwAbUdi*k zT5hy5dv7xkpV00;YUUj2=)%_DcSBdJT`Xi^&0%>B1F z3H2F5Q>Y2$iEAm;ub)sLUdmm2H;jvwc32A^cud90gVxM@o`Zh|+o>ZAlMT0aFB;aM zp%zjHF^QIwkjd4jGj#=jC4NHS`tM?4P2?C6IB$rf)2}$4r8N19x@YZFRYBkwdR1n{qpa11+X+ zHf&rO@RciB46huMQ~ z_C)2WT_>%mOiC(|m80eqVMMdB&3@3M1l}Y53_YD!KNg#n(NrxPSMUAv#PmGhlJ>uA zm=H%Tb!s7(Hf0cR?_#NlwpdNgtBg(NDV<(GKUj%#qHmKr^-&V<^$31^zpa?>!H$Qy zWeA@cajdn1-rpfGjkE;*)WO&L)nwmC$vXKLWXx_C#9JKGNFsvXo83zwS7)>G8!8cq z7Ox3yLuWJCT^Wc2`>Waj-RUcJ8widbniSD6@FzC&86ibb)z`{dif+Q^I7wAQ!=E8l zNeaa8v`C$ZFV(!l*+Gtyu?u3VjLwvK9QRYynXa;?w?)zUqh6)&i?EzibBSr6Pu!wE zEa5zttz1lB%X;0i&GUH{hxh8z;MvF@W=?t;AQwNKAX`4?q^=t*( zv?W&vS8KwlP-D8cTOipBM7UTr?MG-dk6)B-xe+^gY+6W(K+q8R7-dGm1(PFBbM%l_ z?hVIB?y*Cm_?a$@GMDbdCt07u)o|SVNSHG3FTWacphA|f9S>UuWCR<&D7@>nLRpp4s#!wg^!20yQ4>rUa?ns`yp`r zn%yeT^D-sT{)=Wm7*b`y|9{K_jmMU~Nhl_K#~GZjxmpgVRu zS-~Nf?>AL=0qvD;gfqW@9|r~8pv?LVv6(HMqN^dX$O;w#bjeeIBag_FcHX7dZ z)O?<_-q&AknOx~FJ#}N`$UO6e5j;_WJV#-P0rF5E;k;_DJTKA{##`a`A4hkXsu*FR zM8H6v(ZXf4=bm@m^6*Q4>q3;^Vg!WbKr28p(W>b+Q@Rjd^!^U zAJXJY-((*WaBDEm z9~~Ltp>;N&#dO%@55^T10X=LI5R!el1FiPz`~2cD=L@J`omja>G>Pg>_>&J(yBnRwZt zFlDA2XY~%du8O__LQ1I&+4Ysr_Z|gDTQdE~)z1Do?2VLyi(jtO#j*iQp9gPI{CS!} zE;w1`w#Uap{V(*?LY_gPEnhnq#`ZU-d}Cgd4Za++0CH7h<7};AHpf|_BLAk$TpzwV z=OO?_@%ffba=O^_+tK8q4v8!8$BLq=^*kR5Ir870iFKR9ee~OD9Yh=1e3hnD4#<8| zn*XXtVJ+P3dfLO;YcH$m^J`99eJ>-KxMpnKH)1xkwq!*JR~x$Df`X(sk}NOfU}o=u zBOV?#Mp5>e4zx=YC7H&6z|kgUwVS{;1Z3>|W2NU*q7{+yiz=kxAx8pMKkmFJLOTk^ zF<^CWQugWu37S&+c0$SO$ekXc{a!$WZvxjh)dgBPv;ql0&xmA0H25iYGv^+2qWQZJ zAQHYx&7Lt0o&nIxjV#b`DMX#k#xYBbQE55$@}o~@wPBAqDu?frevK^|Yt(5Z@3;2h zptut&>%fh2@6zNFlN%Qp3xeq=jOs%eyU|S=Yo&JPiGp|kU5!=CktuPA-tbThi(88C z0P?U9o|6_TQ%B|YLhk&QOG+oYzwHiuGhA=2>*^C^Csh4=T&sc}FOHj9`(K)-zE6MZ z&dY`6xh?lBb6$?cD$>o|@uJ5jjv_`86l*Q*;eXAJ$-d_5D=HxcN9VasxT(2$m&1W> zk1W5#A>=Rz!udyZjEdmjWf(*SS!Q~MC{0!B4E{({_ny=7gSQ$4cwTy%K)8Cs1~9aW z;Knnyw36X~rfJH`Jv(U$eO^lV7%8c!NUL<;f)34?Bj@44k48(HElb4rG6@liji`lI zr$Mki+Ex_y-aDVT#&0~lb~)G!04UlCJCDR5fwsG+?VCCW76?cD$xw0U^dH#$;mnKJs{^U8L109^_j?g~6*5iH zGZ*kOIZi4&0K3K8fM<1? zFtP-1ps=7%=&>Sj8|NtrQt+V4#=hza3+)C}0kV#}8tH)RNXnAni6gPJ(+ZhNQCj^0 z$@w1P^CDk~$|)8P!h}W!uEyjU>8!-gpV{l)A0`dBe5k7o@Qy(F^@ToQqWm=kLWOm#4O9_=u46NM zecU}Il4rlSl5~OJzf7i^?a?np_tZ1A6aR2(;M4DY`}~jN63UFbqpUrjxTdIzx39@( zG15X1&W3;MD%D1_*0)6F#94GqVgfsvYZfzAWC!c=LLb&sYXF6eHh=)ZRy{z+xte-P2-}uQ;9xWi;{85*iZ9#@rM62(d(QKPy~#-h9zrq5Or z>W=~^_)DmGya-k)z8I9>R3Hi7e;5(I9)RX3=_rj}!zFra!BxAR`$G@{&fPM3MMa z-Mdx=XvTgN+#2KH5x3ef<ur^bm4SUI zgiM5%>cug7k#w}nbRP<5Y(%_r*o@#2RUFWAkl8iJ-u|q!x0Yo%BV+sHopeiohwd)J z$HzY_MuUV8dmTSB`9tSQ_M_YV?NNT}%?7wasX5JavqxpT(Mp_exqc)g*7?%<9D?of z2&b=+Ocn|?gHZt&UmFMTIN3q(;Uo`3tPKDo-(Yfpu+0)ZlOEEbUqA1{N`tyENw56% z83vZ4h**U_aoMe+BWgC6AC24Z<`39gD-;}yxkissb61Fb%v&mDjmJ?g;|dKeY8V!b zp1ybHER&MBVYOd6*AS18{@WG|?GB5Oyd-Q|yusFWnXCGl zqk3SC`b^ZS9w|9M zl{Zh$+ppIzI|`KXY`7I+&0iWv%{yh&#l9|YD`X9=VhOMmd@^WWkT$xV!e_eAnOBM` z!>dfDJ^Us0t3G>aJ(y0$FFwgIB@ONVXy|>$Q~dl-(k#_+c!B<}yLWG@a?udpo?`B$7492z|KP-R zPUdZ#Hs$yGrYJw#=g;)ZB1{M0=MI1W9u4A&e~^W554nRKpTEb3xQ6jGP0v0HaQZ>B zT^E4#{v+n=QhR;w_^x#rZwKv%xHSgqS!(fmpu0UIIyX5L;%;$B9yd}?E8nv>(pkp+JYowVhj)%N?5l0|9Onjb< zD?i6FQd5j|HwRAfeDF>NaHVDk*xDR1oI$^v8_jw}q$rJN7zW5~R0J8Li~9UnY64Bn zlDBqtdobCK`< z=6}^=>-=DVL$i*rf}XEjO6K&5?a|;6la{p^(X?*iICWpwDbyCSNa@}{d*XI$%fzPk zUe*imCpm$JF{LIgS}e>gYmT{E=!N&Xqq=_23sIgecZ)p`#SC&cKLZa`dTAn!PR>@) zLq?!a0!~f6f%)`3MY>`2^&YHvqQ)N@+4TH0!Zrw&LB7M!yn!`{~RjP_m zrd^(Wi3SRFx>n@(9Yha>ilAB0~fy$knPrrVQIvXKaXia#&fmy@Of!1Mb17lHn7)eZsW{qB|JjWVX257}4*^C_KJ z;@G+~GCD2WSpet~dXRJjd03^FzKChabjnNmH+={X*iA~F=h(LBiwrUQeo1skhw_+;p;AJI#`3yX`LeO-<(JA%<5wFN zJ9Vkg$6TxU*A_Oo$vs)AKM{}~llb7qO7iJU zbd^U$#=_)<2o5`{h}c+-ppW;n1z8D$sl`mQjrX^c{+E+zs0t?MDj54qBp#HCGB5VdXc z*^!%k8g1RwQd0?}FV8J}*?kDd5gA7(65_BoFs6ef7P1}f%?H*36FIe|`@_6CNE?Q} z7kS>0Y0nclaqTEIJ0G&k~@+nenUdMx!fr9KeH=_ck!j4FSx@+y~H zce`f_XMc>W9pzwemoaH!vgD%d)+wwBk-ID_k&?|D81`oRGVj8Qj0>jib-6c5;Hlw_ zlP;J*pZT}#f-$$gf~3&RUHo`2VNcR22no1u07~E=6iiOczF<_n_xm)BZMNIuUqtWW zbNSIK#%>emB+_uyG^RjqN8-deue-X~Ku0Ej9T$u`S&Ukctfqo^Z#| zR|pAQG0dE~Ph^)E%JnuIx`fY{A)R28*3ks$72c8J+WY7fW>eFL2zg}@==&oWHQ|r0 zUSpX4@i@O#7&OV&5dAAT%CPqr=7f6aOElg!XpnP@D3SHxl_el5!6W$*!r~gMT{1_V zd9Bw6){ex_5BFM>JA=A7CYG^VCnZ@GuSEZ@9cYbwv{2tO6KnVfRM(s{Ko*I;Lj@rT z@VlZ$N^K~{N~msUy?7Q(F3L&ASa42I^4~Y-nx->wp7(pj%EGf-Q(P+!$OUjdcM?#0 zzX~v#)I|k*`kivvdgc_hE=dsR-qv^dwzBKKGbS69YOIMNt^;&HPoVUMX#Z>pC8M}f ztoBJ;lW_?*`OWkdkZ|sV7GZZ@S!QAk3l2dl;(vT*z;U}pNuhsau3@X*VLEggV0TTw z^rqj7S4lqCD*5JN$(^Z&PJ^FI@tU@}mny7FX&k|^z&k8<^g=cCFg-CQwOu$_H z6I02LB8W?`pV)qyvSf0L48cMN11Owi0PUidCFU2Ve~JQj!)*bG3$Isi z>amC|1{j1l3qy`gi?K6Fu?!}owPijvtD*&H-6nrwU4MKiKnbsJuRa@E1Y7C6QsoxW z1shR~Q|hsD$D&{T^w=@)G>GPqQoi{UbXzJOfM2aSc!vp#lJ`riw3~^}Q4~Vl)vjI> zpS>u&unwK&ryCW4;dc{ zE#WA2e2-tBzh0)+fLP2Naq}5yAG26=ZDqqT*1h&QF@sasUYV`2eKVKQ%T^6^4r^1} z>kB8D)e^m!HWh6HMVL@4WJhlmxpI58UoO%cPHHcPr?y#SB!?!zwuR8jy^7-Wh+M>j%9Z!+&RN`vps{@ zF438I61#XJuyw8`BcSl}(;3O18#OE(SI~so-3rbh9euMyCB<>SNC?ClTGBywP<4Oa z&;Ofd&Tut%0U7%S-M>7>0zqbQrGn&*pO;vk>aT?jcod9O^i<@HS0?rtd&+;|Qj}5x zlll>r3B9SMM7Kxf{|U;ZE~b1HQ7v+cHj~4Ad2mw3T*5{n`ID&V(rlXk+Gv^C6Erh= z-7?-qyl0gTriQ^t&fx%k-+n9Nj5e`40G6NReS&=$US(rK$U~dPd}ASd`~!*v@@-~l zWf!a{;A(#3RwKFWq&{;{s6(f#lGuc8zU3bD;XY9S*Mx%zxSPhB9PN2soLqI)0r{dS z3Z|rMV&HjnI=pmi)L;IJvae;*Oe^7UX-V+==P**VN(sP=z2W5hEbf8`t6c<#(KJ#@ zm1wJ9sX#tQwj@voY9`joJrP{5(eIBecCLga55*FdAMiy_uy!v~pBwRG}{0W53DoXmCvrx#?6=dC0CC z>E5EZ)2;kdot}lfrl~)zUw%q3UIjfOI)(}gdk^=BSoHlIFwfZxAnhvJz)CG*c=EAz zL<%4D{RoJtba+}D@g7?c34m5gd*Df79xRx(^9I;!LLBgI95yTO|4(5B$KK$(5Hv$D zpH^pLWvm1-j{8pG_8J6rX25XWKdtF#yfsol2YD@?OA3g+kEWJ_SI!sbG}NK6+cPEq z_&}kn>`%#%)L$xk$S#0McRjT11clk0QM8e)Mo%CD{x&P9O5J?E4dC6K>9HoB-Ybqoa`s{hLq{`s-2>*Pev}9X!~1cKJDzhNO0vU45Tp$XKPD+2PW)^R1d)JN zjZAk2(jzbDMIOD>=R(q>Rr$gu=$ z6E5@kqbX1gt?@JT{@X}_U>;xDQy}K0X@;}zu3qQ+O^VI@R!b_o0L+w*&<7NqdM&qK zm#@;GHar})K%_Divm!EAmJVeYNaUa=leiMU*o>0qE6a|z09zS}cR(9}&4*wC1}IDi zmIeS5`bXig3Souepb2Hg|KDHaR}W1JJrEdyy7c&gd;+8?6b=F}1jQVNsW%Xk6{d3i z8y9gVTKU(#iZzK^_utjgLtdT#R^z;K9os<`-}67)6q2P2xCsze5Vhwyq6m&4=w0l7 zVJ+-ih<|grjC2b=g6{F{7c2r#i$j-Buisl`F8?{vfa^cFbQraF*&l8wr1_JYItP9@ zqAL?08|F%>;FE$o+aF^?`|Lm_1VQM{8D?J{*g1@oe5jC}%}YRwAN*-PYG69Xcu5%? zcB$;m=^>rK*8~d7UuL!>##6I{(^$m54+qboYw*n#*Z>`5`@sXZ-u&mtONd7ckPRTs z1W?IQQGM#uOw!&^Bg--$COdQ|$J`$WE+|Cln~fV#(D1Y|NG zEY&BDQzQzY52zQ2qgio>2tyQstg;a ze^=t(>BtMPFQ-rP`d{ // } }; + // 鎵惧洖瀵嗙爜 + const retrievePasswordFun = async (params) => { + // try { + const {data}=await userRetrievePassword(params); + ElMessage({ + message: `鎭枩锛佽处鍙凤細${data}锛屾壘鍥炴垚鍔燂紒瀵嗙爜宸查噸缃紝璇风櫥褰曪紒`, + type: "success", + duration: 8000 + }); + // } catch (error) { + // console.log(error); + // } + }; + return { getToken, setToken, @@ -189,6 +203,7 @@ const currentUserInfo=computed(()=>{ loginFun, getUserInfo, logoutFun, + retrievePasswordFun, clearStorage, registerFun, loginSuccess, diff --git a/Yi.Bbs.Vue3/src/layout/AppHeader.vue b/Yi.Bbs.Vue3/src/layout/AppHeader.vue index f315273b..b882a38e 100644 --- a/Yi.Bbs.Vue3/src/layout/AppHeader.vue +++ b/Yi.Bbs.Vue3/src/layout/AppHeader.vue @@ -4,7 +4,8 @@

-
{{ configStore.name }}
+ +
{{ isIcp===true?"涓汉鎴愭灉灞曠ず":configStore.name }}
@@ -152,6 +153,8 @@ const searchText = ref(""); const noticeForNoReadCount = computed(() => { return noticeList.value.filter(x => x.isRead == false).length; }) + +const isIcp=import.meta.env.VITE_APP_ICP==="true"; //鍔犺浇鍒濆鍖栫绾挎秷鎭 onMounted(async () => { //鐧诲綍浜嗘墠鍘诲垽鏂秷鎭氱煡 diff --git a/Yi.Bbs.Vue3/src/router/index.js b/Yi.Bbs.Vue3/src/router/index.js index 9fd58b5d..48abff7e 100644 --- a/Yi.Bbs.Vue3/src/router/index.js +++ b/Yi.Bbs.Vue3/src/router/index.js @@ -26,13 +26,18 @@ const router = createRouter({ name: "login", path: "/login", // component: () => import("../views/Login.vue"), - component: () => import("../views/login/index.vue"), + component: () => import("../views/login/login.vue"), }, { name: "register", path: "/register", component: () => import("../views/login/register.vue"), }, + { + name: "forgotPassword", + path: "/forgotPassword", + component: () => import("../views/login/forgotPassword.vue"), + }, { name: "auth", path: "/auth/:type", diff --git a/Yi.Bbs.Vue3/src/stores/user.js b/Yi.Bbs.Vue3/src/stores/user.js index 0d54b6ec..f286f974 100644 --- a/Yi.Bbs.Vue3/src/stores/user.js +++ b/Yi.Bbs.Vue3/src/stores/user.js @@ -1,4 +1,4 @@ -import { login, logout, register } from "@/apis/accountApi"; +import { login, logout, register,retrievePassword } from "@/apis/accountApi"; import { getUserDetailInfo, getLoginCode } from "@/apis/auth"; import useAuths from "@/hooks/useAuths"; import { defineStore } from "pinia"; @@ -122,6 +122,23 @@ const useUserStore = defineStore("user", { }); }); }, + //鎵惧洖瀵嗙爜 + retrievePassword(userInfo) + { + const password = userInfo.password.trim(); + const phone = userInfo.phone; + const uuid = userInfo.uuid; + const code = userInfo.code; + return new Promise((resolve, reject) => { + retrievePassword(password, phone, code, uuid) + .then((response) => { + resolve(response); + }) + .catch((error) => { + reject(error); + }); + }); + }, // 閲嶇疆鐢ㄦ埛淇℃伅 resetInfo() { this.roles = []; diff --git a/Yi.Bbs.Vue3/src/views/home/Index.vue b/Yi.Bbs.Vue3/src/views/home/Index.vue index 04fec20b..cb6be620 100644 --- a/Yi.Bbs.Vue3/src/views/home/Index.vue +++ b/Yi.Bbs.Vue3/src/views/home/Index.vue @@ -4,7 +4,26 @@
-

鐐瑰嚮鍏虫敞-鏈鏂颁笂绾銆婃剰.Net瀹樻柟寰俊鍏紬鍙枫 锛屽垎浜湁娣卞害鐨.Net鐭ヨ瘑锛屽笇鏈涜兘甯姪澶у

+ +

+ 鏈珯鐐逛负涓汉鍐呭鍒嗕韩锛屽叏閮ㄨ祫鏂欏厤璐瑰紑婧愬涔狅紝鎵鏈夋暟鎹负鍋囨暟鎹 +
+ 涓嶆秹鍙婁紒涓氥佸洟浣撱佽鍧涘拰缁忚惀閿鍞瓑鍐呭锛屽彧鍋氱畝鍗曠殑鎴愭灉灞曠ず +
+ 瀵屽己銆佲屾皯涓汇佹枃鏄庛佲屽拰璋愩佲岃嚜鐢便佲屽钩绛 +
+ 鍏銆佲屾硶娌汇佲岀埍鍥姐佲屾暚涓氥佲岃瘹淇°佸弸鍠 +

+

鐐瑰嚮鍏虫敞-鏈鏂颁笂绾銆婃剰.Net瀹樻柟寰俊鍏紬鍙枫 锛屽垎浜湁娣卞害鐨.Net鐭ヨ瘑锛屽笇鏈涜兘甯姪澶у

+ +
@@ -272,7 +291,7 @@ const activeList = [ {name: "寮濮", path: "/start", icon: "Position"}, {name: "鑱婂ぉ瀹", path: "/chat", icon: "ChatRound"}, ]; - +const isIcp=import.meta.env.VITE_APP_ICP==="true"; //涓婚鏌ヨ鍙傛暟 const query = reactive({ skipCount: 1, @@ -622,7 +641,7 @@ const onClickToWeChat=()=>{ display: flex; align-content: center; flex-wrap: wrap; - height: 30px; + min-height: 30px; p { margin: 0 auto; diff --git a/Yi.Bbs.Vue3/src/views/login/ForgotPassword.vue b/Yi.Bbs.Vue3/src/views/login/ForgotPassword.vue deleted file mode 100644 index a4f76b28..00000000 --- a/Yi.Bbs.Vue3/src/views/login/ForgotPassword.vue +++ /dev/null @@ -1,11 +0,0 @@ -锘 - - - - \ No newline at end of file diff --git a/Yi.Bbs.Vue3/src/views/login/forgotPassword.vue b/Yi.Bbs.Vue3/src/views/login/forgotPassword.vue new file mode 100644 index 00000000..29c91948 --- /dev/null +++ b/Yi.Bbs.Vue3/src/views/login/forgotPassword.vue @@ -0,0 +1,153 @@ +锘 + + + + \ No newline at end of file diff --git a/Yi.Bbs.Vue3/src/views/login/index.vue b/Yi.Bbs.Vue3/src/views/login/login.vue similarity index 93% rename from Yi.Bbs.Vue3/src/views/login/index.vue rename to Yi.Bbs.Vue3/src/views/login/login.vue index 49da43d7..dc79a2d5 100644 --- a/Yi.Bbs.Vue3/src/views/login/index.vue +++ b/Yi.Bbs.Vue3/src/views/login/login.vue @@ -1,145 +1,153 @@ - - - \ No newline at end of file