当前位置: 首页 > article >正文

sdm845(oneplus6)的开机变砖(启动漰溃)ramdump被开源git仓库linux-ramdump-parser-v2提交3e7f37-正确解析

开源git仓库linux-ramdump-parser-v2有没有sdm845(oneplus6)

结论

  • linux-ramdump-parser-v2/extensions/board_def.py

  • SDM845的最新提交8c694e/linux-ramdump-parser-v2/boards.py#L475 2019年11月5日 GMT+8 01:39:10 但是执行ramparse.py会报错 找不到class BoardAtoll

  • SDM845且有class BoardAtoll的最新提交3e7f37/linux-ramdump-parser-v2/boards.py#L662正常执行ramparse.py

我fork了该仓库并对该提交3e7f37打了标签my-gitlab/tag-ok-oneplus6-qualcommSDM845-ramdump-parser/linux-ramdump-parser-v2/boards.py#L662

对单git仓库循环遍历每个提交的work-tree是否符合给定条件

D=/app4/codelinaro_qcom-opensource_tools
F_commitIdLs=/tmp/git_commitId_ls.txt
F_LoopCall_BuszFunc=/tmp/F_LoopCall_BuszFunc.sh
outF_LoopCall_BuszFunc=/tmp/outF_LoopCall_BuszFunc.txt
git clone https://git.codelinaro.org/clo/le/platform/vendor/qcom-opensource/tools.git $D
生成commitId列表文件
cd $D
#获得所有提交id, 包括在HEAD的、不在HEAD的所有分支
git --no-pager  log --pretty=format:%H  --all  | tee $F_commitIdLs

CmtCnt=$(wc -l $F_commitIdLs) # == 4359

commitId的单循环体业务函数
cmtK=0

