EXtremeZip 2022.2.4 → 2022.2.20

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 18b15f99993a00ab85f9dc642d40bd43141eb4f59c357c14f11155476eeee56d
4
- data.tar.gz: 602d58ef6b385072c725263f96fc0dcdaa045c98c106d1c006f88b1bf285504a
3
+ metadata.gz: 4b684ef3eb29aacd0f18ae476b837af976b8bb054c4dd90dd07dcfe7873e833a
4
+ data.tar.gz: 4d0410d8d161d798e514694559f65595fa3ffcc78c90d937e33daa2decdbcd32
5
5
  SHA512:
6
- metadata.gz: c13853be7482d3e5a0592f5dc866dda963dc186823f087cf506fdd9556ee4ccb1b579f756d6e3ba39b6c595c7dff6b0baec6e9929824881fb2ce452e20440254
7
- data.tar.gz: 8935108d009d1884da3ba99e4fc20cefbd335c1cd8de818a1b93958726e5e9320f6e1762aec72442026f63149fdf90de3e603fb9d4d55b93ed51cfe3bc584a68
6
+ metadata.gz: a21e8e7e4428a2d1963507f93068c2a75f451d31d5bc684e30c3178f30bfcaf0ed59637f10cb998316849ee617988b04d7938c16b9a3596a1f9011277a401680
7
+ data.tar.gz: 1ec8b2c365b10c609d237b9092a1f63bfd8107b38ccbd76334e0a5f3b1ceb626c5d25dc73274b37291942da23e3aff2256aa5b17db56def39d718d91cd4d19c3
@@ -1,20 +1,47 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # require 'pathname'
4
- # require File.dirname(__FILE__)+'/filemessage.pb.rb'
5
3
  require 'victoriafresh'
6
4
  require 'cbor'
7
5
  require 'lzma'
8
6
  require 'get_process_mem'
9
7
 
10
8
  def checkMemoryUsage(lineNumber)
11
- mem = GetProcessMem.new
9
+ mem = GetProcessMem.new
12
10
 
13
- puts("#{lineNumber} , Memory: #{mem.mb}"); # Debug
11
+ puts("#{lineNumber} , Memory: #{mem.mb}"); # Debug
14
12
  end # def checkMemoryUsage
15
13
 
16
- # 根据版本号,提取VFS数据内容
17
- def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion)
14
+
15
+
16
+
17
+ class ExtremeUnZip
18
+ # 根据偏移值来读取压缩块数据列表。
19
+ def readVfsDataList(wholeCbor)
20
+ compressedVfsDataList = [] # 获取压缩后的数据块列表
21
+ startIndix=wholeCbor['vfsDataListStart'] # 初始起始位置。
22
+
23
+ puts "whole length: #{@wholeFileContent.length}, list conent: #{wholeCbor['vfsDataList']}" # Debug
24
+
25
+
26
+ wholeCbor['vfsDataList'].each do |currentBlockInfo| # 一个个块地处理
27
+ length=currentBlockInfo['length'] # 获取长度。
28
+
29
+ currentBlock=@wholeFileContent[startIndix, length] # 读取内容
30
+
31
+ puts "start index: #{startIndix}, length: #{length}, content length: #{currentBlock.length}" # Debug
32
+
33
+ compressedVfsDataList << currentBlock # 加入当前块
34
+
35
+ startIndix+=length # 位移。
36
+ end
37
+
38
+ compressedVfsDataList # 返回 内容
39
+ end
40
+
41
+ # 根据版本号,提取VFS数据内容
42
+
43
+
44
+ def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion)
18
45
  victoriaFreshData = '' # 解压后的数据块整体
19
46
  dataFileName = 'victoriafreshdata.w' # 数据文件名
20
47
  dataFile = {} # 数据文件对象
@@ -31,6 +58,10 @@ def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion)
31
58
  dataFile.close # 关闭文件
32
59
  elsif (fileVersion >= 30) # 30以上版本
33
60
  compressedVfsDataList = wholeCbor['vfsDataList'] # 获取压缩后的数据块列表
61
+
62
+ if (fileVersion>=251) # 251 以上版本。要按照偏移值来读取压缩数据块列表。
63
+ compressedVfsDataList=readVfsDataList(wholeCbor) # 根据偏移值来读取压缩块数据列表。
64
+ end # if (fileVersion>=251) # 251 以上版本
34
65
 
