1 | XUPSPAID ;CS/GRR/RAM/DW - New Person file Update & Report ; 1 Jan 2004
|
---|
2 | ;;8.0;KERNEL;**309,343**; Jul 10, 1995;
|
---|
3 | ;
|
---|
4 | Q
|
---|
5 | ;
|
---|
6 | EN ; - entry point
|
---|
7 | ;
|
---|
8 | N DIRUT,X,Y
|
---|
9 | ;
|
---|
10 | I $E(XUPSACT,1)="U" D
|
---|
11 | . W !!," *********************************************"
|
---|
12 | . W !," *This option will UPDATE eligible New Person*"
|
---|
13 | . W !," *file (#200) entries with missing DOB or SEX*"
|
---|
14 | . W !," *********************************************"
|
---|
15 | ;
|
---|
16 | W !!,"The reports will be sent to you via MailMan",!
|
---|
17 | ;
|
---|
18 | S DIR(0)="YA",DIR("B")="Yes",DIR("A")="Do you wish to continue? "
|
---|
19 | S DIR("?")="Enter 'Yes' to continue or 'No' to quit"
|
---|
20 | D ^DIR K DIR ;ask user if they want to continue with option
|
---|
21 | Q:'Y!($D(DIRUT)) ;user responded No or with '^' to exit
|
---|
22 | ;
|
---|
23 | D QUE
|
---|
24 | ;
|
---|
25 | K XUPSACT
|
---|
26 | Q
|
---|
27 | ;
|
---|
28 | QUE ;Que the task
|
---|
29 | N ZTDESC,ZTIO,ZTRTN,ZTSAVE,ZTSK,ZUSR,POP,X,ERR,IOP
|
---|
30 | W !
|
---|
31 | S ZTIO=""
|
---|
32 | S ZTRTN="EN1^XUPSPAID"
|
---|
33 | S ZTSAVE("XUPSACT")=""
|
---|
34 | I $E(XUPSACT,1)="U" S ZTDESC="XUPS NPF UPDATE"
|
---|
35 | I $E(XUPSACT,1)="P" S ZTDESC="XUPS NPF PREUPDATE REPORT"
|
---|
36 | D ^%ZTLOAD
|
---|
37 | D ^%ZISC,HOME^%ZIS
|
---|
38 | W !,$S($D(ZTSK):"REQUEST QUEUED AS TASK#"_ZTSK,1:"REQUEST CANCELLED!")
|
---|
39 | ;
|
---|
40 | Q
|
---|
41 | ;
|
---|
42 | EN1 ;
|
---|
43 | N IEN,XUPSDIFF,XUPSUPD,XUT,XUNPFT,XUUPDT
|
---|
44 | S (XUNPFT,XUUPDT)=0
|
---|
45 | ;
|
---|
46 | K ^TMP("XUPS PAID",$J)
|
---|
47 | K ^TMP("XUPS DIFF",$J)
|
---|
48 | K ^TMP("XUPS UPD",$J)
|
---|
49 | ;
|
---|
50 | S XUPSDIFF("SSN")=0
|
---|
51 | S XUPSDIFF("NAME")=0
|
---|
52 | S XUPSDIFF("SEX")=0
|
---|
53 | S XUPSDIFF("DOB")=0
|
---|
54 | ;
|
---|
55 | S XUPSUPD("SEX")=0
|
---|
56 | S XUPSUPD("DOB")=0
|
---|
57 | ;
|
---|
58 | S IEN=0
|
---|
59 | F S IEN=$O(^PRSPC(IEN)) Q:'IEN D RECORD
|
---|
60 | ;
|
---|
61 | S XUT(1)=$G(XUNPFT)
|
---|
62 | S XUT(2)=$G(XUUPDT)
|
---|
63 | I $E(XUPSACT,1)="U" D NOTICE^XUPSPD1(.XUT)
|
---|
64 | ;
|
---|
65 | D REPORT
|
---|
66 | ;
|
---|
67 | Q
|
---|
68 | ;
|
---|
69 | REPORT ;Pre-update reports
|
---|
70 | ;
|
---|
71 | N CNTG,DATA,DATA1,IEN,CNT,CNTU,CNTD
|
---|
72 | S (CNTG,CNT,CNTU,CNTD)=0
|
---|
73 | ;
|
---|
74 | ;The difference report
|
---|
75 | D HD("XUPS DIFF")
|
---|
76 | S IEN=0
|
---|
77 | F S IEN=$O(^TMP("XUPS PAID",$J,"DIFF",IEN)) Q:'IEN D
|
---|
78 | .S DATA=^TMP("XUPS PAID",$J,"DIFF",IEN)
|
---|
79 | .D FL("XUPS DIFF",DATA)
|
---|
80 | .S CNTD=$G(CNTD)+1
|
---|
81 | S CNT=$G(CNT)+1
|
---|
82 | S ^TMP("XUPS DIFF",$J,CNT)=""
|
---|
83 | S CNT=$G(CNT)+1
|
---|
84 | S ^TMP("XUPS DIFF",$J,CNT)=" Totals"
|
---|
85 | S CNT=$G(CNT)+1
|
---|
86 | S ^TMP("XUPS DIFF",$J,CNT)=" Different LastName,FirstName: "_$G(XUPSDIFF("NAME"))
|
---|
87 | S CNT=$G(CNT)+1
|
---|
88 | S ^TMP("XUPS DIFF",$J,CNT)=" Same LastName,FirstName, different Sex: "_$G(XUPSDIFF("SEX"))
|
---|
89 | S CNT=$G(CNT)+1
|
---|
90 | S ^TMP("XUPS DIFF",$J,CNT)=" Same LastName,FirstName, different DOB: "_$G(XUPSDIFF("DOB"))
|
---|
91 | S CNT=$G(CNT)+1
|
---|
92 | S ^TMP("XUPS DIFF",$J,CNT)=" New Person file entries: "_$G(CNTD)
|
---|
93 | ;
|
---|
94 | ;The update report
|
---|
95 | S CNT=0
|
---|
96 | D HD1("XUPS UPD")
|
---|
97 | S IEN=0
|
---|
98 | F S IEN=$O(^TMP("XUPS PAID",$J,"UPD",IEN)) Q:'IEN D
|
---|
99 | .S DATA=^TMP("XUPS PAID",$J,"UPD",IEN)
|
---|
100 | .D FL1("XUPS UPD",DATA)
|
---|
101 | .S CNTU=$G(CNTU)+1
|
---|
102 | S CNT=$G(CNT)+1
|
---|
103 | S ^TMP("XUPS UPD",$J,CNT)=""
|
---|
104 | S CNT=$G(CNT)+1
|
---|
105 | S ^TMP("XUPS UPD",$J,CNT)=" Totals"
|
---|
106 | S CNT=$G(CNT)+1
|
---|
107 | S ^TMP("XUPS UPD",$J,CNT)=" Sex fields: "_XUPSUPD("SEX")
|
---|
108 | S CNT=$G(CNT)+1
|
---|
109 | S ^TMP("XUPS UPD",$J,CNT)=" DOB fields: "_XUPSUPD("DOB")
|
---|
110 | S CNT=$G(CNT)+1
|
---|
111 | S ^TMP("XUPS UPD",$J,CNT)=" New Person entries: "_$G(CNTU)
|
---|
112 | ;
|
---|
113 | D XM("Update NPF with PAID data - Sex and DOB","XUPS UPD")
|
---|
114 | D XM("Differences between NPF and PAID files","XUPS DIFF")
|
---|
115 | ;
|
---|
116 | K ^TMP("XUPS PAID",$J)
|
---|
117 | K ^TMP("XUPS DIFF",$J)
|
---|
118 | K ^TMP("XUPS UPD",$J)
|
---|
119 | ;
|
---|
120 | Q
|
---|
121 | ;
|
---|
122 | RECORD ;Process the record
|
---|
123 | ;
|
---|
124 | N IEN200,DATA,DATA1
|
---|
125 | N PAIDNM,PAIDOB,PAIDSSN,PAIDSEX
|
---|
126 | N NPFNM,NPFSEX,NPFDOB,NPFSSN
|
---|
127 | ;
|
---|
128 | ; NPF IEN
|
---|
129 | S IEN200=$P($G(^PRSPC(IEN,200)),"^",1)
|
---|
130 | ;
|
---|
131 | Q:'IEN200
|
---|
132 | S XUNPFT=$G(XUNPFT)+1
|
---|
133 | ;
|
---|
134 | ; PAID file
|
---|
135 | S DATA=$G(^PRSPC(IEN,0))
|
---|
136 | S PAIDNM=$P(DATA,"^",1)
|
---|
137 | S PAIDDOB=$P(DATA,"^",33)
|
---|
138 | S PAIDSSN=$P(DATA,"^",9)
|
---|
139 | S PAIDSEX=$P(DATA,"^",32)
|
---|
140 | ; transform SEX code PAID to NPF
|
---|
141 | S PAIDSEX=$S(PAIDSEX="":"",PAIDSEX=1:"M",PAIDSEX=2:"F",1:"")
|
---|
142 | ;
|
---|
143 | ; New Person File
|
---|
144 | S DATA=$G(^VA(200,IEN200,1))
|
---|
145 | S NPFNM=$P($G(^VA(200,IEN200,0)),U)
|
---|
146 | S NPFSEX=$P(DATA,"^",2)
|
---|
147 | S NPFDOB=$P(DATA,"^",3)
|
---|
148 | S NPFSSN=$P(DATA,"^",9)
|
---|
149 | ;
|
---|
150 | Q:NPFSSN'=PAIDSSN
|
---|
151 | ;
|
---|
152 | S DATA=NPFNM_U_NPFSEX_U_NPFDOB_U_NPFSSN
|
---|
153 | S DATA=DATA_U_PAIDNM_U_PAIDSEX_U_PAIDDOB_U_PAIDSSN_U_IEN200
|
---|
154 | ;
|
---|
155 | S DATA1=NPFSSN_U_NPFNM_U_U_U_IEN200
|
---|
156 | ;
|
---|
157 | I $$NAME(NPFNM)'=$$NAME(PAIDNM) D Q
|
---|
158 | .S XUPSDIFF("NAME")=XUPSDIFF("NAME")+1
|
---|
159 | .S ^TMP("XUPS PAID",$J,"DIFF",IEN200)=DATA
|
---|
160 | ;
|
---|
161 | I PAIDSEX'="" D
|
---|
162 | .I NPFSEX="" D Q
|
---|
163 | ..S $P(DATA1,U,3)=PAIDSEX
|
---|
164 | ..S XUPSUPD("SEX")=XUPSUPD("SEX")+1
|
---|
165 | ..S ^TMP("XUPS PAID",$J,"UPD",IEN200)=DATA1
|
---|
166 | ..I $E(XUPSACT,1)="U" D
|
---|
167 | ... D UPDSEX
|
---|
168 | ... S XUUPDT=$G(XUUPDT)+1
|
---|
169 | .I NPFSEX'=PAIDSEX D Q
|
---|
170 | ..S XUPSDIFF("SEX")=XUPSDIFF("SEX")+1
|
---|
171 | ..S ^TMP("XUPS PAID",$J,"DIFF",IEN200)=DATA
|
---|
172 | ;
|
---|
173 | I PAIDDOB'="" D
|
---|
174 | .I NPFDOB="" D Q
|
---|
175 | ..S $P(DATA1,U,4)=PAIDDOB
|
---|
176 | ..S XUPSUPD("DOB")=XUPSUPD("DOB")+1
|
---|
177 | ..S ^TMP("XUPS PAID",$J,"UPD",IEN200)=DATA1
|
---|
178 | ..I $E(XUPSACT,1)="U" D
|
---|
179 | ... D UPDDOB
|
---|
180 | ... S XUUPDT=$G(XUUPDT)+1
|
---|
181 | .I NPFDOB'=PAIDDOB D Q
|
---|
182 | ..S XUPSDIFF("DOB")=XUPSDIFF("DOB")+1
|
---|
183 | ..S ^TMP("XUPS PAID",$J,"DIFF",IEN200)=DATA
|
---|
184 | ;
|
---|
185 | Q
|
---|
186 | ;
|
---|
187 | HD(NODE) ; -- Report header
|
---|
188 | N C1,C2,C3,C4,C5
|
---|
189 | ;
|
---|
190 | S CNT=$G(CNT)+1
|
---|
191 | S ^TMP(NODE,$J,CNT)=""
|
---|
192 | ;
|
---|
193 | I NODE="XUPS DIFF" D
|
---|
194 | . S CNT=$G(CNT)+1
|
---|
195 | . S ^TMP(NODE,$J,CNT)="The following New Person File entries have different LastName,FirstName,"
|
---|
196 | . S CNT=$G(CNT)+1
|
---|
197 | . S ^TMP(NODE,$J,CNT)="or same LastName,FirstName but different Sex or DOB with their linked PAID"
|
---|
198 | . S CNT=$G(CNT)+1
|
---|
199 | . S ^TMP(NODE,$J,CNT)="Employee entries."
|
---|
200 | ;
|
---|
201 | S CNT=$G(CNT)+1
|
---|
202 | S ^TMP(NODE,$J,CNT)=""
|
---|
203 | ;
|
---|
204 | S C1=$$LJ^XLFSTR("NPF - Name",30," ")
|
---|
205 | S C2=$$CJ^XLFSTR("SEX",3," ")
|
---|
206 | S C3=$$LJ^XLFSTR("DOB",11," ")
|
---|
207 | S C4=$$LJ^XLFSTR("SSN",9," ")
|
---|
208 | S C5=$$RJ^XLFSTR("IEN",14," ")
|
---|
209 | ;
|
---|
210 | S CNT=$G(CNT)+1
|
---|
211 | S ^TMP(NODE,$J,CNT)=C1_C2_" "_C3_" "_C4_" "_C5
|
---|
212 | ;
|
---|
213 | S C1=$$LJ^XLFSTR("PAID -",30," ")
|
---|
214 | S C2=$$CJ^XLFSTR("",3," ")
|
---|
215 | S C3=$$LJ^XLFSTR("",11," ")
|
---|
216 | S C4=$$LJ^XLFSTR("",9," ")
|
---|
217 | S C5=$$RJ^XLFSTR("",14," ")
|
---|
218 | ;
|
---|
219 | S CNT=$G(CNT)+1
|
---|
220 | S ^TMP(NODE,$J,CNT)=C1_C2_" "_C3_" "_C4_" "_C5
|
---|
221 | ;
|
---|
222 | S C1=$$LJ^XLFSTR("=================",30," ")
|
---|
223 | S C2=$$CJ^XLFSTR("===",3," ")
|
---|
224 | S C3=$$LJ^XLFSTR("==========",11," ")
|
---|
225 | S C4=$$LJ^XLFSTR("=========",9," ")
|
---|
226 | S C5=$$RJ^XLFSTR("===",14," ")
|
---|
227 | ;
|
---|
228 | S CNT=$G(CNT)+1
|
---|
229 | S ^TMP(NODE,$J,CNT)=C1_C2_" "_C3_" "_C4_" "_C5
|
---|
230 | ;
|
---|
231 | S CNT=$G(CNT)+1
|
---|
232 | S ^TMP(NODE,$J,CNT)=""
|
---|
233 | ;
|
---|
234 | Q
|
---|
235 | ;
|
---|
236 | FL(NODE,DATA) ; -- format line
|
---|
237 | ;
|
---|
238 | N NPFNM,NPFSEX,NPFDOB,NPFSSN,NPFIEN
|
---|
239 | N PAIDNM,PAIDSEX,PAIDDOB,PAIDSSN
|
---|
240 | ;
|
---|
241 | S NPFNM=$P(DATA,U,1)
|
---|
242 | S NPFSEX=$P(DATA,U,2)
|
---|
243 | S NPFDOB=$P(DATA,U,3)
|
---|
244 | S NPFSSN=$P(DATA,U,4)
|
---|
245 | S NPFIEN=$P(DATA,U,9)
|
---|
246 | S PAIDNM=$P(DATA,U,5)
|
---|
247 | S PAIDSEX=$P(DATA,U,6)
|
---|
248 | S PAIDDOB=$P(DATA,U,7)
|
---|
249 | S PAIDSSN=$P(DATA,U,8)
|
---|
250 | ;
|
---|
251 | N C1,C2,C3,C4,C5
|
---|
252 | ;
|
---|
253 | ;NPF values
|
---|
254 | S C1=$$LJ^XLFSTR(NPFNM,30," ")
|
---|
255 | S C2=$$CJ^XLFSTR(NPFSEX,3," ")
|
---|
256 | S C3=$$LJ^XLFSTR($$DOB(NPFDOB),11," ")
|
---|
257 | S C4=$$LJ^XLFSTR(NPFSSN,9," ")
|
---|
258 | S C5=$$RJ^XLFSTR(NPFIEN,14," ")
|
---|
259 | ;
|
---|
260 | S CNT=$G(CNT)+1
|
---|
261 | S ^TMP(NODE,$J,CNT)=C1_C2_" "_C3_" "_C4_" "_C5
|
---|
262 | ;
|
---|
263 | ;PAID values
|
---|
264 | S C1=$$LJ^XLFSTR(PAIDNM,30," ")
|
---|
265 | S C2=$$CJ^XLFSTR(PAIDSEX,3," ")
|
---|
266 | S C3=$$LJ^XLFSTR($$DOB(PAIDDOB),11," ")
|
---|
267 | S C4=$$LJ^XLFSTR(PAIDSSN,9," ")
|
---|
268 | S C5=$$RJ^XLFSTR(" ",14," ")
|
---|
269 | ;
|
---|
270 | S CNT=$G(CNT)+1
|
---|
271 | S ^TMP(NODE,$J,CNT)=C1_C2_" "_C3_" "_C4_" "_C5
|
---|
272 | ;
|
---|
273 | S CNT=$G(CNT)+1
|
---|
274 | S ^TMP(NODE,$J,CNT)=""
|
---|
275 | ;
|
---|
276 | Q
|
---|
277 | ;
|
---|
278 | HD1(NODE) ; -- Report header
|
---|
279 | ;
|
---|
280 | N C1,C2,C3,C4,C5
|
---|
281 | ;
|
---|
282 | S CNT=$G(CNT)+1
|
---|
283 | S ^TMP(NODE,$J,CNT)=""
|
---|
284 | ;
|
---|
285 | I NODE="XUPS UPD" D
|
---|
286 | . S CNT=$G(CNT)+1
|
---|
287 | . S ^TMP(NODE,$J,CNT)="The following New Person File entries will be updated."
|
---|
288 | . S CNT=$G(CNT)+1
|
---|
289 | . S ^TMP(NODE,$J,CNT)="The DOB or Sex fields to be updated are shown with the PAID values;"
|
---|
290 | . S CNT=$G(CNT)+1
|
---|
291 | . S ^TMP(NODE,$J,CNT)="The DOB or Sex fields not to be updated are shown with ""-""."
|
---|
292 | ;
|
---|
293 | S CNT=$G(CNT)+1
|
---|
294 | S ^TMP(NODE,$J,CNT)=""
|
---|
295 | ;
|
---|
296 | S C1=$$LJ^XLFSTR("SSN",9," ")
|
---|
297 | S C2=$$LJ^XLFSTR("NPF Name",30," ")
|
---|
298 | S C3=$$LJ^XLFSTR("SEX",3," ")
|
---|
299 | S C4=$$LJ^XLFSTR("DOB",11," ")
|
---|
300 | S C5=$$RJ^XLFSTR("IEN",14," ")
|
---|
301 | ;
|
---|
302 | S CNT=$G(CNT)+1
|
---|
303 | S ^TMP(NODE,$J,CNT)=C1_" "_C2_" "_C3_" "_C4_" "_C5
|
---|
304 | ;
|
---|
305 | S C1=$$LJ^XLFSTR("=========",9," ")
|
---|
306 | S C2=$$LJ^XLFSTR("=================",30," ")
|
---|
307 | S C3=$$CJ^XLFSTR("===",3," ")
|
---|
308 | S C4=$$LJ^XLFSTR("==========",11," ")
|
---|
309 | S C5=$$RJ^XLFSTR("===",14," ")
|
---|
310 | ;
|
---|
311 | S CNT=$G(CNT)+1
|
---|
312 | S ^TMP(NODE,$J,CNT)=C1_" "_C2_" "_C3_" "_C4_" "_C5
|
---|
313 | ;
|
---|
314 | S CNT=$G(CNT)+1
|
---|
315 | S ^TMP(NODE,$J,CNT)=""
|
---|
316 | ;
|
---|
317 | Q
|
---|
318 | ;
|
---|
319 | FL1(NODE,DATA) ; -- format line
|
---|
320 | ;
|
---|
321 | N NPFSSN,NPFNM,NPFSEX,NPFDOB,NPFIEN
|
---|
322 | ;
|
---|
323 | S NPFSSN=$P(DATA,U,1)
|
---|
324 | S NPFNM=$P(DATA,U,2)
|
---|
325 | S NPFSEX=$P(DATA,U,3)
|
---|
326 | I NPFSEX="" S NPFSEX="-"
|
---|
327 | S NPFDOB=$P(DATA,U,4)
|
---|
328 | S NPFIEN=$P(DATA,U,5)
|
---|
329 | ;
|
---|
330 | N C1,C2,C3,C4,C5
|
---|
331 | ;
|
---|
332 | ;NPF values
|
---|
333 | S C1=$$LJ^XLFSTR(NPFSSN,9," ")
|
---|
334 | S C2=$$LJ^XLFSTR(NPFNM,30," ")
|
---|
335 | S C3=$$CJ^XLFSTR(NPFSEX,3," ")
|
---|
336 | I NPFDOB="" S C4="---------- "
|
---|
337 | I NPFDOB'="" S C4=$$LJ^XLFSTR($$DOB(NPFDOB),11," ")
|
---|
338 | S C5=$$RJ^XLFSTR(NPFIEN,14," ")
|
---|
339 | ;
|
---|
340 | S CNT=$G(CNT)+1
|
---|
341 | S ^TMP(NODE,$J,CNT)=C1_" "_C2_" "_C3_" "_C4_" "_C5
|
---|
342 | ;
|
---|
343 | S CNT=$G(CNT)+1
|
---|
344 | S ^TMP(NODE,$J,CNT)=""
|
---|
345 | ;
|
---|
346 | Q
|
---|
347 | ;
|
---|
348 | UPDSEX ;Update SEX if NPF SEX is null
|
---|
349 | I $E(XUPSACT,1)'="U" Q
|
---|
350 | ;
|
---|
351 | N DIE,DA,DR
|
---|
352 | S DIE=200,DA=IEN200
|
---|
353 | I NPFSEX="" D
|
---|
354 | . S DR="4///^S X=PAIDSEX"
|
---|
355 | . D ^DIE
|
---|
356 | Q
|
---|
357 | ;
|
---|
358 | UPDDOB ;Update DOB if NPF DOB is null
|
---|
359 | I $E(XUPSACT,1)'="U" Q
|
---|
360 | ;
|
---|
361 | N DIE,DA,DR
|
---|
362 | S DIE=200,DA=IEN200
|
---|
363 | I NPFDOB="" D
|
---|
364 | . S DR="5///^S X=PAIDDOB"
|
---|
365 | . D ^DIE
|
---|
366 | Q
|
---|
367 | ;
|
---|
368 | NAME(NAME) ; Return "LastName,FirstName".
|
---|
369 | ;
|
---|
370 | N RESULT,STDNM
|
---|
371 | ;
|
---|
372 | S RESULT=""
|
---|
373 | ;
|
---|
374 | ; CALL FORMAT^XLFNAME7
|
---|
375 | S STDNM=$$FORMAT^XLFNAME7(.NAME,3,35)
|
---|
376 | ;
|
---|
377 | ; Return LastName,FirstName
|
---|
378 | S RESULT=$P($G(STDNM)," ",1)
|
---|
379 | ;
|
---|
380 | Q RESULT
|
---|
381 | ;
|
---|
382 | DOB(DOB) ; format DOB
|
---|
383 | ;
|
---|
384 | Q:DOB="" ""
|
---|
385 | ;
|
---|
386 | Q $E(DOB,4,5)_"/"_$E(DOB,6,7)_"/"_(1700+$E(DOB,1,3))
|
---|
387 | ;
|
---|
388 | PSDT() ; format date
|
---|
389 | ;
|
---|
390 | N %
|
---|
391 | ;
|
---|
392 | D NOW^%DTC S Y=% D DD^%DT
|
---|
393 | ;
|
---|
394 | Q Y
|
---|
395 | ;
|
---|
396 | XM(XMSUB,X) ;Email the report
|
---|
397 | ;If called within a task, protect variables
|
---|
398 | I $D(ZTQUEUED) N %,DIFROM
|
---|
399 | ;
|
---|
400 | N XMY,XMTEXT,XMDUZ
|
---|
401 | S XMY(DUZ)="",XMDUZ=.5
|
---|
402 | S XMTEXT="^TMP("""_X_""",$J,"
|
---|
403 | D ^XMD
|
---|
404 | ;
|
---|
405 | Q
|
---|
406 | ;
|
---|