diff --git a/GDZZ.Application/Entity/LiveHistoryContacts.cs b/GDZZ.Application/Entity/LiveHistoryContacts.cs
index 17e35da..f5f6133 100644
--- a/GDZZ.Application/Entity/LiveHistoryContacts.cs
+++ b/GDZZ.Application/Entity/LiveHistoryContacts.cs
@@ -11,41 +11,41 @@ namespace GDZZ.Application.Entity
[Description("聊天历史任务列表")]
public class LiveHistoryContacts : DEntityBase
{
- ///
- /// 租户Id
- ///
- public long TenantId { get; set; }
- ///
- /// 名称
- ///
- public string DisplayName { get; set; }
- ///
- /// 头像
- ///
- public string Avatar { get; set; }
- ///
- /// 类型
- ///
- public string Type { get; set; }
- ///
- /// 排序
- ///
- public string Index { get; set; }
- ///
- /// 消息条数
- ///
- public string Unread { get; set; }
- ///
- /// 最后时间
- ///
- public DateTime LastSendTime { get; set; }
- ///
- /// 最后消息
- ///
- public string LastContent { get; set; }
- ///
- /// 用户ID
- ///
- public long UserID { get; set; }
+ ///
+ /// 租户Id
+ ///
+ public long TenantId { get; set; }
+ ///
+ /// 名称
+ ///
+ public string DisplayName { get; set; }
+ ///
+ /// 头像
+ ///
+ public string Avatar { get; set; }
+ ///
+ /// 类型
+ ///
+ public string Type { get; set; }
+ ///
+ /// 排序
+ ///
+ public string Index { get; set; }
+ ///
+ /// 消息条数
+ ///
+ public string Unread { get; set; }
+ ///
+ /// 最后时间
+ ///
+ public DateTime LastSendTime { get; set; }
+ ///
+ /// 最后消息
+ ///
+ public string LastContent { get; set; }
+ ///
+ /// 用户ID
+ ///
+ public long UserID { get; set; }
}
}
\ No newline at end of file
diff --git a/GDZZ.Application/Enum/SystemConst.cs b/GDZZ.Application/Enum/SystemConst.cs
new file mode 100644
index 0000000..090f657
--- /dev/null
+++ b/GDZZ.Application/Enum/SystemConst.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace GDZZ.Application.Enum
+{
+ ///
+ /// redis枚举配置
+ ///
+ public class SystemConst
+ {
+
+ #region 聊天
+ ///
+ /// 聊天历史列表
+ ///
+ public const string LIVE_HISTORYLIST = "Live_HistoryList:";
+
+
+ ///
+ /// 聊天详情
+ ///
+ public const string LIVE_MESSAGE = "Live_Message:";
+ #endregion
+
+
+ }
+}
diff --git a/GDZZ.Application/GDZZ.Application.xml b/GDZZ.Application/GDZZ.Application.xml
index 82849f6..d55e81f 100644
--- a/GDZZ.Application/GDZZ.Application.xml
+++ b/GDZZ.Application/GDZZ.Application.xml
@@ -189,6 +189,67 @@
好友ID
+
+
+ redis枚举配置
+
+
+
+
+ 聊天历史列表
+
+
+
+
+ 聊天详情
+
+
+
+
+ 系统缓存服务
+
+
+
+
+
+
+
+
+
+ 获取聊天列表
+
+
+
+
+
+ 设置聊天列表
+
+
+
+
+
+ 删除聊天列表
+
+
+
+
+
+ 获取聊天列表
+
+
+
+
+
+ 获取聊天列表
+
+
+
+
+
+ 获取聊天列表
+
+
+
获取配置文件
@@ -216,14 +277,6 @@
-
-
- 发送消息
-
-
-
-
-
微信支付
@@ -763,6 +816,11 @@
主键Id
+
+
+ 修改消息数
+
+
租户Id
@@ -853,6 +911,21 @@
最后消息
+
+
+ 聊天文件
+
+
+
+
+ 文件ID
+
+
+
+
+ 文件名称
+
+
聊天服务
@@ -864,6 +937,18 @@
+
+
+ 修改消息条数
+
+
+
+
+
+ 删除联系人
+
+
+
获取联系人
@@ -873,16 +958,31 @@
- 获取聊天信息列表
+ 获取聊天详情
- 增加聊天历史任务列表
+ 增加聊天详情
+
+
+ 上传文件
+
+
+
+
+
+
+ 上传文件
+
+
+
+
+
diff --git a/GDZZ.Application/Help/CacheService.cs b/GDZZ.Application/Help/CacheService.cs
new file mode 100644
index 0000000..acc4bd7
--- /dev/null
+++ b/GDZZ.Application/Help/CacheService.cs
@@ -0,0 +1,109 @@
+using Furion;
+using Furion.DependencyInjection;
+using Furion.DynamicApiController;
+using GDZZ.Application.Enum;
+using GDZZ.Core;
+using Microsoft.AspNetCore.Mvc;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace GDZZ.Application.Help
+{
+ ///
+ /// 系统缓存服务
+ ///
+ public class CacheService : ICacheService, IDynamicApiController, ITransient
+ {
+
+ private static ICache _redisCache = App.RootServices.GetService(typeof(RedisCache)) as ICache;
+
+ ///
+ ///
+ ///
+ public CacheService() { }
+
+
+
+ #region 聊天服务
+
+ ///
+ /// 获取聊天列表
+ ///
+ ///
+ [NonAction]
+ public async Task> GetLiveHistoryService(long UserID)
+ {
+ string cacheKey = SystemConst.LIVE_HISTORYLIST + $"{UserID}";
+ return await _redisCache.GetAsync>(cacheKey);
+ }
+
+
+ ///
+ /// 设置聊天列表
+ ///
+ ///
+ [NonAction]
+ public async Task SetLiveHistoryService(long UserID, List liveMessageLists)
+ {
+ string cacheKey = SystemConst.LIVE_HISTORYLIST + $"{UserID}";
+ await _redisCache.SetAsync(cacheKey, liveMessageLists, TimeSpan.FromHours(1));
+ }
+
+ ///
+ /// 删除聊天列表
+ ///
+ ///
+ [NonAction]
+ public async Task DelLiveHistoryService(long UserID)
+ {
+ string cacheKey = SystemConst.LIVE_HISTORYLIST + $"{UserID}";
+ await _redisCache.DelAsync(cacheKey);
+ }
+ #endregion
+
+ #region 聊天详情
+
+ ///
+ /// 获取聊天列表
+ ///
+ ///
+ [NonAction]
+ public async Task> GetMessage(long UserID,long ChatUserID)
+ {
+ string cacheKey = SystemConst.LIVE_MESSAGE + $"{UserID}_{ChatUserID}";
+ return await _redisCache.GetAsync>(cacheKey);
+ }
+
+
+ ///
+ /// 获取聊天列表
+ ///
+ ///
+ [NonAction]
+ public async Task SetMessage(List liveMessages,long UserID,long ChatUserID)
+ {
+ string cacheKey = SystemConst.LIVE_MESSAGE + $"{UserID}_{ChatUserID}";
+ await _redisCache.SetAsync(cacheKey, liveMessages, TimeSpan.FromHours(1));
+ }
+
+ ///
+ /// 获取聊天列表
+ ///
+ ///
+ [NonAction]
+ public async Task DelMessage(long UserID, long ChatUserID)
+ {
+ string cacheKey = SystemConst.LIVE_MESSAGE + $"{UserID}_{ChatUserID}";
+ await _redisCache.DelAsync(cacheKey);
+
+ }
+
+
+
+ #endregion
+ }
+}
diff --git a/GDZZ.Application/Help/ICacheService.cs b/GDZZ.Application/Help/ICacheService.cs
new file mode 100644
index 0000000..691a8b2
--- /dev/null
+++ b/GDZZ.Application/Help/ICacheService.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace GDZZ.Application.Help
+{
+ public interface ICacheService
+ {
+ #region 聊天接口
+ Task DelLiveHistoryService(long UserID);
+ Task> GetLiveHistoryService(long UserID);
+ Task SetLiveHistoryService(long UserID, List liveMessageLists);
+ #endregion
+
+ #region 聊天详情接口
+
+
+ #endregion
+ }
+}
diff --git a/GDZZ.Application/Service/LiveChat/LiveChatService.cs b/GDZZ.Application/Service/LiveChat/LiveChatService.cs
index 9f893db..f8eec90 100644
--- a/GDZZ.Application/Service/LiveChat/LiveChatService.cs
+++ b/GDZZ.Application/Service/LiveChat/LiveChatService.cs
@@ -39,25 +39,7 @@ namespace GDZZ.Application.Service.LiveChat
- ///
- /// 发送消息
- ///
- ///
- ///
- ///
- [HttpPost("/LiveChat/PushMessage")]
- public async Task PushMessages(List userIds, string message)
- {
- var userList = this.sysOnlineUerRep.Where(m => userIds.Contains(m.UserId)).ToList();
- if (userList.Any())
- {
- foreach (var item in userList)
- {
- await _chatHubContext.Clients.Client(item.ConnectionId).SendMessage("", item.Name, message);
- }
- }
- }
}
}
diff --git a/GDZZ.Application/Service/LiveHistoryContacts/Dto/LiveHistoryContactsDto.cs b/GDZZ.Application/Service/LiveHistoryContacts/Dto/LiveHistoryContactsDto.cs
index 60b5148..f6a22e6 100644
--- a/GDZZ.Application/Service/LiveHistoryContacts/Dto/LiveHistoryContactsDto.cs
+++ b/GDZZ.Application/Service/LiveHistoryContacts/Dto/LiveHistoryContactsDto.cs
@@ -90,7 +90,7 @@ namespace GDZZ.Application
///
/// 最新消息时间戳
///
- public string LastSendTime { get; set; }
+ public long LastSendTime { get; set; }
///
/// 最新消息内容
@@ -111,7 +111,9 @@ namespace GDZZ.Application
public string Content { get; set; }
public long ToContactId { get; set; }
+ public int FileSize { get; set; }
+ public string FileName { get; set; }
}
}
diff --git a/GDZZ.Application/Service/LiveHistoryContacts/Dto/LiveHistoryContactsInput.cs b/GDZZ.Application/Service/LiveHistoryContacts/Dto/LiveHistoryContactsInput.cs
index 698c451..3fc9f37 100644
--- a/GDZZ.Application/Service/LiveHistoryContacts/Dto/LiveHistoryContactsInput.cs
+++ b/GDZZ.Application/Service/LiveHistoryContacts/Dto/LiveHistoryContactsInput.cs
@@ -63,7 +63,13 @@ namespace GDZZ.Application
///
[Required(ErrorMessage = "主键Id不能为空")]
public long Id { get; set; }
-
+
+
+ ///
+ /// 修改消息数
+ ///
+ public string Unread { get; set; }
+
}
public class QueryeLiveHistoryContactsInput : DeleteLiveHistoryContactsInput
diff --git a/GDZZ.Application/Service/LiveHistoryContacts/Dto/LiveHistoryContactsOutput.cs b/GDZZ.Application/Service/LiveHistoryContacts/Dto/LiveHistoryContactsOutput.cs
index 9af915d..91a0550 100644
--- a/GDZZ.Application/Service/LiveHistoryContacts/Dto/LiveHistoryContactsOutput.cs
+++ b/GDZZ.Application/Service/LiveHistoryContacts/Dto/LiveHistoryContactsOutput.cs
@@ -11,46 +11,62 @@ namespace GDZZ.Application
/// 主键Id
///
public long Id { get; set; }
-
+
///
/// 租户Id
///
public long TenantId { get; set; }
-
+
///
/// 名称
///
public string displayName { get; set; }
-
+
///
/// 头像
///
public string avatar { get; set; }
-
+
///
/// 类型
///
public string type { get; set; }
-
+
///
/// 排序
///
public string index { get; set; }
-
+
///
/// 消息条数
///
public string unread { get; set; }
-
+
///
/// 最后时间
///
public DateTime lastSendTime { get; set; }
-
+
///
/// 最后消息
///
public string lastContent { get; set; }
-
+
+ }
+
+ ///
+ /// 聊天文件
+ ///
+ public class LiveFileOutput
+ {
+ ///
+ /// 文件ID
+ ///
+ public string Id { get; set; }
+
+ ///
+ /// 文件名称
+ ///
+ public string FileUrl { get; set; }
}
}
diff --git a/GDZZ.Application/Service/LiveHistoryContacts/Dto/LiveMessageInput.cs b/GDZZ.Application/Service/LiveHistoryContacts/Dto/LiveMessageInput.cs
new file mode 100644
index 0000000..c9dc79d
--- /dev/null
+++ b/GDZZ.Application/Service/LiveHistoryContacts/Dto/LiveMessageInput.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace GDZZ.Application.Service.LiveHistoryContacts.Dto
+{
+ public class LiveMessageInput
+ {
+
+ public string id { get; set; }
+ public string status { get; set; }
+ public string type { get; set; }
+ public long sendTime { get; set; }
+ public string content { get; set; }
+ public long toContactId { get; set; }
+ public Fromuser fromUser { get; set; }
+
+ }
+
+ public class Fromuser
+ {
+ public long id { get; set; }
+ public string displayName { get; set; }
+ public string avatar { get; set; }
+ }
+}
diff --git a/GDZZ.Application/Service/LiveHistoryContacts/LiveHistoryContactsService.cs b/GDZZ.Application/Service/LiveHistoryContacts/LiveHistoryContactsService.cs
index 725956d..34ad48e 100644
--- a/GDZZ.Application/Service/LiveHistoryContacts/LiveHistoryContactsService.cs
+++ b/GDZZ.Application/Service/LiveHistoryContacts/LiveHistoryContactsService.cs
@@ -3,13 +3,26 @@ using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Mapster;
using Microsoft.AspNetCore.Mvc;
-using SqlSugar;
+
using System.Linq;
using System.Threading.Tasks;
using GDZZ.Application.Entity;
using System.Collections.Generic;
using K4os.Hash.xxHash;
using GDZZ.Core.Entity;
+using Furion;
+using GDZZ.Application.Help;
+using Furion.LinqBuilder;
+using System;
+using static K4os.Compression.LZ4.Engine.Pubternal;
+using Microsoft.AspNetCore.SignalR;
+using GDZZ.Application.Service.LiveHistoryContacts.Dto;
+using Microsoft.AspNetCore.Http;
+using SqlSugar;
+using System.IO;
+using Yitter.IdGenerator;
+using Microsoft.Extensions.Options;
+using ICacheService = GDZZ.Application.Help.ICacheService;
namespace GDZZ.Application
{
@@ -19,19 +32,37 @@ namespace GDZZ.Application
[ApiDescriptionSettings("Application", Name = "LiveHistoryContacts", Order = 1)]
public class LiveHistoryContactsService : ILiveHistoryContactsService, IDynamicApiController, ITransient
{
- private readonly SqlSugarRepository _rep;
- private readonly SqlSugarRepository liveMessageRep;
+ private readonly SqlSugarRepository _rep; //聊天历史任务列表仓储
+ private readonly SqlSugarRepository liveMessageRep; //消息仓储
private readonly SqlSugarRepository liveUserFriend; //好友表仓储
private readonly SqlSugarRepository _sysUserRep; // 用户表仓储
+ private readonly SqlSugarRepository _sysOnlineUerRep; // 在线用户表仓储
+ private readonly ICacheService cacheService;
+ private readonly IHubContext _chatHubContext;
+ private readonly UploadFileOptions _options;
+
public LiveHistoryContactsService(SqlSugarRepository rep,
+ ICacheService cacheService,
+ IOptions options,
+ SqlSugarRepository _sysUserRep,
+ SqlSugarRepository sysOnlineUerRep,
SqlSugarRepository liveUserFriend,
+ IHubContext chatHubContext,
SqlSugarRepository liveMessageRep)
{
+
_rep = rep;
+ _options = options.Value;
+ this.cacheService = cacheService;
+ this._chatHubContext= chatHubContext;
+ this._sysOnlineUerRep = sysOnlineUerRep;
this.liveUserFriend = liveUserFriend;
this.liveMessageRep = liveMessageRep;
+ this._sysUserRep = _sysUserRep;
}
+ #region 聊天列表
+
///
/// 新增联系人
///
@@ -39,10 +70,46 @@ namespace GDZZ.Application
[HttpPost("/LiveHistoryContacts/AddLive")]
public async Task AddLive(AddLiveHistoryContactsInput input)
{
+
var entity = input.Adapt();
await _rep.InsertAsync(entity);
+ await this.cacheService.DelLiveHistoryService(UserManager.UserId);
}
+
+ ///
+ /// 修改消息条数
+ ///
+ ///
+ [HttpPut("/LiveHistoryContacts/UPLive")]
+ public async Task UPLive(UpdateLiveHistoryContactsInput input)
+ {
+
+
+ var entity = input.Adapt();
+ await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
+ await this.cacheService.DelLiveHistoryService(UserManager.UserId);
+ }
+
+
+ ///
+ /// 删除联系人
+ ///
+ ///
+ [HttpDelete("/LiveHistoryContacts/DelLive")]
+ public async Task DelLive(long ID)
+ {
+
+ var entity = await this.liveUserFriend.SingleAsync(x => x.Id == ID);
+ await _rep.DeleteAsync(entity);
+ await this.cacheService.DelLiveHistoryService(UserManager.UserId);
+ }
+
+
+
+
+
+
///
/// 获取联系人
///
@@ -51,37 +118,52 @@ namespace GDZZ.Application
[HttpGet("/LiveHistoryContacts/list")]
public async Task> List()
{
- List historyLists= new List();
+
+ var history = await this.cacheService.GetLiveHistoryService(UserManager.UserId);
+ if (!history.IsNullOrEmpty())
+ return history;
+
+ List historyLists = new List();
//获取好友列表
- var friends = await this.liveUserFriend.Where(x => x.CreatedUserId == UserManager.UserId).ToListAsync();
+ var friends = await this.liveUserFriend.Where(x => x.CreatedUserId == UserManager.UserId).ToListAsync();
foreach (var item in friends)
{
- var friend = await this._sysUserRep.SingleAsync(x => x.Id == item.FriendID);
- if (friend == null)
+
+ //获取用户信息
+ var sysUser = await this._sysUserRep.SingleAsync(x => x.Id == item.FriendID);
+ if (sysUser == null)
continue;
- historyLists.Add(new LiveHistoryLists()
+ var liveHis = new LiveHistoryLists()
{
- Avatar = friend.Avatar,
- DisplayName = friend.NickName,
+ Avatar = sysUser.Avatar,
+ DisplayName = sysUser.NickName,
Id = item.FriendID,
- Index = friend.Name.Substring(0, 1),
+ Index = sysUser.Name.Substring(0, 1),
+ LastSendTime = new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds(),
+ Unread = 0
+ };
- //rm -rf mk dir ls install cd home
-
- }) ;
+ //查询聊天记录
+ //rm -rf mk dir ls install cd home //ru-rf
+ var live = await this.liveMessageRep.Where(x => x.CreatedUserId == UserManager.UserId && x.OtherUserID == item.FriendID || (x.CreatedUserId == item.FriendID && x.OtherUserID == UserManager.UserId)).OrderByDescending(x =>x.CreatedTime).FirstAsync();
+ if (live != null)
+ {
+ liveHis.LastContent = live.Content;
+ liveHis.Type = live.Type;
+ }
+ historyLists.Add(liveHis);
}
+
+ await this.cacheService.SetLiveHistoryService(UserManager.UserId, historyLists);
return historyLists;
}
-
-
-
-
+ #endregion
#region 聊天详情
///
- /// 获取聊天信息列表
+ /// 获取聊天详情
///
///
[HttpGet("/LiveHistoryContacts/GetMessageLists")]
@@ -92,24 +174,98 @@ namespace GDZZ.Application
}
///
- /// 增加聊天历史任务列表
+ /// 增加聊天详情
///
///
///
[HttpPost("/LiveHistoryContacts/addMessage")]
public async Task AddMessage(AddLiveMessageInput input)
{
-
var entity = input.Adapt();
- var history = await this._rep.Where(x => (x.CreatedUserId == input.OtherUserID && x.UserID == UserManager.UserId) || (x.UserID == input.OtherUserID && x.CreatedUserId == UserManager.UserId)).SingleAsync();
+ var live = this.liveMessageRep.InsertReturnEntity(entity);
+ var user = await _sysOnlineUerRep.Where(m => m.UserId == entity.OtherUserID).OrderByDescending(x=>x.LastTime).FirstAsync();
+ var livemes = new LiveMessageInput()
+ {
+ id = live.Id.ToString(),
+ type = live.Type,
+ content = live.Content,
+ sendTime = new DateTimeOffset((DateTime)live.CreatedTime).ToUnixTimeSeconds(),
+ status = "succeed",
+ toContactId = entity.OtherUserID,
+ fromUser = new Fromuser()
+ {
+ avatar = this._sysUserRep.FirstOrDefaultAsync(x => x.Id == UserManager.UserId).Result.Avatar,
+ displayName = UserManager.Name,
+ id = UserManager.UserId
+ }
+ };
+ var livejson = livemes.ToJsonString();
+ await _chatHubContext.Clients.Client(user.ConnectionId).SendMessage(livejson, "SendMessage");
+ }
+
- await this.liveMessageRep.InsertAsync(entity);
+ ///
+ /// 上传文件
+ ///
+ ///
+ ///
+ [HttpPost("/LiveHistoryContacts/upload")]
+ public async Task UploadFileDefault(IFormFile file)
+ {
+ // 可以读取系统配置来决定将文件存储到什么地方
+ return await UploadFile(file, _options.Default.path, FileLocation.LOCAL);
}
+ ///
+ /// 上传文件
+ ///
+ ///
+ ///
+ ///
+ private static async Task UploadFile(IFormFile file, string pathType, FileLocation fileLocation)
+ {
+ var fileSizeKb = (long)(file.Length / 1024.0); // 文件大小KB
+ var originalFilename = file.FileName; // 文件原始名称
+ var fileSuffix = Path.GetExtension(file.FileName).ToLower(); // 文件后缀
- #endregion
+ // 先存库获取Id
+ var id = YitIdHelper.NextId();
+ var newFile = new SysFile
+ {
+ Id = id,
+ FileLocation = (int)FileLocation.LOCAL,
+ FileBucket = FileLocation.LOCAL.ToString(),
+ FileObjectName = $"{YitIdHelper.NextId()}{fileSuffix}",
+ FileOriginName = originalFilename,
+ FileSuffix = fileSuffix.TrimStart('.'),
+ FileSizeKb = fileSizeKb.ToString(),
+ FilePath = pathType
+ };
+ newFile = await App.GetService().Insertable(newFile).ExecuteReturnEntityAsync();
+ var finalName = newFile.FileObjectName; // 生成文件的最终名称
+ if (fileLocation == FileLocation.LOCAL) // 本地存储
+ {
+ var filePath = Path.Combine(App.WebHostEnvironment.WebRootPath, pathType);
+ if (!Directory.Exists(filePath))
+ Directory.CreateDirectory(filePath);
+ using (var stream = File.Create(Path.Combine(filePath, finalName)))
+ {
+ await file.CopyToAsync(stream);
+ }
+ }
+ else if (fileLocation == FileLocation.ALIYUN) // 阿里云OSS
+ {
+ var filePath = pathType + finalName;
+ OSSClientUtil.DeletefileCode(filePath);
+ var stream = file.OpenReadStream();
+ OSSClientUtil.PushMedia(stream, filePath);
+ }
+ newFile.FileObjectName = finalName;
+ return new LiveFileOutput() { Id = finalName, FileUrl= "/"+pathType + "/"+ finalName }; // 返回文件唯一标识
+ }
+ #endregion
}
}
diff --git a/GDZZ.Core/Cache/SqlSugarCache.cs b/GDZZ.Core/Cache/SqlSugarCache.cs
index 6070452..82bbd39 100644
--- a/GDZZ.Core/Cache/SqlSugarCache.cs
+++ b/GDZZ.Core/Cache/SqlSugarCache.cs
@@ -8,7 +8,9 @@ namespace GDZZ.Core;
public class SqlSugarCache : ICacheService
{
- private static ICache _cache = App.GetOptions().CacheType == CacheType.MemoryCache? App.RootServices.GetService(typeof(MemoryCache)) as ICache : App.RootServices.GetService(typeof(RedisCache)) as ICache;
+ private static ICache _cache = App.GetOptions().CacheType == CacheType.MemoryCache
+ ?App.RootServices.GetService(typeof(MemoryCache)) as ICache
+ :App.RootServices.GetService(typeof(RedisCache)) as ICache;
public void Add(string key, TV value)
{
diff --git a/GDZZ.Core/GDZZ.Core.xml b/GDZZ.Core/GDZZ.Core.xml
index 6c47aeb..10f0f76 100644
--- a/GDZZ.Core/GDZZ.Core.xml
+++ b/GDZZ.Core/GDZZ.Core.xml
@@ -3510,6 +3510,11 @@
账号
+
+
+ 租户ID
+
+
昵称
@@ -7063,14 +7068,6 @@
-
-
- 发送消息
-
-
-
-
-
组织机构参数
diff --git a/GDZZ.Core/Hubs/IChatClient.cs b/GDZZ.Core/Hubs/IChatClient.cs
index d230f5f..a072054 100644
--- a/GDZZ.Core/Hubs/IChatClient.cs
+++ b/GDZZ.Core/Hubs/IChatClient.cs
@@ -9,5 +9,5 @@ public interface IChatClient
Task AppendNotice(SysNotice notice);
- Task SendMessage(string handle, string user, string message);
+ Task SendMessage(string handle, string message);
}
diff --git a/GDZZ.Core/Manager/UserManager.cs b/GDZZ.Core/Manager/UserManager.cs
index bf3d844..4c905c2 100644
--- a/GDZZ.Core/Manager/UserManager.cs
+++ b/GDZZ.Core/Manager/UserManager.cs
@@ -18,6 +18,13 @@ public static class UserManager
///
public static string Account => App.User.FindFirst(ClaimConst.CLAINM_ACCOUNT)?.Value;
+
+
+ ///
+ /// 租户ID
+ ///
+ public static string TenantID => App.User.FindFirst(ClaimConst.TENANT_ID)?.Value;
+
///
/// 昵称
///
diff --git a/GDZZ.Core/Service/OnlineUser/SysOnlineUserService.cs b/GDZZ.Core/Service/OnlineUser/SysOnlineUserService.cs
index 06dca2f..aba1f67 100644
--- a/GDZZ.Core/Service/OnlineUser/SysOnlineUserService.cs
+++ b/GDZZ.Core/Service/OnlineUser/SysOnlineUserService.cs
@@ -52,7 +52,7 @@ public class SysOnlineUserService : ISysOnlineUserService, IDynamicApiController
[HttpPost("/sysOnlineUser/forceExist")]
[NonValidation]
public async Task ForceExist(OnlineUser user) {
- await _chatHubContext.Clients.Client(user.ConnectionId).ForceExist("7777777");
+ await _chatHubContext.Clients.Client(user.ConnectionId).ForceExist("111");
await _sysOnlineUerRep.DeleteAsync(user);
}
@@ -80,25 +80,7 @@ public class SysOnlineUserService : ISysOnlineUserService, IDynamicApiController
- ///
- /// 发送消息
- ///
- ///
- ///
- ///
- [NonAction]
- public async Task PushMessages(List userIds,string message)
- {
- var userList = _sysOnlineUerRep.Where(m => userIds.Contains(m.UserId)).ToList();
- if (userList.Any())
- {
- foreach (var item in userList)
- {
- await _chatHubContext.Clients.Client(item.ConnectionId).SendMessage("", item.Name, message);
- }
- }
- }
diff --git a/GDZZ.Core/SqlSugar/SqlSugarSetup.cs b/GDZZ.Core/SqlSugar/SqlSugarSetup.cs
index e5187c2..001af09 100644
--- a/GDZZ.Core/SqlSugar/SqlSugarSetup.cs
+++ b/GDZZ.Core/SqlSugar/SqlSugarSetup.cs
@@ -266,6 +266,7 @@ public static class SqlSugarSetup
}
if (attributes.Any(it => it is ColumnAttribute))
{
+ //I love you Tpei
column.DbColumnName = (attributes.First(it => it is ColumnAttribute) as ColumnAttribute).Name;
}
}
diff --git a/GDZZ.Web.Core/Startup.cs b/GDZZ.Web.Core/Startup.cs
index 4915355..23cddb0 100644
--- a/GDZZ.Web.Core/Startup.cs
+++ b/GDZZ.Web.Core/Startup.cs
@@ -21,6 +21,8 @@ using Furion.Logging;
using System.Collections.Generic;
using Newtonsoft.Json.Serialization;
using Newtonsoft.Json;
+using Microsoft.Extensions.FileProviders;
+using System.IO;
namespace GDZZ.Web.Core;
@@ -66,7 +68,6 @@ public class Startup : AppStartup
-
// 配置远程请求
services.AddRemoteRequest(option =>
{
@@ -123,6 +124,8 @@ public class Startup : AppStartup
app.UseHsts();
}
+
+
// 添加状态码拦截中间件
app.UseUnifyResultStatusCodes();
@@ -140,6 +143,8 @@ public class Startup : AppStartup
app.UseInject(string.Empty);
+
+
app.UseEndpoints(endpoints =>
{
endpoints.MapHub("/hubs/chathub");
diff --git a/GDZZ.Web.Entry/Program.cs b/GDZZ.Web.Entry/Program.cs
index 95a0777..0fab516 100644
--- a/GDZZ.Web.Entry/Program.cs
+++ b/GDZZ.Web.Entry/Program.cs
@@ -3,5 +3,6 @@ using GDZZ.Core;
Serve.Run(RunOptions.Default.ConfigureBuilder(builder => {
builder.UseLoggingFile();
+
}));
diff --git a/GDZZ.Web.Entry/wwwroot/Upload/Default/383348736938054.jpg b/GDZZ.Web.Entry/wwwroot/Upload/Default/383348736938054.jpg
deleted file mode 100644
index 0038db6..0000000
Binary files a/GDZZ.Web.Entry/wwwroot/Upload/Default/383348736938054.jpg and /dev/null differ
diff --git a/GDZZ.Web.Entry/wwwroot/Upload/Default/383346119102534.jpg b/GDZZ.Web.Entry/wwwroot/Upload/Default/387231988236358.jpg
similarity index 100%
rename from GDZZ.Web.Entry/wwwroot/Upload/Default/383346119102534.jpg
rename to GDZZ.Web.Entry/wwwroot/Upload/Default/387231988236358.jpg
diff --git a/GDZZ.Web.Entry/wwwroot/Upload/Default/387236610981958.jpg b/GDZZ.Web.Entry/wwwroot/Upload/Default/387236610981958.jpg
new file mode 100644
index 0000000..68c19b1
Binary files /dev/null and b/GDZZ.Web.Entry/wwwroot/Upload/Default/387236610981958.jpg differ
diff --git a/GDZZ.Web.Entry/wwwroot/Upload/Default/387237703028806.jpg b/GDZZ.Web.Entry/wwwroot/Upload/Default/387237703028806.jpg
new file mode 100644
index 0000000..68c19b1
Binary files /dev/null and b/GDZZ.Web.Entry/wwwroot/Upload/Default/387237703028806.jpg differ
diff --git a/GDZZ.Web.Entry/wwwroot/Upload/Default/387239003856966.jpg b/GDZZ.Web.Entry/wwwroot/Upload/Default/387239003856966.jpg
new file mode 100644
index 0000000..68c19b1
Binary files /dev/null and b/GDZZ.Web.Entry/wwwroot/Upload/Default/387239003856966.jpg differ
diff --git a/GDZZ.Web.Entry/wwwroot/Upload/Default/387241019330629.pdf b/GDZZ.Web.Entry/wwwroot/Upload/Default/387241019330629.pdf
new file mode 100644
index 0000000..50be903
Binary files /dev/null and b/GDZZ.Web.Entry/wwwroot/Upload/Default/387241019330629.pdf differ
diff --git a/GDZZ.Web.Entry/wwwroot/Upload/Default/387248057958470.pdf b/GDZZ.Web.Entry/wwwroot/Upload/Default/387248057958470.pdf
new file mode 100644
index 0000000..388a3f8
--- /dev/null
+++ b/GDZZ.Web.Entry/wwwroot/Upload/Default/387248057958470.pdf
@@ -0,0 +1,19678 @@
+%PDF-1.3
+1 0 obj
+<<
+/Type /Pages
+/Count 71
+/Kids [ 3 0 R 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 36 0 R 37 0 R 38 0 R 39 0 R 40 0 R 41 0 R 42 0 R 43 0 R 44 0 R 45 0 R 46 0 R 47 0 R 48 0 R 49 0 R 50 0 R 51 0 R 52 0 R 53 0 R 54 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R 67 0 R 68 0 R 69 0 R 70 0 R 71 0 R 72 0 R 73 0 R ]
+>>
+endobj
+2 0 obj
+<<
+/Producer (PyPDF2)
+>>
+endobj
+3 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 150 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 151 0 R
+/Type /Page
+>>
+endobj
+4 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 169 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 170 0 R
+/Type /Page
+>>
+endobj
+5 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 174 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 175 0 R
+/Type /Page
+>>
+endobj
+6 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 176 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 177 0 R
+/Type /Page
+>>
+endobj
+7 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 181 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 182 0 R
+/Type /Page
+>>
+endobj
+8 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 183 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 184 0 R
+/Type /Page
+>>
+endobj
+9 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 185 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 186 0 R
+/Type /Page
+>>
+endobj
+10 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 187 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 188 0 R
+/Type /Page
+>>
+endobj
+11 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 189 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 190 0 R
+/Type /Page
+>>
+endobj
+12 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 191 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 192 0 R
+/Type /Page
+>>
+endobj
+13 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 193 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 194 0 R
+/Type /Page
+>>
+endobj
+14 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 199 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 200 0 R
+/Type /Page
+>>
+endobj
+15 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 202 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 203 0 R
+/Type /Page
+>>
+endobj
+16 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 204 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 205 0 R
+/Type /Page
+>>
+endobj
+17 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 206 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 207 0 R
+/Type /Page
+>>
+endobj
+18 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 208 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 209 0 R
+/Type /Page
+>>
+endobj
+19 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 210 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 211 0 R
+/Type /Page
+>>
+endobj
+20 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 212 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 213 0 R
+/Type /Page
+>>
+endobj
+21 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 222 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 223 0 R
+/Type /Page
+>>
+endobj
+22 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 224 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 225 0 R
+/Type /Page
+>>
+endobj
+23 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 226 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 227 0 R
+/Type /Page
+>>
+endobj
+24 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 231 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 232 0 R
+/Type /Page
+>>
+endobj
+25 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 233 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 234 0 R
+/Type /Page
+>>
+endobj
+26 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 238 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 239 0 R
+/Type /Page
+>>
+endobj
+27 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 240 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 241 0 R
+/Type /Page
+>>
+endobj
+28 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 245 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 246 0 R
+/Type /Page
+>>
+endobj
+29 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 257 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 258 0 R
+/Type /Page
+>>
+endobj
+30 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 262 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 263 0 R
+/Type /Page
+>>
+endobj
+31 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 264 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 265 0 R
+/Type /Page
+>>
+endobj
+32 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 266 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 267 0 R
+/Type /Page
+>>
+endobj
+33 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 269 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 270 0 R
+/Type /Page
+>>
+endobj
+34 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 276 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 277 0 R
+/Type /Page
+>>
+endobj
+35 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 278 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 279 0 R
+/Type /Page
+>>
+endobj
+36 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 280 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 281 0 R
+/Type /Page
+>>
+endobj
+37 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 285 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 286 0 R
+/Type /Page
+>>
+endobj
+38 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 301 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 302 0 R
+/Type /Page
+>>
+endobj
+39 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 309 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 310 0 R
+/Type /Page
+>>
+endobj
+40 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 313 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 314 0 R
+/Type /Page
+>>
+endobj
+41 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 319 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 320 0 R
+/Type /Page
+>>
+endobj
+42 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 329 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 330 0 R
+/Type /Page
+>>
+endobj
+43 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 335 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 336 0 R
+/Type /Page
+>>
+endobj
+44 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 351 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 352 0 R
+/Type /Page
+>>
+endobj
+45 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 355 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 356 0 R
+/Type /Page
+>>
+endobj
+46 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 361 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 362 0 R
+/Type /Page
+>>
+endobj
+47 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 365 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 366 0 R
+/Type /Page
+>>
+endobj
+48 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 372 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 373 0 R
+/Type /Page
+>>
+endobj
+49 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 375 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 376 0 R
+/Type /Page
+>>
+endobj
+50 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 380 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 381 0 R
+/Type /Page
+>>
+endobj
+51 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 382 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 383 0 R
+/Type /Page
+>>
+endobj
+52 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 384 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 385 0 R
+/Type /Page
+>>
+endobj
+53 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 389 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 390 0 R
+/Type /Page
+>>
+endobj
+54 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 391 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 392 0 R
+/Type /Page
+>>
+endobj
+55 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 393 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 394 0 R
+/Type /Page
+>>
+endobj
+56 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 395 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 396 0 R
+/Type /Page
+>>
+endobj
+57 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 397 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 398 0 R
+/Type /Page
+>>
+endobj
+58 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 399 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 400 0 R
+/Type /Page
+>>
+endobj
+59 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 402 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 403 0 R
+/Type /Page
+>>
+endobj
+60 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 405 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 406 0 R
+/Type /Page
+>>
+endobj
+61 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 407 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 408 0 R
+/Type /Page
+>>
+endobj
+62 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 409 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 410 0 R
+/Type /Page
+>>
+endobj
+63 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 411 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 412 0 R
+/Type /Page
+>>
+endobj
+64 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 413 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 414 0 R
+/Type /Page
+>>
+endobj
+65 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 423 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 424 0 R
+/Type /Page
+>>
+endobj
+66 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 425 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 426 0 R
+/Type /Page
+>>
+endobj
+67 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 427 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 428 0 R
+/Type /Page
+>>
+endobj
+68 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 429 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 430 0 R
+/Type /Page
+>>
+endobj
+69 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 431 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 432 0 R
+/Type /Page
+>>
+endobj
+70 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 438 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 439 0 R
+/Type /Page
+>>
+endobj
+71 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 440 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 441 0 R
+/Type /Page
+>>
+endobj
+72 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 442 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 443 0 R
+/Type /Page
+>>
+endobj
+73 0 obj
+<<
+/CropBox [ 0 0 595.22 842 ]
+/Parent 1 0 R
+/Contents 444 0 R
+/Rotate 0
+/MediaBox [ 0 0 595.22 842 ]
+/Resources 445 0 R
+/Type /Page
+>>
+endobj
+74 0 obj
+<<
+/Type /Outlines
+/First 75 0 R
+/Last 148 0 R
+/Count 74
+>>
+endobj
+75 0 obj
+<<
+/Title (N\055e\207dX\211\201)
+/Dest [ 5 0 R /XYZ null null null ]
+/Parent 74 0 R
+/Next 76 0 R
+>>
+endobj
+76 0 obj
+<<
+/Title (\202e\207dX\211\201)
+/Dest [ 6 0 R /XYZ null null null ]
+/Parent 74 0 R
+/Prev 75 0 R
+/Next 77 0 R
+>>
+endobj
+77 0 obj
+<<
+/Title (\0001\000\040\176\213)
+/Dest [ 11 0 R /XYZ null null null ]
+/Parent 74 0 R
+/Prev 76 0 R
+/Next 93 0 R
+/First 78 0 R
+/Last 90 0 R
+>>
+endobj
+78 0 obj
+<<
+/Title (\0001\000\056\0001\000\040l\175\217f\200\200\027T\214c\222e\076s\260r\266)
+/Dest [ 11 0 R /XYZ null null null ]
+/Parent 77 0 R
+/Next 79 0 R
+>>
+endobj
+79 0 obj
+<<
+/Title (\0001\000\056\0002\000\040l\175\217f\134\076l\024lagriv\204Sq\133)
+/Dest [ 11 0 R /XYZ null null null ]
+/Parent 77 0 R
+/Prev 78 0 R
+/Next 84 0 R
+/First 80 0 R
+/Last 83 0 R
+>>
+endobj
+80 0 obj
+<<
+/Title (\0001\000\056\0002\000\056\0001\000\040N\000l\047S\026x\133NOST\214s\257X\203v\204Sq\133)
+/Dest [ 11 0 R /XYZ null null null ]
+/Parent 79 0 R
+/Next 81 0 R
+>>
+endobj
+81 0 obj
+<<
+/Title (\0001\000\056\0002\000\056\0002\000\040xl\042S\026T\010ri\133NOST\214s\257X\203v\204Sq\133)
+/Dest [ 12 0 R /XYZ null null null ]
+/Parent 79 0 R
+/Prev 80 0 R
+/Next 82 0 R
+>>
+endobj
+82 0 obj
+<<
+/Title (\0001\000\056\0002\000\056\0003\000\040l\056l\047S\026T\010ri\133NOST\214s\257X\203v\204Sq\133)
+/Dest [ 12 0 R /XYZ null null null ]
+/Parent 79 0 R
+/Prev 81 0 R
+/Next 83 0 R
+>>
+endobj
+83 0 obj
+<<
+/Title (\0001\000\056\0002\000\056\0004\000\040ST8Qe\137\256\174\222\133NOST\214s\257X\203v\204Sq\133)
+/Dest [ 12 0 R /XYZ null null null ]
+/Parent 79 0 R
+/Prev 82 0 R
+>>
+endobj
+84 0 obj
+<<
+/Title (\0001\000\056\0003\000\040l\175\217f\134\076l\024c\222e\076l\211T\214qlm\210\200\027h\007Q)
+/Dest [ 13 0 R /XYZ null null null ]
+/Parent 77 0 R
+/Prev 79 0 R
+/Next 87 0 R
+/First 85 0 R
+/Last 86 0 R
+>>
+endobj
+85 0 obj
+<<
+/Title (\0001\000\056\0003\000\056\0001\000\040l\175\217f\134\076l\024c\222e\076v\204l\211)
+/Dest [ 13 0 R /XYZ null null null ]
+/Parent 84 0 R
+/Next 86 0 R
+>>
+endobj
+86 0 obj
+<<
+/Title (\0001\000\056\0003\000\056\0002\000\040l\175\217fqlm\210\200\027h\007Q)
+/Dest [ 14 0 R /XYZ null null null ]
+/Parent 84 0 R
+/Prev 85 0 R
+>>
+endobj
+87 0 obj
+<<
+/Title (\0001\000\056\0004\000\040l\175\217f\202\202lb\200g\057T\214\134\076l\024c\222e\076c\247R6b\200g\057)
+/Dest [ 15 0 R /XYZ null null null ]
+/Parent 77 0 R
+/Prev 84 0 R
+/Next 90 0 R
+/First 88 0 R
+/Last 89 0 R
+>>
+endobj
+88 0 obj
+<<
+/Title (\0001\000\056\0004\000\056\0001\000\040l\175\217f\202\202lb\200g\057)
+/Dest [ 15 0 R /XYZ null null null ]
+/Parent 87 0 R
+/Next 89 0 R
+>>
+endobj
+89 0 obj
+<<
+/Title (\0001\000\056\0004\000\056\0002\000\040l\175\217f\134\076l\024c\222e\076c\247R6b\200g\057)
+/Dest [ 16 0 R /XYZ null null null ]
+/Parent 87 0 R
+/Prev 88 0 R
+>>
+endobj
+90 0 obj
+<<
+/Title (\0001\000\056\0005\000\040g\054e\207x\024zvv\204vv\204T\214N\073\211\201Q\205\133)
+/Dest [ 17 0 R /XYZ null null null ]
+/Parent 77 0 R
+/Prev 87 0 R
+/First 91 0 R
+/Last 92 0 R
+>>
+endobj
+91 0 obj
+<<
+/Title (\0001\000\056\0005\000\056\0001\000\040g\054e\207x\024zvv\204vv\204)
+/Dest [ 17 0 R /XYZ null null null ]
+/Parent 90 0 R
+/Next 92 0 R
+>>
+endobj
+92 0 obj
+<<
+/Title (\0001\000\056\0005\000\056\0002\000\040g\054e\207x\024zvv\204N\073\211\201Q\205\133)
+/Dest [ 18 0 R /XYZ null null null ]
+/Parent 90 0 R
+/Prev 91 0 R
+>>
+endobj
+93 0 obj
+<<
+/Title (\0002\000\040xu5\173Iy\273\133POSt\006\213x\024zv)
+/Dest [ 19 0 R /XYZ null null null ]
+/Parent 74 0 R
+/Prev 77 0 R
+/Next 110 0 R
+/First 94 0 R
+/Last 109 0 R
+>>
+endobj
+94 0 obj
+<<
+/Title (\0002\000\056\0001\000\040h\257\136\246\137\072xW\072t\006\213)
+/Dest [ 19 0 R /XYZ null null null ]
+/Parent 93 0 R
+/Next 101 0 R
+/First 95 0 R
+/Last 100 0 R
+>>
+endobj
+95 0 obj
+<<
+/Title (\0002\000\056\0001\000\056\0001\000\040h\257\136\246Sh\257\136\246xW\072)
+/Dest [ 20 0 R /XYZ null null null ]
+/Parent 94 0 R
+/Next 96 0 R
+>>
+endobj
+96 0 obj
+<<
+/Title (\0002\000\056\0001\000\056\0002\000\040ri\215\050x\140\047v\204\133\232NI)
+/Dest [ 20 0 R /XYZ null null null ]
+/Parent 94 0 R
+/Prev 95 0 R
+/Next 97 0 R
+>>
+endobj
+97 0 obj
+<<
+/Title (\0002\000\056\0001\000\056\0003\000\040ri\215\050x\140\047v\204R\006\174\173)
+/Dest [ 21 0 R /XYZ null null null ]
+/Parent 94 0 R
+/Prev 96 0 R
+/Next 98 0 R
+>>
+endobj
+98 0 obj
+<<
+/Title (\0002\000\056\0001\000\056\0004\000\040l\024OSv\204xry\140\047)
+/Dest [ 21 0 R /XYZ null null null ]
+/Parent 94 0 R
+/Prev 97 0 R
+/Next 99 0 R
+>>
+endobj
+99 0 obj
+<<
+/Title (\0002\000\056\0001\000\056\0005\000\040\230zb\227x\140\047l\024OSR\006\133PW\050h\257\136\246xW\072N\055v\204S\327R\233)
+/Dest [ 23 0 R /XYZ null null null ]
+/Parent 94 0 R
+/Prev 98 0 R
+/Next 100 0 R
+>>
+endobj
+100 0 obj
+<<
+/Title (\0002\000\056\0001\000\056\0006\000\040h\257\136\246xW\072N\055l\056l\047v\204R\006y\273g\072t\006)
+/Dest [ 25 0 R /XYZ null null null ]
+/Parent 94 0 R
+/Prev 99 0 R
+>>
+endobj
+101 0 obj
+<<
+/Title (\0002\000\056\0002\000\040\173Iy\273\133POSv\204Wg\054t\006\213)
+/Dest [ 26 0 R /XYZ null null null ]
+/Parent 93 0 R
+/Prev 94 0 R
+/Next 108 0 R
+/First 102 0 R
+/Last 107 0 R
+>>
+endobj
+102 0 obj
+<<
+/Title (\0002\000\056\0002\000\056\0001\000\040l\024OSe\076u5ry\140\047)
+/Dest [ 26 0 R /XYZ null null null ]
+/Parent 101 0 R
+/Next 103 0 R
+>>
+endobj
+103 0 obj
+<<
+/Title (\0002\000\056\0002\000\056\0002\000\040ldu\037e\076u5t\006\213)
+/Dest [ 28 0 R /XYZ null null null ]
+/Parent 101 0 R
+/Prev 102 0 R
+/Next 104 0 R
+>>
+endobj
+104 0 obj
+<<
+/Title (\0002\000\056\0002\000\056\0003\000\040mAgt\006\213)
+/Dest [ 29 0 R /XYZ null null null ]
+/Parent 101 0 R
+/Prev 103 0 R
+/Next 105 0 R
+>>
+endobj
+105 0 obj
+<<
+/Title (\0002\000\056\0002\000\056\0004\000\040\173Iy\273\133POSv\204N\247u\037\137b\137\017)
+/Dest [ 30 0 R /XYZ null null null ]
+/Parent 101 0 R
+/Prev 104 0 R
+/Next 106 0 R
+>>
+endobj
+106 0 obj
+<<
+/Title (\0002\000\056\0002\000\056\0005\000\040\201\011Qu5fUe\076u5)
+/Dest [ 31 0 R /XYZ null null null ]
+/Parent 101 0 R
+/Prev 105 0 R
+/Next 107 0 R
+>>
+endobj
+107 0 obj
+<<
+/Title (\0002\000\056\0002\000\056\0006\000\040\173Iy\273\133POSoS\026zzl\024v\204g\072t\006R\006g\220)
+/Dest [ 32 0 R /XYZ null null null ]
+/Parent 101 0 R
+/Prev 106 0 R
+>>
+endobj
+108 0 obj
+<<
+/Title (\0002\000\056\0003\000\040xu5\173Iy\273\133POSg\201S\026oSzzl\024R\006g\220)
+/Dest [ 34 0 R /XYZ null null null ]
+/Parent 93 0 R
+/Prev 101 0 R
+/Next 109 0 R
+>>
+endobj
+109 0 obj
+<<
+/Title (\0002\000\056\0004\000\040g\054z\134\017\176)
+/Dest [ 35 0 R /XYZ null null null ]
+/Parent 93 0 R
+/Prev 108 0 R
+>>
+endobj
+110 0 obj
+<<
+/Title (\0003\000\040xu5\173Iy\273\133POS\133\236\232\214\210\177nv\204\213\213\241)
+/Dest [ 36 0 R /XYZ null null null ]
+/Parent 74 0 R
+/Prev 93 0 R
+/Next 123 0 R
+/First 111 0 R
+/Last 122 0 R
+>>
+endobj
+111 0 obj
+<<
+/Title (\0003\000\056\0001\000\040\210\177n\140\073OS\213\213\241\140\035\215)
+/Dest [ 36 0 R /XYZ null null null ]
+/Parent 110 0 R
+/Next 112 0 R
+>>
+endobj
+112 0 obj
+<<
+/Title (\0003\000\056\0002\000\040xS\026\176)
+/Dest [ 36 0 R /XYZ null null null ]
+/Parent 110 0 R
+/Prev 111 0 R
+/Next 116 0 R
+/First 113 0 R
+/Last 115 0 R
+>>
+endobj
+113 0 obj
+<<
+/Title (\0003\000\056\0002\000\056\0001\000\040xS\026\176\140\073OS\176g\204)
+/Dest [ 36 0 R /XYZ null null null ]
+/Parent 112 0 R
+/Next 114 0 R
+>>
+endobj
+114 0 obj
+<<
+/Title (\0003\000\056\0002\000\056\0002\000\040xS\026\176x\215\213\213\241S\237R\031)
+/Dest [ 37 0 R /XYZ null null null ]
+/Parent 112 0 R
+/Prev 113 0 R
+/Next 115 0 R
+>>
+endobj
+115 0 obj
+<<
+/Title (\0003\000\056\0002\000\056\0003\000\040xS\026\176N\055h\257\136\246x\224v\204\176g\204W\213\137\017)
+/Dest [ 38 0 R /XYZ null null null ]
+/Parent 112 0 R
+/Prev 114 0 R
+>>
+endobj
+116 0 obj
+<<
+/Title (\0003\000\056\0003\000\040\173Iy\273\133POSe\076u5S\136\224Vh)
+/Dest [ 41 0 R /XYZ null null null ]
+/Parent 110 0 R
+/Prev 112 0 R
+/Next 119 0 R
+/First 117 0 R
+/Last 118 0 R
+>>
+endobj
+117 0 obj
+<<
+/Title (\0003\000\056\0003\000\056\0001\000\040e\076u5S\136\224Vh\140\073OS\176g\204)
+/Dest [ 41 0 R /XYZ null null null ]
+/Parent 116 0 R
+/Next 118 0 R
+>>
+endobj
+118 0 obj
+<<
+/Title (\0003\000\056\0003\000\056\0002\000\040e\076u5S\136\224\173\241\176g\204)
+/Dest [ 42 0 R /XYZ null null null ]
+/Parent 116 0 R
+/Prev 117 0 R
+>>
+endobj
+119 0 obj
+<<
+/Title (\0003\000\056\0004\000\040u5n\220\220\011b)
+/Dest [ 44 0 R /XYZ null null null ]
+/Parent 110 0 R
+/Prev 116 0 R
+/Next 122 0 R
+/First 120 0 R
+/Last 121 0 R
+>>
+endobj
+120 0 obj
+<<
+/Title (\0003\000\056\0004\000\056\0001\000\040u5n\220u5S\213)
+/Dest [ 44 0 R /XYZ null null null ]
+/Parent 119 0 R
+/Next 121 0 R
+>>
+endobj
+121 0 obj
+<<
+/Title (\0003\000\056\0004\000\056\0002\000\040\201\011Qu5n\220)
+/Dest [ 45 0 R /XYZ null null null ]
+/Parent 119 0 R
+/Prev 120 0 R
+>>
+endobj
+122 0 obj
+<<
+/Title (\0003\000\056\0005\000\040g\054z\134\017\176)
+/Dest [ 46 0 R /XYZ null null null ]
+/Parent 110 0 R
+/Prev 119 0 R
+>>
+endobj
+123 0 obj
+<<
+/Title (\0004\000\040\133\236\232\214\210\177nN\016el)
+/Dest [ 47 0 R /XYZ null null null ]
+/Parent 74 0 R
+/Prev 110 0 R
+/Next 129 0 R
+/First 124 0 R
+/Last 128 0 R
+>>
+endobj
+124 0 obj
+<<
+/Title (\0004\000\056\0001\000\040SR\250g\072Sg\266\213\232\214)
+/Dest [ 47 0 R /XYZ null null null ]
+/Parent 123 0 R
+/Next 127 0 R
+/First 125 0 R
+/Last 126 0 R
+>>
+endobj
+125 0 obj
+<<
+/Title (\0004\000\056\0001\000\056\0001\000\040\133\236\232\214NVhT\214\213Y\007)
+/Dest [ 47 0 R /XYZ null null null ]
+/Parent 124 0 R
+/Next 126 0 R
+>>
+endobj
+126 0 obj
+<<
+/Title (\0004\000\056\0001\000\056\0002\000\040\133\236\232\214el)
+/Dest [ 49 0 R /XYZ null null null ]
+/Parent 124 0 R
+/Prev 125 0 R
+>>
+endobj
+127 0 obj
+<<
+/Title (\0004\000\056\0002\000\040\133\236\232\214ke\232\244)
+/Dest [ 51 0 R /XYZ null null null ]
+/Parent 123 0 R
+/Prev 124 0 R
+/Next 128 0 R
+>>
+endobj
+128 0 obj
+<<
+/Title (\0004\000\056\0003\000\040g\054z\134\017\176)
+/Dest [ 51 0 R /XYZ null null null ]
+/Parent 123 0 R
+/Prev 127 0 R
+>>
+endobj
+129 0 obj
+<<
+/Title (\0005\000\040\133\236\232\214\176g\234R\006g\220)
+/Dest [ 52 0 R /XYZ null null null ]
+/Parent 74 0 R
+/Prev 123 0 R
+/Next 142 0 R
+/First 130 0 R
+/Last 141 0 R
+>>
+endobj
+130 0 obj
+<<
+/Title (\0005\000\056\0001\000\040\133\236\232\214\210\177n\133SR\250g\072l\200\027v\204\137qT)
+/Dest [ 52 0 R /XYZ null null null ]
+/Parent 129 0 R
+/Next 133 0 R
+/First 131 0 R
+/Last 132 0 R
+>>
+endobj
+131 0 obj
+<<
+/Title (\0005\000\056\0001\000\056\0001\000\040xS\026\176SUrO\134u\050)
+/Dest [ 52 0 R /XYZ null null null ]
+/Parent 130 0 R
+/Next 132 0 R
+>>
+endobj
+132 0 obj
+<<
+/Title (\0005\000\056\0001\000\056\0002\000\040xS\026\176T\214e\076u5\173\241QqT\014O\134u\050)
+/Dest [ 54 0 R /XYZ null null null ]
+/Parent 130 0 R
+/Prev 131 0 R
+>>
+endobj
+133 0 obj
+<<
+/Title (\0005\000\056\0002\000\040xS\026\176\176g\204W\213\137\017\133SR\250g\072l\200\027v\204\137qT)
+/Dest [ 55 0 R /XYZ null null null ]
+/Parent 129 0 R
+/Prev 130 0 R
+/Next 136 0 R
+/First 134 0 R
+/Last 135 0 R
+>>
+endobj
+134 0 obj
+<<
+/Title (\0005\000\056\0002\000\056\0001\000\040\215\037\203wry\140\047\213\232\214)
+/Dest [ 55 0 R /XYZ null null null ]
+/Parent 133 0 R
+/Next 135 0 R
+>>
+endobj
+135 0 obj
+<<
+/Title (\0005\000\056\0002\000\056\0002\000\040\220\037\136\246ry\140\047\213\232\214)
+/Dest [ 57 0 R /XYZ null null null ]
+/Parent 133 0 R
+/Prev 134 0 R
+>>
+endobj
+136 0 obj
+<<
+/Title (\0005\000\056\0003\000\040\133\236\232\214\210\177n\133SR\250g\072c\222e\076v\204\137qT)
+/Dest [ 59 0 R /XYZ null null null ]
+/Parent 129 0 R
+/Prev 133 0 R
+/Next 141 0 R
+/First 137 0 R
+/Last 140 0 R
+>>
+endobj
+137 0 obj
+<<
+/Title (\0005\000\056\0003\000\056\0001\000\040xS\026\176T\214e\076u5\173\241QqT\014O\134u\050)
+/Dest [ 60 0 R /XYZ null null null ]
+/Parent 136 0 R
+/Next 138 0 R
+>>
+endobj
+138 0 obj
+<<
+/Title (\0005\000\056\0003\000\056\0002\000\040e\076u5\173\241\220\032u5u5S\213v\204\137qT)
+/Dest [ 62 0 R /XYZ null null null ]
+/Parent 136 0 R
+/Prev 137 0 R
+/Next 139 0 R
+>>
+endobj
+139 0 obj
+<<
+/Title (\0005\000\056\0003\000\056\0003\000\040e\076u5S\136\224\173\241\176g\204W\213\137\017v\204\137qT)
+/Dest [ 63 0 R /XYZ null null null ]
+/Parent 136 0 R
+/Prev 138 0 R
+/Next 140 0 R
+>>
+endobj
+140 0 obj
+<<
+/Title (\0005\000\056\0003\000\056\0004\000\040e\076u5S\136\224\173\241\220\032u5epvv\204\137qT)
+/Dest [ 64 0 R /XYZ null null null ]
+/Parent 136 0 R
+/Prev 139 0 R
+>>
+endobj
+141 0 obj
+<<
+/Title (\0005\000\056\0004\000\040g\054z\134\017\176)
+/Dest [ 66 0 R /XYZ null null null ]
+/Parent 129 0 R
+/Prev 136 0 R
+>>
+endobj
+142 0 obj
+<<
+/Title (\0006\000\040\176\213N\016\136\213\256)
+/Dest [ 67 0 R /XYZ null null null ]
+/Parent 74 0 R
+/Prev 129 0 R
+/Next 145 0 R
+/First 143 0 R
+/Last 144 0 R
+>>
+endobj
+143 0 obj
+<<
+/Title (\0006\000\056\0001\000\040\176\213)
+/Dest [ 67 0 R /XYZ null null null ]
+/Parent 142 0 R
+/Next 144 0 R
+>>
+endobj
+144 0 obj
+<<
+/Title (\0006\000\056\0002\000\040\136\213\256)
+/Dest [ 68 0 R /XYZ null null null ]
+/Parent 142 0 R
+/Prev 143 0 R
+>>
+endobj
+145 0 obj
+<<
+/Title (\201\214\042)
+/Dest [ 69 0 R /XYZ null null null ]
+/Parent 74 0 R
+/Prev 142 0 R
+/Next 146 0 R
+>>
+endobj
+146 0 obj
+<<
+/Title (S\200\003e\207s\056)
+/Dest [ 70 0 R /XYZ null null null ]
+/Parent 74 0 R
+/Prev 145 0 R
+/Next 147 0 R
+>>
+endobj
+147 0 obj
+<<
+/Title (\226D\137U)
+/Dest [ 73 0 R /XYZ null null null ]
+/Parent 74 0 R
+/Prev 146 0 R
+/First 148 0 R
+/Last 148 0 R
+>>
+endobj
+148 0 obj
+<<
+/Title (\000A\000\056\000\040O\134\200\005W\050e\073\213xUX\133fOMg\037\225S\210hv\204\213e\207)
+/Dest [ 73 0 R /XYZ null null null ]
+/Parent 147 0 R
+>>
+endobj
+149 0 obj
+<<
+/Type /Catalog
+/Pages 1 0 R
+/Outlines 74 0 R
+>>
+endobj
+150 0 obj
+<<
+/Filter /FlateDecode
+/Length 696
+>>
+stream
+HUM1ϯ-+ɒ-CCRK)[a>
+K)=W&PB㱞<7¢ռm%>D䒪gڇܽ}ۡn^j Z(xu)T iB=d2Ҭ3"1%Ta!VS9r{W seJ>Drf㚮HD,*1!us4"&@{J
^Oe/j0aZ--xjgAi"P9:c9kO&h`7<47h>*kx)&:j\$9ae@o)uUceZAr%5і^#MGMa6!NKxNjaviy N['y6^XiANVXu.A)DnĊՒ&mzC+se5ui0!$1M.gr[|)=C,UGSZ `xgS),a3|IJBUeN@<%+[_PRҋ~ꃈ<pa~f'Nʏ=-{<eO$
ݷh<.|^&e8{-}0 l
+
+endstream
+endobj
+151 0 obj
+<<
+/XObject <<
+/Im1 152 0 R
+>>
+/ColorSpace <<
+/Cs8 153 0 R
+>>
+/Font <<
+/TT2 155 0 R
+/TT3 158 0 R
+/TT4 163 0 R
+>>
+/ProcSet [ /PDF /Text /ImageC /ImageI ]
+/ExtGState <<
+/GS1 168 0 R
+>>
+>>
+endobj
+152 0 obj
+<<
+/Subtype /Image
+/Filter /FlateDecode
+/BitsPerComponent 4
+/ColorSpace 153 0 R
+/Width 252
+/Height 260
+/Type /XObject
+/Length 3495
+>>
+stream
+HYEntA#" iw.W HBy]?~(ѿd<7ws|ߗ}84{*/ߚ7Kc"=3}d[L>*όdQG/l[AjQhOTb
+}_~|"+j&2/ZtJnN ;1?nz!m\I4B|{&KY>=<ݽEPE#G%YLPA
xIPy<9f!vl{5g&PH
nuV`ncM*{t6[cs.n[eN&61gz4y$Z/9ݙjN^ӝؔ-=x;q*
̇UgEKM"_W[S^]E1dAL?Y=kU16hXYzef 3f_Ĩvfǣ`җ^u !!}ֲO.:]0Jm*sߺN!b]3v^%\6]ﯥk|¸
"%~̣WYzzqvڦҿ^Z~eR&Ds]Aێ>Q_dFþt^wq'fԝpFvPKÍ]l7^
PgCU19җJhU6@@OΏ5W{XVlEњk[[zEޙ1N7Dڒ3sчQ0=8=z7qM7ӡ `9KzhJwYrsDHx
Gꮞ"tW4yM]YsVc)jI:⑮0HtS>ѭ!L ٤֞ qd*zJY;UR{:"9X{{'-nMW}7 dGOյ̥b3m[CX)GO2lC qxNNp2ut]~@/#wΙ.l4%§38`LAȖ;f,4: td^S/0>v
`GA%kW6/z/+.Z5맥-]Vs /rD^l.7z,XjadIoCx VUFAOW{9b{ߝ -%Lobn瑫GRzQ=ohIvl+[cE̠܇u鈮9JGnkPw 9_BǸa}zq;$BKì$bM~J8:vϩ9Df"}O_4RE,{hORzUJQ&"]31Ʀf%!tHAfVӝ-GBC; Se^[uTEcEgF[ qWj܈pz:gtwvFFw.&zK,\hbbt!ms?af1Ⱊz6gVsN">%5PKN|p._9=\:WJxa]fIgIѡE]/H}6eQR5@ |`б>t(W
+xl9]gyN5YaBƭ!S
+wv>b@!*4p@2Z7dc҇z|=xK@3oBćT\%^NxL|p[e<o3$LbdaDh=EF~AM|BɄi}f]ֽA.M=Ӈ9N)IUҫĵ6m\N@◅zOշoF6DG`h3UU#+r8$t㢡SZx9|=ݦ~J;.aH1OkC|KGBQߞ
QV&u79RHdJ7٢htԦ8Afs3gfӾ Sm8t㨽R:2:xf9O^GЃ\zXX_9~9MBwsO8"zҠPΪbm~;8(FT}ʸɚ
{zLנrKr (T`"V̇J|p i72sZ_D #9ik7=On'O:
cYkz>r[w%MԲOj̟{)[:fBCow4}W~)8:mm{=O̫5A&$"w>ɳn}ӜnPk .+p~^0q~j|i\?8b}ȯ5`> Yvmpa硵~ЁB}|tttttt+
+
+endstream
+endobj
+153 0 obj
+[ /Indexed /DeviceCMYK 15 154 0 R ]
+endobj
+154 0 obj
+<<
+/Length 65
+>>
+stream
+ 濭濭濭濭濭濭濭濭濭濭
+
+endstream
+endobj
+155 0 obj
+<<
+/Subtype /TrueType
+/FontDescriptor 156 0 R
+/LastChar 215
+/Widths [ 250 0 0 0 0 833 0 180 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 0 564 564 564 0 0 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 0 333 0 0 0 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 0 480 541 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 549 0 0 0 0 0 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 564 ]
+/BaseFont /MFPDFG+TimesNewRomanPSMT
+/FirstChar 32
+/Encoding /WinAnsiEncoding
+/Type /Font
+>>
+endobj
+156 0 obj
+<<
+/StemV 82
+/FontName /MFPDFG+TimesNewRomanPSMT
+/FontStretch /Normal
+/FontFile2 157 0 R
+/FontWeight 400
+/Flags 34
+/Descent -216
+/FontBBox [ -568 -307 2000 1007 ]
+/Ascent 891
+/FontFamily (Times\040New\040Roman)
+/CapHeight 656
+/XHeight -546
+/Type /FontDescriptor
+/ItalicAngle 0
+>>
+endobj
+157 0 obj
+<<
+/Filter /FlateDecode
+/Length1 73776
+/Length 46251
+>>
+stream
+HV{\s | |eתG;D8g zMEh1
+n*bq hyqjw {3ŽvBhX M