Преглед изворни кода

Merge branch 'dev-shaoyf' into dev

rengb пре 5 година
родитељ
комит
e0d7bcfd77

+ 31 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02914.java

@@ -0,0 +1,31 @@
+package com.lantone.qc.kernel.catalogue.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : BEH02914
+ * @Description :  影像学检查未填写
+ * @Author : 胡敬
+ * @Date: 2020-07-03 10:42
+ */
+@Component
+public class BEH02914 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        String check = beHospitalStructureMap.get("影像学检查");
+        if (StringUtil.isBlank(check)) {
+            status.set("-1");
+        }
+    }
+}

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0150.java

@@ -27,7 +27,7 @@ public class LEA0150 extends QCCatalogue {
         if (deathRecordDoc != null) {
             status.set("0");
         } else {
-            String message = leaveHospitalDoc.getStructureMap().get("入院情况");
+            String message = leaveHospitalDoc.getStructureMap().get("主诉");
             if (StringUtil.isNotBlank(message)) {
                 status.set("0");
             }

+ 54 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE03028.java

@@ -0,0 +1,54 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDiscussionDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : OPE03028
+ * @Description : 术后首程未在术后1小时内完成(台州市立)
+ * @Author : 胡敬
+ * @Date: 2020-07-03 10:41
+ */
+@Component
+public class OPE03028 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        if (ListUtil.isEmpty(operationDocs)) {
+            return;
+        }
+        for (OperationDoc operationDoc : operationDocs) {
+            OperationDiscussionDoc operationDiscussionDoc = operationDoc.getOperationDiscussionDoc();
+            if (operationDiscussionDoc == null) {
+                continue;
+            }
+            Map<String, String> operationDiscussionStructureMap = operationDiscussionDoc.getStructureMap();
+            String operationDateStr = operationDiscussionStructureMap.get("手术日期");
+            String dateStr = operationDiscussionStructureMap.get("记录日期");
+            if (CatalogueUtil.isEmpty(operationDateStr) || CatalogueUtil.isEmpty(dateStr)) {
+                continue;
+            }
+            Date operationDate = StringUtil.parseDateTime(operationDateStr);
+            Date date = StringUtil.parseDateTime(dateStr);
+            if (operationDate == null || date == null) {
+                continue;
+            }
+            boolean compareTime = CatalogueUtil.compareTime(operationDate, date, 60L);
+            if (compareTime) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 22 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR02880.java

@@ -1,6 +1,7 @@
 package com.lantone.qc.kernel.catalogue.threelevelward;
 
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.FirstCourseRecordDoc;
@@ -13,6 +14,7 @@ import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @ClassName : THR0702
@@ -23,8 +25,9 @@ import java.util.List;
 @Component
 public class THR02880 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         if (inputInfo.getThreeLevelWardDocs().size() == 0 || inputInfo.getFirstCourseRecordDoc() == null) {
-            status.set("0");
+            return;
         }
         List<DirectorDoctorWardDoc> directorDocs = inputInfo.getThreeLevelWardDocs().get(0).getDirectorDoctorWardDocs();
         FirstCourseRecordDoc firstCourseRecordDoc = inputInfo.getFirstCourseRecordDoc();
@@ -34,13 +37,23 @@ public class THR02880 extends QCCatalogue {
             return;
         }
         if (directorDocs.size() == 0) {
-            status.set("0");
             return;
         }
         DirectorDoctorWardDoc firstDirectorDoc = directorDocs.get(0);
+        Map<String, String> firstAttendStructureMap = firstDirectorDoc.getStructureMap();
+        if (inputInfo.getBeHospitalizedDoc() != null) {
+            String admisDateStr = inputInfo.getBeHospitalizedDoc().getStructureMap().get("入院日期");
+            String recordDateStr = firstAttendStructureMap.get("查房日期");
+            if (CatalogueUtil.isEmpty(admisDateStr) || CatalogueUtil.isEmpty(recordDateStr)) {
+                return;
+            }
+            //如果首次查房超过72小时则不判断该条规则
+            if (CatalogueUtil.compareTime(StringUtil.parseDateTime(admisDateStr), StringUtil.parseDateTime(recordDateStr), 72 * 60L)) {
+                return;
+            }
+        }
         ThreeLevelWardLabel firstAttendLabel = firstDirectorDoc.getThreeLevelWardLabel();
         if (firstAttendLabel == null) {
-            status.set("0");
             return;
         }
         if (firstAttendLabel.getDiffDiag().size() != 0) {
@@ -50,7 +63,7 @@ public class THR02880 extends QCCatalogue {
                     continue;
                 }
                 if (firstCourseDiffDiag.equals(diffDiagName)) {
-                    status.set("0");
+                    status.set("-1");
                     return;
                 }
             }
@@ -58,9 +71,13 @@ public class THR02880 extends QCCatalogue {
         }
         if (StringUtil.isNotBlank(firstAttendLabel.getDiffDiagText())) {
             if (firstAttendLabel.getDiffDiagText().equals(firstCourseDiffDiag)) {
-                status.set("0");
+                status.set("-1");
             }
         }
+
+        if (firstAttendLabel.getDiffDiag().size() == 0 && StringUtil.isBlank(firstAttendLabel.getDiffDiagText())){
+            status.set("0");
+        }
     }
 
     /**

+ 2 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03016.java

@@ -63,7 +63,7 @@ public class THR03016 extends QCCatalogue {
             int hoursPerWeek = 3 * 24 * 60;
             String roundRecordThisWeek = "";
             List<String> roundRecordEveryWeek = new ArrayList<>();
-            beginDate = DateUtil.dateZeroClear(beginDate);//从入院记录当天0点开始算
+            beginDate = DateUtil.dateZeroClear(DateUtil.addDate(beginDate, 1));//从入院时间第二天0点开始算
             int i = 1;
             String lastWardDateRange = "";
             List<String> lastWardDateRangeList = new ArrayList<>();
@@ -153,5 +153,5 @@ public class THR03016 extends QCCatalogue {
         }
         return "";
     }
-    
+
 }

+ 23 - 7
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0701.java

@@ -1,6 +1,7 @@
 package com.lantone.qc.kernel.catalogue.threelevelward;
 
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.FirstCourseRecordDoc;
@@ -12,6 +13,7 @@ import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @ClassName : THR0701
@@ -22,8 +24,9 @@ import java.util.List;
 @Component
 public class THR0701 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         if (inputInfo.getThreeLevelWardDocs().size() == 0 || inputInfo.getFirstCourseRecordDoc() == null) {
-            status.set("0");
+            return;
         }
         List<AttendingDoctorWardDoc> attendDocs = inputInfo.getThreeLevelWardDocs().get(0).getAttendingDoctorWardDocs();
         FirstCourseRecordDoc firstCourseRecordDoc = inputInfo.getFirstCourseRecordDoc();
@@ -33,13 +36,23 @@ public class THR0701 extends QCCatalogue {
             return;
         }
         if (attendDocs.size() == 0) {
-            status.set("0");
             return;
         }
         AttendingDoctorWardDoc firstAttendDoc = attendDocs.get(0);
+        Map<String, String> firstAttendStructureMap = firstAttendDoc.getStructureMap();
+        if (inputInfo.getBeHospitalizedDoc() != null) {
+            String admisDateStr = inputInfo.getBeHospitalizedDoc().getStructureMap().get("入院日期");
+            String recordDateStr = firstAttendStructureMap.get("查房日期");
+            if (CatalogueUtil.isEmpty(admisDateStr) || CatalogueUtil.isEmpty(recordDateStr)) {
+                return;
+            }
+            //如果首次查房超过48小时则不判断该条规则
+            if (CatalogueUtil.compareTime(StringUtil.parseDateTime(admisDateStr), StringUtil.parseDateTime(recordDateStr), 48 * 60L)) {
+                return;
+            }
+        }
         ThreeLevelWardLabel firstAttendLabel = firstAttendDoc.getThreeLevelWardLabel();
         if (firstAttendLabel == null) {
-            status.set("0");
             return;
         }
         if (firstAttendLabel.getDiffDiag().size() != 0) {
@@ -48,18 +61,21 @@ public class THR0701 extends QCCatalogue {
                 if (StringUtil.isBlank(diffDiagName)) {
                     continue;
                 }
-                if (firstCourseDiffDiag.equals(diffDiagName)) {
-                    status.set("0");
+                if (firstCourseDiffDiag.contains(diffDiagName)) {
+                    status.set("-1");
                     return;
                 }
             }
-
         }
         if (StringUtil.isNotBlank(firstAttendLabel.getDiffDiagText())) {
             if (firstAttendLabel.getDiffDiagText().equals(firstCourseDiffDiag)) {
-                status.set("0");
+                status.set("-1");
             }
         }
+
+        if (firstAttendLabel.getDiffDiag().size() == 0 && StringUtil.isBlank(firstAttendLabel.getDiffDiagText())){
+            status.set("0");
+        }
     }
 
     /**

Разлика између датотеке није приказан због своје велике величине
+ 20224 - 0
kernel/src/main/resources/cache/2/concept_diag_properties.dict


Разлика између датотеке није приказан због своје велике величине
+ 20224 - 0
kernel/src/main/resources/cache/2/hospital_diag_info.dict


+ 141 - 77
kernel/src/main/resources/cache/3/concept_clinic_bodypart_properties.dict

@@ -1,84 +1,148 @@
-sjwPlFuzwYtdGy/Xru8l0w==
-sjwPlFuzwYuOwjk+wlafMb496h/s94Lp
-GaEOqMDeIR/A3JPjaU/OYQ==
-KUZ84E/l6BtIxYdpVp2d2udw4JKVz6fxOAPHyqzXUMY=
-ClvKDL868eyBa0I3oBBXTiLG5UIUjigm
-cpVuhYfN0VLL15lmAanTHLudBba0KZdGSmARnfpRl/s=
-tgLfZiBNXVfe46uqWooJfQ==
-+elokrz+5ZZ4nftSAgjXeP9VC/9mRBPm
-u18AKL/dfo8=
+pnIIwZAPIIPBAIkf/X0ufw==
+ovmPnAT+BYs=
 FXYCcRyAS3o=
-1y8RNUzpzDDA3JPjaU/OYQ==
-GDAzhKkwugqOwjk+wlafMb496h/s94Lp
-vVsbjXwCHtKFIWuMj59JFg==
-S00FGSMpzFYRJHHOrCiJIw==
 LQ4RQ5c6TvEfVJH7s8MZNQ==
 KkqtLy22gBtRq6Y4vkNXyQ==
-FpNKk6eB+A78k09Y7waUfQ==
-55LO8f+DGuqsZzaaPHDG7A==
-anCWsr9KEAcfVJH7s8MZNQ==
-Ms4itbwo4woHjnX6dZF4Ew==
-eE2lKBuqkGwbZW204O8pbL496h/s94Lp
-KPTiLOQlvfcHjnX6dZF4Ew==
-EHYxrOGlbsJINCuQrfA+Qw==
-IoIoNIGjGAkfVJH7s8MZNQ==
-TkKCqeWSukdcNzQgT7Qg/y/95Ux1UGf/
-5sS2G/r6ssUfVJH7s8MZNQ==
-Fz6WuGDyOlM=
-6BJE0DCYV4PN7oAmfhVFQqHIcEkBIHl+SmARnfpRl/s=
-ClvKDL868ewfVJH7s8MZNQ==
-IoIoNIGjGAmt+3FIqYSLwA==
-qjVzhjIuUT4fVJH7s8MZNQ==
-fAvCqq32iRGYkjXG21GhdA==
-Qz54IR1t0pxhD8mu55a07QB9XVjkemQO
-VDAaAfFpalOc8iRXg5Txmg==
-v2wP8zYN7yUfVJH7s8MZNQ==
-2O+0+BuTK7hnAFNeF32DwQ==
-LRQ8TiPskP8=
-MHWWVpSYUhZp84i3DCFu/g==
-4a+BNcRWzuwuxVbFLjJEww==
-yWJqJiL6qWQskpnR2QjFRA==
-LkBZ8uh2sivD7O64F4fyYD26Q3FauFTq
-vU9OSQNfzsdHGRV53JQHXTZxIOEr6XT/
-Z0A2kuK86msFZwSJa38bOw==
-qglFhT75KVY=
-J47wTSKVIotrynAbi7Nl7g==
-PSCtbA3GBCLqcUHlnbz5ig==
-pGzYL5VYctXxzUrAtKDMFg==
-J47wTSKVIotWP8N6Zu8teQ==
-hnOhzeqPs7c=
-FpNKk6eB+A60ivUVDCQonmb0NA6xAPvZ
-6eB67p+u3VA=
+u7zlp9tdgNmRKVPbAeWYEg==
+aC5xv6h4kt5c5OTNuAf37Q==
+eJVLnFBt3h4=
+QUV0SLvhn8MkVYph1YGRZQ==
 38rBhrBd2ZA=
 WlxWJO1bvWM=
-/UTzDiOxLWpNfh/SNay22g==
-PLBt3Oha1AAOSE8k2YZYMw==
-cA6kPjEpsoKKXDwNc4sbZv9VC/9mRBPm
-ubvY7WEHsf0HjnX6dZF4Ew==
-NI9su0Z8kvY=
-z5dpaPXQysM+03JbZpPE8K74oEbqwDfN
-e7OvqkV6Qx5DhU/YuJZA4A==
-vnSKQ0o1HZO5fhcvExqbXw==
-5j32mrEC41Q=
-teXiWF5i95089VmH6nOntT26Q3FauFTq
-C5DNXPfJ3MsXUKrj9yaJVQ==
-aBDrcQGdFjgXTO+Ia0kzAA==
-EyuDTtt1Nh1c5OTNuAf37Q==
-0NhZqdATkZ4=
+eE2lKBuqkGxc5OTNuAf37Q==
 1IKx7GtShHg=
-h/OwYNYyciw=
-kGg6y+QB2f8=
-et0S9LyTiS4MhEBuylTk2g==
-goFZ0v8zcPc=
 cA6kPjEpsoJc5OTNuAf37Q==
-BZNVMNz30Z00iPLsFnfW9Q==
-FUNtEl6WjOUfVJH7s8MZNQ==
-1boew8BvzsDzIpTnzy5Qnw==
-/CIzubCbNzzkzFf+CBlT64JiFWxfW6DV
-teXiWF5i953EeSAoaVSW+wBBqlZ1ciHqSmARnfpRl/s=
-CTNjqF5g7EIfVJH7s8MZNQ==
-OOQuqjL/h5M16D9aZjbrRw==
-ZfWBQ/To1p1p84i3DCFu/g==
-Q449MTqnm/c=
-xmHl5DY7FyM=
-hV3gMCbT8x+fXEA0j/uq7Q==
+Dp+xJKT1n8g=
+LAphuzvX0+1zUunA7M09Hw==
+wGKkm1Axrl8=
+KkqtLy22gBtRq6Y4vkNXyQ==
+sPonp8kD0PlDfsMr80o2tQ==
+Dp+xJKT1n8g=
+ZCI0+I1MKLGoU+yPtmhbJw==
+DOXrtCrKcXSFIWuMj59JFg==
+01OrraAAmcE=
+MfpZ5926ns4HjnX6dZF4Ew==
+eJVLnFBt3h4=
+MCVPu99GbLxp84i3DCFu/g==
+2Hhy8O0hODI=
+5r1+UeeRdz0fVJH7s8MZNQ==
+Q2fNzojA4fA=
+vW3dTpk0tFiQiw2jWjwfPA==
+MNTZtG8f9LQ=
+ogVQVbsCHOI=
+Ce2UXUa+3KsfVJH7s8MZNQ==
+wmRvRyr6N5yg1rmFJe9Z2g==
+V7VA3KYNqxQ=
+aC5xv6h4kt5c5OTNuAf37Q==
+Z0C+uRrbTghAxhoGdRmsYg==
+Rpy4rqBnq0xXxvYNaFTw2Q==
+I7vcOPzkQOo=
+MAJlaU83a4ioU+yPtmhbJw==
+uUfXVwqAQBs=
+TvEGDdLx11J/ufBPhFj0Ww==
+dn2Qsy3GvOgfVJH7s8MZNQ==
++ojTIp5v4bQHjnX6dZF4Ew==
+c06lMwdsMGY=
+zfymW7X/poA=
+hj3oPwd2A8wfVJH7s8MZNQ==
+6F5GQVOYgyui7/G0BOLWvmb0NA6xAPvZ
+eh0gnqWcoodAxhoGdRmsYg==
+HBi62z4VqkA=
+eOtp99ION5B/ufBPhFj0Ww==
+PQlTF2j6ne2bIZQhpl3bRg==
+W5f3x2qRae4=
+0dseB0FG4fk=
+9Oafm8Bskj0=
+z3AdaerZRVwfVJH7s8MZNQ==
+zdISnbEr02KedPJCHzSuhw==
+8wtXCXbnt2cfVJH7s8MZNQ==
+DvDTv3eRhQxM/KLa6uVUSQ==
+hK5uiQNYMutrynAbi7Nl7g==
+93ZjDiJwkDEcuBfsuGV26Q==
+H6hvNux0DMVfB2OTCSmksg==
+oapSrFpo1xzKZlVMzaya/w==
+cA6kPjEpsoJc5OTNuAf37Q==
+zK3IJj4OCNK63Wt9pi+oDw==
+eE2lKBuqkGxc5OTNuAf37Q==
+He8DX2NE4io=
+xrxCCtiW1kQ=
+1IKx7GtShHg=
+WlxWJO1bvWM=
+JB2E9WXZ5MgUCMxgY7oByw==
+enu6avlk5YoG1YmqGz3h9g==
+XvltMqvZ0rG4vnEZ8kLHbg==
+LQ4RQ5c6TvEfVJH7s8MZNQ==
+3IQA5HUrujc=
+13MHrUqG1pcfVJH7s8MZNQ==
+qDJCWQ+e+n6edPJCHzSuhw==
+xDC1Ti9ss3U=
+ovmPnAT+BYs=
+GgfSGissd7DNjYGroWncAQ==
+oujtg2YhATc=
+2IQUTK7lEyM=
+8iRAY6UGp0YVY3fFFOFg2g==
+Hif1tO4NCkk=
+pnIIwZAPIIPBAIkf/X0ufw==
+JJw0vZQlXuxp84i3DCFu/g==
+aGH61MJKMS7BAIkf/X0ufw==
+mA0dp7Zpk/MfVJH7s8MZNQ==
+el7aO7TjFOkHjnX6dZF4Ew==
+u7zlp9tdgNmRKVPbAeWYEg==
+9zqzljbiYu8=
+6kIlhnYnjOC/WZ1+qt48kw==
+bYP4eZXu1JMfVJH7s8MZNQ==
+38rBhrBd2ZA=
+/i2W9Ldeb+I=
+CMHCsSygook=
+J1XqrY7xMtY=
+oStcY3ItFdZp84i3DCFu/g==
+idBQS4aIrNa5fhcvExqbXw==
+DwvME4SMq1+bOR+EdoRoFg==
+tr3mC/s6c9sVY3fFFOFg2g==
+H45LTbfORk8=
+H8iHeeS1rXY=
+MOuKy1wkq4b7Dji9AZqQog==
+De0vhPcQSMBYGLQ8FmimcA==
+3BvyzjY734Zp84i3DCFu/g==
+HM89DEXwIpZbnoRDJ143bg==
+rz3JZr31IyPYt42Urg1Jzw==
+syl6GnJDiUoHjnX6dZF4Ew==
+aD5eU1o4MmM+03JbZpPE8K74oEbqwDfN
+OgJkiiRLMa0fVJH7s8MZNQ==
+36HIq5sBqNHNjYGroWncAQ==
+PTX9F+XFiHM=
+FXYCcRyAS3o=
+QqPqll5V3q+ken3TgiVM7Q==
+MgaLJr/9B1a4ACWlx8X4SA==
+SUTiIJK8tCefXEA0j/uq7Q==
+PV15+/MoQVT69Mxpvjn8ew==
++37KuiO62gI=
+OxBAAUKmMB00iPLsFnfW9Q==
+TkKCqeWSukfkqT33kNdg7XtqtAiTi3CE
++XIIOz+kxpCUAfTSDenAAg==
+noFHr1hkTNjL15F1MBXHSA==
+Az2U7M6QU8cHjnX6dZF4Ew==
+ypYq0llNvxtI/qHgUfgHEQ==
+JPNNI7Mn7GkOCoFD2N6+gg==
+0sR5tvt5nTkfVJH7s8MZNQ==
+qDsVL3hjCgxefGaE90oS7A==
+CCwoTxnngSQfVJH7s8MZNQ==
+imwDTINwXfjYlg1d8mP6iA==
+eXtihU+dgoH+XFxDriiYrA==
+qIWekMxNvsIfVJH7s8MZNQ==
+KZUjBH3QG1G82j8JYvRviu4snVNHMRDd
+qJUZMtAw/WiAhcQlN1BQqQ==
+lwGHWf1Es9kfVJH7s8MZNQ==
+H5rQ7wE9KYA=
+Ia0GAZyPZmQfVJH7s8MZNQ==
+QUV0SLvhn8MkVYph1YGRZQ==
+KSzY6T6+c7txOA0SFqxXjw==
+rmxr1ubN35NRq6Y4vkNXyQ==
+9ON7f+cfbFKQDSBz6+VqxQ==
+RRmtNZvkAQNdGy/Xru8l0w==
+tEpz4Ws2I3E=
+8d20YPKZX9MHjnX6dZF4Ew==
+KUKo8hZ4qfUfVJH7s8MZNQ==
+V8p/97BlQ1uBggh8N37P8g==
+6ByZH6ejZBQHjnX6dZF4Ew==
+GwjNkWrksZShsfR9iW7TiQ==