[OnePlus 9 Pro] craznazn:
You are operating under the assumption that the OTA has the SW to enable dual sim. If that was the case, flashing a EU rom on US would finish the job already.

To give you an idea of the difference, this is the directory list of the extracted OTA:

abl.img
aop.img
bluetooth.img
boot.img
cpucp.img
devcfg.img
dsp.img
dtbo.img
featenabler.img
hyp.img
imagefv.img
keymaster.img
modem.img
multiimgoem.img
odm.img
oplus_sec.img
oplusstanvbk.img
product.img
qupfw.img
qweslicstore.img
shrm.img
splash.img
system_ext.img
system.img
tz.img
uefisecapp.img
vbmeta.img
vbmeta_system.img
vbmeta_vendor.img
vendor_boot.img
vendor.img
vm-bootsys.img
xbl_config.img
xbl.img

Now, this is the directory list of an extracted MSM, ignoring folder structure:

carrier.img
frp.bin
gpt_backup0.bin
gpt_main0.bin
metadata.img
misc.bin
oem_stanvbk.bin
opluslog.img
param.bin
patch0.xml
persist.img
rawprogram0.xml
super.img
userdata.img
vbmeta_system.img
vbmeta_vendor.img
gpt_backup1.bin
gpt_main1.bin
patch1.xml
rawprogram1.xml
xbl_config.elf
xbl.elf
gpt_backup2.bin
gpt_main2.bin
patch2.xml
rawprogram2.xml
engineering_cdt.img
gpt_backup3.bin
gpt_main3.bin
ocdt.bin
patch3.xml
rawprogram3.xml
abl.elf
abl_log.bin
android_log.bin
aop.mbn
apdp.mbn
boot.img
BTFM.bin
cpucp.elf
devcfg.mbn
devinfo.bin
DRIVER.ISO
dspso.bin
dtbo.img
featenabler.mbn
gpt_backup4.bin
gpt_main4.bin
hyp_log.bin
hypvm.mbn
imagefv.elf
kernel_log16M.bin
km41.mbn
logfs_ufs_8mb.bin
mdcompress.mbn
multi_image.mbn
NON-HLOS.bin
oplusreserve2.img
oplus_sec.mbn
patch4.xml
qsee_log.bin
qupv3fw.elf
qweslicstore.bin
rawprogram4.xml
rtice.mbn
sec.elf
shrm.elf
splash.img
spunvm.bin
storsec.mbn
tz.mbn
uefi_sec.mbn
vbmeta.img
vendor_boot.img
vm-bootsys.img
emmc_fw.bin
gpt_backup5.bin
gpt_main5.bin
patch5.xml
rawprogram5.xml

Finally, an extracted phone with all the partitions dumped, again ignoring folder structure:

carrier.bin
frp.bin
gpt_backup0.bin
gpt_main0.bin
keystore.bin
metadata.bin
misc.bin
oplusdycnvbk.bin
opluslog.bin
oplusstanvbk_a.bin
oplusstanvbk_b.bin
param.bin
persist.bin
persist_bkp.bin
rawdump.bin
rawprogram0.xml
ssd.bin
super.bin
vbmeta_system_a.bin
vbmeta_system_b.bin
vbmeta_vendor_a.bin
vbmeta_vendor_b.bin
gpt_backup1.bin
gpt_main1.bin
rawprogram1.xml
xbl_a.bin
xbl_config_a.bin
gpt_backup2.bin
gpt_main2.bin
rawprogram2.xml
xbl_b.bin
xbl_config_b.bin
ALIGN_TO_128K_1.bin
cdt.bin
ddr.bin
dinfo.bin
engineering_cdt_a.bin
engineering_cdt_b.bin
gpt_backup3.bin
gpt_main3.bin
ocdt.bin
rawprogram3.xml
abl_a.bin
abl_b.bin
abl_log.bin
android_log.bin
aop_a.bin
aop_b.bin
apdp.bin
apdp_full.bin
bluetooth_a.bin
bluetooth_b.bin
boot_a.bin
boot_b.bin
connsec.bin
cpucp_a.bin
cpucp_b.bin
devcfg_a.bin
devcfg_b.bin
devinfo.bin
dip.bin
DRIVER.bin
dsp_a.bin
dsp_b.bin
dtbo_a.bin
dtbo_b.bin
featenabler_a.bin
featenabler_b.bin
gpt_backup4.bin
gpt_main4.bin
hyp_a.bin
hyp_b.bin
hyp_log.bin
imagefv_a.bin
imagefv_b.bin
kernel_log.bin
keymaster_a.bin
keymaster_b.bin
limits.bin
limits-cdsp.bin
logdump.bin
logfs.bin
mdcompress.bin
mdtp_a.bin
mdtp_b.bin
mdtpsecapp_a.bin
mdtpsecapp_b.bin
modem_a.bin
modem_b.bin
modemdump.bin
multiimgoem_a.bin
multiimgoem_b.bin
oplusreserve2.bin
oplusreserve3.bin
oplusreserve4.bin
oplusreserve5.bin
oplus_sec_a.bin
oplus_sec_b.bin
qmcs.bin
qsee_log.bin
qupfw_a.bin
qupfw_b.bin
qweslicstore_a.bin
qweslicstore_b.bin
rawprogram4.xml
rtice.bin
secdata.bin
shrm_a.bin
shrm_b.bin
splash_a.bin
splash_b.bin
spunvm.bin
storsec.bin
tz_a.bin
tz_b.bin
tzsc.bin
uefisecapp_a.bin
uefisecapp_b.bin
uefivarstore.bin
vbmeta_a.bin
vbmeta_b.bin
vendor_boot_a.bin
vendor_boot_b.bin
vm-bootsys_a.bin
vm-bootsys_b.bin
vm-data.bin
ALIGN_TO_128K_2.bin
fsc.bin
fsg.bin
gpt_backup5.bin
gpt_main5.bin
modemst1.bin
modemst2.bin
oplusreserve1.bin
rawprogram5.xml

OTA: 34 files

MSM: 80 files

Full dump: 135 files

In fact, I'll attach the MSM manifest.xml for you to check. Anywhere that has file="" means the public (non-factory) MSM doesn't even write. This includes obvious things like modemst1, and less obvious things like oplusdycnvbk. Obviously, things in _b doesn't need to be dumped, and is not even included in the MSM, but the fact is that even a MSM doesn't have all the SW components I need to analyze. EDIT: doesn't let me attach manifest.xml for some reason, oh well.

As for your link, thats one of the first things I did.... It might have worked in previous OP devices, since device_policy.xml was the same in all devices... however, see attached device_policy, we're gonna be flashing via QPST if we even get it to work. (Yes, I tried flashing it already, crashes modem)

Trust me, I don't want to have to borrow other people's devices...