35
66
  puts("data block amont: #{compressedVfsDataList.length}") # Debug
36
67
 
@@ -44,18 +75,12 @@ def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion)
44
75
 
45
76
  begin # 解压
46
77
  currentRawData = LZMA.decompress(currentCompressed) # 解压这一块
47
-
48
78
 
49
79
  dataFile.syswrite(currentRawData) # 写入内容
50
80
  rescue RuntimeError => e # 解压失败
51
81
  puts "Warning: the exz file may be incomplete." # 报告错误。文件可能不完整。
52
82
  end # begin # 解压
53
83
 
54
- # victoriaFreshData=victoriaFreshData+currentRawData #追加
55
- # victoriaFreshData << currentRawData #追加
56
-
57
- #puts("byte size: #{victoriaFreshData.bytesize}") # debug.
58
-
59
84
  dataBlockCounter += 1 # count
60
85
  end # compressedVfsDataList.each do |currentCompressed|
61
86
 
@@ -65,88 +90,46 @@ def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion)
65
90
  dataFileName # 返回解压后的数据块整体
66
91
  end # def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion) #根据版本号,提取VFS数据内容
67
92
 
68
- def extractVfsDataWithVersion(wholeCbor, fileVersion) # 根据版本号,提取VFS数据内容
69
- victoriaFreshData = '' # 解压后的数据块整体
70
-
71
- if (fileVersion == 14) # 14版本
72
- compressedVfsData = wholeCbor['vfsData'] # 获取压缩后的数据内容
73
-
74
- victoriaFreshData = LZMA.decompress(compressedVfsData) # 解压缩数据内容
75
- elsif (fileVersion >= 30) # 30以上版本
76
- compressedVfsDataList = wholeCbor['vfsDataList'] # 获取压缩后的数据块列表
77
-
78
- puts("data block amont: #{compressedVfsDataList.length}") # Debug
79
-
80
- dataBlockCounter = 0 # Data block counter
81
-
82
- compressedVfsDataList.each do |currentCompressed| # 一块块地解压
83
- puts("data block counter: #{dataBlockCounter}") # Debug
84
- checkMemoryUsage(34)
85
-
86
- currentRawData = LZMA.decompress(currentCompressed) # 解压这一块
87
-
88
- # victoriaFreshData=victoriaFreshData+currentRawData #追加
89
- victoriaFreshData << currentRawData # 追加
90
-
91
- puts("byte size: #{victoriaFreshData.bytesize}") # debug.
92
-
93
- dataBlockCounter += 1 # count
94
- end # compressedVfsDataList.each do |currentCompressed|
95
- end # if (fileVersion==14) #14版本
96
-
97
- victoriaFreshData # 返回解压后的数据块整体
98
- end # extractVfsDataWithVersion(wholeCbor, fileVersion) #根据版本号,提取VFS数据内容
99
-
100
- class ExtremeUnZip
101
- # 解压
93
+ # 解压
102
94
  def exuz(rootPath)
103
- result = true # 解压结果
104
-
105
- wholeFileContent = File.read(rootPath) # 最终文件内容
95
+ result = true # 解压结果
106
96
 
107
- checkMemoryUsage(60)
97
+ currentBlockFile = File.new(rootPath, 'rb') # 打开文件
108
98
 
109
- puts wholeFileContent.class # debug
99
+ @wholeFileContent = currentBlockFile.read # 读取全部内容
110
100
 
111
- wholeCborByteArray = wholeFileContent[4..-1] # 从第5个到末尾
101
+ currentBlockFile.close # 关闭文件
112
102
 
113
- # puts wholeCborByteArray #Debug.
103
+ checkMemoryUsage(60)
114
104
 
115
- #/usr/local/share/gems/gems/EXtremeZip-2021.7.8/lib/extremeunzip.zzaqsu.rb:110:in `decode': end of buffer reached (EOFError)
105
+ wholeCborByteArray = @wholeFileContent[4..-1] # 从第5个到末尾
116
106
 
117
107
  begin # 可能出错。
