From 326b9a4f7a9d8fb03d1ebee5cfcd316e6ee6fe93 Mon Sep 17 00:00:00 2001 From: Fred Boniface Date: Mon, 8 May 2023 19:55:09 +0100 Subject: [PATCH] Recover lost branch into main --- Dockerfile | 1 + data/pis/gwr.yaml | 1046 +++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 2 + src/main.py | 36 +- src/mongo.py | 22 + src/pis.py | 43 ++ 6 files changed, 1143 insertions(+), 7 deletions(-) create mode 100644 data/pis/gwr.yaml create mode 100644 src/pis.py diff --git a/Dockerfile b/Dockerfile index 1fceb50..8e93c6f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,4 +2,5 @@ FROM python:3.11-alpine COPY ./requirements.txt /app/requirements.txt RUN [ "pip", "install", "-r", "/app/requirements.txt" ] COPY ./src /app/src +COPY ./data /app/data CMD [ "python", "/app/src/main.py" ] \ No newline at end of file diff --git a/data/pis/gwr.yaml b/data/pis/gwr.yaml new file mode 100644 index 0000000..bfd53d5 --- /dev/null +++ b/data/pis/gwr.yaml @@ -0,0 +1,1046 @@ +pis: + - code: 5001 + stops: [avn,shh,sml,cfn,rda,mtp,srd,lwh,bri] + - code: 5002 + stops: [avn,shh,sml,cfn,mtp,rda,srd,lwh,bri,nls,yat,wor,wnm,wsm,hig,bwt,tau] + - code: 5003 + stops: [bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau,tvp,exd] + - code: 5004 + stops: [bri,bmt,psn,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd] + - code: 5005 + stops: [bri,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd] + - code: 5006 + stops: [bri,wsm,hig,bwt,tau,tvp,exd,ext,scs,dww,dwl,tgm,nta,tot,ivy,ply,lsk,bod,los,par,lux,bgl,roc,scr,qui,nqy] + - code: 5007 + stops: [bri,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd,dwl,tgm,nta,tot,ply,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5008 + stops: [bri,wsm,hig,bwt,tau,tvp,exd,ext,scs,dww,dwl,tgm,nta,tot,ivy,ply,dpt,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5009 + stops: [bri,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd,ext,dwl,tgm,nta,tot,ivy,ply,sts,sgm,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5010 + stops: [bri,yat,wor,wsm,bwt,tau,tvp,exd,dwl,tgm,nta,tot,ply,dpt,sts,sgm,men,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5011 + stops: [bri,wsm,hig,bwt,tau,tvp,exd,ext,sts,dww,dwl,tgm,nta,tot,ivy,ply] + - code: 5012 + stops: [bri,bmt,nls,yat,wor,wsm,hig,bwt] + - code: 5013 + stops: [bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau] + - code: 5014 + stops: [bri,bmt,psn,nls,yat,wor,wsm,hig,bwt,tau] + - code: 5015 + stops: [bri,nls,yat,wor,wsm,hig,bwt,tau] + - code: 5016 + stops: [bri,bmt,nls,yat,wor,wnm,wsm] + - code: 5017 + stops: [bri,bmt,psn,nls,yat,wor,wnm,wsm] + - code: 5018 + stops: [bpw,fit,bri] + - code: 5019 + stops: [bpw,fit,srd,bri] + - code: 5020 + stops: [bpw,fit,srd,lwh,bri] + - code: 5021 + stops: [bpw,fit,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau,tvp,exd] + - code: 5022 + stops: [bpw,fit,bri,wsm,hig,bwt,tau,tvp,exd,tgm,tot,ivy,ply,dvp,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5023 + stops: [bpw,fit,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau] + - code: 5024 + stops: [bpw,fit,bri,nls,yat,wor,wnm,wsm,hig,bwt,tau] + - code: 5025 + stops: [bpw,fit,nls,yat,wor,wsm,hig,bwt,tau] + - code: 5026 + stops: [bpw,fit,bri,psn,nls,yat,wor,wsm,hig,bwt,tau] + - code: 5027 + stops: [bpw,fit,bri,bmt,psn,nls,yat,wor,wnm,wsm] + - code: 5028 + stops: [bpw,fit,srd,bri,bmt,psn,nls,yat,wor,wnm,wsm] + - code: 5029 + stops: [cnm,gcr,cdu,yae,bpw,fit,bri,nls,yat,wor,wsm,hig,bwt,tau] + - code: 5030 + stops: [cnm,gcr,cdu,yae,bpw,fit,bri,nls,yat,wor,wsm] + - code: 5031 + stops: [cdf,nwp,stj,pwy,fit,bri] + - code: 5032 + stops: [cdf,nwp,stj,pwy,fit,srd,lwh,bri] + - code: 5033 + stops: [cdf,nwp,stj,pwy,fit,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau,tvp,exd] + - code: 5034 + stops: [cdf,nwp,stj,pwy,fit,bri,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd] + - code: 5035 + stops: [cdf,nwp,stj,pwy,fit,bri,nls,yat,wor,wsm,hig,bwt,tau,exd,dww,dwl,tgm,nta,trr,tqy,pgn] + - code: 5036 + stops: [cdf,nwp,stj,pwy,fit,bri,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd,scs,dww,dwl,tgm,nta,tot,ivy,ply] + - code: 5037 + stops: [cdf,nwp,stj,pwy,fit,bri,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd,nta,tot,ivy,ply] + - code: 5038 + stops: [cdf,nwp,stj,pwy,fit,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau] + - code: 5039 + stops: [cdf,nwp,stj,pwy,fit,bri,nls,yat,wor,wnm,wsm,hig,bwt,tau] + - code: 5040 + stops: [cdf,nwp,stj,pwy,fit,bri,nls,yat,wor,wsm,hig,bwt,tau] + - code: 5041 + stops: [cdf,nwp,stj,pwy,fit,bri,psn,nls,yat,wor,wsm,hig,bwt,tau] + - code: 5042 + stops: [cdf,nwp,stj,pil,pwy,fit,bri,nls,yat,wor,wsm,hig,bwt,tau] + - code: 5043 + stops: [gcr,cdu,yae,bpw,fit,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau] + - code: 5044 + stops: [gcr,cdu,yae,bpw,fit,srd,lwh,bri,nls,yat,wor,wsm,hig,bwt,tau] + - code: 5045 + stops: [svb,avn,shh,sml,cfn,rda,mtp,srd,bri] + - code: 5046 + stops: [svb,sar,avn,shh,sml,cfn,rda,mtp,srd,bri] + - code: 5047 + stops: [svb,sar,avn,shh,sml,cfn,rda,mtp,srd,lwh,bri] + - code: 5048 + stops: [svb,sar,avn,shh,sml,cfn,rda,mtp,srd,lwh,bri,bmt,nls,yat,wor,wsm,hig,bwt,tau] + - code: 5049 + stops: [svb,sar,avn,shh,sml,cfn,rda,mtp,srd,lwh,bri,bmt,psn,nls,yat,wor,wsm,hig,bwt,tau] + - code: 5050 + stops: [svb,sar,avn,shh,sml,cfn,rda,mtp,srd,lwh,bri,nls,yat,wor,wsm,hig,bwt,tau] + - code: 5051 + stops: [wos,asc,cnm,gcr,cdu,yae,bpw,fit,bri,nls,yat,wor,wnm,wsm] + - code: 5052 + stops: [wsb,fro,bru,clc,tau,tvp,exd] + - code: 5053 + stops: [bri,lwh,srd,mtp,rda,cfn,sml,shh,avn] + - code: 5055 + stops: [bri,lwh,srd,fit,bpw] + - code: 5059 + stops: [bri,lwh,srd,mtp,rda,cfn,sml,shh,avn,svb] + - code: 5060 + stops: [bri,lwh,srd,mtp,rda,cfn,sml,shh,avn,sar,svb] + - code: 5075 + stops: [tau,bwt,hig,wsm,wnm,wor,yat,nls,psn,bwt,bri] + - code: 5076 + stops: [tau,bwt,hig,wsm,wor,yat,nls,bri] + - code: 5077 + stops: [tau,bwt,hig,wsm,wor,yat,nls,psn,bmt,bri] + - code: 5078 + stops: [tau,bwt,hig,wsm,wnm,wor,yat,nls,bri,lwh,srd,fit,bpw] + - code: 5079 + stops: [tau,bwt,hig,wsm,wnm,wor,yat,nls,psn,bmt,bri,lwh,srd,fit,bpw] # Check for LWH and SRD + - code: 5080 + stops: [tau,bwt,hig,wsm,wor,yat,nls,bri,lwh,srd,fit,bpw] + - code: 5081 + stops: [tau,bwt,hig,wsm,wor,yat,nls,psn,bri,lwh,srd,fit,bpw] + - code: 5092 + stops: [wsm,wnm,wor,yat,nls,psn,bmt,bri] + - code: 5101 + stops: [bri,kyn,olf,bth,ffd,avf,boa,tro,wsb,fro] + - code: 5102 + stops: [bri,kyn,olf,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5103 + stops: [bpw,btn] # No longer used so intermediate stops omitted + - code: 5104 + stops: [bpw,btn] # No longer used so intermediate stops omitted + - code: 5105 + stops: [bpw,fit,bri,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5106 + stops: [bpw,fit,bri,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5107 + stops: [bpw,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5108 + stops: [bpw,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5109 + stops: [bpw,fit,bri,bth,ffd,avf,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5110 + stops: [bpw,fit,bri,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5111 + stops: [bpw,fit,bri,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5112 + stops: [bpw,fit,bri,kyn,olf,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5113 + stops: [bpw,fit,bri,kyn,olf,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5114 + stops: [bpw,fit,bri,kyn,olf,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5115 + stops: [bpw,fit,bri,kyn,olf,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5116 + stops: [bpw,fit,bri,bth,boa,tro,wsb,dmh,wmn] + - code: 5117 + stops: [bpw,fit,srd,lwh,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb,dmh,wmn] + - code: 5118 + stops: [cnm,gcr,cdu,yae,bpw,fit,srd,lwh,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb] + - code: 5119 + stops: [cdf,btn] # No longer used so intermediate stops omitted + - code: 5120 + stops: [cdf,btn] # No longer used so intermediate stops omitted + - code: 5121 + stops: [cdf,btn] # No longer used so intermediate stops omitted + - code: 5122 + stops: [cdf,nwp,stj,fit,bri] + - code: 5123 + stops: [cdf,nwp,fit,bri,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5124 + stops: [cdf,nwp,fit,bri,bth,boa,tro,wsb,wnm,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5125 + stops: [cdf,nwp,fit,bri,bth,boa,tro,wsb,wnm,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5126 + stops: [cdf,nwp,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,soa,esl,hde,boe,frm,ftn,pms,pmh] + - code: 5127 + stops: [cdf,nwp,stj,fit,bri,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,csa,ftm,pms,pmh] + - code: 5128 + stops: [cdf,nwp,stj,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5129 + stops: [cdf,nwp,stj,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5130 + stops: [cdf,nwp,stj,fit,bri,bth,ffd,avf,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5131 + stops: [cdf,nwp,stj,fit,bri,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5132 + stops: [cdf,nwp,stj,fit,bri,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5133 + stops: [cdf,nwp,stj,fit,bri,bth,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5134 + stops: [cdf,nwp,stj,fit,bri,kyn,olf,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5135 + stops: [cdf,nwp,stj,fit,bri,kyn,olf,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5136 + stops: [cdf,nwp,stj,fit,bri,kyn,olf,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5137 + stops: [cdf,nwp,stj,pwy,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5139 + stops: [cdf,nwp,stj,pwy,fit,bri,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5140 + stops: [cdf,nwp,stj,pwy,fit,bri,kyn,olf,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5141 + stops: [cdf,nwp,stj,pwy,fit,bri,kyn,olf,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5142 + stops: [cdf,nwp,stj,pwy,fit,bri,bth,boa,tro,wsb,dmh,wmn] + - code: 5143 + stops: [cdf,nwp,stj,pwy,fit,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb] + - code: 5144 + stops: [gmv,btn] # No longer in use, intermittent stops omitted + - code: 5145 + stops: [gmv,btn] # No longer in use, intermittent stops omitted + - code: 5146 + stops: [pmh,btn] # No longer in use, intermittent stops omitted + - code: 5147 + stops: [rom,btn] # No longer in use, intermittent stops omitted + - code: 5148 + stops: [wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5149 + stops: [wsb,wmn,sal] + - code: 5150 + stops: [wsb,dmh,wmn,sal,rom,sou] + - code: 5151 + stops: [wsb,dmh,wmn] + - code: 5152 + stops: [btm,bri] # No longer in use, intermittent stops omitted + - code: 5153 + stops: [btm,bri] # No longer in use, intermittent stops omitted + - code: 5154 + stops: [btm,bri] # No longer in use, intermittent stops omitted + - code: 5155 + stops: [btm,bpw] # No longer in use, intermittent stops omitted + - code: 5156 + stops: [btm,cdf] # No longer in use, intermittent stops omitted + - code: 5157 + stops: [btm,gmv] # No longer in use, intermittent stops omitted + - code: 5158 + stops: [btm,gmv] # No longer in use, intermittent stops omitted + - code: 5159 + stops: [btm,gmv] # No longer in use, intermittent stops omitted + - code: 5160 + stops: [btm,pmh] # No longer in use, intermittent stops omitted + - code: 5161 + stops: [bri,fit,bpw] + - code: 5162 + stops: [bri,fit,nwp,cdf] + - code: 5163 + stops: [bri,fit,stj,nwp,cdf] + - code: 5164 + stops: [fro,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,pwy,nwp,cdf] + - code: 5165 + stops: [fro,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,pwy,stj,nwp,cdf] + - code: 5166 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wnm,dmh,wsb,tro,boa,bth,bri,fit,bpw] + - code: 5167 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wnm,dmh,wsb,tro,boa,bth,olf,kyn,bri,fit,bpw] + - code: 5168 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wnm,wsb,tro,boa,avf,ffd,bth,bri,fit,bpw] + - code: 5169 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wnm,wsb,tro,boa,bth,bri,fit,bpw] + - code: 5170 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wnm,wsb,tro,boa,bth,olf,kyn,bri,fit,bpw] + - code: 5171 + stops: [pmh,pms,ftn,frm,sou,rom,sal,wnm,dmh,wsb,tro,boa,bth,bri,fit,bpw] + - code: 5172 + stops: [pmh,pms,ftn,frm,sou,rom,sal,wnm,wsb,tro,boa,bth,bri,fit,bpw] + - code: 5173 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth,bri,fit,nwp,cdf] + - code: 5174 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth,bri,fit,pwy,stj,nwp,cdf] + - code: 5175 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth,bri,fit,stj,nwp,cdf] + - code: 5176 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth,olf,kyn,bri,fit,stj,nwp,cdf] + - code: 5177 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth,olf,kyn,bri,fit,nwp,cdf] + - code: 5178 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,avf,ffd,bth,bri,fit,stj,nwp,cdf] + - code: 5179 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri,fit,nwp,cdf] + - code: 5180 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri,fit,pwy,stj,nwp,cdf] + - code: 5181 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri,fit,stj,nwp,cdf] + - code: 5182 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri,fit,stj,nwp,cdf] + - code: 5184 + stops: [pmh,pms,ftn,frm,sou,rom,sal,wnm,dmh,wsb,tro,boa,bth,kyn,bri,fit,nwp,cdf] + - code: 5185 + stops: [pmh,pms,ftn,frm,sou,rom,sal,wnm,wsb,tro,boa,bth,bri,fit,pwy,stj,nwp,cdf] + - code: 5186 + stops: [pmh,pms,ftn,frm,esl,soa,sou,rom,sal,wnm,dmh,wsb] + - code: 5187 + stops: [pmh,pms,ftn,frm,sou,rom,sal,wnm,dmh,wsb] + - code: 5188 + stops: [sal,wmn,dmh,wsb] + - code: 5189 + stops: [sou,rom,sal,wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri] + - code: 5190 + stops: [sou,rom,sal,wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof,mvl,gmv] + - code: 5191 + stops: [sou,rom,sal,wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof] + - code: 5192 + stops: [sou,rom,sal,wmn,dmh,wsb] + - code: 5193 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,bpw,yae,cdu,gcr] + - code: 5194 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof,mvl,gmv] + - code: 5195 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,bpw,yae,cdu,gcr,cnm,asc,wos] + - code: 5196 + stops: [wmn,dmh,wsb] + - code: 5197 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,bpw] + - code: 5198 + stops: [wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,lwh,srd,fit,stj,nwp,cdf] + - code: 5200 + stops: [gcr,cnm] + - code: 5215 + stops: [bri,kyn,olf,bth,ffd,avf,boa,tro,wsb,fro,bru,clc,yvp,tho,yet,cno,mdn,dcw,upw,wey] + - code: 5223 + stops: [bpw,srd,lwh,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb,fro,bru,clc,yvp,tho,yet,cno,mdn,dcw,upw,wey] + - code: 5238 + stops: [wsb,fro,bru,clc,yvp,tho,yet,cno,mdn,dcw,upw,wey] + - code: 5248 + stops: [wey,upw,dcw,mdn,cno,yet,tho,yvp,clc,bru,fro,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri] # [reverse,5215] + - code: 5254 + stops: [bri,kyn,olf,bth,ffd,avf,boa,tro,wsb,fro,bru,clc,yvp,tho,yet,cno,mdn,dcw,upw,wey] # [reverse,5248] + - code: 5225 + stops: [gmv,mvl,wof,wos,asc,cnm,gcr,cdu,yae,bpw,fit,bri] + - code: 5226 + stops: [gmv,mvl,wof,wos,asc,cnm,gcr,cdu,yae,bpw,fit,srd,lwh,bri] + - code: 5231 + stops: [wos,asc,cnm,gcr,bpw,bri] + - code: 5232 + stops: [wos,asc,cmn,gcr,cdu,yae,bpw,fit,bri] + - code: 5237 + stops: [wsb,fro] + - code: 5240 + stops: [bri,fit,bpw,yae,cdu,gcr,cnm] + - code: 5241 + stops: [bri,fit,bpw,yae,cdu,gcr] + - code: 5242 + stops: [bri,fit,bpw,yae,cdu,gcr,cnm,asc,wos] + - code: 5256 + stops: [wsb,tro,boa,bth] + - code: 5257 + stops: [wsb,tro,boa,avf,ffd,bth,olf,kyn,bri] + - code: 5258 + stops: [wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,bpw] + - code: 5436 + stops: [bri,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd] + - code: 5437 + stops: [bri,wsm,tau,tvp,exd,ext,dwl,tgm,nta,tot,ivy,ply,lsk,bod,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5443 + stops: [bpw,fit,srd,lwh,bri,kyn,olf,bth,ffd,boa,tro,wsb,dmh,wmn] + - code: 5446 + stops: [cdf,nwp,fit,bri,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5447 + stops: [cdf,nwp,stj,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5448 + stops: [cdf,nwp,stj,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5449 + stops: [cdf,nwp,stj,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5450 + stops: [cdf,nwp,stj,fit,bri,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5451 + stops: [cdf,nwp,stj,fir,bri,kyn,olf,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5452 + stops: [cdf,nwp,stj,fir,bri,kyn,olf,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5470 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri,fit,bpw] + - code: 5471 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,ffd,bth,bri,fit,nwp,cdf] + - code: 5472 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,avf,ffd,bth,bri,fit,stj,nwp,cdf] + - code: 5473 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri,fit,nwp,cdf] + - code: 5474 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri,fit,pwy,stj,nwp,cdf] + - code: 5475 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri,fit,stj,nwp,cdf] + - code: 5487 + stops: [wsm,wnm,wor,yat,nls,psn,bmt,bri,lwh,srd,mtp,rda,cfn,sml,shh,avn,sar,svb] + - code: 5488 + stops: [bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau,tvp,exd] + - code: 5489 + stops: [avn,shh,sml,cfn,rda,mtp,srd,lwh,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau] + - code: 5490 + stops: [bri,tau,tvp,exd] + - code: 5491 + stops: [cdf,nwp,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5492 + stops: [cdf,nwp,stj,pwy,fit,bri,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5493 + stops: [cdf,nwp,stj,pwy,fit,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau] + - code: 5496 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,ffd,bth,olf,kyn,bri,fit,nwp,cdf] + - code: 5499 + stops: [bth,olf,kyn,bri,lwh,srd,fit] + - code: 5501 + stops: [bri,stj,nwp,cdf] + - code: 5502 + stops: [bri,lwh,srd,fit] + - code: 5503 + stops: [bpw,fit,bri,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd] + - code: 5504 + stops: [bpw,fit,bri,nls,yat,wor,wsm,hig,bwt,tau,exd,dww,dwl,tgm,nta,trr,tqy,pgn] + - code: 5505 + stops: [bpw,fit,bri,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5506 + stops: [bpw,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5508 + stops: [bpw,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,soa,esl,hde,boe,frm,ftn,pms,pmh] + - code: 5509 + stops: [bpw,fit,bri,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5510 + stops: [bpw,fit,bri,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd,nta,tot,ivy,ply] + - code: 5511 + stops: [bpw,fit,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau] + - code: 5512 + stops: [bpw,fit,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb] + - code: 5513 + stops: [cfn,rda,mtp,srd,lwh,bri] + - code: 5514 + stops: [cdf,nwp,stj,bpw,fit,bri] + - code: 5515 + stops: [cdf,nwp,pwy,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5517 + stops: [cdf,nwp,stj,fit,bri,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5518 + stops: [cdf,nwp,stj,fit,bri,kwn,olf,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5519 + stops: [cdf,nwp,stj,pwy,fit,bri,bth,ffd,avf,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5521 + stops: [fit,kyn,olf,bth] + - code: 5522 + stops: [fit,srd,bri] + - code: 5523 + stops: [fit,srd,lwh,bri] # [reverse,5513] + - code: 5524 + stops: [fit,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau] + - code: 5525 + stops: [fit,srd,lwh,bri,kyn,olf,bth,ffd,boa,tro,wsb,dmh,wmn] + - code: 5526 + stops: [fit,bri,bmt,psn,nls,yat,wor,wnm,wsm] + - code: 5527 + stops: [fit,srd,bri,bmt,psn,nls,yat,wor,wnm,wsm] + - code: 5528 + stops: [fit,srd,lwh,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb] + - code: 5529 + stops: [fro,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,bpw] + - code: 5533 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri] + - code: 5534 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,ffd,bth,olf,kyn,bri,fit,bpw] + - code: 5539 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri,fit,bpw] + - code: 5540 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,olf,kyn,bri,fit,bpw] + - code: 5542 + stops: [svb,sar,avn,shh,sml,cfn,rda,mtp,srd,lwh,bri,bmt,psn,nls,yat,wor,wsm,hig,bwt,tau] + - code: 5556 + stops: [wsb,tro,boa,ffd,bth,olf,kyn,bri,lwh,srd,fit,bpw] + - code: 5558 + stops: [wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,lwh,srd,fit] + - code: 5559 + stops: [cdf,nwp,bri] + - code: 5560 + stops: [cdf,nwp,stj,pil,pwy,fit,bri,psn,nls,yat,wor,wsm,hig,bwt,tau] + - code: 5561 + stops: [tau,bwt,hig,wsm,wnm,wor,yat,nls,psn,bmt,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb] + - code: 5564 + stops: [bri,wsm,hig,bwt,tau,tvp,exd,ext,dww,dwl,tgm,nta,tot,ivy,ply,lsk,bod,los,par,lux,bgl,roc,scr,qui,nwq] + - code: 5570 + stops: [bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau] + - code: 5571 + stops: [bpw,fit,srd,lwh,bri,kyn,olf,bth,boa,tro,wsb] + - code: 5572 + stops: [cdf,nwp,stj,pwy,fit,bri,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd,nta,tot,ivy,ply,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5573 + stops: [gcr,cdu,yae,bpw,fit,srd,lwh,bri] + - code: 5574 + stops: [gmv,mvl,wof,wos,asc,cnm,gcr,fit,bri] + - code: 5578 + stops: [sal,wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,bpw,yae,cdu,gcr] + - code: 5581 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,bpw,yae,cdu,gcr,cnm] + - code: 5584 + stops: [btn,gmv] ### Not in use, intermediate stops omitted + - code: 5587 + stops: [bri,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau,tvp,exd] + - code: 5590 + stops: [cnm,gcr,cdu,yae,bpw,fit,bri,bmt,psn,nls,yat,wor,wsm,hig,bwt,tau] + - code: 5591 + stops: [cdf,btn] ### Not in use, intermediate stops omitted + - code: 5592 + stops: [cdf,nwp,stj,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5593 + stops: [cdf,nwp,stj,fit,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5601 + stops: [fro,wsb,dmh,wmn,sal,rom,sou] + - code: 5602 + stops: [gcr,cdu,yae,bpw,fit,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb,fro] + - code: 5603 + stops: [gmv,btn] ### Not in use, intermediate stops omitted + - code: 5608 + stops: [svb,sar,avn,shh,sml,cfn,rda,mtp,srd,lwh,bri,psn,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd] + - code: 5613 + stops: [wos,asc,cnm,gcr,cdu,yae,bpw,fit,bri,bmt,psn,nls,yat,wor,wnm,wsm] + - code: 5617 + stops: [bri,psn,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd] + - code: 5618 + stops: [bri,kyn,olf,bth,ffd,avf,boa,tro,wsb,fro] + - code: 5619 + stops: [bri,wsm,hig,bwt,tau,tvp,exd,ext,scs,dww,dwl,tgm,nta,tot,ivy,ply,dvp,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5620 + stops: [bri,yat,wsm,bwt,tau,tvp,exd,dwl,tgm,nta,tot,ivy,ply,dvp,sts,sgm,men,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5621 + stops: [bpw,fit,bri,wsm,hig,bwt,tau,tvp,exd,nta,tot,ivy,ply,dvp,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5622 + stops: [cdf,btn] ### Not in use, intermediate stops omitted + - code: 5623 + stops: [cdf,nwp,fit,bri,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5624 + stops: [cdf,nwp,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5627 + stops: [cdf,nwp,stj,fit,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5628 + stops: [cdf,nwp,stj,pwy,fit,bri,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5631 + stops: [gmv,mvl,wof,wos,asc,cnm,gcr,cdu,yae,bpw,fit,bri] + - code: 5636 + stops: [pmh,btn] ### Not in use, intermediate stops omitted + - code: 5637 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri,fit,stj,nwp,cdf] + - code: 5638 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri,fit,stj,nwp,cdf] + - code: 5639 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,olf,kyn,bri,fit,stj,nwp,cdf] + - code: 5640 + stops: [pmh,pms,ftn,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri,fit,pwy,stj,nwp,cdf] + - code: 5642 + stops: [svb,sar,avn,shh,sml,cfn,rda,mtp,srd,lwh,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau] + - code: 5651 + stops: [wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,stj,nwp,cdf] + - code: 5654 + stops: [cdf,btn] ### Not in use, intermediate stops omitted + - code: 5655 + stops: [cdf,nwp,pwy,fit,bri,kyn,olf,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5656 + stops: [cdf,nwp,stj,fit,bri,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5657 + stops: [cdf,nwp,stj,fit,bri,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5659 + stops: [cdf,nwp,stj,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5665 + stops: [fro,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,stj,nwp,cdf] + - code: 5671 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth,bri,fit,pwy,stj,nwp,cdf] + - code: 5672 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,avf,ffd,bth,bri,fit,pwy,stj,nwp,cdf] + - code: 5673 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri,fit,pwy,stj,nwp,cdf] + - code: 5678 + stops: [svb,sar,avn,shh,sml,cfn,rda,mtp,srd,lwh,bri,nls,yat,wor,wnm,wsm,hig,bwt,tau] + - code: 5681 + stops: [wos,asc,cnm,gcr,cdu,yae,bpw,fit,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau] + - code: 5683 + stops: [wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,pwy,stj,nwp,cdf] + - code: 5689 + stops: [bri,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd,dwl,tgm,nta,tot,ivy,ply,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5690 + stops: [bth,olf,kyn,bri] + - code: 5691 + stops: [btn,bpw] ### Not in Use, intermediate stops omitted + - code: 5866 + stops: [sal,wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri] + - code: 5700 + stops: [bri,wsm,hig,bwt,tau,tvp,exd,nta,tot,ivy,ply,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5702 + stops: [bri,nls,yat,wor,wnm,wsm,hig,bwt,tau] + - code: 5703 + stops: [bri,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof] + - code: 5708 + stops: [bpw,fit,srd,lwh,bri,bmt,psn,nls,yat,wor,wnm,wsm] + - code: 5709 + stops: [cnm,gcr,cdu,yae,bpw,fit,bri,nls,yat,wor,wsm] + - code: 5710 + stops: [cdf,nwp,stj,pwy,fit,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau,tvp,exd,nta,tot,ivy,ply,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5711 + stops: [cdf,nwp,stj,pwy,fit,bri,psn,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd,nta,tot,ivy,ply,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5712 + stops: [cdf,nwp,stj,pil,pwy,fit,bri,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd,nta,tot,ivy,ply,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5715 + stops: [cdf,nwp,stj,pwy,fit,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau,tvp,exd,dwl,tgm,nta,tot,ivy,ply] + - code: 5716 + stops: [cdf,nwp,stj,pwy,fit,srd,lwh,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau] + - code: 5722 + stops: [exd,dwl,tgm,nta,trr,tqy,pgn] + - code: 5730 + stops: [fit,srd,lwh,bri,bmt,psn,nls,yat,wor,wnm,wsm] + - code: 5731 + stops: [gcr,cdu,yae,bpw,fit,bri] + - code: 5750 + stops: [pmh,pms,ftn,frm,wsl,soa,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth,bri] + - code: 5751 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,ffd,bth,bri,fit,nwp,cdf] + - code: 5752 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,ffd,bth,olf,kyn,bri,fit,nwp,cdf] + - code: 5255 + stops: [sou,rom,sal,wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri] + - code: 5761 + stops: [svb,avn,shh,sml,cfn,rda,mtp,srd,lwh,bri] + - code: 5767 + stops: [wos,asc,cnm,gcr,bpw,fit,bri] + - code: 5768 + stops: [wos,asc,cnm,gcr,cdu,yae,bpw,fit,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau] + - code: 5770 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,lwh,srd,fit,bpw] + - code: 5771 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof] + - code: 5774 + stops: [wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,lwh,srd,fit,bpw] + - code: 5775 + stops: [wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,lwh,srd,fit,stj,nwp,cdf] + - code: 5777 + stops: [cnm,gcr,cdu,yae,bpw,fit,srd,lwh,bri,bmt,psn,nls,yat,wor,wnm,wsm] + - code: 5807 + stops: [gcr,cdu,yae,bpw,fit,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau,tvp,exd,dwl,tgm,nta,tot,ivy,ply,sbf,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5812 + stops: [bri,yat,bwt,tau,tvp,exd,dww,dwl,tgm,nta,tot,ivy,ply,dpt,doc,key,sbf,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5814 + stops: [bri,wsm,hig,bwt,tau,tvp,exd,nta,tot,ivy,ply,dpt,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5815 + stops: [cdf,nwp,stj,pwy,fit,bri,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd,dwl,tgm,nta,tot,ivy,ply,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5825 + stops: [bri,wsm,hig,bwt,tau,tvp,exd,nta,tot,ivy,ply,dpt,sts,sgm,men,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5877 + stops: [bri,nls,yat,wor,wsm] + - code: 5885 + stops: [bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau,tvp,exd,dwl,tgm,nta,tot,ivy,ply] + - code: 5886 + stops: [bri,wsm,hig,bwt,tau,tvp,exd,dwl,tgm,nta,tot,ivy,ply,dpt,sts,sgm,men,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5339 + stops: [bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau,tvp,exd,dwl,tgm,nta,tot,ivy,ply,sbf,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 5660 + stops: [cdf,nwp,stj,fit,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5661 + stops: [cdf,nwp,stj,pwy,fit,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5662 + stops: [cdf,nwp,stj,pwy,fit,bri,bth,boa,tro,wsb,dmh,wmn] + - code: 5684 + stops: [wsb,wmn] + - code: 5701 + stops: [bri,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5704 + stops: [bpw,fit,srd,lwh,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb,wmn,sal,sou,frm,ftn,pms] + - code: 5705 + stops: [bpw,fit,srd,lwh,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb,wmn,sal,sou,soa,esl,frm,ftn,pms] + - code: 5713 + stops: [cdf,nwp,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5714 + stops: [cdf,nwp,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,soa,esl,hde,boe,frm,ftn,pms,pmh] + - code: 5729 + stops: [fit,bri,kyn,olf,bth,boa,tro,wsb,dmh,wmn] + - code: 5734 + stops: [gmv,btn] ### Not in use, intermediate stops omitted + - code: 5735 + stops: [gmv,wof,wos,asc,cmn,gcr,cdu,yae,bpw,fit,bri] + - code: 5736 + stops: [gmv,mvl,wof,wos,asc,cnm,gcr,cdu,yae,bpw,fit,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb,dmh,wmn,sal,rom,sou] + - code: 5765 + stops: [wof,wos,asc,cnm,gcr,cdu,yae,bpw,fit,bri] + - code: 5766 + stops: [wof,wos,asc,cnm,gcr,cdu,yae,bpw,fit,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb] + - code: 5769 + stops: [wos,asc,cnm,gcr,cdu,yae,bpw,fit,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb] + - code: 5776 + stops: [bri,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5778 + stops: [cdf,nwp,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,ftm,ftn,pms,pmh] + - code: 5779 + stops: [cdf,nwp,stj,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5785 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri,fit,nwp,cdf] + - code: 5786 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri,fit,nwp,cdf] + - code: 5787 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri,fit,nwp,cdf] + - code: 5789 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof,mvl,gmv] + - code: 5793 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri,fit,stj,nwp,cdf] + - code: 5794 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,ffd,bth,bri,fit,nwp,cdf] + - code: 5796 + stops: [ftn,csa,ptc,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,avf,ffd,bth,old,kyn,bri,fit,bpw,yae,cdu,gcr] + - code: 5797 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,old,kyn,bri,lwh,srd,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof,mvl,gmv] + - code: 5798 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth,bri,fit,nwp,cdf] + - code: 5804 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof] + - code: 5806 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof,mvl,gmv] + - code: 5809 + stops: [pmh,pms,ftn,frm,esl,soa,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth,bri] + - code: 5810 + stops: [wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,lwh,srd,fit,bpw,yae,cdu,gcr] + - code: 5818 + stops: [wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,lwh,srd,fit] + - code: 5833 + stops: [pmh,pms,ftn,csa,sou,rom,sal,wmn,dmh,wsb,tro,boa,ffd,bth,fit,bpw,nwp,cdf] + - code: 5834 + stops: [cdf,nwp,stj,bpw,fit,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5835 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth,fit,bpw,nwp,cdf] + - code: 5836 + stops: [cdf,nwp,stj,bpw,fit,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5837 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,fit,bpw,nwp,cdf] + - code: 5838 + stops: [pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,avf,ffd,bth,bri] + - code: 5839 + stops: [cdf,nwp,bpw,fit,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5840 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,fit,bpw,stj,nwp,cdf] + - code: 5841 + stops: [cdf,nwp,stj,bpw,fit,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5842 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth,fit,bpw,stj,nwp,cdf] + - code: 5843 + stops: [cdf,nwp,bpw,fit,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5844 + stops: [cdf,nwp,stj,bpw,fit,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5845 + stops: [cdf,nwp,bpw,fit,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5846 + stops: [btn,bri] ### Not in use, intermediate stops omitted + - code: 5849 + stops: [gcr,cdu,yae,bpw] + - code: 5851 + stops: [bpw,yar,cdu,gcr] + - code: 5860 + stops: [cdf,nwp,bpw,fit,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5863 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri,fit,bpw,pwy,stj,nwp,cdf] + - code: 5866 + stops: [sal,wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri] + - code: 5868 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth,fit,bpw,pwy,stj,nwp,cdf] + - code: 5870 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri] + - code: 5871 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,bri] + - code: 5872 + stops: [bth,ffd,avf,boa,tro,wsb,fro] + - code: 5873 + stops: [pmh,pms,ftn,frm,sou,rom,sal,wmn,dmh,tro,boa,bth] + - code: 5878 + stops: [bri,kyn,olf,bth,ffd,avf,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5893 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,olf,kyn,fit,bpw,pwy,stj,nwp,cdf] + - code: 5894 + stops: [cdf,nwp,stj,bpw,fit,kyn,olf,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,csa,ftn] + - code: 5895 + stops: [bri,btn] ### Not in use, intermediate stops omitted + - code: 5896 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,fit,bpw,pwy,stj,nwp,cdf] + - code: 5897 + stops: [wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5898 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,avf,ffd,bth,fit,bpw,pwy,stj,nwp,cdf] + - code: 5899 + stops: [cdf,nwp,stj,pwy,bpw,fit,kyn,olf,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5900 + stops: [pmh,pms,ftn,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth,bri] + - code: 5901 + stops: [cdf,nwp,stj,pwy,bpw,fit,kyn,olf,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5902 + stops: [cdf,nwp,stj,bpw,fit,kyn,olf,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5903 + stops: [wsb,tro,boa,bth,olf,kyn,fit,bpw,stj,nwp,cdf] + - code: 5904 + stops: [cdf,nwp,stj,pwy,bpw,fit,kyn,olf,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5906 + stops: [wsb,tro,boa,avf,ffd,bth,olf,kyn,fit,bpw,stj,nwp,cdf] + - code: 5911 + stops: [wsb,tro,boa,avf,ffd,bth] + - code: 5912 + stops: [bth,ffd,boa,tro,wsb] + - code: 5913 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,avf,ffd,bth,olf,kyn,fit,bpw,stj,nwp,cdf] + - code: 5917 + stops: [bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5918 + stops: [wsb,dmh,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5919 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth,olf,kyn,fit,bpw,stj,nwp,cdf] + - code: 5920 + stops: [cdf,nwp,stj,pwy,bpw,fit,kyn,olf,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5921 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,olf,kyn,bri] + - code: 5922 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,ffd,bth,olf,kyn,fit,bpw,stj,nwp,cdf] + - code: 5923 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth,olf,kyn,fit,bpw,stj,nwp,cdf] + - code: 5924 + stops: [ftn,csa,ptc,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri] + - code: 5925 + stops: [bri,btn] ## Not in use, intermediate stops omitted + - code: 5926 + stops: [cdf,nwp,stj,bpw,fit,kyn,olf,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5927 + stops: [pmh,pms,ftn,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth,fit,bpw,stj,nwp,cdf] + - code: 5928 + stops: [cdf,nwp,stj,bpw,fit,kyn,olf,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5929 + stops: [bri,kyn,olf,bth,ffd,boa,tro,wsb,dmh,wmn] + - code: 5930 + stops: [bri,kyn,olf,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms] + - code: 5931 + stops: [cdf,nwp,bpw,fit,bth,boa,tro,wsb,wmn,sal,wom,sou,soa,esl,hde,boe,frm,ftn,pms,pmh] + - code: 5940 + stops: [bri,kyn,olf,bth,boa,tro,wsb,dmh,wmn] + - code: 5941 + stops: [cdf,nwp,stj,pwy,bpw,fit,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5942 + stops: [cdf,nwp,bpw,fit,kyn,olf,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5943 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth,fit,bpw,stj,nwp,cdf] + - code: 5944 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri] + - code: 5946 + stops: [fro,wsb,tro,boa,avf,ffd,bth,olf,kyn,fit,bpw,pwy,nwp,cdf] + - code: 5948 + stops: [bri,psn,nls,yat,wor,wsm,hig,bwt,tau] + - code: 5955 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,ffd,bth,olf,kyn,fit,bpw,pwy,stj,nwp,cdf] + - code: 5956 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,ffd,bth,olf,kyn,fit,bpw] + - code: 5957 + stops: [ftn,csa,ptc,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,lwh,srd,fit,bpw,pwy,yae,cdu,gcr] + - code: 5958 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,lwh,srd,fit,bpw,pwy,yae,cdu,gcr,cnm,asc,wos,wof,mvl,gmv] + - code: 5959 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,lwh,srd,fit,bpw] + - code: 5960 + stops: [pmh,pms,ftm,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,fit,bpw,pwy,srj,nwp,cdf] + - code: 5961 + stops: [btn,gmv] ### Not in use, intermediate stops omitted + - code: 5962 + stops: [gmv,btn] ### Not in use, intermediate stops omitted + - code: 5963 + stops: [btn,wos] ### Not in use, intermediate stops omitted + - code: 5964 + stops: [pmh,pms,frn,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,fit,bpw,pwy,stj,nwp,cdf] + - code: 5965 + stops: [cdf,nwp,stj,pwy,bpw,fit,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 5966 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,lwh,srd,fit,bpw,yae,cdu,gcr] + - code: 5967 + stops: [cdf,nwp,stj,pwy,bpw,fit,kyn,bth,boa,tro,wsb,wmn,sal,rom,sou,soa,esl,hde,boe,frm,ftn,pms,pmh] + - code: 5968 + stops: [cdf,nwp,stj,pwy,bpw,fit,kyn,bth,boa,tro,wsb,dmh,wmn,wal,rom,sou,frm,ftn,pms,pmh] + - code: 5969 + stops: [gcr,cdu,yae,bpw,fit,srd,lwh,kyn,olf,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms] + - code: 5973 + stops: [sou,rom,sal,wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,lwh,srd,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof,mvl,gmv] + - code: 5985 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,lwh,srd,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof,mvl,gmv] + - code: 5986 + stops: [gmv,mvl,wof,wos,asc,cnm,gcr,cdu,yae,bpw,fit,srd,lwh,kyn,olf,bth,ffd,avf,boa,tro,wsb] + - code: 5992 + stops: [cdf,nwp,stj,bpw,fit,kyn,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 5993 + stops: [wsb,tro,boa,avf,ffd,bth,olf,kyn,lwh,srd,fit,stj,nwp,cdf] +# - code: 5994 +# stops: [cdf,nwp,stj,pwy,bpw,fit,kwn,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] -- ONE 5994 ENTRY IS ERRORNOUS +# - code: 5994 +# stops: [bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] -- ONE 5994 ENTRY IS ERRORNOUS + - code: 5995 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,lwh,srd,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof,mvl,gmv] + - code: 5996 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,avf,ffd,bth,kyn,fit,bpw,pwy,stj,nwp,cdf] + - code: 5997 + stops: [pmh,pms,ftn,frm,esl,soa,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth] + - code: 6002 + stops: [bpw,fit,srd,lwh,kwn,olf,bth,ffd,avf,boa,tro,wsb] + - code: 6003 + stops: [kyn,olf,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 6009 + stops: [wsb,tro,boa,avf,ffd,bth,olf,kyn,lwh,srd,fit,bpw] + - code: 6013 + stops: [ftn,csa,ptc,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,fit,bpw,yae,cdu,gcr] + - code: 6014 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof,mvl,gmv] + - code: 6015 + stops: [cdf,nwp,bpw,fit,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 6016 + stops: [btn,gmv] ### Not in use, intermediate stops omitted + - code: 6017 + stops: [gmv,btn] ### Not in use, intermediate stops omitted + - code: 6018 + stops: [btn,bpw] ### Not in use, intermediate stops omitted + - code: 6019 + stops: [pmh,pms,ftn,ftm,sou,rom,sal,wmn,wsb,tro,boa,bth,fit,bpw] + - code: 6021 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,fit,bpw] + - code: 6022 + stops: [cdf,nwp,bpw,fit,bth,boa,tro,wsb,wmn,sal,rom,sou,soa,esl,hde,boe,frm,ftn,pms,pmh] + - code: 6023 + stops: [cdf,nwp,bpw,fit,kyn,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 6024 + stops: [bpw,fit,srd,lwh,kyn,olf,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms] + - code: 6028 + stops: [sou,rom,sal,wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof,mvl,gmv] + - code: 6034 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof] + - code: 6035 + stops: [wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof,mvl,gmv] + - code: 6036 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,avf,ffd,bth,kyn,fit,bpw,stj,nwp,cdf] + - code: 6042 + stops: [wsb,tro,boa,avf,ffd,bth,olf,kyn,fit,bpw] + - code: 6044 + stops: [cdf,nwp,stj,pwy,bpw,fit,srd,lwh,bri] + - code: 6062 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,ffd,bth,olf,kyn,bri,fit,stj,nwp,cdf] + - code: 6063 + stops: [btn,wof] ### Not in use, intermediate stops omitted + - code: 6064 + stops: [btn,bpw] ### Not in use, intermediate stops omitted + - code: 6065 + stops: [gcr,cnm,asc,wos,wof] + - code: 6066 + stops: [bri,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof,mvl,gmv] + - code: 6067 + stops: [avn,pri,shh,sml,cfn,rda,mtp,srd,lwh,bri,bmt,psn,nls,yat,wor,wnm,wsm] + - code: 6070 + stops: [svb,sar,avn,pri,shh,sml,cfn,rda,mtp,srd,lwh,bri] + - code: 6073 + stops: [wnm,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof,mvl,gmv] + - code: 6074 + stops: [gmv,wof,wos,asc,cnm,gcr,cdu,yae,bpw,fit,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb] + - code: 6076 + stops: [avn,shh,sml,cfn,rda,mtp,srd,lwh,bri,bmt,psn,nls,yat,wor,wnm,wsm] + - code: 6079 + stops: [cdf,nwp,stj,fit,bri,kyn,bth,boa,tro,wsb,fro] + - code: 6081 + stops: [svb,avn,pri,shh,sml,cfn,rda,mtp,srd,lwh,bri,bmt,psn,nls,yat,wor,wnm,wsm] + - code: 6082 + stops: [svb,avn,shh,sml,cfn,rda,mtp,srd,lwh,bri,bmt,psn,nls,yat,wor,wnm,wsm] + - code: 6088 + stops: [bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau,exd,dwl,tgm,nta,tot,ivy,ply,sbf,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 6093 + stops: [cdf,nwp,stj,pil,pwy,fit,bri,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd,dwl,tgm,nta,tot,ivy,ply,sts,sgm,men,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 6095 + stops: [cdf,nwp,stj,pil,pwy,fit,bri,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd,dww,dwl,tgm,nta,tot,ivy,ply,dvp,doc,key,sbf,sts,sgm,men,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 6097 + stops: [cdf,nwp,stj,pwy,fit,bri,psn,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd,dwl,tgm,nta,tot,ivy,ply,sts,sgm,men,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 6099 + stops: [bri,wsm,hig,bwt,tau,tvp,exd,dww,dwl,tgm,nta,tot,ivy,ply,dvp,doc,key,sbf,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 6101 + stops: [bri,nls,yat,wor,wsm,hig,bwt,tau,exd,dww,tgm,nta,tot,ivy,ply,dvp,sbf,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 6103 + stops: [cdf,nwl,stj,pwy,fit,bri,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd,dww,dwl,tgm,nta,tot,ivy,ply,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 6105 + stops: [btn,wof] ### Not in use, intermediate stops omitted + - code: 6106 + stops: [wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof] + - code: 6107 + stops: [pms,ftn,csa,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,bpw,yae,cdu,gcr,cnm,asc,wos,wof] + - code: 6108 + stops: [cdf,nwp,fit,bri,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 6109 + stops: [pmh,pms,ftn,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth,bri,fit,pwy,stj,nwp,cdf] + - code: 6111 + stops: [bri,kyn,olf,bth,boa,tro,wsb] + - code: 6114 + stops: [bri,kyn,olf,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,ptc,csa,ftn] + - code: 6115 + stops: [pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,olf,kyn,bri,fit,nwp,cdf] + - code: 6116 + stops: [cdf,nwp,fit,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 6117 + stops: [cdf,nwp,fit,bri,kyn,olf,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 6118 + stops: [bri,btn] ### Not in use, intermediate stops omitted + - code: 6119 + stops: [btn,bri] ### Not in use, intermediate stops omitted + - code: 6120 + stops: [pmh,pms,ftn,csa,frm,sou,rom,sal,wmn,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,nwp,cdf] + - code: 6121 + stops: [cdf,nwp,fit,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 6122 + stops: [cdf,nwp,stj,pwy,fit,bri,kyn,olf,bth,boa,tro,wsg,wmn,sal,rom,sou,frm,ftn,pms,pmh] + - code: 6123 + stops: [bri,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd,nta,tot,ivy,ply,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 6125 + stops: [cdf,nwl,stj,pwy,fit,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau,tvp,exd,dww,tgm,nta,tot,ivy,ply,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 6127 + stops: [fro,wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,nwp,cdf] + - code: 6128 + stops: [wsb,tro,boa,avf,ffd,bth,olf,kyn,bri,fit,nwp,cdf] + - code: 6129 + stops: [cdf,nwp,fit,bri,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 6130 + stops: [cdf,nwp,fit,bri,kyn,olf,bth,boa,tro,wsb,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 6131 + stops: [pmh,pms,ftn,frm,sou,rom,sal,wmn,dmh,wsb,tro,boa,bth,bri,fit,stj,nwp,cdf] + - code: 6132 + stops: [pmh,pms,ftn,frm,sou,rom,sal,wmn,wsb,tro,boa,bth,kyn,bri] + - code: 6133 + stops: [cdf,nwp,stj,pwy,fit,bri,kyn,olf,bth,ffd,avf,boa,tro,wsb] + - code: 6134 + stops: [bri,nls,yat,wor,wsm,hig,bwt,tau,tvp,exd,dww,tgm,nta,tot,ivy,ply,dvp,sbf,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 6135 + stops: [bri,bth,boa,tro,wsb,dmh,wmn,sal,rom,sou,frm,csa,ftn,pms,pmh] + - code: 6136 + stops: [cdf,nwp,stj,pwy,fit,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau,exd,dww,dwl,tgm,nta,tot,ivy,ply,sts,sgm,men,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 6137 + stops: [cdf,nwp,stj,pwy,fit,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau,exd] + - code: 6139 + stops: [cdf,nwp,stj,pwy,fit,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau,tvp,exd,dww,dwl,tgm,nta,tot,ivy,ply,sts,sgm,lsk,bod,los,par,sau,tru,red,cbn,hyl,ser,pnz] + - code: 6140 + stops: [svb,sar,avn,pri,shh,sml,cfn,rda,mtp,srd,lwh,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau,exd] + - code: 6141 + stops: [svb,sar,avn,shh,sml,cfn,rda,mtp,srd,lwh,bri,bmt,psn,nls,yat,wor,wnm,wsm,hig,bwt,tau,exd] + - code: 9801 + stops: [pad,hxx,hwv] + - code: 9802 + stops: [hxx,hwv] + - code: 9811 + stops: [hwv,hxx,pad] + - code: 9812 + stops: [hwv,hxx] + +### Still to do: `North PNZ to CDF-WOS` +### Next Up: 5199 (CNM to SWI & WSB) diff --git a/requirements.txt b/requirements.txt index a838dd0..952ef5a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,6 +2,8 @@ certifi==2022.12.7 charset-normalizer==3.0.1 dnspython==2.3.0 idna==3.4 +pyaml==21.10.1 pymongo==4.3.3 +PyYAML==6.0 requests==2.28.2 urllib3==1.26.14 diff --git a/src/main.py b/src/main.py index e70e138..f153d22 100644 --- a/src/main.py +++ b/src/main.py @@ -14,7 +14,7 @@ # program. If not, see # https://git.fjla.uk/OwlBoard/db-manager/src/branch/main/LICENSE -version = "1.1.1" +version = "2.1.2" print(f"main.py: Initialising db-manager v{version}") #Third Party Imports @@ -22,14 +22,20 @@ import os import time #Local Imports -import corpus, mongo +import corpus, mongo, pis import logger as log log.out("main.py: db-manager Initialised", "INFO") - -#Ensure count document exists in meta: -mongo.metaCounters() + +#Ensure count document exists in meta, wrap in while look to prevent crashing if the DB is not ready: +dbReady = False +while dbReady is False: + try: + mongo.metaCounters() + dbReady = True + except: + dbReady = False #Check & Update corpus/stations: # If older than 12 days then update @@ -47,11 +53,27 @@ log.out(f'main.py: Stations is {stationsAge}s old', "INFO") # While the source of stations data is CORPUS, this statement is based on corpusAge, when/if changing the source, it should be changed to use stationsAge # if stationsAge is used now, there could be a situation where stationsAge tries to update but fails as corpusData doesn't exist. if corpusAge > 1036800: - log.out('main.py: Updating stations data until it is 1036800s old.', "INFO") + log.out('main.py: Updating stations data', "INFO") stationData = corpus.onlyStations(corpusData) mongo.putBulkStations(stationData) else: - log.out('main.py: Not updating stations data', "INFO") + log.out('main.py: Not updating stations data until it is 1036800s old.', "INFO") + +#Check & Update pis data: + # If older than 2 days then update +pisAge = int(time.time()) - mongo.metaCheckTime("pis") +log.out(f'main.py: PIS Data is {pisAge}s old', "INFO") +if pisAge > 172800: # Temporarily set to 15 minutes + log.out('main.py: Updating PIS data', "INFO") + pisData = pis.load() + pisParsed = pis.parse(pisData) + mongo.putBulkPis(pisParsed) +else: + log.out('main.py: Not updating PIS data until is it 1036800s old', "INFO") + +log.out('main.py: Requesting TTL Index Creation', "INFO") +mongo.createTtlIndex("users", "atime", 2629800) +mongo.createTtlIndex("registrations", "time", 1800) # Push version number to database for reporting mongo.putVersion(version) diff --git a/src/mongo.py b/src/mongo.py index 57712d2..b8b7421 100644 --- a/src/mongo.py +++ b/src/mongo.py @@ -44,6 +44,11 @@ def createSingleIndex(collection, field): log.out(f'mongo.createSingleIndex: Created index of {field} in {collection}', "INFO") return +def createTtlIndex(collection, field, time): + col = db[collection] + col.create_index(field, expireAfterSeconds = time) + log.out(f'mongo.createTtlIndex: Created TTL Index of {field} in {collection} to expire after {time} seconds', "INFO") + def putBulkCorpus(data): collection = "corpus" startCount = getLength(collection) @@ -83,6 +88,23 @@ def putBulkStations(data): metaUpdateTime(collection) return +def putBulkPis(data): + collection = "pis" + startCount = getLength(collection) + col = db[collection] + incrementCounter(collection) + if startCount > 0: + log.out(f'mongo.putBulkPid: Dropping {startCount} pis documents', "INFO") + col.drop() + col.insert_many(data) + endCount = getLength(collection) + log.out(f'mongo.putBulkPis: {endCount} documents inserted', "INFO") + log.out(f'mongo.putBulkPis: {endCount-startCount} new documents', "INFO") + log.out('mongo.putBulkPis: Updating meta time', "INFO") + metaUpdateTime(collection) + return + + def incrementCounter(target): collection = "meta" col = db[collection] diff --git a/src/pis.py b/src/pis.py new file mode 100644 index 0000000..65ae7cb --- /dev/null +++ b/src/pis.py @@ -0,0 +1,43 @@ +import yaml + +print("PIS Module imported") + +def load(): # Programatically add a `toc` field to each entry. + with open("/app/data/pis/gwr.yaml", "r") as data: + try: + pis = yaml.safe_load(data) + print(pis) + return pis["pis"] + except yaml.YAMLError as exc: + print(exc) + return exc + +## Do some magic here so that if any pis["pis"]["stops"][0] field contains 'reverse' then get the stops for the code stored in pis["pis"]["stops"][1] +## reverse the stops and store that. + +def parse(codeList): + StartLen = len(codeList) + print(f"pis.parse: codeList starting length: {StartLen}") + for i in codeList: + stops = i['stops'] + code = i['code'] + for ii in codeList: + if stops == ii['stops'] and code != ii['code']: + print(f"Identical stopping pattern found: {ii['code']}") + codeList.remove(ii) + print(f"pis.parse: Removed {StartLen - len(codeList)} duplicates") + return codeList + +def devLoad(): # Programatically add a `toc` field to each entry. + with open("/home/fred.boniface/git/owlboard/db-manager/data/pis/gwr.yaml", "r") as data: + try: + pis = yaml.safe_load(data) + print(pis) + return pis["pis"] + except yaml.YAMLError as exc: + print(exc) + return exc + +def dev(): + data = devLoad() + parse(data) \ No newline at end of file