function buszFunc_commitIdK() {
cmtK=$((cmtK+1))


>&2 echo "第k个提交/提交总数: $cmtK/${CmtCnt}" #echo $D

[[ $# -lt 2 ]] && return 31

local commitId=$1
local buszF_check_commitId=$2

cd $D

git checkout $commitId  

#执行该commitId的业务脚本
bash $buszF_check_commitId ${commitId} && >&2 echo "调用第${cmtK}个业务脚本返回true"

} #end_func

export -f buszFunc_commitIdK
循环检查 是否存在文件 linux-ramdump-parser-v2/extensions/board_def.py

结论为 否 ,

即 git仓库codelinaro/…/linux-ramdump-parser-v2任何分支的目录树中都不存在文件 linux-ramdump-parser-v2/extensions/board_def.py

cd $D 

#重置仓库到master分支
git checkout caf_migration/master && git reset --hard

#commitId的业务脚本
buszF_has_board_def_py=/tmp/buszF_check_commitId__has_board_def_py
echo "[[ -f $D/linux-ramdump-parser-v2/extensions/board_def.py ]]  && cmtId=\$1 && echo "\$cmtId" " > $buszF_has_board_def_py

#生成commitId调用业务脚本列表文件 并 执行
rm -v $outF_LoopCall_BuszFunc
cmtK=0
cat $F_commitIdLs  | xargs -I@ echo "buszFunc_commitIdK @ $buszF_has_board_def_py" | tee $F_LoopCall_BuszFunc
source $F_LoopCall_BuszFunc | tee $outF_LoopCall_BuszFunc

罗嗦一下,

故, Android 使用linux-ramdump-parser-v2解析gcore文件 提到的 extensions/board_def.py这个文件没有找到,那么可能是缺少依赖仓库所致,可以联系高通索取,但最快的方式是回退这笔提交:ddb99892d99fab7b98304219ad9afbb1ad51516f 在 git仓库codelinaro/…/linux-ramdump-parser-v2 下 无法做到,

而且 git仓库codelinaro/…/linux-ramdump-parser-v2无提交 ddb99892d99fab7b98304219ad9afbb1ad51516f, 也不能排除该提交是被删除了 现在(2024-11-07)看不到而已

循环检查 文件 linux-ramdump-parser-v2/boards.py 中是否含有字符串845

结论为 肯定, 符合条件的

  • 最新提交 8c694e/linux-ramdump-parser-v2/boards.py#L475 2019年11月5日 GMT+8 01:39:10

高通sdm845 发布日期是 2018年2月

  • 最早提交 4ad475/inux-ramdump-parser-v2/boards.py#L418 2017年2月22日 GMT+8 03:20:16
cd $D

#重置仓库到master分支
git checkout caf_migration/master && git reset --hard

#commitId的业务脚本
buszF_has_845=/tmp/buszF_check_commitId__boards_py_has_845
echo "F=$D/linux-ramdump-parser-v2/boards.py && [[ -f \$F ]] && grep 845 \$F 1>/dev/null 2>/dev/null && cmtId=\$1 && echo "\$cmtId" " > $buszF_has_845

#生成commitId调用业务脚本列表文件 并 执行
rm -v $outF_LoopCall_BuszFunc
cmtK=0
cat $F_commitIdLs  | xargs -I@ echo "buszFunc_commitIdK @ $buszF_has_845" | tee $F_LoopCall_BuszFunc
source $F_LoopCall_BuszFunc | tee $outF_LoopCall_BuszFunc


wc -l  $outF_LoopCall_BuszFunc 
#+ wc -l /tmp/outF_LoopCall_BuszFunc.txt
#725 /tmp/outF_LoopCall_BuszFunc.txt

head -n 1  $outF_LoopCall_BuszFunc   #8c694e5e2941057965322ab5201232bbd40b7f11

tail  -n 1  $outF_LoopCall_BuszFunc   #4ad4754817fecc0eae02cb6faf309972e2dcf23d

基于 8c694e5e2941057965322ab5201232bbd40b7f11 执行 ,继续报错说 找不到类 BoardAtoll
cd /app4/codelinaro_qcom-opensource_tools && git checkout 8c694e5e2941057965322ab5201232bbd40b7f11

gcc49D="/app4/lineage17_oneplus6/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9"
nm_path=$gcc49D/bin/aarch64-linux-android-nm
gdb_path=/app4/lineage17_oneplus6/prebuilts/gdb/linux-x86/bin/gdb
objdump_path=$gcc49D/bin/aarch64-linux-android-objdump


python2.7 /app4/codelinaro_qcom-opensource_tools/linux-ramdump-parser-v2/ramparse.py --nm-path=$nm_path --gdb-path=$gdb_path --objdump-path=$objdump_path --vmlinux=$F_vmlinux --auto-dump=$RamdumpD  --outdir=$RamdumpParseResultD   --everything    --force-hardware sdm845  

#Traceback (most recent call last):
#  File "/app4/codelinaro_qcom-opensource_tools/linux-ramdump-parser-v2/ramparse.py", line 28, in <module>
#    from ramdump import RamDump
#  File "/app4/codelinaro_qcom-opensource_tools/linux-ramdump-parser-v2/ramdump.py", line 23, in <module>
#    from boards import get_supported_boards, get_supported_ids
#  File "/app4/codelinaro_qcom-opensource_tools/linux-ramdump-parser-v2/boards.py", line 942, in <module>
#    boards.append(BoardLito(socid=400))
#  File "/app4/codelinaro_qcom-opensource_tools/linux-ramdump-parser-v2/boards.py", line 664, in __init__
#    super(BoardAtoll, self).__init__()
#NameError: global name 'BoardAtoll' is not defined
循环检查 文件 linux-ramdump-parser-v2/boards.py 中是否含有字符串class BoardAtoll

结果 例如 3e7f37/linux-ramdump-parser-v2/boards.py#L662

cd $D

#重置仓库到master分支
git checkout caf_migration/master && git reset --hard

#commitId的业务脚本
buszF_has=/tmp/buszF_check_commitId__boards_py_has_class_BoardAtoll
echo "F=$D/linux-ramdump-parser-v2/boards.py && [[ -f \$F ]] && grep 'class BoardAtoll' \$F 1>/dev/null 2>/dev/null && cmtId=\$1 && echo "\$cmtId" " > $buszF_has

#生成commitId调用业务脚本列表文件 并 执行
rm -v $outF_LoopCall_BuszFunc
cmtK=0
cat $F_commitIdLs  | xargs -I@ echo "buszFunc_commitIdK @ $buszF_has" | tee $F_LoopCall_BuszFunc
source $F_LoopCall_BuszFunc | tee $outF_LoopCall_BuszFunc


cat /tmp/outF_LoopCall_BuszFunc.txt :

3e7f3768f35cdb9fbc8201f4c0157c7deda0f625
d98fc75e647921a5f0f98afc266d9e437ddb4f08
d0b7526b0834db2ea9462cf9ec5c29bf1fa30da1
34b889a254b1d3bf7d86f51d5342595264f18338
7be6968ae074fb86f155d9ef71346d02a87265e9
1418c1475c0ddfc7482157d86bbbc862a0ba614a
3730813b259224f5e05d58727f7fe07b8a9596f4
fd8f1c823917bd3565100373010e6edce97e84ae
0e449aa4b654eb359ae061176cb9fe574ba6866c
de55b472e223d36e36cb1b9dfd8f07076fad33ba
基于 3e7f3768f35cdb9fbc8201f4c0157c7deda0f625 执行 ,不再报错
cd /app4/codelinaro_qcom-opensource_tools && git checkout 3e7f3768f35cdb9fbc8201f4c0157c7deda0f625

gcc49D="/app4/lineage17_oneplus6/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9"
nm_path=$gcc49D/bin/aarch64-linux-android-nm
gdb_path=/app4/lineage17_oneplus6/prebuilts/gdb/linux-x86/bin/gdb
objdump_path=$gcc49D/bin/aarch64-linux-android-objdump

python2.7 /app4/codelinaro_qcom-opensource_tools/linux-ramdump-parser-v2/ramparse.py --nm-path=$nm_path --gdb-path=$gdb_path --objdump-path=$objdump_path --vmlinux=$F_vmlinux --auto-dump=$RamdumpD  --outdir=$RamdumpParseResultD   --everything    --force-hardware sdm845  

ramparse.py输出

    [1/43] --sched-info ... 0.045627s
    [2/43] --cbmem ... 0.024175s
    [3/43] --clock-dump ... 0.698977s
    [4/43] --cpr3-info ... NOTE: 'kryo_regulator_list' list not found to extract kryo_addr information
0.024681s
    [5/43] --cpr-info ... 0.013715s
    [6/43] --cpu-state ... 0.022836s
    [7/43] --ddr-compare ... 0.170196s
    [8/43] --check-for-watchdog ... 0.010062s
    [9/43] --watchdog ... 0.624884s
    [10/43] --parse-debug-image ... FAILED! 8.656380s
    [11/43] --dmesg ... 0.132659s
    [12/43] --print-iommu-pg-tables ... 0.111869s
    [13/43] --print-ipc-logging ... 190.756138s
    [14/43] --print-irqs ... 0.394398s
    [15/43] --print-kconfig ... 0.002080s
    [16/43] --l1-compare ... 0.000202s
    [17/43] --logcat ... FAILED! 0.112338s
    [18/43] --lpm ... FAILED! 0.130409s
    [19/43] --print-mdpinfo ... FAILED! 0.046987s
    [20/43] --print-memstat ... FAILED! 0.191882s
    [21/43] --print-memory-info ... 0.163893s
    [22/43] --mmcdoctor ... 0.009791s
    [23/43] --dump-page-tables ... 0.001110s
    [24/43] --print-pagealloccorruption ... 0.000011s
    [25/43] --print-pagetracking ... 0.034898s
    [26/43] --print-pagetypeinfo ... 0.180159s
    [27/43] --pstore ... 0.148825s
    [28/43] --print-reserved-mem ... 0.040129s
    [29/43] --print-cma-areas ... 1.328286s
    [30/43] --print-softirq-stat ... 0.030816s
    [31/43] --print-qsee-log ... FAILED! 0.026309s
    [32/43] --check-rodata ... FAILED! 0.095579s
    [33/43] --print-rtb ... 0.014465s
    [34/43] --print-runqueues ... 0.530735s
    [35/43] --spm ... FAILED! 0.027082s
    [36/43] --print-tasks ... 0.192172s
    [37/43] --print-tasks-timestamps ... 0.113427s
    [38/43] --check-for-panic ... 0.007969s
    [39/43] --thermal-info ... 0.134481s
    [40/43] --timer-list ... 0.323513s
    [41/43] --print-vmalloc ... 0.213602s
    [42/43] --print-vmstats ... 0.276296s
    [43/43] --print-workqueues ... 0.217028s

oneplus6启动卡住的linux内核控制台日志(内核漰溃输出)

看一下 我的 oneplus6启动卡住,实际linux内核的控制台日志,这个很有利于排查错误啊

cat $RamdumpParseResultD/console_logs.txt 
# + cat /app4/lineage17_oneplus6_RamdumpParseResultD/console_logs.txt
DBGC[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.9.227-gfd7b2c5f4 (nobody@android-build) (Android (6052599 based on r353983c1) clang version 9.0.3 (https://android.googlesource.com/toolchain/clang 745b335211bb9eadfa6aa6301f84715cee4b37c5) (https://android.googlesource.com/toolchain/llvm 31c3f8c4ae6cc980405a3b90e7e88db00249eba5) (based on LLVM 9.0.3svn)) #4 SMP PREEMPT Tue Nov 5 18:49:44 CST 2024
[    0.000000] Boot CPU: AArch64 Processor [517f803c]
[    0.000000] Machine: Qualcomm Technologies, Inc. SDM845 v2.1 MTP PVT
[    0.000000] Reserved memory: created CMA memory pool at 0x00000000fec00000, size 16 MiB
[    0.000000] OF: reserved mem: initialized node adsp_region, compatible id shared-dma-pool
[    0.000000] Reserved memory: created CMA memory pool at 0x00000000fdc00000, size 16 MiB
[    0.000000] OF: reserved mem: initialized node qseecom_ta_region, compatible id shared-dma-pool
[    0.000000] Reserved memory: created CMA memory pool at 0x00000000f8000000, size 92 MiB
[    0.000000] OF: reserved mem: initialized node secure_display_region, compatible id shared-dma-pool
[    0.000000] Reserved memory: created CMA memory pool at 0x00000001fb000000, size 36 MiB
[    0.000000] OF: reserved mem: initialized node mem_dump_region, compatible id shared-dma-pool
[    0.000000] Reserved memory: created CMA memory pool at 0x00000000f7800000, size 8 MiB
[    0.000000] OF: reserved mem: initialized node secure_sp_region, compatible id shared-dma-pool
[    0.000000] Reserved memory: created CMA memory pool at 0x00000000f5800000, size 32 MiB
[    0.000000] OF: reserved mem: initialized node linux,cma, compatible id shared-dma-pool
[    0.000000] Reserved memory: created DMA memory pool at 0x000000008ab00000, size 20 MiB
[    0.000000] OF: reserved mem: initialized node qseecom_region@0x8ab00000, compatible id shared-dma-pool
[    0.000000] Removed memory: created DMA memory pool at 0x000000008bf00000, size 5 MiB
[    0.000000] OF: reserved mem: initialized node camera_region@0x8bf00000, compatible id removed-dma-pool
[    0.000000] Removed memory: created DMA memory pool at 0x000000008c400000, size 0 MiB
[    0.000000] OF: reserved mem: initialized node ips_fw_region@0x8c400000, compatible id removed-dma-pool
[    0.000000] Removed memory: created DMA memory pool at 0x000000008c410000, size 0 MiB
[    0.000000] OF: reserved mem: initialized node ipa_gsi_region@0x8c410000, compatible id removed-dma-pool
[    0.000000] Removed memory: created DMA memory pool at 0x000000008c415000, size 0 MiB
[    0.000000] OF: reserved mem: initialized node gpu_region@0x8c415000, compatible id removed-dma-pool
[    0.000000] Removed memory: created DMA memory pool at 0x000000008c500000, size 26 MiB
[    0.000000] OF: reserved mem: initialized node adsp_region@0x8c500000, compatible id removed-dma-pool
[    0.000000] Removed memory: created DMA memory pool at 0x000000008df00000, size 1 MiB
[    0.000000] OF: reserved mem: initialized node wlan_fw_region@0x8df00000, compatible id removed-dma-pool
[    0.000000] Removed memory: created DMA memory pool at 0x000000008e000000, size 120 MiB
[    0.000000] OF: reserved mem: initialized node modem_region@0x8e000000, compatible id removed-dma-pool
[    0.000000] Removed memory: created DMA memory pool at 0x0000000095800000, size 5 MiB
[    0.000000] OF: reserved mem: initialized node video_region@0x95800000, compatible id removed-dma-pool
[    0.000000] Removed memory: created DMA memory pool at 0x0000000095d00000, size 8 MiB
[    0.000000] OF: reserved mem: initialized node cdsp_region@0x95d00000, compatible id removed-dma-pool
[    0.000000] Removed memory: created DMA memory pool at 0x0000000096500000, size 2 MiB
[    0.000000] OF: reserved mem: initialized node mba_region@0x96500000, compatible id removed-dma-pool
[    0.000000] Removed memory: created DMA memory pool at 0x0000000096700000, size 20 MiB
[    0.000000] OF: reserved mem: initialized node slpi_region@0x96700000, compatible id removed-dma-pool
[    0.000000] Removed memory: created DMA memory pool at 0x0000000097b00000, size 1 MiB
[    0.000000] OF: reserved mem: initialized node pil_spss_region@0x97b00000, compatible id removed-dma-pool
[    0.000000] psci: probing for conduit method from DT.
[    0.000000] psci: PSCIv1.1 detected in firmware.
[    0.000000] psci: Using standard PSCI v0.2 function IDs
[    0.000000] psci: MIGRATE_INFO_TYPE not supported.
[    0.000000] psci: SMC Calling Convention v1.0
[    0.000000] random: fast init done
[    0.000000] percpu: Embedded 22 pages/cpu s50456 r8192 d31464 u90112
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 1464727
[    0.000000] Kernel command line: rcupdate.rcu_expedited=1 androidboot.hardware=qcom androidboot.console=ttyMSM0 video=vfb:640x400,bpp=32,memsize=3072000 msm_rtb.filter=0x237 ehci-hcd.park=3 lpm_levels.sleep_disabled=1 service_locator.enable=1 swiotlb=2048 androidboot.configfs=true androidboot.usbcontroller=a600000.dwc3 firmware_class.path=/vendor/firmware_mnt/image loop.max_part=7 buildvariant=eng androidboot.verifiedbootstate=orange androidboot.keymaster=1 root=PARTUUID=2e0a6a3f-cac1-2523-52a0-6c77686d6148 androidboot.vbmeta.device=PARTUUID=ca2fda2c-4bee-ecb8-e283-817682ba5409 androidboot.vbmeta.avb_version=1.0 androidboot.vbmeta.device_state=unlocked androidboot.vbmeta.hash_alg=sha256 androidboot.vbmeta.size=3264 androidboot.vbmeta.digest=63c67704f2a8d7c387e0cbef6bbcf8ba5c214f09ee6e707a639fd6fd09a01030 androidboot.veritymode=disabled androidboot.bootdevice=1d84000.ufshc androidboot.serialno=5dc2dc5b androidboot.baseband=sdm msm_drm.dsi_display0=dsi_samsung_sofef00_m_cmd_display: andro
[    0.000000] log_buf_len individual max cpu contribution: 131072 bytes
[    0.000000] log_buf_len total cpu_extra contributions: 917504 bytes
[    0.000000] log_buf_len min size: 131072 bytes
[    0.000000] log_buf_len: 1048576 bytes
[    0.000000] early log buf free: 124608(95%)
[    0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
[    0.000000] Dentry cache hash table entries: 1048576 (order: 11, 8388608 bytes)
[    0.000000] Inode-cache hash table entries: 524288 (order: 10, 4194304 bytes)
[    0.000000] software IO TLB: mapped [mem 0xf5400000-0xf5800000] (4MB)
[    0.000000] Memory: 5517620K/5951908K available (19966K kernel code, 2416K rwdata, 8936K rodata, 6144K init, 5831K bss, 229488K reserved, 204800K cma-reserved)
[    0.000000] Virtual kernel memory layout:
[    0.000000]     modules : 0xffffff8000000000 - 0xffffff8008000000   (   128 MB)
[    0.000000]     vmalloc : 0xffffff8008000000 - 0xffffffbebfff0000   (   250 GB)
[    0.000000]       .text : 0x        (ptrval) - 0x        (ptrval)   ( 19968 KB)
[    0.000000]     .rodata : 0x        (ptrval) - 0x        (ptrval)   ( 10240 KB)
[    0.000000]       .init : 0x        (ptrval) - 0x        (ptrval)   (  6144 KB)
[    0.000000]       .data : 0x        (ptrval) - 0x        (ptrval)   (  2416 KB)
[    0.000000]        .bss : 0x        (ptrval) - 0x        (ptrval)   (  5832 KB)
[    0.000000]     fixed   : 0xffffffbefe7fb000 - 0xffffffbefec00000   (  4116 KB)
[    0.000000]     PCI I/O : 0xffffffbefee00000 - 0xffffffbeffe00000   (    16 MB)
[    0.000000]     vmemmap : 0xffffffbf00000000 - 0xffffffc000000000   (     4 GB maximum)
[    0.000000]               0xffffffbf5b000000 - 0xffffffbf60f5b000   (    95 MB actual)
[    0.000000]     memory  : 0xffffffd6c0000000 - 0xffffffd83d6c0000   (  6102 MB)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=8, Nodes=1
[    0.000000] Preemptible hierarchical RCU implementation.
[    0.000000] 	RCU dyntick-idle grace-period acceleration is enabled.
[    0.000000] 
[    0.000000] **********************************************************
[    0.000000] **   NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE   **
[    0.000000] **                                                      **
[    0.000000] ** trace_printk() being used. Allocating extra memory.  **
[    0.000000] **                                                      **
[    0.000000] ** This means that this is a DEBUG kernel and it is     **
[    0.000000] ** unsafe for production use.                           **
[    0.000000] **                                                      **
[    0.000000] ** If you see this message and you are not debugging    **
[    0.000000] ** the kernel, report this immediately to your vendor!  **
[    0.000000] **                                                      **
[    0.000000] **   NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE   **
[    0.000000] **********************************************************
[    0.000000] NR_IRQS:64 nr_irqs:64 0
[    0.000000] PDC SDM845 v2 initialized
[    0.000000] 	Offload RCU callbacks from all CPUs
[    0.000000] 	Offload RCU callbacks from CPUs: 0-7.
[    0.000000] arm_arch_timer: Architected cp15 and mmio timer(s) running at 19.20MHz (virt/virt).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x46d987e47, max_idle_ns: 440795202767 ns
[    0.000004] sched_clock: 56 bits at 19MHz, resolution 52ns, wraps every 4398046511078ns
[    0.000021] clocksource: Switched to clocksource arch_sys_counter
[    0.002246] Console: colour dummy device 80x25
[    0.003187] console [tty0] enabled
[    0.003212] Calibrating delay loop (skipped), value calculated using timer frequency.. 38.40 BogoMIPS (lpj=192000)
[    0.003234] pid_max: default: 32768 minimum: 301
[    0.003302] Security Framework initialized
[    0.003321] SELinux:  Initializing.
[    0.003404] Mount-cache hash table entries: 16384 (order: 5, 131072 bytes)
[    0.003419] Mountpoint-cache hash table entries: 16384 (order: 5, 131072 bytes)
[    0.004457] /cpus/cpu@0: Missing clock-frequency property
[    0.004484] /cpus/cpu@100: Missing clock-frequency property
[    0.004497] /cpus/cpu@200: Missing clock-frequency property
[    0.004510] /cpus/cpu@300: Missing clock-frequency property
[    0.004522] /cpus/cpu@400: Missing clock-frequency property
[    0.004534] /cpus/cpu@500: Missing clock-frequency property
[    0.004547] /cpus/cpu@600: Missing clock-frequency property
[    0.004564] /cpus/cpu@700: Missing clock-frequency property
[    0.004639] sched-energy: Sched-energy-costs installed from DT
[    0.012001] ASID allocator initialised with 32768 entries
[    0.021499] MSM Memory Dump base table set up
[    0.021539] MSM Memory Dump apps data table set up
[    0.033272] CPU1: Booted secondary processor [517f803c]
[    0.042633] CPU2: Booted secondary processor [517f803c]
[    0.052014] CPU3: Booted secondary processor [517f803c]
[    0.062013] CPU4: Booted secondary processor [516f802d]
[    0.071850] CPU5: Booted secondary processor [516f802d]
[    0.081801] CPU6: Booted secondary processor [516f802d]
[    0.091924] CPU7: Booted secondary processor [516f802d]
[    0.092065] Brought up 8 CPUs
[    0.092132] SMP: Total of 8 processors activated.
[    0.092143] CPU features: detected feature: GIC system register CPU interface
[    0.092152] CPU features: detected feature: Privileged Access Never
[    0.092162] CPU features: detected feature: User Access Override
[    0.092172] CPU features: detected feature: 32-bit EL0 Support
[    0.092181] CPU features: detected feature: Kernel page table isolation (KPTI)
[    0.141135] CPU: All CPU(s) started at EL1
[    0.141183] alternatives: patching kernel code
[    0.142836] CPU7: update max cpu_capacity 1024
[    0.215273] CPU1: update max cpu_capacity 1024
[    0.216473] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.216516] futex hash table entries: 2048 (order: 6, 262144 bytes)
[    0.220827] pinctrl core: initialized pinctrl subsystem
[    0.221506] NET: Registered protocol family 16
[    0.223109] schedtune: init normalization constants...
[    0.223133] schedtune: CLUSTER[0-3]      min_pwr:     1 max_pwr:    17
[    0.223144] schedtune: CPU[0]            min_pwr:     4 max_pwr:   160
[    0.223155] schedtune: CPU[1]            min_pwr:     4 max_pwr:   160
[    0.223164] schedtune: CPU[2]            min_pwr:     4 max_pwr:   160
[    0.223174] schedtune: CPU[3]            min_pwr:     4 max_pwr:   160
[    0.223186] schedtune: CLUSTER[4-7]      min_pwr:     1 max_pwr:   190
[    0.223196] schedtune: CPU[4]            min_pwr:    40 max_pwr: 60000
[    0.223208] schedtune: CPU[5]            min_pwr:    40 max_pwr: 60000
[    0.223218] schedtune: CPU[6]            min_pwr:    40 max_pwr: 60000
[    0.223228] schedtune: CPU[7]            min_pwr:    40 max_pwr: 60000
[    0.223238] schedtune: SYSTEM            min_pwr:   178 max_pwr: 240847
[    0.223251] schedtune: using normalization constants mul: 383241808 sh1: 1 sh2: 17
[    0.223265] schedtune: verify normalization constants...
[    0.223275] schedtune: max_pwr/2^0: 240669 => norm_pwr:  1024
[    0.223285] schedtune: max_pwr/2^1: 120334 => norm_pwr:   511
[    0.223294] schedtune: max_pwr/2^2: 60167 => norm_pwr:   255
[    0.223302] schedtune: max_pwr/2^3: 30083 => norm_pwr:   127
[    0.223310] schedtune: max_pwr/2^4: 15041 => norm_pwr:    63
[    0.223318] schedtune: max_pwr/2^5: 7520 => norm_pwr:    31
[    0.223329] schedtune: configured to support 5 boost groups
[    0.225123] cpuidle: using governor menu
[    0.226307] cpuidle: using governor qcom
[    0.231796] vdso: 2 pages (1 code @         (ptrval), 1 data @         (ptrval))
[    0.231818] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[    0.232454] DMA: preallocated 256 KiB pool for atomic allocations
[    0.233275] exit: IPA_USB init success!
[    0.233594] kernel normal boot_mode = normal[0]
[    0.233909] pstore: using zlib compression
[    0.234441] console [pstore-1] enabled
[    0.234511] pstore: Registered ramoops as persistent store backend
[    0.234524] ramoops: attached 0x400000@0xac300000, ecc: 0/0
[    0.237243] irq: no irq domain found for /soc/qcom,mdss_mdp@ae00000 !
[    0.237339] irq: no irq domain found for /soc/qcom,mdss_mdp@ae00000 !
[    0.237802] irq: no irq domain found for /soc/pinctrl@03400000 !
[    0.241619] unable to find DT imem DLOAD mode node
[    0.243367] unable to find DT imem EDLOAD mode node
[    0.244890] spmi spmi-0: PMIC arbiter version v5 (0x50000000)
[    0.246788] platform 4080000.qcom,mss: assigned reserved memory node modem_region@0x8e000000
[    0.246903] platform 17300000.qcom,lpass: assigned reserved memory node adsp_region@0x8c500000
[    0.247051] platform 5c00000.qcom,ssc: assigned reserved memory node slpi_region@0x96700000
[    0.247672] msm_watchdog 17980000.qcom,wdt: wdog absent resource not present
[    0.247698] msm_watchdog 17980000.qcom,wdt: No need to allocate memory for scandumps
[    0.252085] msm_watchdog 17980000.qcom,wdt: MSM Watchdog Initialized
[    0.252165] platform 8300000.qcom,turing: assigned reserved memory node cdsp_region@0x95d00000
[    0.252414] platform soc:qcom,msm-adsprpc-mem: assigned reserved memory node adsp_region
[    0.252613] platform aae0000.qcom,venus: assigned reserved memory node video_region@0x95800000
[    0.254489] <CORE> glink_mailbox_probe: unable to create log context for [spss:mailbox]
[    0.262937] sps:sps is ready.
[    0.263875] platform soc:qcom,ipa_fws: assigned reserved memory node ips_fw_region@0x8c400000
[    0.265148] platform soc:mem_dump: assigned reserved memory node mem_dump_region
[    0.275170] Minidump: size should be 4 byte aligned
[    0.275193] Failed to add entry in Minidump table
[    0.278163] pm8998_s9_level: supplied by pm8998_s6_level
[    0.278202] pm8998_s9_level: Bringing 1uV into 17-17uV
[    0.278356] pm8998_s9_level_ao: supplied by pm8998_s6_level_ao
[    0.278389] pm8998_s9_level_ao: Bringing 1uV into 17-17uV
[    0.286021] pm8998_l24: supplied by pm8998_l12
[    0.287653] pm8998_lvs1: Bringing 1uV into 1800000-1800000uV
[    0.288036] pm8998_lvs2: Bringing 1uV into 1800000-1800000uV
[    0.302033] sdm845-v2-pinctrl 3400000.pinctrl: invalid resource
[    0.308457] platform soc:qcom,kgsl-hyp: assigned reserved memory node gpu_region@0x8c415000
[    0.323051] vServices Framework 1.0
[    0.328702] gpu_cx_gdsc: supplied by pm8998_s9_level
[    0.337763] cam_cc-sdm845 ad00000.qcom,camcc: Registered Camera CC clocks
[    0.338969] qmp-aop-clk soc:qcom,aopclk: Registered clocks with AOP
[    0.339936] clk-rpmh soc:qcom,rpmhclk: Registered RPMh clocks
[    0.341929] disp_cc-sdm845 af00000.qcom,dispcc: Registered Display CC clocks
[    0.365162] gcc-sdm845 100000.qcom,gcc: Registered GCC clocks
[    0.366087] clk: gpu_cc_gx_gfx3d_clk_src: set OPP pair(180000000 Hz: 49 uV) on 5000000.qcom,kgsl-3d0
[    0.366403] clk: gpu_cc_gx_gfx3d_clk_src: set OPP pair(710000000 Hz: 417 uV) on 5000000.qcom,kgsl-3d0
[    0.366487] gfxcc-sdm845 5090000.qcom,gfxcc: Registered GFX CC clocks
[    0.368005] clk: gpu_cc_gmu_clk_src: set OPP pair(19200000 Hz: 49 uV) on 506a000.qcom,gmu
[    0.368120] clk: gpu_cc_gmu_clk_src: set OPP pair(500000000 Hz: 129 uV) on 506a000.qcom,gmu
[    0.368322] gpu_cc-sdm845 5090000.qcom,gpucc: Registered GPU CC clocks
[    0.369482] video_cc-sdm845 ab00000.qcom,videocc: Registered Video CC clocks
[    0.370438] KPI: Bootloader start count = 97871
[    0.370450] KPI: Bootloader end count = 133710
[    0.370460] KPI: Bootloader display count = 2536732415
[    0.370470] KPI: Bootloader load kernel count = 2147217211
[    0.370484] KPI: Kernel MPM timestamp = 154201
[    0.370493] KPI: Kernel MPM Clock frequency = 32768
[    0.370524] socinfo_print: v0.15, id=321, ver=2.1, raw_id=139, raw_ver=2, hw_plat=8, hw_plat_ver=65536
[    0.370524]  accessory_chip=0, hw_plat_subtype=0, pmic_model=65556, pmic_die_revision=131072 foundry_id=3 serial_number=843411654 num_pmics=3 chip_family=0x4f raw_device_family=0x6 raw_device_number=0x0 nproduct_id=0x3f4 num_clusters=0x1 ncluster_array_offset=0xb0 num_defective_parts=0x6 ndefective_parts_array_offset=0xb4 nmodem_supported=0xff
[    0.370636] Minidump: Enabled with max number of regions 200
[    0.370646] msm_bus_fabric_rpmh_init_driver
[    0.370857] msm_bus: Probe started[    0.371436] msm_bus_device 16e0000.ad-hoc-bus: Bus type is missing
[    0.371498] msm_bus_device 16e0000.ad-hoc-bus: Bus type is missing
[    0.371522] msm_bus_device 16e0000.ad-hoc-bus: Bus type is missing
[    0.371587] msm_bus_device 16e0000.ad-hoc-bus: Bus type is missing
[    0.373930] msm_bus: DT Parsing complete[    0.377136] msm_bus_fab_init_noc_ops: Invalid Bus type
[    0.377320] msm_bus_fab_init_noc_ops: Invalid Bus type[    0.377376] msm_bus_fab_init_noc_ops: Invalid Bus type
[    0.377557] msm_bus_fab_init_noc_ops: Invalid Bus type[    0.391526] init_project_info: get project_info failure
[    0.391552] Unable to handle kernel NULL pointer dereference at virtual address 00000008
[    0.391569] [0000000000000008] user address but active_mm is swapper
[    0.391627] ------------[ cut here ]------------
[    0.391650] Kernel BUG at init_project+0x18/0x64 [verbose debug info unavailable]
[    0.391666] Internal error: Oops: 96000005 [#1] PREEMPT SMP
[    0.391679] Modules linked in:
[    0.391696] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.9.227-gfd7b2c5f4 #4
[    0.391708] Hardware name: Qualcomm Technologies, Inc. SDM845 v2.1 MTP PVT (DT)
[    0.391725] task:         (ptrval) task.stack:         (ptrval)
[    0.391738] PC is at init_project+0x18/0x64
[    0.391749] LR is at init_project+0x10/0x64
[    0.391759] pc : [<ffffff8adb23aa9c>] lr : [<ffffff8adb23aa94>] pstate: 60800045
[    0.391772] sp : ffffffd833e8bce0
[    0.391781] x29: ffffffd833e8bcf0 x28: ffffff8adb284940 
[    0.391796] x27: ffffff8adb284728 x26: ffffff8adb278370 
[    0.391811] x25: ffffff8adb278330 x24: ffffff8adba5f000 
[    0.391826] x23: 0000000000000000 x22: ffffffd833e80000 
[    0.391841] x21: ffffff8adb200bf0 x20: ffffff8adb820da8 
[    0.391856] x19: ffffff8adb23aa84 x18: 00000000ffffae20 
[    0.391871] x17: 000000000000003d x16: ffffff8ad97fc1ac 
[    0.391886] x15: 0000000000000002 x14: 72756c696166206f 
[    0.391902] x13: ffffff8008309958 x12: ffffff8008309928 
[    0.391918] x11: 0000000000000000 x10: 0000000000000000 
[    0.391933] x9 : ef6a43d060d1ef00 x8 : 0000000000000000 
[    0.391949] x7 : ffffff8adb868ff0 x6 : 000000000000003b 
[    0.391965] x5 : 0000000000000000 x4 : ffffff8adba87589 
[    0.391980] x3 : 0000000000000000 x2 : 0000000000000000 
[    0.391995] x1 : 0000000000000040 x0 : 0000000000000000 
[    0.392011] 
[    0.392011] PC: 0xffffff8adb23aa5c:
[    0.392025] aa5c  911e3529 320003ea a91526c8 392902aa a9437bfd a9424ff4 a94157f6 2a1f03e0
[    0.392072] aa7c  f84407f7 d65f03c0 f81e0ff3 a9017bfd 910043fd 97fffedc d00045c8 f9450908
[    0.392112] aa9c  b9400908 7100851f 54000183 f0003340 91278000 aa1f03e1 97a284c1 2a0003f3
[    0.392152] aabc  340000e0 f0ffd780 91254000 2a1303e1 978b7ebe 14000002 2a1f03f3 a9417bfd
[    0.392192] 
[    0.392192] LR: 0xffffff8adb23aa54:
[    0.392205] aa54  f0ffd789 9128b108 911e3529 320003ea a91526c8 392902aa a9437bfd a9424ff4
[    0.392246] aa74  a94157f6 2a1f03e0 f84407f7 d65f03c0 f81e0ff3 a9017bfd 910043fd 97fffedc
[    0.392285] aa94  d00045c8 f9450908 b9400908 7100851f 54000183 f0003340 91278000 aa1f03e1
[    0.392325] aab4  97a284c1 2a0003f3 340000e0 f0ffd780 91254000 2a1303e1 978b7ebe 14000002
[    0.392367] 
[    0.392367] SP: 0xffffffd833e8bca0:
[    0.392380] bca0  db23aa94 ffffff8a 33e8bce0 ffffffd8 db23aa9c ffffff8a 60800045 00000000
[    0.392422] bcc0  db820da8 ffffff8a db23aa84 ffffff8a ffffffff ffffffff db23aa94 ffffff8a
[    0.392463] bce0  db23aa84 ffffff8a db237b40 ffffff8a 33e8be30 ffffffd8 d94836d4 ffffff8a
[    0.392505] bd00  33e8bd40 ffffffd8 d967bd00 ffffff8a dacbbd6a 00000041 60d1ef00 ef6a43d0
[    0.392549] Process swapper/0 (pid: 1, stack limit = 0x        (ptrval))
[    0.392563] Call trace:
[    0.392577] Exception stack(0xffffffd833e8bbb0 to 0xffffffd833e8bce0)
[    0.392591] bba0:                                   0000000000000000 0000000000000040
[    0.392608] bbc0: 0000000000000000 0000000000000000 ffffff8adba87589 0000000000000000
[    0.392625] bbe0: 000000000000003b ffffff8adb868ff0 0000000000000000 ef6a43d060d1ef00
[    0.392642] bc00: 0000000000000000 0000000000000000 ffffff8008309928 ffffff8008309958
[    0.392659] bc20: 72756c696166206f 0000000000000002 ffffff8ad97fc1ac 000000000000003d
[    0.392674] bc40: 00000000ffffae20 ffffff8adb23aa84 ffffff8adb820da8 ffffff8adb200bf0
[    0.392690] bc60: ffffffd833e80000 0000000000000000 ffffff8adba5f000 ffffff8adb278330
[    0.392706] bc80: ffffff8adb278370 ffffff8adb284728 ffffff8adb284940 ffffffd833e8bcf0
[    0.392722] bca0: ffffff8adb23aa94 ffffffd833e8bce0 ffffff8adb23aa9c 0000000060800045
[    0.392738] bcc0: ffffff8adb820da8 ffffff8adb23aa84 ffffffffffffffff ffffff8adb23aa94
[    0.392754] [<        (ptrval)>] init_project+0x18/0x64
[    0.392774] [<        (ptrval)>] do_one_initcall+0xdc/0x1a4
[    0.392792] [<        (ptrval)>] kernel_init_freeable+0x19c/0x230
[    0.392813] [<        (ptrval)>] kernel_init+0x10/0x12c
[    0.392826] [<        (ptrval)>] ret_from_fork+0x10/0x20
[    0.392842] Code: 910043fd 97fffedc d00045c8 f9450908 (b9400908) 
[    0.392866] ---[ end trace 51ecd5d27aaf7dab ]---
[    0.395683] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
[    0.395683] 
[    0.395703] SMP: stopping secondary CPUs
[    0.395722] CPU1: stopping
[    0.395738] CPU: 1 PID: 0 Comm: swapper/1 Tainted: G      D         4.9.227-gfd7b2c5f4 #4
[    0.395752] Hardware name: Qualcomm Technologies, Inc. SDM845 v2.1 MTP PVT (DT)
[    0.395767] task:         (ptrval) task.stack:         (ptrval)
[    0.395781] PC is at arch_cpu_idle+0xc4/0x184
[    0.395791] LR is at arch_cpu_idle+0xc0/0x184
[    0.395801] pc : [<ffffff8ad94851b4>] lr : [<ffffff8ad94851b0>] pstate: 80800005
[    0.395814] sp : ffffffd833ef7f10
[    0.395822] x29: ffffffd833ef7f40 x28: 0000000000000000 
[    0.395838] x27: 0000000000000002 x26: ffffff8adba49000 
[    0.395853] x25: ffffff8adb2905a8 x24: ffffff8adb80d000 
[    0.395868] x23: ffffff8adb80df38 x22: ffffffd833ed5a00 
[    0.395883] x21: ffffff8adba4a000 x20: ffffff8adb287018 
[    0.395898] x19: 0000000000000001 x18: 0000000000000001 
[    0.395913] x17: 00000000000003e7 x16: 0000000000000000 
[    0.395928] x15: 0000000000000000 x14: ffffffd833f31e00 
[    0.395943] x13: 000000000000003a x12: 0100000000000000 
[    0.395958] x11: 0100000000000000 x10: 0000000000000000 
[    0.395973] x9 : 0000000000000040 x8 : 0000000000000000 
[    0.395987] x7 : 0000000000000000 x6 : 000000000000003f 
[    0.396002] x5 : 0000000000000040 x4 : 000000000000000c 
[    0.396017] x3 : 0000000000000001 x2 : 0000000000000000 
[    0.396031] x1 : 0000000000000000 x0 : 0000000000000001 
[    0.396046] 
[    0.396046] PC: 0xffffff8ad9485174:
[    0.396059] 5174  b40000f7 a94002e8 320003e1 2a1303e2 d63f0100 f8418ee8 b5ffff68 b94052c8
[    0.396102] 5194  71000508 b90052c8 54000061 f94002c8 37080608 94028f01 94007005 d50342ff
[    0.396142] 51b4  d538d088 b8746913 b94652a8 7100051f 5400046b d538d088 b8746908 90011c4a
[    0.396182] 51d4  913ce14a 1100fd09 7100011f 1a88b129 13067d29 f869d949 320003ea 9ac82148
[    0.396222] 
[    0.396222] LR: 0xffffff8ad9485170:
[    0.396235] 5170  f9433517 b40000f7 a94002e8 320003e1 2a1303e2 d63f0100 f8418ee8 b5ffff68
[    0.396274] 5190  b94052c8 71000508 b90052c8 54000061 f94002c8 37080608 94028f01 94007005
[    0.396314] 51b0  d50342ff d538d088 b8746913 b94652a8 7100051f 5400046b d538d088 b8746908
[    0.396353] 51d0  90011c4a 913ce14a 1100fd09 7100011f 1a88b129 13067d29 f869d949 320003ea
[    0.396393] 
[    0.396393] SP: 0xffffffd833ef7ed0:
[    0.396405] 7ed0  d94851b0 ffffff8a 33ef7f10 ffffffd8 d94851b4 ffffff8a 80800005 00000000
[    0.396445] 7ef0  db80df38 ffffff8a db2905a8 ffffff8a ffffffff ffffffff db80e000 ffffff8a
[    0.396484] 7f10  db80df38 ffffff8a 00000080 00000000 33ed5a00 ffffffd8 db80e000 ffffff8a
[    0.396525] 7f30  00000000 00000000 00000000 00000000 33ef7fa0 ffffffd8 d950343c ffffff8a
[    0.396568] CPU: 1 PID: 0 Comm: swapper/1 Tainted: G      D         4.9.227-gfd7b2c5f4 #4
[    0.396583] Hardware name: Qualcomm Technologies, Inc. SDM845 v2.1 MTP PVT (DT)
[    0.396597] Call trace:
[    0.396609] [<        (ptrval)>] dump_backtrace+0x0/0x448
[    0.396621] [<        (ptrval)>] show_stack+0x14/0x1c
[    0.396638] [<        (ptrval)>] dump_stack+0xdc/0x114
[    0.396651] [<        (ptrval)>] ipi_cpu_stop+0x74/0xa4
[    0.396662] [<        (ptrval)>] ipi_cpu_stop+0x0/0xa4
[    0.396674] [<        (ptrval)>] gic_handle_irq+0x108/0x198
[    0.396684] Exception stack(0xffffffd833ef7de0 to 0xffffffd833ef7f10)
[    0.396696] 7de0: 0000000000000001 0000000000000000 0000000000000000 0000000000000001
[    0.396711] 7e00: 000000000000000c 0000000000000040 000000000000003f 0000000000000000
[    0.396726] 7e20: 0000000000000000 0000000000000040 0000000000000000 0100000000000000
[    0.396742] 7e40: 0100000000000000 000000000000003a ffffffd833f31e00 0000000000000000
[    0.396758] 7e60: 0000000000000000 00000000000003e7 0000000000000001 0000000000000001
[    0.396775] 7e80: ffffff8adb287018 ffffff8adba4a000 ffffffd833ed5a00 ffffff8adb80df38
[    0.396790] 7ea0: ffffff8adb80d000 ffffff8adb2905a8 ffffff8adba49000 0000000000000002
[    0.396806] 7ec0: 0000000000000000 ffffffd833ef7f40 ffffff8ad94851b0 ffffffd833ef7f10
[    0.396821] 7ee0: ffffff8ad94851b4 0000000080800005 ffffff8adb80df38 ffffff8adb2905a8
[    0.396835] 7f00: ffffffffffffffff ffffff8adb80e000
[    0.396846] [<        (ptrval)>] el1_irq+0xe8/0x18c
[    0.396857] [<        (ptrval)>] arch_cpu_idle+0xc4/0x184
[    0.396872] [<        (ptrval)>] cpu_idle_loop+0xe4/0x1d8
[    0.396883] [<        (ptrval)>] cpu_idle_loop+0x0/0x1d8
[    0.396896] [<        (ptrval)>] secondary_start_kernel+0x138/0x144
[    0.396908] [<        (ptrval)>] 0x812751a8
[    0.396918] CPU2: stopping
[    0.396931] CPU: 2 PID: 0 Comm: swapper/2 Tainted: G      D         4.9.227-gfd7b2c5f4 #4
[    0.396945] Hardware name: Qualcomm Technologies, Inc. SDM845 v2.1 MTP PVT (DT)
[    0.396961] task:         (ptrval) task.stack:         (ptrval)
[    0.396974] PC is at arch_cpu_idle+0xc4/0x184
[    0.396984] LR is at arch_cpu_idle+0xc0/0x184
[    0.396993] pc : [<ffffff8ad94851b4>] lr : [<ffffff8ad94851b0>] pstate: 80800005
[    0.397006] sp : ffffffd833efbf10
[    0.397015] x29: ffffffd833efbf40 x28: 0000000000000000 
[    0.397030] x27: 0000000000000004 x26: ffffff8adba49000 
[    0.397044] x25: ffffff8adb2905a8 x24: ffffff8adb80d000 
[    0.397058] x23: ffffff8adb80df38 x22: ffffffd833ed6900 
[    0.397073] x21: ffffff8adba4a000 x20: ffffff8adb287018 
[    0.397087] x19: 0000000000000002 x18: 0000000000000002 
[    0.397101] x17: 00000000000003e7 x16: 0000000000003ab4 
[    0.397116] x15: 0000000000000000 x14: ffffffd83368ad00 
[    0.397132] x13: 0000000000000042 x12: 0100000000000000 
[    0.397148] x11: 0100000000000000 x10: 0000000000000000 
[    0.397164] x9 : 00000000000000ba x8 : 0000000000000000 
[    0.397179] x7 : 0000000000000000 x6 : 000000000000003f 
[    0.397194] x5 : 0000000000000040 x4 : 000000000000000d 
[    0.397209] x3 : 0000000000000001 x2 : 0000000000000000 
[    0.397223] x1 : 0000000000000000 x0 : 0000000000000001 
[    0.397240] 
...后面还有 太长了 
备注

罗嗦一下,
git仓库codelinaro/…/linux-ramdump-parser-v2 中的文件 linux-ramdump-parser-v2/boards.py 中含有字符串845 的所有提交 :

8c694e5e2941057965322ab5201232bbd40b7f11
6e36e7d0fbcc2ada342b693eee24f7e6be914069
0119746f2bb7bfe315ebda7926f211f19134208c
00599f52566f7dfd402d05a6fe7fa2699c07835e
c3affdc72d70bb87604dcc4eb61708a61b2b0553
b9deeab037c308bb870f673d4d795e23233eb79c
3e7f3768f35cdb9fbc8201f4c0157c7deda0f625
d98fc75e647921a5f0f98afc266d9e437ddb4f08
d0b7526b0834db2ea9462cf9ec5c29bf1fa30da1
34b889a254b1d3bf7d86f51d5342595264f18338
7be6968ae074fb86f155d9ef71346d02a87265e9
1418c1475c0ddfc7482157d86bbbc862a0ba614a
3730813b259224f5e05d58727f7fe07b8a9596f4
fd8f1c823917bd3565100373010e6edce97e84ae
0e449aa4b654eb359ae061176cb9fe574ba6866c
0fc0ede51d1934fb5cbdb3bcbb44b82b92e9a0fe
38d42c05ec6ced913d65dae4145927da6a9c857c
9c6c65fb563331351d1682709c55e4426f6073cd
74e69847d401e2d0ccbbf311646744421bffa0ec
de55b472e223d36e36cb1b9dfd8f07076fad33ba
defb689d0e9105aac6cac6e7ae9d66fc09cf5893
b8866e9d9dfe84ca998c6775528b2da876148a03
7af388a91a0dc60d1f7f19320d1326501e181c5c
e39d2f1ff7444a4bdde27eadcf01e56365952cee
e3c3f38c26a19293bfc80d46c3b59acf10216620
934ff070e73e1e0424010a49d646088d0ee54a61
3ade101323239e1f1e201a537cc878f39839a573
f19f2e2c84d519c1e920d59e41a3436719ef2dcb
31c9050318570988001d1592a0565e6d21f43a1c
c8e80d9e7e9501566680c4bdf8dfbeb2c99a216b
b9b6787a709ce7d67e3aca5b7be3892ad1206be6
2dbf6a54f31a3919597e57cf874aadc4ae9cb2fd
9a4a77d01f438be8b25d4440d0297b137750646f
1398c36a81e640411e5e9b2e123bbc6a04bd8d7f
500a86ae7c4da79259cd819460b86dbee9790c0e
cc578cbfc1011a5ba8b6819fa82aeffec14a6fe2
be38bb19c95167b87ed0396b295b0a9d50eea78c
b00a514096383529a6377ce76ac1e0f2573eba7a
abc4a40ad8216e9410d097e6d522afe3ff044a34
6d4d5724011ad7db7a6455a50f0270e5ae3156e6
980b9c4b8ec0a677f63c2e5e7f6b52e75602d433
bb247a3617ce8a662c4e9585b612534fd9a386c1
832952bc3190f60726460cc3d1e08a71e5cb2473
49538b3eb5b0c7b1cda680bfcdf1ea567bfd81b8
56ac380a0126581c46dc29a15297ab8a85ff635d
974edbcfcbc1136122f4cd95009a1937f58cf555
e1d0f42aced2db9fa5f40ebe9330488d349aeb65
4bfb0932f5bf7f4ab77109f9adfe3346d1b67342
640598ce07274144204d8880a293e27d65fbdd22
c7d130114dbb1cae9ba28c27e7c19321b96562c5
a53bbcba71fdf74af2d9d7f31c7e5052839920c0
b789cf8dae7988815e137a1936271755814d1e55
4c464d7fa0349b7c281360c32ff1a469dcc95966
33a4bb298e3ff73fb40b5a3bbb61be2735fe3580
e75cc44e44ec0c6460d3f65eed0c38cd781e4d06
09e73311e72556080d75109d0141a6e6c7e5bc8c
b5a9215ee2615b4ce8538c36ed8202eef59c1332
b141140cb4fe33d27d7ce99ed8b3b84eb5f82aaf
88be956b358b6c0996dfebf38414c3ee4dfa160d
441550a674d097de7581474a518dddc95868d4cc
5ba9b08eca432d8ea9f1fbe572e3a8cb6b733323
f598b29258c024cae5eff7ffa5c3a2601b61b1dc
9490e3fa8976806a9fa562d63d60fcbd96efa9e1
c414a739beb059142822cf83188c2bcf53809cb7
390fc361e1f8d2dd26c508a0c47536aeba307f75
5e9481d2133f263b2a7bd0171d5a08a015059f82
a9abe492045048aab19e7242b008a178ef1b77df
44bb69d10d784d01a7156260712273865445aa21
97c24e2626b5f2b2211bd31dde44757a193a97f9
ca2f2f1a98d97254cdf4cfefe7ec0fe4da0f30b5
5ee1b48324715bf301d37a1ea64674290def14d1
1cf7782248d8aeaf452172351dc207396b9d23fe
f44c5ad461b7ee816c293f9ced083912be185b44
b7250205724a2a0814528cd2bed0691c210102d5
d467b98b413ea18e1b46c3d47a38432506264324
8f530b7e173c14a17ef37da1366830fb5ee95bec
4667caa77f89f5332d8e0e88d828a2f6acc6c352
e7741cf0d8f23568a2d64b8386ed8628af573195
7f6961818181a6281ba48b3dc13d205b5c1b4a58
f6655768a695e7612bbfca2f6c4d11a9baeca7e2
ff108b56e3629bbed99c5ab0a95f31e39e2ce494
b377a72cd71de337ded1a7fbb1b61ae60b333d55
d29a26a2ad0221b14917b40d0df5d158d7211d01
c17de9a369fef45d473f193cfa38b9f37d1e4162
528cfd1067cac6f382e9b66e2f6bc6650d0ea242
50e3463a6637bdf4181eda0ebd2c592ba67d0041
03be76ec52d713eacca92e74237ab24d936595cb
fe0d247b073bd34b55c03688d74844af24b8a6f2
f00b8f1b9131031ac8562d9358ceddef58c9ea43
8c8976780179ca00ea69ecea033914b489e1e76c
9cd2da25051a17719949f2a1cbe04bb344b10667
1e53538ee8bf73b95817f9da70c23abac0a88a48
8c5cee130e13a966d3168393ee19d8cd844c30dd
a189e915b96b4e1503a6aa7d809efa8cb808e048
fb73dbf135b4e4a8224d6c002ab612132d1408b7
a22b6199ddf4dbb58ea3c04f20b4d087b6c9baf6
ee1423078bd815c4deb7dcbdba67c96b37aa7fc8
42ab98e428e6a2e9ac6c72d5d4acbccf6f8cfa45
e7e41dda0612b1d642e231194fe381452a6b5ead
df5526eefe69a0dd22d2dd713493f65eb638c844
f17185b43b812ac72fcaddce2ff84576023630b0
83c9c0c64940d2e7bca4bbbcd89058db34cef721
40951339fb4e62aaf0cda6177c270689f256c34d
9438341e0fb3a8227cf124935ea6aba9c01bc94d
c4701288c6c568e1873cd8e71d4cb9d7b4b456bd
de827090a5225917ddfc72a80bf1869ecb3843f9
bae46f7b861bdc77d789b06a56438fa3509a7df3
ac78f0845bfe0fcb4b2c4307822d890b9a98e582
678f4213b0a9df057b36494c12ac2545c722891b
08d8d7eac1ad7e7c5e9207ea4949ea29535dcbb5
b7ab648ab7c65dbb9fb1f29442ff9f93311291f5
498b775b2d1b5569a6a4a185cefb8554d1f5d459
ed78dc3db1a9b2a68e06427ce9c61183768a1088
465bdcf47a97f99cb0f66f2d17870cc9a8e95988
f9a2adc5b4052e4cf2dec6c7ae4505d9c6f13b17
31715a055ee2a0c19aef5ccf8a75c44b38dc0cea
14907356352a991fd3839bc7f5f572aaeefda965
eaa8848236d7fc97639a25b3a8238917b2ed2b61
4fd513dac8f1b6d6bb3cdb8b14bceb8e6b083669
64384cb797e11b304daeebba2fa9a69b92c2397d
802e67ddf5da16b229604f5d14e69453debd4160
a66f79f9871fb29c23262261e3489e9e19b14bf4
614a1eae44ab562b714f7764b503d78aebec3da8
837d31c1615b89a750e1abd0e5dbdeae5613ba6d
bc9494d697253678a560ea9d568958cbc6ca3ff9
bbc7c04dfcc9f314e87d956accf3fe6098c2f21a
91b749766d1e5a706a7d5ea9378fd5513cbaa044
28911e04fcc4df21ed39399b79aafd073163c1bc
c18b922fc81d37b6f23c1ef6f8def0caaf80313c
ea072f51fe7987936efac2feebdf81822cc81416
6f3fc718b6e98ef16387a534bb02d4d2051f3c6a
d87ca0cd531d530b8340104434483594d1358a58
ac6d07457dea18ac2eb2fbfcbd56a0926e0ac6e8
dc161fe37f0f9034c276c5cdf02fbe71cc2b1d86
e6c4b172000644910f2cf92b45524fb36d5ff17c
795198f7af2902984c9000e80ebddfed99552c60
15f7ec965d8e397dae7f9b78807a8bca9d433557
a3d39b29c85aee2185ad96626047be5f2b3826c0
388a2f9a13a1773969e3ade2790cc3a76c950adb
a11fef9003085db2178af1dcba1cf9bf6c5dd0fc
04117f03bf3c3426601ae4a63e3d20c8755b7450
1bc5afb66441695c4a19136f55db5d0558d0665a
1cd52dc61909bb1a362bb10b49a274d7fbce04d9
1a3a672b341423a040ee1f260868f32939e0e778
68ec3d6a6bbfc402744e7bb6bb4e1837767e9fb9
d3fb4a90a2773908ad4f244bee6b1bd2bba79911
5d5dab651e01a452627908f5bc808262fc33e392
3aa76c774a326afb87be21dad32a3e1e8c4e2dfb
f2ee7368848c143685bd1abbce926f23aedefce9
98e952835975e286a1d8aecc38bc56e951c5a79c
b913e10265fa8b90898bfcb877e59fd2a5cfbcbc
5b63b90020ea6796a3d20f0f2e418a52d7bb8b4d
2051c11932ce7037f226dfb4d3c8d5a0beba0022
95de6809ba1e909455a78c626df4d0654617ce28
2901b896a2b203e9b8674f8b3f88e4cfb31aa3e6
4be5994cd149b895e5f91bcfcada19912eef10f3
1cf82c5c4ed7bd0d3aaee5dec72c2a8a2d8ca834
e343a39d57961a570d23881502304516bbbd02f5
1b6e73876ec71ae2ec9937ee7fc551cb38134dfb
58ffa372eca5909077b62dd851bab77738ab2b74
9d7015d7acaee35d6b9b6b5b4f8019ca08fb9b1e
e0d984b049966ac8c4fb440da1a0e5ea75da5df4
e8e5c90adfb1c26ad80f748d2a0e482f8d21b561
44f95545dbbc2e30eca9b5cff75d7ad8918fd5b5
5c8f5bf79a249fd540aaaae792cd4813add05583
6466d71bf727cbf6ae0834348cfc077b46a2caf9
37d720aeec2e03666794747e759254be011f266c
316f44ad7561e4c4a0fb4b793650899200e453b8
543a896f776e2957bca7d2b12fd25fa71f1acb7b
7f3c1e5878d16e8f309feaab3ea9fdbadde32b3c
d469198ee582c578040730526ae2aa4776cb9e0e
ad24e779878b1fd73ef39049a797f5f1a778975c
73d6d9b146a7f1afbf2c6676c1e6606946d1dcf6
dbcab6fa6914e8889da2fbc17474a953992e8f3d
21c6c08bc70fdde624633aadd678870917ffe20e
af142deee3576114bd69bf1f87f97dd42ac1da1a
d1bc045d6b5801cba8dc3287daf698b0191d2dda
d8fbf6b2a5b33a73a52b9e08218f86028c25c0bf
83654cc56d553aa27dba7e07d32343154cf35877
55de79049207e2e45a3db881ed12e614e82aa33a
a00d1f89134a90d1741c86cde11026ec3419f9d3
e07bf7bf3538d125938c66feefa8a17434430b1f
1a29a499e721aebfc7fbd59928ff0ec71a402d1e
2a6f0284a7ea495c862bf31b7891e6a559c14e29
d74d56020e506be6889aa730ed71c96fa12426cd
236ecf3a7cc6832b6739bc2c3fcc92cc34332bf3
267d8dfd5e4791e33716b0e9ebd8e9f8e1ea918a
d794372ed03711d87979c03ac5af1e96b02690d9
c82641c5c2f6c6f2ab7c4f2a7f59fa63769c42bf
9aac60ec6250994b14c12510238403b6f62836a2
12fc0f5ce278f085c01c83187a1645bff18f7a01
eb3a8e76af24fb5f0d05c1f3b20d051401abea09
b99d0f5209420d92131a5e25c090dc9fbb7f4d9d
5409934858bb52e76b55ec6010e2da51bd186362
fb915d01e840101e37290a60f6fac559c22ed1e0
eb9ee7fa862a3679d2aae7bfa4361c500c9da119
a9e7f648413c9d44ede1c511f0001fd830e7fd0e
3b9c59303cfd3118a89f18add9ae2462ff86d086
bba3641c008d67269f578e281383897efaab826f
eb9a0d2987e744314fff8b298b3d3254de2f258b
c59c224bc2b959a8d983520dd1926b4c0786002e
183a347e5eaafd99779d3bc62eb8fe8d83dc574d
246e5ea84e769d064a8881011bbd384dc208ed47
581d4ea7593cbb7d826c1d44436a620ce0bfdc22
564754436588fd7534243ff273cffe9c6eabde77
9c511c8b30abc40953790ed9b66cf9c427407d5e
f2fe14844896c7abdc792b0b0d24ef1c2224b883
f6f6e02daf1d472ec2ec2442ba7c883afcffe788
133c4ffc97b876736e7e13069071899abce10935
8e3334362805df0680c0f62a3dbb58c91ac8a1d7
656f74ee3b9720522ade0c07c60ce63d9aa39cb0
e6a4dcf64ecbf3ebbcf977e7d5a031515e646a11
e706dcd150a9097beb34cdd9a2195df5803877f8
4cf88e18a91d75ac154039ad9b1cd3d5d026385e
4e8844711ce20f763d03ebe4a51a7df67df9fd45
9363afde8bb195d556a19281ede5837bbd8784d7
f68cc0f93a868958cca153f7f6a7e36677e6f651
87e02f6ab5a74286d1b0a32705a2d45bfab014a1
cd51b55e5fa4c8cd75ef8d4801b011046ecc3f1d
c646831f30f742e649b11001833e0416b2596bd8
f587e36a50f61c39318641ea198ff9076ccd51d6
80158d60411c898971a6da6571ea9d51024d87ae
f8393a44768033580bd4dcabbb80dd7e6bdbf3fa
42921832bcf419c7ce8cff894261fa40ea730b4f
2bb69c76449da6d00a468a0ba004333a1e1982e5
3f3ce9a46b350ee77bc70c2ca10745e8b7f29191
86c2dccd4bf96fd7afef6840a8997bfa2733617e
c43f0e9d02b7b43b6c8164f03142d651aa1abd14
cd9f24bd8bd246c763c542b9ee9e78a126d2233b
e67eab2b88b0d5a520b07b79516c9338e6592b0d
32dac4decce37be30907e6c6250c5d42969edf17
25fbb2d5a2847f4ec2fd0df2a40f41a86e2e7e96
7b799500fe2dff729d19cd2cfce736e09fb2e55b
c200e15e5edfc02dc2ad5b0b5cd12c4e12203852
2bd313360dfcabd55ddd671cbc428f3064bd5b17
253cf2d3da85378442c88347b65f98a8ee8cdf64
ec023feaefc7e4ddd6e5059d86699be436023d13
dd5e8fff52efdd3c9d41831d0c862ff95ed4f079
7f4885b6be926b14b43743189f57b31a660795ad
dc0e0969898754fdb26b1fae6fd6babeaa64cba1
db1b5125b63512b3a5dbcb559364d02b1ab1ed04
15dd9067529be333b5b6fb47228de59aab7faeee
41400389fb7534b21b5a011ba5a41adc93a2d62f
a21214f1eebf47b14bb94a54efd6afd4aa9a1f87
b5eb5eef48ae6d277c081b33e0d92803057fa044
62012352a29557e323bc83d7c698527b4ec0e474
73c16462ed5e52d06dec36d9549370edbae14877
d348c1e342a9c9aef4033f3da29c255e8f776802
46da0e9c1061628e719a587e24c031237be4bdeb
c06fb3b557eee25c49813608e66f796aed635850
9eba037bdd280b2265c2d59a4ded1f824aedbce3
130ff43fa119bbd7cb1358013eeb4d0fab781c9e
1e7638695c86e0b21d406db1a07b3c02589dc2e9
8fbbdf4626453afbf320144d69bc0cd56fb14e3e
011770788180dbda582f554ed1d98ba86705380d
b4c3414c941f1abc5d400d5cf0da4a9d379953a0
33a83ba8bcf5f524826ead0997e97f6e9eb9cf81
219ba6776c3f0bcf3c91a187f9e7962a045e89ec
a6ddb98bc4f4ff1e9becf8427c813f162dfcad05
26d3f7255daf1263e0bdedc39b0f2f6427256f45
fc7860efd9255c3ad20452c8c0d1471a0da5e41c
bf80cf3dff80d522499aa34101aa4e7a51fa22f7
714710cb39b6112f57f5c2b5da1df12ab90e6202
1c9201e32f7ac4d721bff923d37a04280417844c
a2583fc2739111e240a78762dc3464440c29c145
229a38d7c1922141ab0b9f8ea5b5692a22be7250
c95e0de27e7fd9eed05c1f1e1d82053800bc21c8
9674d6e8233dd770802121dcc64c86be787dd289
db994918f3bebe00a67569a4ebb0755a0c85b9be
0ec29d91ae7a737fbd26c8d35f474044c1f9bbba
2de58ca2d35789028c1a3133d29de2251086e155
0aa04e0e3b92a04236b56352bf437331198b0a0c
38a3afc228a0e963743af894ff7c3b4b342d1a07
e9a51f85e9421c5cbcc09c7fccdce584bb3937a9
52aed235cf69fb9fbd99031d6f5d0f0b4a8f0f6d
4514b94978d3a489a1d6a85aaf87ce5c9d495fd9
179346ab2986aaf7f5692f2c47204385ed8b0df4
b23e2ef36e83adbb6a70042228b2fa86eeaee224
923da40b22eeaebccd3af4201e417a46f61edf39
cb6f3b58ea427f5a5d2c49c4ab7e75c2437db7ff
510c64dc01fdeb0adbc7587e09310d6770a927d8
2310ed8d823ccc4c5919cdabed31176eb307c905
f143ef6db5162bdb48fcb00c4f55eb0598c41957
c64a912a02b7fe73289afc9abe74b29a2b493d0c
b4912b9bed513c0ac8b0b866d83cb506ffb3c376
f0b750aa9305853e115966c8c6e7e3c79307060c
0434d4ea08a64079e8128386669af1dfb09a95ae
85002303a42476d4b418bb8b2ad5f955269a9ce8
5754dedb392e94d47b0399575475da539497f07e
0a3cbbd81c0bb55a9d01cd023976dd8fe01fa35f
6b8da3b3386bed58b6e83b2043eeff8fd7ee2067
8c6434075db8128618a06ff687eb38b2003785b9
dfa50cece588c439f3180ce2acd019725fe29442
80d39c3dc1db2efa7bca718fe393dbb820fab32d
cb1b9c9e56807dea0e341153d798037fb23ca900
9f94fbb636975eb216c941c476c054f9f0198144
00f48b79db76c58466a36fbd09ad937174bb72d1
d0b6aab152be8f138b82569def5d8e70b965031c
55a8e2218753ea8604606f965f12b03a0c873200
092d07d9a3a7b2ae87b4be0f49ca87947e92992b
1c5360da2923c965c5c39642904235a82da4b0ab
f23c453e20099955bb65827ac733835f2ae39bb3
e52296aaa1010154669cf85a927b9a1eb015775c
0347383a33b5a835449d33e42c1cca03923c9c28
c076028904ee0726e0665c9f74a737cbc2a86a88
599b73857bd748c025a63f9163005d09b02f276b
9f5637d9433b825806becaf3e38d95f04fa86f8f
f5a23bdcc7a9a1f6dab0bc829e49518e242611bb
f95604c922c8a6638125efdb955eee1897f02740
d0c3b4c8049bc88f8752e20f29e500892ce1e1e1
03a221c309d73f1c31f3e1b721184c92a6ce6e45
0de8d6556d691c9d925f4206c4afc6ddf7f167c9
9d258a4b684455c81605e3c889c6f7be6af1957b
3e151fca41355ab2778417f568691cdee4a562c1
4b3f7a0fe8d669b56aae870ade3e84d7af49d853
208182add858ae66560fa8b238a161c2977a1279
723d4224df32c294c18066574d2919a1c1e60449
73c47e9f4081e0d4622a41012301951900ea4d60
e9370fb4dc1a2370c3c0244ffb373a8121219ebd
20804deaec18c1f3510ecf4ac9e02cd05c07378d
e8760cc6c1f11ebc273adb7c869c319d02ad078a
7961dc80811a595c6b7989491a1c871ed2e9923f
9286238120b981c7d72cca5941e29e8abab62bbf
375e81cf8018d841b9cfaa337142993b56c96c3d
8c11f4db4c6b2b6516059d1643d1e83922db8873
fab16413add8e1ccb504c9e5421530ddbf67fbf4
ba94291663c239800f412cf0a32e0fa48bc94351
76ef99cd95e101b03a77f8a4b7e9faf5666da917
c3ff3bdf86274b7e512a4995f311d9d6c7d4383b
82fa2af71d13669478e8baf72b05063791addef9
78cdaaac820fa005df6bbb3d39bfb307c174bd4b
1f0fe3c3052415fe77b60060d132428efe303fbb
99749dae084f703c74b4e4c1899719eef9b72670
e5440d307890f730768974f05b0b13dda96e60c4
625b4cc861a66784487c92520db10e9a191bdbe8
e61d1ba3f8a58a2f9a790b2009f614d2e6d0b3f8
87accc53d34fb469537eafbfa295ab8fa26af72a
a54f8760993aed5e544b28efd69a3a020d775367
57638a0e721ca43b0719a3f92aeeaa622de520cc
800851c7f5cdcaad805282e471f2db6fc7365f90
1fdb79952ab99dd12bbd93b4fcd96b2c438fb2ac
c2531332117d44d50ec60af830e970068f48fd33
34d096dc5d5852f28882efe8406c539213e739b5
86952f1fc869b094afbae45a28bf310b24d487eb
1f6dad28d6cbf48c1e56292142f1183e52d30505
14bd3dc04dc72a51f21e8796482cbbdaa567ec75
c3aa69a97f1fc33133e6af571a0fc712f928b6b2
1577c70547915a19316f8ead0603b18f5c61ab1a
796384694c9fac857d85379e7aa616d0478bf318
e4dbf09885408025f535bbf2ea8a5599863caee9
55a165362fe489f680c57c7a64b05ae22cec733c
21f427773c604ae466a38969d274201bec20113e
1d9176a204a0446eca9b29ff73d7aa5fcb5c3a6d
48cc0a477fb9a2d4172a20d6c40c1c139a54cb30
1b6a91f7d7ed111655da441530712195ea8cb36f
1564ca8b101f181a0bd417b2df90353b59fb823f
49e9e5f70d04a4c59d8398d8fb247fd220d306a6
1db07555c6cf9a8d315276653dfb3cdd088b4587
ae82649a67bd872b4f7e0474d7164260e21af67f
28219cfcd5afa13cb9be755b392a1ca83fb44ba7
ba6ba1dab9a873ca4ae4a20318f98f979569b36d
00587e38d523f3d5f0185cf33ef90a93645414fc
4fc58ca4858b92da9cafc17e891d1ee0198e155a
21e4c2e074b34309ccac284cf8bc1da1f1fb7eba
753db151002f38f641730a10f393410bd7eada39
5b1f0b7e7a024aabf740f274cd57371662050270
8c834a9ebd08b5dfd0360b70744dfe991124cccc
713d1cdedfe45d1b916d831b0032e9005e98a682
456791f6143844ce90547c426c70e902ba4df1fa
0ce8701251ae91faccbfe2c3da85c237f2ef2c66
11007a08febfbaf78087e06822384b219525e077
3d38dc27d98a66c9067f62677b0aa387ff5ca261
098404b7b4ae24f73b7c59f2ed3494ff0226b6bf
75f7b7eef0b0f0b60ac9cd7e404c170b7897dad6
4c440d5522a7cd9db2705abbddbd76de755fa070
d158515087214962ba9b411f3ad652907878915c
88f8d8bfb28ecf32751725fb5044dc0573633d65
9ca836cd2991c64908f3e38ae209353d2e2ce2b3
37ffe05b97a09e3be73e312f136b9c7a901ca793
247d66eb3d1be29673167351df2ff462f3c19432
7533ad42cf78da7c794cc2b21b840fd2d152a515
82fbec776ddfd3612c5ccb22485e8c7f62586403
ceb6ca0f3bcb974ce7d984f8e221086427578f57
9517aa554a8d62f0d32b0f6b7d594fff43457c6d
68b654f65c1691d04ab84d3bcce43b97557aee84
8d4a8fc089b9ee799c0c2d16f1c6bdefa529a631
4007ffcfbe23dedf56f44f045f69a48470369de5
03c88f42f0219e5c7c252a5c838e0550f6d3364f
f904a4c8d51402ed17e623353f1541c9bb194373
f3f22dba7bbe942fcb0f4b58fe82866a099b3240
1b78563df1c76ecaf22fe11824a82ec6e754a965
0b29279eba00f1f5d05c393e93e07f208a56ede5
28deecdc246488bfaa0250bacfc4b9667e17f74b
b73516bcc157ec754d32dde3312db55ea1048fd9
313ea53699d2f429740da311bd6305d1964ccf44
87560d18e9f574b17898181f5caf17b53178f75f
2240fdba3129d56cea10846402964549e81afb30
6a68a46804d1e7a19390891483fd1998a3fa04ef
6e155b8c1cad4d4791c36179560f30066ba70a53
a0015301dd3cda044109121743d2aa1fab729ff0
878cd1bed7a25d3ee64ccb7a5c23ea4e1e072386
ef6123384c785e2a1e85d4041c84a9be39685b50
841b36eb660404f460f13e6efd5b3f68547342ee
098dc4b84506ea9edc7a79106e6960744e29d274
3a918821f7817a94a89ccd8017921266e5c27cee
3892345c4cba681473a265333206d353e53c8e18
d427ed2bfee05696fe98bb75ccdc4b63d743f5f8
5f2d3e2c96ce198b31ac3305ef4c71ab5bb5bb2a
232c9c406d4481019a52e4dfd3c0facecbda23c8
6c7d8e297697850dba08eebd055be1554c06b144
408a0510893e33bac7b8986252e28d5a6564bef3
e5dab8388545c7a7bff6dfbad5922415aef90db1
f9b0c1b84789d25dc5f92f35fe6f58437d9040df
eaf03986d6d4da02313b82e78be42d74be87c426
d0f4a5d7aee3f15ff1eb9d72d2d0f63b8629f390
1427db8e0ea16bb7780d6d5ec8e5bda1831dcf2d
4531b759c3d0482714646c75a9f4d9256b846fdd
7acebdcc96337c39f9dc798876fa9ab0608af401
009c17953d1ec356025ea0492a9d06bc387b76e8
73270195377cc7d67598ee0aa0ef4b1e5fe8faa2
c11041f16b697c0f9e3b662aa2a9a3f4c488983f
d4c59a750c127985d68a05799673f75175e1f79a
41ba5493fe870dd5f1991d3cf4decd6bf3a18c68
d23a477d8829d22244bbc28bcb1ff342235efbdc
1b0b6dc1c29e210ddf516c04ec26d73ba7cb6e01
22204330fb28d7b56a0d22e06751dbbb87c268af
06ca80e04c7cc090a19e030d5c84516d5dceb5a7
18f4f5dc7a1c747aea2ddb2442041dd600de9bb6
77a42f0ac1a340b3f2a9d6e0e438883893fb6df9
f97cae07f37dcc5f05f144ea3ac71f3977e5232e
54ebeffdc74639f38fee2d8d1cabc987b2e6aa35
c9466e773fa01e9884c2dcaabcf3e94d58215610
82118dc48c9850efb9375ceb2d1c7552131275d1
a33a4cd5206624207ec9e42a926e69dfe503625d
969da4ee723c43b62b559e487451057fe81fb823
cad890091a071688edd2333c8cd078e2df14460b
424a03e4c66ff3a75564f6878812d4836a0ad640
c63018414e04b907698e5a6b75d9398ff8ced68f
ec2cb2780962484e0239fb66736b6a50b2f19cde
843c87a8febb4c13297d188a351be8a013e67fbc
2d1d08d6a9d61f49e1ad3730515dad275a59f948
a8613aa41a4796e160c756ea583c7b25cc7be125
8207be4d50db0062028b19719f475c926f6719ee
27f2fee07fa5e0570a405234558fce622d947e9e
190dd6a570d5e5391eb1419f60cf6c66ec3580b9
3506649d33b31b59da5dc33fcadc9888e65dd9d4
525a2435f1802e2dba45a46ded0cdea1dfbb323e
432bfff8599339992eee2867f264b0807a7f1259
37255055bac2a1b31c8f21f51f80c75028fcbab5
1a355f4b06a2bf8bab030c2b134fbde3fd5dee64
98655a9bd08290d6a674e76f00e4faf47d0970a3
51c74ed4613fa15d7643616a3298ddee1662a2fd
3ce3f0f861b786350d7a4f1c3fe4b12f925fa7d4
f53e3109292a1ec6d65b856d053f222556e46a69
8b74e9dee78aa8e0d5df2dc0add9ad31fdf1a572
f789b32a4b92dc8e62e339355e467c22997dad0e
3fa71f183ee80ee21ef90057f41c0914f173680f
00e63587c865dc900594e7fcdda643e308398579
b79d1b477604609b957ffc8aecd8fd5a7779c661
4a2ce48f4e987dbaee8a6a5544d827f96a830f05
78957df73b7ab2e3edcb67c44039d1f1a476c9a4
93664f1915ad01bb685f2b619b96206f7f177e3a
28731cd99ca121dedb37cc727d18cdb78794fa4c
8a4bc5572cdb3b483e4fc93b87ab41328da3083c
34b46af34fb095abd4a656d901785acf14b4c12e
8e6425b75d1c5ad1ad3bc37ec2d642b11f652bae
9be89be857fb367386b7f8dc2f7d215c6660bcfc
da12ebb11293532a03479b18775a298a8b33c35a
68317f89a7a2ff9bb133312d99a020aa0b18be5b
76934a7454b4e0561761fe366e93a3a9b0dc58ac
31aca22ce2eee9905d8e9f9cdc3701c38d9a2cd9
a848704750b71f7e7cf281bc2a5fe780749b4995
a0e1b1ff1bb1cc1703f660807303cb7bf58fea87
137cd66ae7e966394b40d8820bc454e668bdb95e
6cef78cdf4a909dc61bf520c69aa7e6e38f3351b
f1207af48adb8e039fd4f6304024f98a420f8c10
833f049846fdc88283d7179e0fe535365e0a508c
a60aa98124f885c69c4d8134e97e755622c71d9f
948ebf56cbe9f51af745a9a6e1bfddcd5b3f878e
11c31f18f3acdeeb2cf70e73ef9cf68d2b479fdf
4e84c4e4a6917cd424f640b0628af2b7ab546a9e
257befd44ac96df9cdc1aa903ad19e7e7ae46870
4d57578204c42d6a3ad0cf881798cfddb067bc45
ededc19eff5c4d018356fbfe8873a1ab7b682354
7bf901a33f53e8685eae3e490a13251da60e7c40
a52ad04505b7c00f1d556cb2ac480306c6650b24
de40161eccf4c9e964c43a8f7ed59b228fac1c2e
f96c42fed35073b59c14682eb32cb28bb0aedcf9
b4cbc8e299e0a038b618e1cad71602aa593b9af8
70984a345a983cea922f2fdc4ad666b2fe71104e
0ed70037ea8373ba6e7e4525dd115c0e4389deb9
32c4833f41656fb359380ee01a4eb8908f06ef2f
18a3a52b1ffd565c84a4ff894d040d85d1877842
2d916b37c786dc0187207f2db8007e58012a09f2
3467778f3ab2109a09bc5bdb94f26f65a4d69c85
945782631250de3a424fd51c8b2e091bdfc1bde1
d943487441c33d9bb2fa91f0ded7d190eced993d
0686897d293ea2165f42093a6aa96a61f5af618e
a022cf6d9238ec5263ea47f6d318c2cfb501f214
7ca2bdc9cee2318200590bb49ee07a24c7ebd1e8
effd0b30b9232ce9e87d655ca6bd9e3c24842237
fb4fbad49feecdeb4649b5d0e551f8de08ae1cff
91db419cbc339427f230ca409dde4bc2798cdcc4
45a119b684613c34f91d913a3b5cdeadaa15ea6d
4ab9d13295b90308b6c07ea9aa56ba4cc5110b7a
3e2334524ca8346bb28cd54c7efbdddedad053b0
748cc78e1230334b6627f2683080e0a11f4ebdca
001912c1157fcea7401e1250892050252132a167
c66ce449c50d16d58893a7caa0279098dde7059a
8ab8bb507cef01f7e925c86865d510f408c451dd
8e99c25596f2a5cb4b8b9ce8479a08c1abbb3257
7b309f9e1443624fa06611dd01c8ce209c976f59
b5115415d64443813dc1abdfe9b53ba680db2eea
b8bf8939e0a5218e19bc9a2b4be4e0e5fdd7f026
8a2e2c5a2d4d71719442ed53d402a010a1aa8139
c78f5ee56d4104747bc4216015a0a8a1ea6343c9
480d770ac2bd86c4eca83b3d96f250d7418a3032
b61a75d735d6185199ed738db53992935c087cfe
8ac66a6f14f2a49e4365ea925c4ac6c11bbbeb2e
eebb35d05a3a4990770932626559144e0cd4b2ca
480d59247aaf18aa95b60f4506523090993008bf
12542feb877824d2ab85588ca0b1a38c660c7bea
f6f2a0267ffe0362adedaca1e237eeefcf5682fd
97bb3a74373e66905fa90c9dc85772f31a301591
3e46a959386aafba5bb9a67d96fe9c113fb68de2
15a2bf85e320b31e1bdc54e71437637469ac938e
e06c1ac456cce3a36442a970bfced3f6736adf69
ba7ec138379f535e129ca0ad369141e2b9a0ccb9
ffebb577b3f72a24e1965561084794396073d61b
a684853cf965717f9f8f5fd6c45af014c959b895
c9896afd4192d81b9cc0785afff8b7fca72dde27
26db76eeefb481a8d6d3bc82089280f5c9d95f07
f16b737f86573938b3f915c336d0a88a66390684
bebe9318d8369251ac1cff916f75401b5a3f0cd0
1bc150bce3ed6e41b52582f7d61683c0f683fb77
cf8c54a0d60e3cd991ff085dce885f4ff09c6e20
a3ae7bffd081486417c997cd1098057037023480
597341a889a8f7c347677f775aa0a044986cc588
ad74c260113baa2c6f27754b1aad9d214a228b87
ed37798961e4f7e9b179c6bbe07c15ac4ded3fa2
0eb697c413250cdb30b4b6fde39fd002d76bde40
46401503913c4a735f8d1ba916b2227e94891ba8
64ae60deb6a49ed7e5a0f200529ecf4c844e42d1
521599535de9e9a65c72276fbc2355bb7ed523e7
9941ada893c1967adaf143b2cf512d496370f7e6
c7c1d3b3f2fc8a9f68a4bd554aedc86fd36e543b
ce89cf6e3c5bb3971cc48437d78aa272443d7881
d905894d74973e70e9a40feed7ed764aa3225aaa
d2adaf22fdb1c5a260ce4866d62d03a4f9fe1abe
a5c583120c4d9cf91c4f0deaa053535a09d5aee0
f9ec2003a305ed06a5d1ea2915bcd6d9b70651df
8794ca03e9090c78c903e19479455bb4a42b950e
a15e243fff2f3c53714bd70ccfe09ed6be6a1d4a
f6a768f5a7bc5f128c39d6e3e06df54d2590a65a
bcd94006dde9e4fefd672c75d7b26626588ec22c
4d33c88ea2ffa4a827c6404e127363ca0471065e
70a3b0cdcaf1cd3f4e0b3dc15d32fc157c627276
12b1c3aab5a0bf8d97079cdbb477f3c764095a62
716a2871c5f968e8738612813033af44abd42834
2728709f89a8a58fd08243679ca6fa4c96f87585
2cda6ec5da6cbda7d2ac92bd5f697b1872f61402
fe9c000b7df5217d6b1ecb5d0cbd27602cb5057b
70844c26a7c30eae66e8ebe4d658011faeba2de8
76e41afd4f1b78e571c86c2f3814f017a8af37cd
7728a6b833d459d467590f9345f686c064f2291f
65038817f98c547ae0c5eacca176ae8c0a4aac11
5d521765ac3fd463517d98967c7c0d6c8ce08955
04b1523728dfcc3003172a7624e9151de7eeb1bd
24c46ed63c27584ca103545bd5de98beb03dff54
c6aca324114f7a67babbedcd4fa003d2e0c86cb9
3162cbed450af4a39809d3c5978ed72f9c401247
72be64fd38f1ac43e557015429c42116dd1d1de7
6e4a418c9157efe4d1fcb4c3f5cc2e1d47999902
f72a4fb5a1e987946df178e81e492a93c10d6afb
3b31d41177aefc9c60f6406a35e713c082d672ce
83d9b7e20387b60a52d0f76a2b5e6352d7745d87
c5a4a04f871b004fc39f435f01164c19e4136ffd
800d02199d804393d2e2a4b33bcd02a431f9ffa1
d1d26dc6339f40537dd755feef5da13ead6d07f2
bdd4250870eb76c3783c2fe29ef2763cf825644f
557b0b7a357bd6edce21c887429ca27130f9751f
2914591aabcdfb1f9718650ac9bcbc279dd0d7a4
a60260db1a6913dc9ccb9998ad8e186b44f37429
d92e4dc41effd7e9e2e065500d5076f71a57ae59
1d1ab9fa3f2b9bf21be2d55a2c8867e0f6162d51
4a82f68e18c679b87f4f5599b80a59bbc5d54a91
3a24ba690da2e24b149cc18852c9047b248d3b5d
6c9e9aacfccd35674af06c08ccd0e64ad01aa7eb
909617340b10efaad6ca38aa4b2f801faefdec86
822729e51ac2c7a8910c4086670d638d386382b5
d70ee8ddca8c160cb562e6bed0f8fe2e897ad66e
8d1751e4914f6a60544e163873bf090bd354c420
45cff16624e4d5234dd4f324b84216b33005d102
c26d2199eac0ac50ac015d90a150ebefd58e1b65
885196370ea35ae0fa2e2eb7882b327140a395ca
b2919b32f4bbd2fef5948af5f5435b1b7b238ef1
6ef502b9436e357ca780db65bcea9203bcf2d32b
b27124de63d4fa72fc9ea209e0e9444cf0205531
fcf4764e2f00972caa1cdc44143c1c264ef2683e
eb725f3a9dc8eb5c9243715f70b54f1bf98cce84
2ab0052f38e49ecb4714de711f07782143bfa6b3
7c75c0144c27334d695e29e0d4ace366c624684d
7d63e7c201600eee1dacd44e96fda07ba0fd9c79
855159c20a413ebc65c473c861ce825aa65c7559
77f717588ab00bfe0f372bf93b89f4dbdedfd713
fbe21d2a6ccc3dde30bf9cca18fe5312b4e94402
e793928923162720f36a5bb4e6502464dc03f372
b02616f5b1e1867073967e9773e0f72a88bea9d6
7bb6474cdc5e59cea538659ba8f24fccd1ccab2c
5573e9752e23a36af5e5565d2e97baa536117636
95ba76bbfc3a00ba22e23784ad962cfe55f5a873
028170c61968f9a8849f31e3ea6992a91d2c822d
9cae087a71ce91db01e85f8229ce16488b322ee3
82e4999f8adb9f731601345d61e90aebf8c13f0d
4d9f4f02791f654fa23de1997b0c46d4891f9694
abde22fc65276ce72fbcd932bbe60a7f138db851
faba3e36c09fffb9314d0b83d5c249d241288c24
d867839b61b0f748aae03daf50542eca3574a8c8
ec7d924df2bda081b40cd7eeed853e12e1632ff8
ca4dd2d307aa094a4c635b90da24ef674d4de45a
ee4a1dd919be1c1b6216fe77b458568f5b71acc8
653d520adad2e2370f4eeae453c3ba54a955c14a
34f7e5e403066636091f1366a9a0bc031d0b9bc8
38cbab2437232f2debb8d0c07e9a9a374286c761
402549fd80985d542553d2d2a99a0f0d641676ce
81aa751df7a8f2f3c101473875311e8c83c51fa6
2437704ded3928f8a92527afc87c1c40df7d4ce5
747222730a0036fdc00e21047ba53b6a5bf72149
1e6464dbc7630415b1fa2fbc3f69150e024aea20
be01e4cd649f76330f9c4122d1b2c9b71c07a448
4852615c327b40b0b4b576109c84221eb975fb9d
300f2199f1e302e6b3c3bb9d387ca37dc4da7401
5f18fa03e1e5a7389e0c7617b63aa5f475e28c0c
ca02b2b922b7eb100dbfaaad62b3642a4c666575
ab4934ec04a7153ea4242f61875d7c5edd0ee3e1
dcb33d0a64a68f3da5e9ae1bea43e0d1ddfd46c5
fa6a7e034031a4405eb3bdbb76a9c22ec81c294a
e97acca588bae5161967dc24858eb8a12731ae5b
9c73564cf1a286e81055e2b33ec35e3ec9905cb1
cae4fab2b8db3908bc08a26d7ecd03f6039323b8
561974c93f8fd68f15a1cf8f9125ab45e22b676f
119dcf14406245476aadf9e4f50cedf23140d0ee
3a3b864b272e2cefe5f33881bb5ed8230ea2d1cc
62e5a929728e4398e1d2506b479fb53cce47b681
6f33297b2a83b318b7cdc596819a058f5435628c
ff13de863d33ac7f7f4cce76ecf5f9f62b8ab682
2645e00e7847b5541eccbd9a71f514b3183666cf
6c9080186c59d2554c54bd3fa28c76ab30c13ffa
4c400b08f3e1089fedc03bd9dac4459a50413594
50e32957907820d7f4127b3b234e4a9e85351529
614fd5b341007fdd0fa70f504d9d81d031649d4e
bc3bf2262661d8251d6ea6b4027170cd3277792d
a74ee2f8c1c54231cef7746053bf21cb874a31ee
55d593a136ef3895cb2f29c5c22230b1244b364e
d4f538a136e9f491f3322d28915df34c49e08c69
0c4137e369a68b70ca48a9eae2d5879ceb4c5302
f7ae28080cca70c76aaa66cf482bd5b6c7ab8267
687e1bab02ad2b4c1e022d77d09969cc9743fee5
796dac47be23e156c2f39cdd523d1225d34aaa91
a11b2a4685cc41d149df8ac11f63c1f1213d367d
451bb47150f8368ed0594e905775a8c0f6c64b26
6cc9f38c99f426a78e7c1e4977191968e9030782
98a303843fe7e9a13c43dcf58c9e7aabefe0c717
975731e3036ff53142cf77594fffffc8ad42eb01
1abe46eac8ae8dbff9cffe773f98e09df14e92a3
2915f1b865dc88417dc672aaa3e87cfd994e07f4
c4771750753804c483d3581d2066108be4ebff1d
b4697278ba3cdabec0374c97209a785b55875710
8117a29217328c46f84b190752b870958c14dba5
2a932cfb002a0d35949a97dd227876f7200bf239
f02f68d656bb851c731c0572ff02c49693bc8f5a
ff0439478a1dc30f1a38781743a1b13071d44d23
104da945a924eae194c4575ddf6b10f751e6477a
c6d7243ab247998a69885381c8c5ae40330a93e5
ad035dece2657ebdb343ded56a33810622c6d816
b8e5d3f3135bf358a28ee75bf5388db5430e06d9
b135bb440d05bbf3cfa0e8dea86a118f5db262fa
a79f153b3a3a7b84d4f4988a98665dc87fa13f11
63b2e53735dd2f0d1e1029dc79c280ba4f095a2c
2c50ea2261736fa9fab7d933885277d5eca10ab4
e3bb1dee963ad4421300421e87f60a2041bb27f6
4abfa49bdc953a394aa0ab7e2ece90c52e235ba7
24d0464eb166bcd24ff622d8b6ee5e1fe6a61089
5c34004743e5c854cd6c1de487a68c1e006ae6d8
e14af8d6cfd6e6e6ec57781a4761f6e62708bc4f
dfbbf22f65bf1bc462cba2b43cc21382d1deb434
643ee35d40522cef87d7be9730a3e2338f67a119
9bf768578749896744f5c77a70709bc63daab534
eceefe6dad6004fc161c7695ed68b1a1c2295fce
fa57fea23800336ffbdcc90f59953947aecb5db5
e02f55655b319343416eeb934e4e22cd97909a2e
3c4120aa6e52f2f6601c489474308de1b64bccda
75feef4e2bd89e9a39d5c5b09477f13d8836d2c8
b78166fa65478f49358b3b36c94b803873c86d57
79d39b0a11892cf0321224cb8c12034f3c6c0bc7
1247c2673c3d32aa6398e53cd1977d053ab066bf
55b060c703780ba0dd6e592e67378f0b2e3dfeb0
90eaa10550ca74f67589eebd647fe8791e4e24ee
f1b174f084c9a786be67510b84e55c34c737732b
deb67d8fc02ce4fb1ebde2a010dbf88b551addb4
3c19bf7f06a14420a93e5f43f10ad71aacc3fdea
9a80cf7f84e3ae1091f2fd9e3816627bec5e40b6
0421fadb83485afcf453b11beb7617b92003ab7d
63c5f4f59416eb9b65183068856d36df2dd90779
527640d8bf120bec4ba590ecac805e7a434ce192
3962dae71bae4ddcd433e5726d511d5cbb9897c9
f4c9cb6f342ad7fe2bda2ea90953b2526c983de6
35a79a33a82fe88d4d2c466c49278eed9ff8e84c
2adc43ada1949f1ec54c353847b26f1ab1f6250b
65bac1c17391da9a2183c640991325022f85658e
ca8cad1c4db616a6ce706623ce966e510654175a
08d587e20d1d134eafd187384749bc550e233758
b2e121675b9e26fc843136c3c575427532aa0e9c
fe555517dbd89470366e5e3ef347c8765c89fc44
6d5492a409ffed7652734d967b79aecb26bf34a3
13513e0395644ec339535df1fef94e9748eeb62e
4226f09937d88d4fabededea7400566c7b7eb2b6
3f41fbab91c30813443a4ff63b35cbaac1ca7230
e679730af4cf4c1b1776b7c77573660ff2c222da
5b7a5fdb36f5c18cb00a7f915acb4aec39629d4e
accda058b83dc8b688a83a183a06370534b76813
ad8368207f34a31b35e0ed393055745f7ba8666c
394d9b0289e391c41598cf68e7544fa37e9112d4
b0fd31b80de2b1005c2f7922cff1792d14b73680
4ad4754817fecc0eae02cb6faf309972e2dcf23d

http://www.kler.cn/a/383508.html

相关文章:

  • shardingsphere分库分表项目实践1-让shardingsphere运行起来
  • OpenCV相机标定与3D重建(26)计算两个二维点集之间的部分仿射变换矩阵(2x3)函数 estimateAffinePartial2D()的使用
  • IT运维的365天--021 服务器上的dns设置后不起作用
  • C++中的模板元编程
  • Unity全局雾效
  • cad c# 二次开发 ——动态加载dll 文件制作(loada netloadx)
  • 代码随想录训练营Day19 | 39. 组合总和 - 40.组合总和II - 131.分割回文串
  • OpenCV视觉分析之目标跟踪(8)目标跟踪函数CamShift()使用
  • 【RESP问题】RESP.app GUI for Redis 连接不上redis服务器
  • AI - 使用LangChain请求LLM结构化生成内容
  • Unet++改进3:添加NAMAttention注意力机制
  • 重新回顾反向传播与梯度下降:训练神经网络的基石
  • Redis安装配置及基本使用(保姆级安装教程非常耐用)
  • 【云原生开发】K8S多集群资源管理平台架构设计
  • 【静态页面】尚品汇 1、设计稿分析及资源准备
  • Nginx 在中小企业的初级应用实操指南
  • 【HCIP园区网综合拓扑实验】配置步骤与详解(未施工完,持续更新中)
  • git撤销commit和add
  • 【YOLO学习】YOLOv8改进举例
  • 深入理解Java虚拟机(JVM):从基础到实战
  • 【p2p、分布式,区块链笔记 Torrent】WebTorrent bittorrent-dht DHT的构造+lookup+announce
  • 领克双十一营销设计:视觉与策略的完美融合
  • Flutter 鸿蒙next中的 Stack 和 Positioned 用法详解
  • 算法练习:1004. 最大连续1的个数 III
  • 基于SSM+VUE守护萌宠宠物网站JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解
  • ORACLE 19C 安装数据库补丁的详细过程