118
- options = {:tolerant => true}
108
+ options = {:tolerant => true}
119
109
 
120
- wholeCbor = CBOR.decode(wholeCborByteArray, options) # 解码
110
+ wholeCbor = CBOR.decode(wholeCborByteArray, options) # 解码
121
111
 
122
- fileVersion = wholeCbor['version'] # 获取版本号
112
+ fileVersion = wholeCbor['version'] # 获取版本号
123
113
 
124
114
  if (fileVersion < 14) # 版本号过小
125
- checkMemoryUsage(85)
126
- puts 'file version too old' # 报告错误
115
+ checkMemoryUsage(85)
116
+ puts 'file version too old' # 报告错误
127
117
  else # 版本号够大
128
- compressedVfsMenu = wholeCbor['vfsMenu'] # 获取压缩后的目录内容
118
+ compressedVfsMenu = wholeCbor['vfsMenu'] # 获取压缩后的目录内容
129
119
 
130
- checkMemoryUsage(90)
131
- replyByteArray = LZMA.decompress(compressedVfsMenu) # 解码目录VFS字节数组内容
120
+ checkMemoryUsage(90)
121
+ replyByteArray = LZMA.decompress(compressedVfsMenu) # 解码目录VFS字节数组内容
132
122
 
133
- # puts replyByteArray #Debug
134
-
135
- checkMemoryUsage(95)
136
- # victoriaFreshData=extractVfsDataWithVersion(wholeCbor, fileVersion) #根据版本号,提取VFS数据内容
137
- victoriaFreshDataFile = extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion) # 根据版本号,提取VFS数据内容
138
-
139
- # puts victoriaFreshData #Debug
140
-
141
- checkMemoryUsage(100)
142
- $clipDownloader = VictoriaFresh.new # 创建下载器。
143
-
144
- $clipDownloader.releaseFilesExternalDataFile(replyByteArray, victoriaFreshDataFile) # 释放各个文件
123
+ checkMemoryUsage(95)
124
+
125
+ victoriaFreshDataFile = extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion) # 根据版本号,提取VFS数据内容
145
126
 
146
- fileToRemove = File.new(victoriaFreshDataFile) # 要删除的文件
127
+ checkMemoryUsage(100)
128
+ $clipDownloader = VictoriaFresh.new # 创建下载器。
147
129
 
148
- #File.delete(fileToRemove) # 删除文件
130
+ $clipDownloader.releaseFilesExternalDataFile(replyByteArray, victoriaFreshDataFile) # 释放各个文件
149
131
 
132
+ fileToRemove = File.new(victoriaFreshDataFile) # 要删除的文件
150
133
  end # if (fileVersion<14) #版本号过小
151
134
 
152
135
  result =true # 解压成功
@@ -8,6 +8,7 @@ require 'etc' # cpu amount
8
8
  require 'cod'
9
9
  require 'uuid'
10
10
  require 'get_process_mem'
11
+ require 'pathname'
11
12
 
12
13
  def checkMemoryUsage(lineNumber)
13
14
  mem = GetProcessMem.new
@@ -22,6 +23,7 @@ class ExtremeZip
22
23
  @filePartCounter = 0 # 文件分块计数器
23
24
  @responsePipeList = [] # 任务回复管道列表
24
25
  @processIdList = [] # 子进程编号列表。
26
+ @processTimestamp = Time.new.to_i # 记录进程启动的时间戳。
25
27
 
26
28
  @maxSubProcessAmount = Etc.nprocessors # 获取最大的子进程个数
27
29
 
@@ -57,64 +59,155 @@ class ExtremeZip
57
59
 
58
60
  @wholeCbor['vfsDataListStart']=198910 # 压缩 VFS 数据列表起始位置。
59
61
  end # addBasicFileInformation # 加入基本文件信息
62
+
63
+ def writeStamp(rootPath) # 更新时间戳文件
64
+ directoryPathName=Pathname.new(rootPath) #构造路径名字对象。
65
+ datastore= "#{directoryPathName.expand_path}/.exzstamp" # 配置文件路径
66
+ puts "writing stamp file: #{datastore}" # Debug
67
+
68
+ #stamp = wholeCbor['timestamp'] # 获取时间戳
69
+ stampCbor={} # 时间戳对象。
70
+ stampCbor['timestamp']= @processTimestamp # 设置时间戳。
71
+
72
+ compressed= stampCbor.to_cbor
73
+
74
+ extremeZipOutputFile = File.new(datastore, 'wb') # 创建文件
75
+ extremeZipOutputFile.syswrite(compressed) # 写入文件
76
+ extremeZipOutputFile.close # 关闭文件
77
+
78
+ end # writeStamp # 更新时间戳文件
79
+
80
+ def loadStamp(rootPath) # 读取时间戳阈值。
81
+ stamp=0 # 默认值。
82
+ fileExists=false # 文件是否存在
83
+
84
+ directoryPathName=Pathname.new(rootPath) #构造路径名字对象。
85
+
86
+ isFile=directoryPathName.file? #是否是文件。
87
+
88
+ unless isFile #是文件就跳过。
89
+ #陈欣
90
+
91
+ datastore= "#{directoryPathName.expand_path}/.exzstamp" # 配置文件路径
92
+ puts "reading stamp file: #{datastore}" # Debug
93
+
94
+ begin # 尝试读取。
95
+
96
+ #陈欣
97
+
98
+ currentBlockFile = File.new(datastore, 'rb') # 打开文件
99
+
100
+ fileExists=true # 文件存在
101
+
102
+ stampFileContent = currentBlockFile.read # 读取全部内容
103
+
104
+ currentBlockFile.close # 关闭文件
105
+
106
+ options = {:tolerant => true}
107
+
108
+ wholeCbor = CBOR.decode(stampFileContent, options) # 解码
109
+
110
+ puts wholeCbor # Debug
111
+ puts wholeCbor.inspect # Debug
112
+
113
+ stamp = wholeCbor['timestamp'] # 获取时间戳
114
+ #stamp = wholeCbor.try(:[], 'timestamp') # 获取时间戳
115
+ rescue Errno::ENOENT, TypeError
116
+
117
+ end
118
+
119
+
120
+ end #unless isFile #是文件就跳过。
121
+
122
+ return stamp, fileExists # 返回时间戳。
123
+ end #loadStamp(rootPath) # 读取时间戳阈值。
60
124
 
61
125
  # 压缩
62
126
  def exz(rootPath)
63
- victoriaFresh, = @clipDownloader.checkOnce(rootPath) # 打包该目录树。
127
+ timestampTHreshold, fileExists=loadStamp(rootPath) # 读取时间戳阈值。
128
+
129
+ #陈欣
130
+
131
+ if (timestampTHreshold > 0) # 有效的时间戳
132
+ @clipDownloader.timestampThreshold=timestampTHreshold # 设置文件时间戳阈值。
133
+ end #if (timestampTHreshold > 0) # 有效的时间戳
134
+
135
+ if fileExists # 存在文件,则表明将要发生增量压缩
136
+ @wholeCbor['incremental']=true # 是增量压缩。
137
+
138
+ end # if fileExists # 存在文件,则表明用户要求增量压缩
64
139
 
65
- @filePartAmount = @clipDownloader.currentDiskFlushSuffix # 获取文件个数
140
+ @wholeCbor['timestamp']=@processTimestamp # 记录进程启动的时间戳。
141
+
142
+ victoriaFresh, = @clipDownloader.checkOnce(rootPath) # 打包该目录树。
66
143
 
67
- compressVfsMenu(victoriaFresh) # 压缩目录数据。
144
+ @filePartAmount = @clipDownloader.currentDiskFlushSuffix # 获取文件个数
68
145
 
69
- addBasicFileInformation # 加入基本文件信息
146
+ compressVfsMenu(victoriaFresh) # 压缩目录数据。
70
147
 
71
- processIdList, responsePipeList = launchSubProcesses # 启动子进程。
148
+ addBasicFileInformation # 加入基本文件信息
72
149
 
73
- receiveCompressedVfsDataList(processIdList, responsePipeList) # 接收压缩后的数据块列表
150
+ processIdList, responsePipeList = launchSubProcesses # 启动子进程。
74
151
 
75
- checkMemoryUsage(155)
76
- @wholeCbor['vfsDataList'] = @vfsDataList # 加入数据
152
+ receiveCompressedVfsDataList(processIdList, responsePipeList) # 接收压缩后的数据块列表
77
153
 
78
- wholeFileContent = 'exz' + "\0" + @wholeCbor.to_cbor # 追加CBOR字节数组
154
+ checkMemoryUsage(155)
155
+ @wholeCbor['vfsDataList'] = @vfsDataList # 加入数据
156
+
157
+ wholeFileContent = 'exz' + "\0" + @wholeCbor.to_cbor # 追加CBOR字节数组
79
158
 
80
- vfsDataListStart=wholeFileContent.length # 按照现在的序列化情况,计算出来的起始位置。
159
+ vfsDataListStart=wholeFileContent.length # 按照现在的序列化情况,计算出来的起始位置。
81
160
 
82
- while (vfsDataListStart!=@wholeCbor['vfsDataListStart']) # 计算出的偏移不一致
83
- @wholeCbor['vfsDataListStart']=vfsDataListStart # 使用新的值
84
- wholeFileContent = 'exz' + "\0" + @wholeCbor.to_cbor # 追加CBOR字节数组
85
- vfsDataListStart=wholeFileContent.length # 按照现在的序列化情况,计算出来的起始位置。
86
- end
161
+ while (vfsDataListStart!=@wholeCbor['vfsDataListStart']) # 计算出的偏移不一致
162
+ @wholeCbor['vfsDataListStart']=vfsDataListStart # 使用新的值
163
+ wholeFileContent = 'exz' + "\0" + @wholeCbor.to_cbor # 追加CBOR字节数组
164
+ vfsDataListStart=wholeFileContent.length # 按照现在的序列化情况,计算出来的起始位置。
165
+ end
87
166
 
88
- # 写入文件:
89
- writeFile(wholeFileContent, victoriaFresh) # 写入文件内容
167
+ # 写入文件:
168
+ writeFile(wholeFileContent, victoriaFresh) # 写入文件内容
90
169
 
91
- appendVfsDataList # 追加压缩块列表数据。
170
+ appendVfsDataList victoriaFresh # 追加压缩块列表数据。
171
+
172
+ if fileExists # 存在文件,则表明将要发生增量压缩
173
+ writeStamp (rootPath) # 更新时间戳文件
174
+ end # if fileExists # 存在文件,则表明用户要求增量压缩
175
+
92
176
  end # def exz(rootPath)
93
177
 
94
178
  # 写入压缩块文件
95
179
  def writeCompressBlock(compressed, processCounter)
96
- extremeZipOutputFile = File.new("comressed.#{processCounter}.cex", 'wb') # 创建文件
97
- extremeZipOutputFile.syswrite(compressed) # 写入文件
98
- extremeZipOutputFile.close # 关闭文件
180
+ extremeZipOutputFile = File.new("comressed.#{processCounter}.cex", 'wb') # 创建文件
181
+ extremeZipOutputFile.syswrite(compressed) # 写入文件
182
+ extremeZipOutputFile.close # 关闭文件
99
183
  end
100
184
 
101
185
  # 追加压缩块列表数据。
102
- def appendVfsDataList
103
- extremeZipOutputFile = File.new("#{victoriaFresh['name']}.exz", 'ab') # 打开文件
186
+ def appendVfsDataList (victoriaFresh)
187
+ extremeZipOutputFile = File.new("#{victoriaFresh['name']}.exz", 'ab') # 打开文件
104
188
 
105
- processCounter=0 # 块计数器。
189
+ processCounter=0 # 块计数器。
106
190
 
107
- @wholeCbor['vfsDataList'].each do
191
+ @wholeCbor['vfsDataList'].each do
108
192
  #extremeZipOutputFile = File.new("comressed.#{processCounter}.cex", 'wb') # 创建文件
109
193
 
110
- wholeFileContent=File.read("comressed.#{processCounter}.cex") # 读取压缩块。
194
+ currentBlockFile = File.new("comressed.#{processCounter}.cex", 'rb') # 打开文件
195
+
196
+ wholeFileContent = currentBlockFile.read # 读取全部内容
197
+
198
+ currentBlockFile.close # 关闭文件
199
+ File.delete(currentBlockFile) # 删除数据块文件
200
+
201
+ #wholeFileContent=File.read("comressed.#{processCounter}.cex", 'rb') # 读取压缩块。
111
202
 
112
- extremeZipOutputFile.syswrite(wholeFileContent) # 写入文件
203
+ puts "wirte file contetn length: #{wholeFileContent.length}" # Debghu
113
204
 
114
- processCounter += 1 # 计数
115
- end
205
+ extremeZipOutputFile.syswrite(wholeFileContent) # 写入文件
206
+
207
+ processCounter += 1 # 计数
208
+ end
116
209
 
117
- extremeZipOutputFile.close # 关闭文件
210
+ extremeZipOutputFile.close # 关闭文件
118
211
  end
119
212
 
120
213
  # 写入文件内容
@@ -138,6 +231,8 @@ class ExtremeZip
138
231
 
139
232
  blockInfo={} # 块信息
140
233
  blockInfo['length']=compressed.length # 记录长度
234
+
235
+ puts "block length: #{blockInfo['length']}" # Debug
141
236
 
142
237
  @vfsDataList << blockInfo # 加入数据块列表中
143
238
  checkMemoryUsage(150)
@@ -158,7 +253,7 @@ class ExtremeZip
158
253
 
159
254
  currentBlockFile.close # 关闭文件
160
255
 
161
- #File.delete(currentBlockFile) # 删除数据块文件
256
+ File.delete(currentBlockFile) # 删除数据块文件
162
257
 
163
258
  currentBlockData
164
259
  end
@@ -167,11 +262,8 @@ class ExtremeZip
167
262
  def schedule1Block(filePartCounter)
168
263
  currentBlockData = readBlockFile(filePartCounter) # 读取块文件内容
169
264
 
170
- # currentTaskPipe = Cod.pipe # 任务分配管道
171
265
  currentResponsePipe = Cod.pipe # 任务回复管道
172
266
 
173
- puts("forking sub process, file part counter: #{filePartCounter}") # Debug.
174
-
175
267
  p1 = fork do # 复制出子进程
176
268
  compressInSubProcess(currentBlockData, currentResponsePipe) # 在子进程中具体执行的压缩代码
177
269
  end # p1 = fork do #复制出子进程
@@ -192,11 +284,8 @@ class ExtremeZip
192
284
 
193
285
  # 启动子进程。
194
286
  def launchSubProcesses
195
-
196
- #while ((@filePartCounter < @filePartAmount) && (true)) # 未处理完毕,并且未达到最大子进程个数
197
287
  while ((@filePartCounter < @filePartAmount) && (@filePartCounter<@maxSubProcessAmount)) # 未处理完毕,并且未达到最大子进程个数
198
288
  currentResponsePipe, p1 = schedule1Block(@filePartCounter) # 计划一个块的压缩计算
199
-
200
289
  end # while processDataLength < victoriaFreshData.byte_size do #未处理完毕
201
290
 
202
291
  [@processIdList, @responsePipeList]
@@ -214,7 +303,6 @@ class ExtremeZip
214
303
 
215
304
  currentResponsePipe.put currentCompressedVfsData # 将压缩后的数据块写入到回复管道中
216
305
 
217
- checkMemoryUsage(125)
218
306
  puts("finished #{Process.pid}") # Debug
219
307
  end # compressInSubProcess(currentBlockData, currentResponsePipe) # 在子进程中具体执行的压缩代码
220
308
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: EXtremeZip
3
3
  version: !ruby/object:Gem::Version
4
- version: 2022.2.4
4
+ version: 2022.2.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hxcan Cai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-04 00:00:00.000000000 Z
11
+ date: 2022-02-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cod
@@ -86,20 +86,20 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 2022.1.27
89
+ version: 2022.2.20
90
90
  - - ">="
91
91
  - !ruby/object:Gem::Version
92
- version: 2022.1.27
92
+ version: 2022.2.20
93
93
  type: :runtime
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
97
  - - "~>"
98
98
  - !ruby/object:Gem::Version
99
- version: 2022.1.27
99
+ version: 2022.2.20
100
100
  - - ">="
101
101
  - !ruby/object:Gem::Version
102
- version: 2022.1.27
102
+ version: 2022.2.20
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: hx_cbor
105
105
  requirement: !ruby/object:Gem::Requirement