AceTime  2.1.0
Date and time classes for Arduino that support timezones from the TZ Database.
zone_policies.cpp
1 // This file was generated by the following script:
2 //
3 // $ /home/brian/src/AceTimeTools/src/acetimetools/tzcompiler.py
4 // --input_dir /home/brian/src/AceTime/src/ace_time/zonedb/tzfiles
5 // --output_dir /home/brian/src/AceTime/src/ace_time/zonedb
6 // --tz_version 2022g
7 // --action zonedb
8 // --language arduino
9 // --scope basic
10 // --generate_int16_years
11 // --start_year 2000
12 // --until_year 10000
13 //
14 // using the TZ Database files
15 //
16 // africa
17 // antarctica
18 // asia
19 // australasia
20 // backward
21 // etcetera
22 // europe
23 // northamerica
24 // southamerica
25 //
26 // from https://github.com/eggert/tz/releases/tag/2022g
27 //
28 // Policies: 63
29 // Rules: 314
30 // Letter Size (bytes): 0
31 // Total Memory 8-bit (bytes): 3832
32 // Total Memory 32-bit (bytes): 4524
33 //
34 // DO NOT EDIT
35 
36 #include <ace_time/common/compat.h>
37 #include "zone_policies.h"
38 
39 namespace ace_time {
40 namespace zonedb {
41 
42 //---------------------------------------------------------------------------
43 // Policy name: AN
44 // Rules: 9
45 // Memory (8-bit): 105
46 // Memory (32-bit): 120
47 //---------------------------------------------------------------------------
48 
49 static const basic::ZoneRule kZoneRulesAN[] ACE_TIME_PROGMEM = {
50  // Rule AN 1987 1999 - Oct lastSun 2:00s 1:00 D
51  {
52  1987 /*fromYear*/,
53  1999 /*toYear*/,
54  10 /*inMonth*/,
55  7 /*onDayOfWeek*/,
56  0 /*onDayOfMonth*/,
57  8 /*atTimeCode*/,
58  16 /*atTimeModifier (kSuffixS + minute=0)*/,
59  4 /*deltaCode ((deltaMinutes=60)/15)*/,
60  'D' /*letter*/,
61  },
62  // Rule AN 1990 1995 - Mar Sun>=1 2:00s 0 S
63  {
64  1990 /*fromYear*/,
65  1995 /*toYear*/,
66  3 /*inMonth*/,
67  7 /*onDayOfWeek*/,
68  1 /*onDayOfMonth*/,
69  8 /*atTimeCode*/,
70  16 /*atTimeModifier (kSuffixS + minute=0)*/,
71  0 /*deltaCode ((deltaMinutes=0)/15)*/,
72  'S' /*letter*/,
73  },
74  // Rule AN 1996 2005 - Mar lastSun 2:00s 0 S
75  {
76  1996 /*fromYear*/,
77  2005 /*toYear*/,
78  3 /*inMonth*/,
79  7 /*onDayOfWeek*/,
80  0 /*onDayOfMonth*/,
81  8 /*atTimeCode*/,
82  16 /*atTimeModifier (kSuffixS + minute=0)*/,
83  0 /*deltaCode ((deltaMinutes=0)/15)*/,
84  'S' /*letter*/,
85  },
86  // Rule AN 2000 only - Aug lastSun 2:00s 1:00 D
87  {
88  2000 /*fromYear*/,
89  2000 /*toYear*/,
90  8 /*inMonth*/,
91  7 /*onDayOfWeek*/,
92  0 /*onDayOfMonth*/,
93  8 /*atTimeCode*/,
94  16 /*atTimeModifier (kSuffixS + minute=0)*/,
95  4 /*deltaCode ((deltaMinutes=60)/15)*/,
96  'D' /*letter*/,
97  },
98  // Rule AN 2001 2007 - Oct lastSun 2:00s 1:00 D
99  {
100  2001 /*fromYear*/,
101  2007 /*toYear*/,
102  10 /*inMonth*/,
103  7 /*onDayOfWeek*/,
104  0 /*onDayOfMonth*/,
105  8 /*atTimeCode*/,
106  16 /*atTimeModifier (kSuffixS + minute=0)*/,
107  4 /*deltaCode ((deltaMinutes=60)/15)*/,
108  'D' /*letter*/,
109  },
110  // Rule AN 2006 only - Apr Sun>=1 2:00s 0 S
111  {
112  2006 /*fromYear*/,
113  2006 /*toYear*/,
114  4 /*inMonth*/,
115  7 /*onDayOfWeek*/,
116  1 /*onDayOfMonth*/,
117  8 /*atTimeCode*/,
118  16 /*atTimeModifier (kSuffixS + minute=0)*/,
119  0 /*deltaCode ((deltaMinutes=0)/15)*/,
120  'S' /*letter*/,
121  },
122  // Rule AN 2007 only - Mar lastSun 2:00s 0 S
123  {
124  2007 /*fromYear*/,
125  2007 /*toYear*/,
126  3 /*inMonth*/,
127  7 /*onDayOfWeek*/,
128  0 /*onDayOfMonth*/,
129  8 /*atTimeCode*/,
130  16 /*atTimeModifier (kSuffixS + minute=0)*/,
131  0 /*deltaCode ((deltaMinutes=0)/15)*/,
132  'S' /*letter*/,
133  },
134  // Rule AN 2008 max - Apr Sun>=1 2:00s 0 S
135  {
136  2008 /*fromYear*/,
137  9999 /*toYear*/,
138  4 /*inMonth*/,
139  7 /*onDayOfWeek*/,
140  1 /*onDayOfMonth*/,
141  8 /*atTimeCode*/,
142  16 /*atTimeModifier (kSuffixS + minute=0)*/,
143  0 /*deltaCode ((deltaMinutes=0)/15)*/,
144  'S' /*letter*/,
145  },
146  // Rule AN 2008 max - Oct Sun>=1 2:00s 1:00 D
147  {
148  2008 /*fromYear*/,
149  9999 /*toYear*/,
150  10 /*inMonth*/,
151  7 /*onDayOfWeek*/,
152  1 /*onDayOfMonth*/,
153  8 /*atTimeCode*/,
154  16 /*atTimeModifier (kSuffixS + minute=0)*/,
155  4 /*deltaCode ((deltaMinutes=60)/15)*/,
156  'D' /*letter*/,
157  },
158 
159 };
160 
161 
162 
163 const basic::ZonePolicy kZonePolicyAN ACE_TIME_PROGMEM = {
164  kZoneRulesAN /*rules*/,
165  nullptr /*letters*/,
166  9 /*numRules*/,
167  0 /*numLetters*/,
168 };
169 
170 //---------------------------------------------------------------------------
171 // Policy name: AQ
172 // Rules: 1
173 // Memory (8-bit): 17
174 // Memory (32-bit): 24
175 //---------------------------------------------------------------------------
176 
177 static const basic::ZoneRule kZoneRulesAQ[] ACE_TIME_PROGMEM = {
178  // Rule AQ 1990 1992 - Mar Sun>=1 2:00s 0 S
179  {
180  1990 /*fromYear*/,
181  1992 /*toYear*/,
182  3 /*inMonth*/,
183  7 /*onDayOfWeek*/,
184  1 /*onDayOfMonth*/,
185  8 /*atTimeCode*/,
186  16 /*atTimeModifier (kSuffixS + minute=0)*/,
187  0 /*deltaCode ((deltaMinutes=0)/15)*/,
188  'S' /*letter*/,
189  },
190 
191 };
192 
193 
194 
195 const basic::ZonePolicy kZonePolicyAQ ACE_TIME_PROGMEM = {
196  kZoneRulesAQ /*rules*/,
197  nullptr /*letters*/,
198  1 /*numRules*/,
199  0 /*numLetters*/,
200 };
201 
202 //---------------------------------------------------------------------------
203 // Policy name: AS
204 // Rules: 7
205 // Memory (8-bit): 83
206 // Memory (32-bit): 96
207 //---------------------------------------------------------------------------
208 
209 static const basic::ZoneRule kZoneRulesAS[] ACE_TIME_PROGMEM = {
210  // Rule AS 1987 2007 - Oct lastSun 2:00s 1:00 D
211  {
212  1987 /*fromYear*/,
213  2007 /*toYear*/,
214  10 /*inMonth*/,
215  7 /*onDayOfWeek*/,
216  0 /*onDayOfMonth*/,
217  8 /*atTimeCode*/,
218  16 /*atTimeModifier (kSuffixS + minute=0)*/,
219  4 /*deltaCode ((deltaMinutes=60)/15)*/,
220  'D' /*letter*/,
221  },
222  // Rule AS 1994 only - Mar 20 2:00s 0 S
223  {
224  1994 /*fromYear*/,
225  1994 /*toYear*/,
226  3 /*inMonth*/,
227  0 /*onDayOfWeek*/,
228  20 /*onDayOfMonth*/,
229  8 /*atTimeCode*/,
230  16 /*atTimeModifier (kSuffixS + minute=0)*/,
231  0 /*deltaCode ((deltaMinutes=0)/15)*/,
232  'S' /*letter*/,
233  },
234  // Rule AS 1995 2005 - Mar lastSun 2:00s 0 S
235  {
236  1995 /*fromYear*/,
237  2005 /*toYear*/,
238  3 /*inMonth*/,
239  7 /*onDayOfWeek*/,
240  0 /*onDayOfMonth*/,
241  8 /*atTimeCode*/,
242  16 /*atTimeModifier (kSuffixS + minute=0)*/,
243  0 /*deltaCode ((deltaMinutes=0)/15)*/,
244  'S' /*letter*/,
245  },
246  // Rule AS 2006 only - Apr 2 2:00s 0 S
247  {
248  2006 /*fromYear*/,
249  2006 /*toYear*/,
250  4 /*inMonth*/,
251  0 /*onDayOfWeek*/,
252  2 /*onDayOfMonth*/,
253  8 /*atTimeCode*/,
254  16 /*atTimeModifier (kSuffixS + minute=0)*/,
255  0 /*deltaCode ((deltaMinutes=0)/15)*/,
256  'S' /*letter*/,
257  },
258  // Rule AS 2007 only - Mar lastSun 2:00s 0 S
259  {
260  2007 /*fromYear*/,
261  2007 /*toYear*/,
262  3 /*inMonth*/,
263  7 /*onDayOfWeek*/,
264  0 /*onDayOfMonth*/,
265  8 /*atTimeCode*/,
266  16 /*atTimeModifier (kSuffixS + minute=0)*/,
267  0 /*deltaCode ((deltaMinutes=0)/15)*/,
268  'S' /*letter*/,
269  },
270  // Rule AS 2008 max - Apr Sun>=1 2:00s 0 S
271  {
272  2008 /*fromYear*/,
273  9999 /*toYear*/,
274  4 /*inMonth*/,
275  7 /*onDayOfWeek*/,
276  1 /*onDayOfMonth*/,
277  8 /*atTimeCode*/,
278  16 /*atTimeModifier (kSuffixS + minute=0)*/,
279  0 /*deltaCode ((deltaMinutes=0)/15)*/,
280  'S' /*letter*/,
281  },
282  // Rule AS 2008 max - Oct Sun>=1 2:00s 1:00 D
283  {
284  2008 /*fromYear*/,
285  9999 /*toYear*/,
286  10 /*inMonth*/,
287  7 /*onDayOfWeek*/,
288  1 /*onDayOfMonth*/,
289  8 /*atTimeCode*/,
290  16 /*atTimeModifier (kSuffixS + minute=0)*/,
291  4 /*deltaCode ((deltaMinutes=60)/15)*/,
292  'D' /*letter*/,
293  },
294 
295 };
296 
297 
298 
299 const basic::ZonePolicy kZonePolicyAS ACE_TIME_PROGMEM = {
300  kZoneRulesAS /*rules*/,
301  nullptr /*letters*/,
302  7 /*numRules*/,
303  0 /*numLetters*/,
304 };
305 
306 //---------------------------------------------------------------------------
307 // Policy name: AT
308 // Rules: 8
309 // Memory (8-bit): 94
310 // Memory (32-bit): 108
311 //---------------------------------------------------------------------------
312 
313 static const basic::ZoneRule kZoneRulesAT[] ACE_TIME_PROGMEM = {
314  // Rule AT 1988 1990 - Oct lastSun 2:00s 1:00 D
315  {
316  1988 /*fromYear*/,
317  1990 /*toYear*/,
318  10 /*inMonth*/,
319  7 /*onDayOfWeek*/,
320  0 /*onDayOfMonth*/,
321  8 /*atTimeCode*/,
322  16 /*atTimeModifier (kSuffixS + minute=0)*/,
323  4 /*deltaCode ((deltaMinutes=60)/15)*/,
324  'D' /*letter*/,
325  },
326  // Rule AT 1991 1999 - Oct Sun>=1 2:00s 1:00 D
327  {
328  1991 /*fromYear*/,
329  1999 /*toYear*/,
330  10 /*inMonth*/,
331  7 /*onDayOfWeek*/,
332  1 /*onDayOfMonth*/,
333  8 /*atTimeCode*/,
334  16 /*atTimeModifier (kSuffixS + minute=0)*/,
335  4 /*deltaCode ((deltaMinutes=60)/15)*/,
336  'D' /*letter*/,
337  },
338  // Rule AT 1991 2005 - Mar lastSun 2:00s 0 S
339  {
340  1991 /*fromYear*/,
341  2005 /*toYear*/,
342  3 /*inMonth*/,
343  7 /*onDayOfWeek*/,
344  0 /*onDayOfMonth*/,
345  8 /*atTimeCode*/,
346  16 /*atTimeModifier (kSuffixS + minute=0)*/,
347  0 /*deltaCode ((deltaMinutes=0)/15)*/,
348  'S' /*letter*/,
349  },
350  // Rule AT 2000 only - Aug lastSun 2:00s 1:00 D
351  {
352  2000 /*fromYear*/,
353  2000 /*toYear*/,
354  8 /*inMonth*/,
355  7 /*onDayOfWeek*/,
356  0 /*onDayOfMonth*/,
357  8 /*atTimeCode*/,
358  16 /*atTimeModifier (kSuffixS + minute=0)*/,
359  4 /*deltaCode ((deltaMinutes=60)/15)*/,
360  'D' /*letter*/,
361  },
362  // Rule AT 2001 max - Oct Sun>=1 2:00s 1:00 D
363  {
364  2001 /*fromYear*/,
365  9999 /*toYear*/,
366  10 /*inMonth*/,
367  7 /*onDayOfWeek*/,
368  1 /*onDayOfMonth*/,
369  8 /*atTimeCode*/,
370  16 /*atTimeModifier (kSuffixS + minute=0)*/,
371  4 /*deltaCode ((deltaMinutes=60)/15)*/,
372  'D' /*letter*/,
373  },
374  // Rule AT 2006 only - Apr Sun>=1 2:00s 0 S
375  {
376  2006 /*fromYear*/,
377  2006 /*toYear*/,
378  4 /*inMonth*/,
379  7 /*onDayOfWeek*/,
380  1 /*onDayOfMonth*/,
381  8 /*atTimeCode*/,
382  16 /*atTimeModifier (kSuffixS + minute=0)*/,
383  0 /*deltaCode ((deltaMinutes=0)/15)*/,
384  'S' /*letter*/,
385  },
386  // Rule AT 2007 only - Mar lastSun 2:00s 0 S
387  {
388  2007 /*fromYear*/,
389  2007 /*toYear*/,
390  3 /*inMonth*/,
391  7 /*onDayOfWeek*/,
392  0 /*onDayOfMonth*/,
393  8 /*atTimeCode*/,
394  16 /*atTimeModifier (kSuffixS + minute=0)*/,
395  0 /*deltaCode ((deltaMinutes=0)/15)*/,
396  'S' /*letter*/,
397  },
398  // Rule AT 2008 max - Apr Sun>=1 2:00s 0 S
399  {
400  2008 /*fromYear*/,
401  9999 /*toYear*/,
402  4 /*inMonth*/,
403  7 /*onDayOfWeek*/,
404  1 /*onDayOfMonth*/,
405  8 /*atTimeCode*/,
406  16 /*atTimeModifier (kSuffixS + minute=0)*/,
407  0 /*deltaCode ((deltaMinutes=0)/15)*/,
408  'S' /*letter*/,
409  },
410 
411 };
412 
413 
414 
415 const basic::ZonePolicy kZonePolicyAT ACE_TIME_PROGMEM = {
416  kZoneRulesAT /*rules*/,
417  nullptr /*letters*/,
418  8 /*numRules*/,
419  0 /*numLetters*/,
420 };
421 
422 //---------------------------------------------------------------------------
423 // Policy name: AV
424 // Rules: 9
425 // Memory (8-bit): 105
426 // Memory (32-bit): 120
427 //---------------------------------------------------------------------------
428 
429 static const basic::ZoneRule kZoneRulesAV[] ACE_TIME_PROGMEM = {
430  // Rule AV 1988 1999 - Oct lastSun 2:00s 1:00 D
431  {
432  1988 /*fromYear*/,
433  1999 /*toYear*/,
434  10 /*inMonth*/,
435  7 /*onDayOfWeek*/,
436  0 /*onDayOfMonth*/,
437  8 /*atTimeCode*/,
438  16 /*atTimeModifier (kSuffixS + minute=0)*/,
439  4 /*deltaCode ((deltaMinutes=60)/15)*/,
440  'D' /*letter*/,
441  },
442  // Rule AV 1991 1994 - Mar Sun>=1 2:00s 0 S
443  {
444  1991 /*fromYear*/,
445  1994 /*toYear*/,
446  3 /*inMonth*/,
447  7 /*onDayOfWeek*/,
448  1 /*onDayOfMonth*/,
449  8 /*atTimeCode*/,
450  16 /*atTimeModifier (kSuffixS + minute=0)*/,
451  0 /*deltaCode ((deltaMinutes=0)/15)*/,
452  'S' /*letter*/,
453  },
454  // Rule AV 1995 2005 - Mar lastSun 2:00s 0 S
455  {
456  1995 /*fromYear*/,
457  2005 /*toYear*/,
458  3 /*inMonth*/,
459  7 /*onDayOfWeek*/,
460  0 /*onDayOfMonth*/,
461  8 /*atTimeCode*/,
462  16 /*atTimeModifier (kSuffixS + minute=0)*/,
463  0 /*deltaCode ((deltaMinutes=0)/15)*/,
464  'S' /*letter*/,
465  },
466  // Rule AV 2000 only - Aug lastSun 2:00s 1:00 D
467  {
468  2000 /*fromYear*/,
469  2000 /*toYear*/,
470  8 /*inMonth*/,
471  7 /*onDayOfWeek*/,
472  0 /*onDayOfMonth*/,
473  8 /*atTimeCode*/,
474  16 /*atTimeModifier (kSuffixS + minute=0)*/,
475  4 /*deltaCode ((deltaMinutes=60)/15)*/,
476  'D' /*letter*/,
477  },
478  // Rule AV 2001 2007 - Oct lastSun 2:00s 1:00 D
479  {
480  2001 /*fromYear*/,
481  2007 /*toYear*/,
482  10 /*inMonth*/,
483  7 /*onDayOfWeek*/,
484  0 /*onDayOfMonth*/,
485  8 /*atTimeCode*/,
486  16 /*atTimeModifier (kSuffixS + minute=0)*/,
487  4 /*deltaCode ((deltaMinutes=60)/15)*/,
488  'D' /*letter*/,
489  },
490  // Rule AV 2006 only - Apr Sun>=1 2:00s 0 S
491  {
492  2006 /*fromYear*/,
493  2006 /*toYear*/,
494  4 /*inMonth*/,
495  7 /*onDayOfWeek*/,
496  1 /*onDayOfMonth*/,
497  8 /*atTimeCode*/,
498  16 /*atTimeModifier (kSuffixS + minute=0)*/,
499  0 /*deltaCode ((deltaMinutes=0)/15)*/,
500  'S' /*letter*/,
501  },
502  // Rule AV 2007 only - Mar lastSun 2:00s 0 S
503  {
504  2007 /*fromYear*/,
505  2007 /*toYear*/,
506  3 /*inMonth*/,
507  7 /*onDayOfWeek*/,
508  0 /*onDayOfMonth*/,
509  8 /*atTimeCode*/,
510  16 /*atTimeModifier (kSuffixS + minute=0)*/,
511  0 /*deltaCode ((deltaMinutes=0)/15)*/,
512  'S' /*letter*/,
513  },
514  // Rule AV 2008 max - Apr Sun>=1 2:00s 0 S
515  {
516  2008 /*fromYear*/,
517  9999 /*toYear*/,
518  4 /*inMonth*/,
519  7 /*onDayOfWeek*/,
520  1 /*onDayOfMonth*/,
521  8 /*atTimeCode*/,
522  16 /*atTimeModifier (kSuffixS + minute=0)*/,
523  0 /*deltaCode ((deltaMinutes=0)/15)*/,
524  'S' /*letter*/,
525  },
526  // Rule AV 2008 max - Oct Sun>=1 2:00s 1:00 D
527  {
528  2008 /*fromYear*/,
529  9999 /*toYear*/,
530  10 /*inMonth*/,
531  7 /*onDayOfWeek*/,
532  1 /*onDayOfMonth*/,
533  8 /*atTimeCode*/,
534  16 /*atTimeModifier (kSuffixS + minute=0)*/,
535  4 /*deltaCode ((deltaMinutes=60)/15)*/,
536  'D' /*letter*/,
537  },
538 
539 };
540 
541 
542 
543 const basic::ZonePolicy kZonePolicyAV ACE_TIME_PROGMEM = {
544  kZoneRulesAV /*rules*/,
545  nullptr /*letters*/,
546  9 /*numRules*/,
547  0 /*numLetters*/,
548 };
549 
550 //---------------------------------------------------------------------------
551 // Policy name: AW
552 // Rules: 4
553 // Memory (8-bit): 50
554 // Memory (32-bit): 60
555 //---------------------------------------------------------------------------
556 
557 static const basic::ZoneRule kZoneRulesAW[] ACE_TIME_PROGMEM = {
558  // Rule AW 1992 only - Mar Sun>=1 2:00s 0 S
559  {
560  1992 /*fromYear*/,
561  1992 /*toYear*/,
562  3 /*inMonth*/,
563  7 /*onDayOfWeek*/,
564  1 /*onDayOfMonth*/,
565  8 /*atTimeCode*/,
566  16 /*atTimeModifier (kSuffixS + minute=0)*/,
567  0 /*deltaCode ((deltaMinutes=0)/15)*/,
568  'S' /*letter*/,
569  },
570  // Rule AW 2006 only - Dec 3 2:00s 1:00 D
571  {
572  2006 /*fromYear*/,
573  2006 /*toYear*/,
574  12 /*inMonth*/,
575  0 /*onDayOfWeek*/,
576  3 /*onDayOfMonth*/,
577  8 /*atTimeCode*/,
578  16 /*atTimeModifier (kSuffixS + minute=0)*/,
579  4 /*deltaCode ((deltaMinutes=60)/15)*/,
580  'D' /*letter*/,
581  },
582  // Rule AW 2007 2009 - Mar lastSun 2:00s 0 S
583  {
584  2007 /*fromYear*/,
585  2009 /*toYear*/,
586  3 /*inMonth*/,
587  7 /*onDayOfWeek*/,
588  0 /*onDayOfMonth*/,
589  8 /*atTimeCode*/,
590  16 /*atTimeModifier (kSuffixS + minute=0)*/,
591  0 /*deltaCode ((deltaMinutes=0)/15)*/,
592  'S' /*letter*/,
593  },
594  // Rule AW 2007 2008 - Oct lastSun 2:00s 1:00 D
595  {
596  2007 /*fromYear*/,
597  2008 /*toYear*/,
598  10 /*inMonth*/,
599  7 /*onDayOfWeek*/,
600  0 /*onDayOfMonth*/,
601  8 /*atTimeCode*/,
602  16 /*atTimeModifier (kSuffixS + minute=0)*/,
603  4 /*deltaCode ((deltaMinutes=60)/15)*/,
604  'D' /*letter*/,
605  },
606 
607 };
608 
609 
610 
611 const basic::ZonePolicy kZonePolicyAW ACE_TIME_PROGMEM = {
612  kZoneRulesAW /*rules*/,
613  nullptr /*letters*/,
614  4 /*numRules*/,
615  0 /*numLetters*/,
616 };
617 
618 //---------------------------------------------------------------------------
619 // Policy name: Armenia
620 // Rules: 3
621 // Memory (8-bit): 39
622 // Memory (32-bit): 48
623 //---------------------------------------------------------------------------
624 
625 static const basic::ZoneRule kZoneRulesArmenia[] ACE_TIME_PROGMEM = {
626  // Anchor: Rule Armenia 2011 only - Oct lastSun 2:00s 0 -
627  {
628  0 /*fromYear*/,
629  0 /*toYear*/,
630  1 /*inMonth*/,
631  0 /*onDayOfWeek*/,
632  1 /*onDayOfMonth*/,
633  0 /*atTimeCode*/,
634  0 /*atTimeModifier (kSuffixW + minute=0)*/,
635  0 /*deltaCode ((deltaMinutes=0)/15)*/,
636  '-' /*letter*/,
637  },
638  // Rule Armenia 2011 only - Mar lastSun 2:00s 1:00 -
639  {
640  2011 /*fromYear*/,
641  2011 /*toYear*/,
642  3 /*inMonth*/,
643  7 /*onDayOfWeek*/,
644  0 /*onDayOfMonth*/,
645  8 /*atTimeCode*/,
646  16 /*atTimeModifier (kSuffixS + minute=0)*/,
647  4 /*deltaCode ((deltaMinutes=60)/15)*/,
648  '-' /*letter*/,
649  },
650  // Rule Armenia 2011 only - Oct lastSun 2:00s 0 -
651  {
652  2011 /*fromYear*/,
653  2011 /*toYear*/,
654  10 /*inMonth*/,
655  7 /*onDayOfWeek*/,
656  0 /*onDayOfMonth*/,
657  8 /*atTimeCode*/,
658  16 /*atTimeModifier (kSuffixS + minute=0)*/,
659  0 /*deltaCode ((deltaMinutes=0)/15)*/,
660  '-' /*letter*/,
661  },
662 
663 };
664 
665 
666 
667 const basic::ZonePolicy kZonePolicyArmenia ACE_TIME_PROGMEM = {
668  kZoneRulesArmenia /*rules*/,
669  nullptr /*letters*/,
670  3 /*numRules*/,
671  0 /*numLetters*/,
672 };
673 
674 //---------------------------------------------------------------------------
675 // Policy name: Aus
676 // Rules: 1
677 // Memory (8-bit): 17
678 // Memory (32-bit): 24
679 //---------------------------------------------------------------------------
680 
681 static const basic::ZoneRule kZoneRulesAus[] ACE_TIME_PROGMEM = {
682  // Rule Aus 1943 1944 - Mar lastSun 2:00s 0 S
683  {
684  1943 /*fromYear*/,
685  1944 /*toYear*/,
686  3 /*inMonth*/,
687  7 /*onDayOfWeek*/,
688  0 /*onDayOfMonth*/,
689  8 /*atTimeCode*/,
690  16 /*atTimeModifier (kSuffixS + minute=0)*/,
691  0 /*deltaCode ((deltaMinutes=0)/15)*/,
692  'S' /*letter*/,
693  },
694 
695 };
696 
697 
698 
699 const basic::ZonePolicy kZonePolicyAus ACE_TIME_PROGMEM = {
700  kZoneRulesAus /*rules*/,
701  nullptr /*letters*/,
702  1 /*numRules*/,
703  0 /*numLetters*/,
704 };
705 
706 //---------------------------------------------------------------------------
707 // Policy name: Azer
708 // Rules: 2
709 // Memory (8-bit): 28
710 // Memory (32-bit): 36
711 //---------------------------------------------------------------------------
712 
713 static const basic::ZoneRule kZoneRulesAzer[] ACE_TIME_PROGMEM = {
714  // Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 -
715  {
716  1997 /*fromYear*/,
717  2015 /*toYear*/,
718  3 /*inMonth*/,
719  7 /*onDayOfWeek*/,
720  0 /*onDayOfMonth*/,
721  16 /*atTimeCode*/,
722  0 /*atTimeModifier (kSuffixW + minute=0)*/,
723  4 /*deltaCode ((deltaMinutes=60)/15)*/,
724  '-' /*letter*/,
725  },
726  // Rule Azer 1997 2015 - Oct lastSun 5:00 0 -
727  {
728  1997 /*fromYear*/,
729  2015 /*toYear*/,
730  10 /*inMonth*/,
731  7 /*onDayOfWeek*/,
732  0 /*onDayOfMonth*/,
733  20 /*atTimeCode*/,
734  0 /*atTimeModifier (kSuffixW + minute=0)*/,
735  0 /*deltaCode ((deltaMinutes=0)/15)*/,
736  '-' /*letter*/,
737  },
738 
739 };
740 
741 
742 
743 const basic::ZonePolicy kZonePolicyAzer ACE_TIME_PROGMEM = {
744  kZoneRulesAzer /*rules*/,
745  nullptr /*letters*/,
746  2 /*numRules*/,
747  0 /*numLetters*/,
748 };
749 
750 //---------------------------------------------------------------------------
751 // Policy name: Barb
752 // Rules: 1
753 // Memory (8-bit): 17
754 // Memory (32-bit): 24
755 //---------------------------------------------------------------------------
756 
757 static const basic::ZoneRule kZoneRulesBarb[] ACE_TIME_PROGMEM = {
758  // Rule Barb 1980 only - Sep 25 2:00 0 S
759  {
760  1980 /*fromYear*/,
761  1980 /*toYear*/,
762  9 /*inMonth*/,
763  0 /*onDayOfWeek*/,
764  25 /*onDayOfMonth*/,
765  8 /*atTimeCode*/,
766  0 /*atTimeModifier (kSuffixW + minute=0)*/,
767  0 /*deltaCode ((deltaMinutes=0)/15)*/,
768  'S' /*letter*/,
769  },
770 
771 };
772 
773 
774 
775 const basic::ZonePolicy kZonePolicyBarb ACE_TIME_PROGMEM = {
776  kZoneRulesBarb /*rules*/,
777  nullptr /*letters*/,
778  1 /*numRules*/,
779  0 /*numLetters*/,
780 };
781 
782 //---------------------------------------------------------------------------
783 // Policy name: Brazil
784 // Rules: 20
785 // Memory (8-bit): 226
786 // Memory (32-bit): 252
787 //---------------------------------------------------------------------------
788 
789 static const basic::ZoneRule kZoneRulesBrazil[] ACE_TIME_PROGMEM = {
790  // Rule Brazil 1998 only - Oct 11 0:00 1:00 -
791  {
792  1998 /*fromYear*/,
793  1998 /*toYear*/,
794  10 /*inMonth*/,
795  0 /*onDayOfWeek*/,
796  11 /*onDayOfMonth*/,
797  0 /*atTimeCode*/,
798  0 /*atTimeModifier (kSuffixW + minute=0)*/,
799  4 /*deltaCode ((deltaMinutes=60)/15)*/,
800  '-' /*letter*/,
801  },
802  // Rule Brazil 1999 only - Feb 21 0:00 0 -
803  {
804  1999 /*fromYear*/,
805  1999 /*toYear*/,
806  2 /*inMonth*/,
807  0 /*onDayOfWeek*/,
808  21 /*onDayOfMonth*/,
809  0 /*atTimeCode*/,
810  0 /*atTimeModifier (kSuffixW + minute=0)*/,
811  0 /*deltaCode ((deltaMinutes=0)/15)*/,
812  '-' /*letter*/,
813  },
814  // Rule Brazil 1999 only - Oct 3 0:00 1:00 -
815  {
816  1999 /*fromYear*/,
817  1999 /*toYear*/,
818  10 /*inMonth*/,
819  0 /*onDayOfWeek*/,
820  3 /*onDayOfMonth*/,
821  0 /*atTimeCode*/,
822  0 /*atTimeModifier (kSuffixW + minute=0)*/,
823  4 /*deltaCode ((deltaMinutes=60)/15)*/,
824  '-' /*letter*/,
825  },
826  // Rule Brazil 2000 only - Feb 27 0:00 0 -
827  {
828  2000 /*fromYear*/,
829  2000 /*toYear*/,
830  2 /*inMonth*/,
831  0 /*onDayOfWeek*/,
832  27 /*onDayOfMonth*/,
833  0 /*atTimeCode*/,
834  0 /*atTimeModifier (kSuffixW + minute=0)*/,
835  0 /*deltaCode ((deltaMinutes=0)/15)*/,
836  '-' /*letter*/,
837  },
838  // Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 -
839  {
840  2000 /*fromYear*/,
841  2001 /*toYear*/,
842  10 /*inMonth*/,
843  7 /*onDayOfWeek*/,
844  8 /*onDayOfMonth*/,
845  0 /*atTimeCode*/,
846  0 /*atTimeModifier (kSuffixW + minute=0)*/,
847  4 /*deltaCode ((deltaMinutes=60)/15)*/,
848  '-' /*letter*/,
849  },
850  // Rule Brazil 2001 2006 - Feb Sun>=15 0:00 0 -
851  {
852  2001 /*fromYear*/,
853  2006 /*toYear*/,
854  2 /*inMonth*/,
855  7 /*onDayOfWeek*/,
856  15 /*onDayOfMonth*/,
857  0 /*atTimeCode*/,
858  0 /*atTimeModifier (kSuffixW + minute=0)*/,
859  0 /*deltaCode ((deltaMinutes=0)/15)*/,
860  '-' /*letter*/,
861  },
862  // Rule Brazil 2002 only - Nov 3 0:00 1:00 -
863  {
864  2002 /*fromYear*/,
865  2002 /*toYear*/,
866  11 /*inMonth*/,
867  0 /*onDayOfWeek*/,
868  3 /*onDayOfMonth*/,
869  0 /*atTimeCode*/,
870  0 /*atTimeModifier (kSuffixW + minute=0)*/,
871  4 /*deltaCode ((deltaMinutes=60)/15)*/,
872  '-' /*letter*/,
873  },
874  // Rule Brazil 2003 only - Oct 19 0:00 1:00 -
875  {
876  2003 /*fromYear*/,
877  2003 /*toYear*/,
878  10 /*inMonth*/,
879  0 /*onDayOfWeek*/,
880  19 /*onDayOfMonth*/,
881  0 /*atTimeCode*/,
882  0 /*atTimeModifier (kSuffixW + minute=0)*/,
883  4 /*deltaCode ((deltaMinutes=60)/15)*/,
884  '-' /*letter*/,
885  },
886  // Rule Brazil 2004 only - Nov 2 0:00 1:00 -
887  {
888  2004 /*fromYear*/,
889  2004 /*toYear*/,
890  11 /*inMonth*/,
891  0 /*onDayOfWeek*/,
892  2 /*onDayOfMonth*/,
893  0 /*atTimeCode*/,
894  0 /*atTimeModifier (kSuffixW + minute=0)*/,
895  4 /*deltaCode ((deltaMinutes=60)/15)*/,
896  '-' /*letter*/,
897  },
898  // Rule Brazil 2005 only - Oct 16 0:00 1:00 -
899  {
900  2005 /*fromYear*/,
901  2005 /*toYear*/,
902  10 /*inMonth*/,
903  0 /*onDayOfWeek*/,
904  16 /*onDayOfMonth*/,
905  0 /*atTimeCode*/,
906  0 /*atTimeModifier (kSuffixW + minute=0)*/,
907  4 /*deltaCode ((deltaMinutes=60)/15)*/,
908  '-' /*letter*/,
909  },
910  // Rule Brazil 2006 only - Nov 5 0:00 1:00 -
911  {
912  2006 /*fromYear*/,
913  2006 /*toYear*/,
914  11 /*inMonth*/,
915  0 /*onDayOfWeek*/,
916  5 /*onDayOfMonth*/,
917  0 /*atTimeCode*/,
918  0 /*atTimeModifier (kSuffixW + minute=0)*/,
919  4 /*deltaCode ((deltaMinutes=60)/15)*/,
920  '-' /*letter*/,
921  },
922  // Rule Brazil 2007 only - Feb 25 0:00 0 -
923  {
924  2007 /*fromYear*/,
925  2007 /*toYear*/,
926  2 /*inMonth*/,
927  0 /*onDayOfWeek*/,
928  25 /*onDayOfMonth*/,
929  0 /*atTimeCode*/,
930  0 /*atTimeModifier (kSuffixW + minute=0)*/,
931  0 /*deltaCode ((deltaMinutes=0)/15)*/,
932  '-' /*letter*/,
933  },
934  // Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 -
935  {
936  2007 /*fromYear*/,
937  2007 /*toYear*/,
938  10 /*inMonth*/,
939  7 /*onDayOfWeek*/,
940  8 /*onDayOfMonth*/,
941  0 /*atTimeCode*/,
942  0 /*atTimeModifier (kSuffixW + minute=0)*/,
943  4 /*deltaCode ((deltaMinutes=60)/15)*/,
944  '-' /*letter*/,
945  },
946  // Rule Brazil 2008 2017 - Oct Sun>=15 0:00 1:00 -
947  {
948  2008 /*fromYear*/,
949  2017 /*toYear*/,
950  10 /*inMonth*/,
951  7 /*onDayOfWeek*/,
952  15 /*onDayOfMonth*/,
953  0 /*atTimeCode*/,
954  0 /*atTimeModifier (kSuffixW + minute=0)*/,
955  4 /*deltaCode ((deltaMinutes=60)/15)*/,
956  '-' /*letter*/,
957  },
958  // Rule Brazil 2008 2011 - Feb Sun>=15 0:00 0 -
959  {
960  2008 /*fromYear*/,
961  2011 /*toYear*/,
962  2 /*inMonth*/,
963  7 /*onDayOfWeek*/,
964  15 /*onDayOfMonth*/,
965  0 /*atTimeCode*/,
966  0 /*atTimeModifier (kSuffixW + minute=0)*/,
967  0 /*deltaCode ((deltaMinutes=0)/15)*/,
968  '-' /*letter*/,
969  },
970  // Rule Brazil 2012 only - Feb Sun>=22 0:00 0 -
971  {
972  2012 /*fromYear*/,
973  2012 /*toYear*/,
974  2 /*inMonth*/,
975  7 /*onDayOfWeek*/,
976  22 /*onDayOfMonth*/,
977  0 /*atTimeCode*/,
978  0 /*atTimeModifier (kSuffixW + minute=0)*/,
979  0 /*deltaCode ((deltaMinutes=0)/15)*/,
980  '-' /*letter*/,
981  },
982  // Rule Brazil 2013 2014 - Feb Sun>=15 0:00 0 -
983  {
984  2013 /*fromYear*/,
985  2014 /*toYear*/,
986  2 /*inMonth*/,
987  7 /*onDayOfWeek*/,
988  15 /*onDayOfMonth*/,
989  0 /*atTimeCode*/,
990  0 /*atTimeModifier (kSuffixW + minute=0)*/,
991  0 /*deltaCode ((deltaMinutes=0)/15)*/,
992  '-' /*letter*/,
993  },
994  // Rule Brazil 2015 only - Feb Sun>=22 0:00 0 -
995  {
996  2015 /*fromYear*/,
997  2015 /*toYear*/,
998  2 /*inMonth*/,
999  7 /*onDayOfWeek*/,
1000  22 /*onDayOfMonth*/,
1001  0 /*atTimeCode*/,
1002  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1003  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1004  '-' /*letter*/,
1005  },
1006  // Rule Brazil 2016 2019 - Feb Sun>=15 0:00 0 -
1007  {
1008  2016 /*fromYear*/,
1009  2019 /*toYear*/,
1010  2 /*inMonth*/,
1011  7 /*onDayOfWeek*/,
1012  15 /*onDayOfMonth*/,
1013  0 /*atTimeCode*/,
1014  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1015  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1016  '-' /*letter*/,
1017  },
1018  // Rule Brazil 2018 only - Nov Sun>=1 0:00 1:00 -
1019  {
1020  2018 /*fromYear*/,
1021  2018 /*toYear*/,
1022  11 /*inMonth*/,
1023  7 /*onDayOfWeek*/,
1024  1 /*onDayOfMonth*/,
1025  0 /*atTimeCode*/,
1026  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1027  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1028  '-' /*letter*/,
1029  },
1030 
1031 };
1032 
1033 
1034 
1035 const basic::ZonePolicy kZonePolicyBrazil ACE_TIME_PROGMEM = {
1036  kZoneRulesBrazil /*rules*/,
1037  nullptr /*letters*/,
1038  20 /*numRules*/,
1039  0 /*numLetters*/,
1040 };
1041 
1042 //---------------------------------------------------------------------------
1043 // Policy name: C_Eur
1044 // Rules: 3
1045 // Memory (8-bit): 39
1046 // Memory (32-bit): 48
1047 //---------------------------------------------------------------------------
1048 
1049 static const basic::ZoneRule kZoneRulesC_Eur[] ACE_TIME_PROGMEM = {
1050  // Rule C-Eur 1979 1995 - Sep lastSun 2:00s 0 -
1051  {
1052  1979 /*fromYear*/,
1053  1995 /*toYear*/,
1054  9 /*inMonth*/,
1055  7 /*onDayOfWeek*/,
1056  0 /*onDayOfMonth*/,
1057  8 /*atTimeCode*/,
1058  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1059  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1060  '-' /*letter*/,
1061  },
1062  // Rule C-Eur 1981 max - Mar lastSun 2:00s 1:00 S
1063  {
1064  1981 /*fromYear*/,
1065  9999 /*toYear*/,
1066  3 /*inMonth*/,
1067  7 /*onDayOfWeek*/,
1068  0 /*onDayOfMonth*/,
1069  8 /*atTimeCode*/,
1070  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1071  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1072  'S' /*letter*/,
1073  },
1074  // Rule C-Eur 1996 max - Oct lastSun 2:00s 0 -
1075  {
1076  1996 /*fromYear*/,
1077  9999 /*toYear*/,
1078  10 /*inMonth*/,
1079  7 /*onDayOfWeek*/,
1080  0 /*onDayOfMonth*/,
1081  8 /*atTimeCode*/,
1082  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1083  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1084  '-' /*letter*/,
1085  },
1086 
1087 };
1088 
1089 
1090 
1091 const basic::ZonePolicy kZonePolicyC_Eur ACE_TIME_PROGMEM = {
1092  kZoneRulesC_Eur /*rules*/,
1093  nullptr /*letters*/,
1094  3 /*numRules*/,
1095  0 /*numLetters*/,
1096 };
1097 
1098 //---------------------------------------------------------------------------
1099 // Policy name: CO
1100 // Rules: 1
1101 // Memory (8-bit): 17
1102 // Memory (32-bit): 24
1103 //---------------------------------------------------------------------------
1104 
1105 static const basic::ZoneRule kZoneRulesCO[] ACE_TIME_PROGMEM = {
1106  // Rule CO 1993 only - Feb 6 24:00 0 -
1107  {
1108  1993 /*fromYear*/,
1109  1993 /*toYear*/,
1110  2 /*inMonth*/,
1111  0 /*onDayOfWeek*/,
1112  6 /*onDayOfMonth*/,
1113  96 /*atTimeCode*/,
1114  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1115  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1116  '-' /*letter*/,
1117  },
1118 
1119 };
1120 
1121 
1122 
1123 const basic::ZonePolicy kZonePolicyCO ACE_TIME_PROGMEM = {
1124  kZoneRulesCO /*rules*/,
1125  nullptr /*letters*/,
1126  1 /*numRules*/,
1127  0 /*numLetters*/,
1128 };
1129 
1130 //---------------------------------------------------------------------------
1131 // Policy name: CR
1132 // Rules: 1
1133 // Memory (8-bit): 17
1134 // Memory (32-bit): 24
1135 //---------------------------------------------------------------------------
1136 
1137 static const basic::ZoneRule kZoneRulesCR[] ACE_TIME_PROGMEM = {
1138  // Rule CR 1992 only - Mar 15 0:00 0 S
1139  {
1140  1992 /*fromYear*/,
1141  1992 /*toYear*/,
1142  3 /*inMonth*/,
1143  0 /*onDayOfWeek*/,
1144  15 /*onDayOfMonth*/,
1145  0 /*atTimeCode*/,
1146  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1147  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1148  'S' /*letter*/,
1149  },
1150 
1151 };
1152 
1153 
1154 
1155 const basic::ZonePolicy kZonePolicyCR ACE_TIME_PROGMEM = {
1156  kZoneRulesCR /*rules*/,
1157  nullptr /*letters*/,
1158  1 /*numRules*/,
1159  0 /*numLetters*/,
1160 };
1161 
1162 //---------------------------------------------------------------------------
1163 // Policy name: Canada
1164 // Rules: 5
1165 // Memory (8-bit): 61
1166 // Memory (32-bit): 72
1167 //---------------------------------------------------------------------------
1168 
1169 static const basic::ZoneRule kZoneRulesCanada[] ACE_TIME_PROGMEM = {
1170  // Rule Canada 1974 1986 - Apr lastSun 2:00 1:00 D
1171  {
1172  1974 /*fromYear*/,
1173  1986 /*toYear*/,
1174  4 /*inMonth*/,
1175  7 /*onDayOfWeek*/,
1176  0 /*onDayOfMonth*/,
1177  8 /*atTimeCode*/,
1178  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1179  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1180  'D' /*letter*/,
1181  },
1182  // Rule Canada 1974 2006 - Oct lastSun 2:00 0 S
1183  {
1184  1974 /*fromYear*/,
1185  2006 /*toYear*/,
1186  10 /*inMonth*/,
1187  7 /*onDayOfWeek*/,
1188  0 /*onDayOfMonth*/,
1189  8 /*atTimeCode*/,
1190  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1191  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1192  'S' /*letter*/,
1193  },
1194  // Rule Canada 1987 2006 - Apr Sun>=1 2:00 1:00 D
1195  {
1196  1987 /*fromYear*/,
1197  2006 /*toYear*/,
1198  4 /*inMonth*/,
1199  7 /*onDayOfWeek*/,
1200  1 /*onDayOfMonth*/,
1201  8 /*atTimeCode*/,
1202  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1203  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1204  'D' /*letter*/,
1205  },
1206  // Rule Canada 2007 max - Mar Sun>=8 2:00 1:00 D
1207  {
1208  2007 /*fromYear*/,
1209  9999 /*toYear*/,
1210  3 /*inMonth*/,
1211  7 /*onDayOfWeek*/,
1212  8 /*onDayOfMonth*/,
1213  8 /*atTimeCode*/,
1214  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1215  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1216  'D' /*letter*/,
1217  },
1218  // Rule Canada 2007 max - Nov Sun>=1 2:00 0 S
1219  {
1220  2007 /*fromYear*/,
1221  9999 /*toYear*/,
1222  11 /*inMonth*/,
1223  7 /*onDayOfWeek*/,
1224  1 /*onDayOfMonth*/,
1225  8 /*atTimeCode*/,
1226  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1227  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1228  'S' /*letter*/,
1229  },
1230 
1231 };
1232 
1233 
1234 
1235 const basic::ZonePolicy kZonePolicyCanada ACE_TIME_PROGMEM = {
1236  kZoneRulesCanada /*rules*/,
1237  nullptr /*letters*/,
1238  5 /*numRules*/,
1239  0 /*numLetters*/,
1240 };
1241 
1242 //---------------------------------------------------------------------------
1243 // Policy name: Chatham
1244 // Rules: 5
1245 // Memory (8-bit): 61
1246 // Memory (32-bit): 72
1247 //---------------------------------------------------------------------------
1248 
1249 static const basic::ZoneRule kZoneRulesChatham[] ACE_TIME_PROGMEM = {
1250  // Rule Chatham 1989 only - Oct Sun>=8 2:45s 1:00 -
1251  {
1252  1989 /*fromYear*/,
1253  1989 /*toYear*/,
1254  10 /*inMonth*/,
1255  7 /*onDayOfWeek*/,
1256  8 /*onDayOfMonth*/,
1257  11 /*atTimeCode*/,
1258  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1259  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1260  '-' /*letter*/,
1261  },
1262  // Rule Chatham 1990 2006 - Oct Sun>=1 2:45s 1:00 -
1263  {
1264  1990 /*fromYear*/,
1265  2006 /*toYear*/,
1266  10 /*inMonth*/,
1267  7 /*onDayOfWeek*/,
1268  1 /*onDayOfMonth*/,
1269  11 /*atTimeCode*/,
1270  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1271  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1272  '-' /*letter*/,
1273  },
1274  // Rule Chatham 1990 2007 - Mar Sun>=15 2:45s 0 -
1275  {
1276  1990 /*fromYear*/,
1277  2007 /*toYear*/,
1278  3 /*inMonth*/,
1279  7 /*onDayOfWeek*/,
1280  15 /*onDayOfMonth*/,
1281  11 /*atTimeCode*/,
1282  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1283  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1284  '-' /*letter*/,
1285  },
1286  // Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 -
1287  {
1288  2007 /*fromYear*/,
1289  9999 /*toYear*/,
1290  9 /*inMonth*/,
1291  7 /*onDayOfWeek*/,
1292  0 /*onDayOfMonth*/,
1293  11 /*atTimeCode*/,
1294  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1295  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1296  '-' /*letter*/,
1297  },
1298  // Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 -
1299  {
1300  2008 /*fromYear*/,
1301  9999 /*toYear*/,
1302  4 /*inMonth*/,
1303  7 /*onDayOfWeek*/,
1304  1 /*onDayOfMonth*/,
1305  11 /*atTimeCode*/,
1306  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1307  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1308  '-' /*letter*/,
1309  },
1310 
1311 };
1312 
1313 
1314 
1315 const basic::ZonePolicy kZonePolicyChatham ACE_TIME_PROGMEM = {
1316  kZoneRulesChatham /*rules*/,
1317  nullptr /*letters*/,
1318  5 /*numRules*/,
1319  0 /*numLetters*/,
1320 };
1321 
1322 //---------------------------------------------------------------------------
1323 // Policy name: Chile
1324 // Rules: 17
1325 // Memory (8-bit): 193
1326 // Memory (32-bit): 216
1327 //---------------------------------------------------------------------------
1328 
1329 static const basic::ZoneRule kZoneRulesChile[] ACE_TIME_PROGMEM = {
1330  // Rule Chile 1998 only - Sep 27 4:00u 1:00 -
1331  {
1332  1998 /*fromYear*/,
1333  1998 /*toYear*/,
1334  9 /*inMonth*/,
1335  0 /*onDayOfWeek*/,
1336  27 /*onDayOfMonth*/,
1337  16 /*atTimeCode*/,
1338  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1339  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1340  '-' /*letter*/,
1341  },
1342  // Rule Chile 1999 only - Apr 4 3:00u 0 -
1343  {
1344  1999 /*fromYear*/,
1345  1999 /*toYear*/,
1346  4 /*inMonth*/,
1347  0 /*onDayOfWeek*/,
1348  4 /*onDayOfMonth*/,
1349  12 /*atTimeCode*/,
1350  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1351  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1352  '-' /*letter*/,
1353  },
1354  // Rule Chile 1999 2010 - Oct Sun>=9 4:00u 1:00 -
1355  {
1356  1999 /*fromYear*/,
1357  2010 /*toYear*/,
1358  10 /*inMonth*/,
1359  7 /*onDayOfWeek*/,
1360  9 /*onDayOfMonth*/,
1361  16 /*atTimeCode*/,
1362  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1363  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1364  '-' /*letter*/,
1365  },
1366  // Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 -
1367  {
1368  2000 /*fromYear*/,
1369  2007 /*toYear*/,
1370  3 /*inMonth*/,
1371  7 /*onDayOfWeek*/,
1372  9 /*onDayOfMonth*/,
1373  12 /*atTimeCode*/,
1374  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1375  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1376  '-' /*letter*/,
1377  },
1378  // Rule Chile 2008 only - Mar 30 3:00u 0 -
1379  {
1380  2008 /*fromYear*/,
1381  2008 /*toYear*/,
1382  3 /*inMonth*/,
1383  0 /*onDayOfWeek*/,
1384  30 /*onDayOfMonth*/,
1385  12 /*atTimeCode*/,
1386  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1387  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1388  '-' /*letter*/,
1389  },
1390  // Rule Chile 2009 only - Mar Sun>=9 3:00u 0 -
1391  {
1392  2009 /*fromYear*/,
1393  2009 /*toYear*/,
1394  3 /*inMonth*/,
1395  7 /*onDayOfWeek*/,
1396  9 /*onDayOfMonth*/,
1397  12 /*atTimeCode*/,
1398  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1399  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1400  '-' /*letter*/,
1401  },
1402  // Rule Chile 2010 only - Apr Sun>=1 3:00u 0 -
1403  {
1404  2010 /*fromYear*/,
1405  2010 /*toYear*/,
1406  4 /*inMonth*/,
1407  7 /*onDayOfWeek*/,
1408  1 /*onDayOfMonth*/,
1409  12 /*atTimeCode*/,
1410  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1411  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1412  '-' /*letter*/,
1413  },
1414  // Rule Chile 2011 only - May Sun>=2 3:00u 0 -
1415  {
1416  2011 /*fromYear*/,
1417  2011 /*toYear*/,
1418  5 /*inMonth*/,
1419  7 /*onDayOfWeek*/,
1420  2 /*onDayOfMonth*/,
1421  12 /*atTimeCode*/,
1422  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1423  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1424  '-' /*letter*/,
1425  },
1426  // Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 -
1427  {
1428  2011 /*fromYear*/,
1429  2011 /*toYear*/,
1430  8 /*inMonth*/,
1431  7 /*onDayOfWeek*/,
1432  16 /*onDayOfMonth*/,
1433  16 /*atTimeCode*/,
1434  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1435  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1436  '-' /*letter*/,
1437  },
1438  // Rule Chile 2012 2014 - Apr Sun>=23 3:00u 0 -
1439  {
1440  2012 /*fromYear*/,
1441  2014 /*toYear*/,
1442  4 /*inMonth*/,
1443  7 /*onDayOfWeek*/,
1444  23 /*onDayOfMonth*/,
1445  12 /*atTimeCode*/,
1446  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1447  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1448  '-' /*letter*/,
1449  },
1450  // Rule Chile 2012 2014 - Sep Sun>=2 4:00u 1:00 -
1451  {
1452  2012 /*fromYear*/,
1453  2014 /*toYear*/,
1454  9 /*inMonth*/,
1455  7 /*onDayOfWeek*/,
1456  2 /*onDayOfMonth*/,
1457  16 /*atTimeCode*/,
1458  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1459  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1460  '-' /*letter*/,
1461  },
1462  // Rule Chile 2016 2018 - May Sun>=9 3:00u 0 -
1463  {
1464  2016 /*fromYear*/,
1465  2018 /*toYear*/,
1466  5 /*inMonth*/,
1467  7 /*onDayOfWeek*/,
1468  9 /*onDayOfMonth*/,
1469  12 /*atTimeCode*/,
1470  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1471  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1472  '-' /*letter*/,
1473  },
1474  // Rule Chile 2016 2018 - Aug Sun>=9 4:00u 1:00 -
1475  {
1476  2016 /*fromYear*/,
1477  2018 /*toYear*/,
1478  8 /*inMonth*/,
1479  7 /*onDayOfWeek*/,
1480  9 /*onDayOfMonth*/,
1481  16 /*atTimeCode*/,
1482  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1483  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1484  '-' /*letter*/,
1485  },
1486  // Rule Chile 2019 max - Apr Sun>=2 3:00u 0 -
1487  {
1488  2019 /*fromYear*/,
1489  9999 /*toYear*/,
1490  4 /*inMonth*/,
1491  7 /*onDayOfWeek*/,
1492  2 /*onDayOfMonth*/,
1493  12 /*atTimeCode*/,
1494  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1495  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1496  '-' /*letter*/,
1497  },
1498  // Rule Chile 2019 2021 - Sep Sun>=2 4:00u 1:00 -
1499  {
1500  2019 /*fromYear*/,
1501  2021 /*toYear*/,
1502  9 /*inMonth*/,
1503  7 /*onDayOfWeek*/,
1504  2 /*onDayOfMonth*/,
1505  16 /*atTimeCode*/,
1506  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1507  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1508  '-' /*letter*/,
1509  },
1510  // Rule Chile 2022 only - Sep Sun>=9 4:00u 1:00 -
1511  {
1512  2022 /*fromYear*/,
1513  2022 /*toYear*/,
1514  9 /*inMonth*/,
1515  7 /*onDayOfWeek*/,
1516  9 /*onDayOfMonth*/,
1517  16 /*atTimeCode*/,
1518  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1519  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1520  '-' /*letter*/,
1521  },
1522  // Rule Chile 2023 max - Sep Sun>=2 4:00u 1:00 -
1523  {
1524  2023 /*fromYear*/,
1525  9999 /*toYear*/,
1526  9 /*inMonth*/,
1527  7 /*onDayOfWeek*/,
1528  2 /*onDayOfMonth*/,
1529  16 /*atTimeCode*/,
1530  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1531  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1532  '-' /*letter*/,
1533  },
1534 
1535 };
1536 
1537 
1538 
1539 const basic::ZonePolicy kZonePolicyChile ACE_TIME_PROGMEM = {
1540  kZoneRulesChile /*rules*/,
1541  nullptr /*letters*/,
1542  17 /*numRules*/,
1543  0 /*numLetters*/,
1544 };
1545 
1546 //---------------------------------------------------------------------------
1547 // Policy name: Cook
1548 // Rules: 1
1549 // Memory (8-bit): 17
1550 // Memory (32-bit): 24
1551 //---------------------------------------------------------------------------
1552 
1553 static const basic::ZoneRule kZoneRulesCook[] ACE_TIME_PROGMEM = {
1554  // Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 -
1555  {
1556  1979 /*fromYear*/,
1557  1991 /*toYear*/,
1558  3 /*inMonth*/,
1559  7 /*onDayOfWeek*/,
1560  1 /*onDayOfMonth*/,
1561  0 /*atTimeCode*/,
1562  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1563  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1564  '-' /*letter*/,
1565  },
1566 
1567 };
1568 
1569 
1570 
1571 const basic::ZonePolicy kZonePolicyCook ACE_TIME_PROGMEM = {
1572  kZoneRulesCook /*rules*/,
1573  nullptr /*letters*/,
1574  1 /*numRules*/,
1575  0 /*numLetters*/,
1576 };
1577 
1578 //---------------------------------------------------------------------------
1579 // Policy name: Cuba
1580 // Rules: 14
1581 // Memory (8-bit): 160
1582 // Memory (32-bit): 180
1583 //---------------------------------------------------------------------------
1584 
1585 static const basic::ZoneRule kZoneRulesCuba[] ACE_TIME_PROGMEM = {
1586  // Rule Cuba 1997 only - Oct 12 0:00s 0 S
1587  {
1588  1997 /*fromYear*/,
1589  1997 /*toYear*/,
1590  10 /*inMonth*/,
1591  0 /*onDayOfWeek*/,
1592  12 /*onDayOfMonth*/,
1593  0 /*atTimeCode*/,
1594  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1595  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1596  'S' /*letter*/,
1597  },
1598  // Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D
1599  {
1600  1998 /*fromYear*/,
1601  1999 /*toYear*/,
1602  3 /*inMonth*/,
1603  7 /*onDayOfWeek*/,
1604  0 /*onDayOfMonth*/,
1605  0 /*atTimeCode*/,
1606  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1607  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1608  'D' /*letter*/,
1609  },
1610  // Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S
1611  {
1612  1998 /*fromYear*/,
1613  2003 /*toYear*/,
1614  10 /*inMonth*/,
1615  7 /*onDayOfWeek*/,
1616  0 /*onDayOfMonth*/,
1617  0 /*atTimeCode*/,
1618  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1619  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1620  'S' /*letter*/,
1621  },
1622  // Rule Cuba 2000 2003 - Apr Sun>=1 0:00s 1:00 D
1623  {
1624  2000 /*fromYear*/,
1625  2003 /*toYear*/,
1626  4 /*inMonth*/,
1627  7 /*onDayOfWeek*/,
1628  1 /*onDayOfMonth*/,
1629  0 /*atTimeCode*/,
1630  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1631  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1632  'D' /*letter*/,
1633  },
1634  // Rule Cuba 2004 only - Mar lastSun 0:00s 1:00 D
1635  {
1636  2004 /*fromYear*/,
1637  2004 /*toYear*/,
1638  3 /*inMonth*/,
1639  7 /*onDayOfWeek*/,
1640  0 /*onDayOfMonth*/,
1641  0 /*atTimeCode*/,
1642  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1643  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1644  'D' /*letter*/,
1645  },
1646  // Rule Cuba 2006 2010 - Oct lastSun 0:00s 0 S
1647  {
1648  2006 /*fromYear*/,
1649  2010 /*toYear*/,
1650  10 /*inMonth*/,
1651  7 /*onDayOfWeek*/,
1652  0 /*onDayOfMonth*/,
1653  0 /*atTimeCode*/,
1654  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1655  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1656  'S' /*letter*/,
1657  },
1658  // Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D
1659  {
1660  2007 /*fromYear*/,
1661  2007 /*toYear*/,
1662  3 /*inMonth*/,
1663  7 /*onDayOfWeek*/,
1664  8 /*onDayOfMonth*/,
1665  0 /*atTimeCode*/,
1666  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1667  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1668  'D' /*letter*/,
1669  },
1670  // Rule Cuba 2008 only - Mar Sun>=15 0:00s 1:00 D
1671  {
1672  2008 /*fromYear*/,
1673  2008 /*toYear*/,
1674  3 /*inMonth*/,
1675  7 /*onDayOfWeek*/,
1676  15 /*onDayOfMonth*/,
1677  0 /*atTimeCode*/,
1678  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1679  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1680  'D' /*letter*/,
1681  },
1682  // Rule Cuba 2009 2010 - Mar Sun>=8 0:00s 1:00 D
1683  {
1684  2009 /*fromYear*/,
1685  2010 /*toYear*/,
1686  3 /*inMonth*/,
1687  7 /*onDayOfWeek*/,
1688  8 /*onDayOfMonth*/,
1689  0 /*atTimeCode*/,
1690  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1691  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1692  'D' /*letter*/,
1693  },
1694  // Rule Cuba 2011 only - Mar Sun>=15 0:00s 1:00 D
1695  {
1696  2011 /*fromYear*/,
1697  2011 /*toYear*/,
1698  3 /*inMonth*/,
1699  7 /*onDayOfWeek*/,
1700  15 /*onDayOfMonth*/,
1701  0 /*atTimeCode*/,
1702  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1703  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1704  'D' /*letter*/,
1705  },
1706  // Rule Cuba 2011 only - Nov 13 0:00s 0 S
1707  {
1708  2011 /*fromYear*/,
1709  2011 /*toYear*/,
1710  11 /*inMonth*/,
1711  0 /*onDayOfWeek*/,
1712  13 /*onDayOfMonth*/,
1713  0 /*atTimeCode*/,
1714  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1715  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1716  'S' /*letter*/,
1717  },
1718  // Rule Cuba 2012 only - Apr 1 0:00s 1:00 D
1719  {
1720  2012 /*fromYear*/,
1721  2012 /*toYear*/,
1722  4 /*inMonth*/,
1723  0 /*onDayOfWeek*/,
1724  1 /*onDayOfMonth*/,
1725  0 /*atTimeCode*/,
1726  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1727  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1728  'D' /*letter*/,
1729  },
1730  // Rule Cuba 2012 max - Nov Sun>=1 0:00s 0 S
1731  {
1732  2012 /*fromYear*/,
1733  9999 /*toYear*/,
1734  11 /*inMonth*/,
1735  7 /*onDayOfWeek*/,
1736  1 /*onDayOfMonth*/,
1737  0 /*atTimeCode*/,
1738  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1739  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1740  'S' /*letter*/,
1741  },
1742  // Rule Cuba 2013 max - Mar Sun>=8 0:00s 1:00 D
1743  {
1744  2013 /*fromYear*/,
1745  9999 /*toYear*/,
1746  3 /*inMonth*/,
1747  7 /*onDayOfWeek*/,
1748  8 /*onDayOfMonth*/,
1749  0 /*atTimeCode*/,
1750  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1751  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1752  'D' /*letter*/,
1753  },
1754 
1755 };
1756 
1757 
1758 
1759 const basic::ZonePolicy kZonePolicyCuba ACE_TIME_PROGMEM = {
1760  kZoneRulesCuba /*rules*/,
1761  nullptr /*letters*/,
1762  14 /*numRules*/,
1763  0 /*numLetters*/,
1764 };
1765 
1766 //---------------------------------------------------------------------------
1767 // Policy name: Dhaka
1768 // Rules: 3
1769 // Memory (8-bit): 39
1770 // Memory (32-bit): 48
1771 //---------------------------------------------------------------------------
1772 
1773 static const basic::ZoneRule kZoneRulesDhaka[] ACE_TIME_PROGMEM = {
1774  // Anchor: Rule Dhaka 2009 only - Dec 31 24:00 0 -
1775  {
1776  0 /*fromYear*/,
1777  0 /*toYear*/,
1778  1 /*inMonth*/,
1779  0 /*onDayOfWeek*/,
1780  1 /*onDayOfMonth*/,
1781  0 /*atTimeCode*/,
1782  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1783  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1784  '-' /*letter*/,
1785  },
1786  // Rule Dhaka 2009 only - Jun 19 23:00 1:00 -
1787  {
1788  2009 /*fromYear*/,
1789  2009 /*toYear*/,
1790  6 /*inMonth*/,
1791  0 /*onDayOfWeek*/,
1792  19 /*onDayOfMonth*/,
1793  92 /*atTimeCode*/,
1794  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1795  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1796  '-' /*letter*/,
1797  },
1798  // Rule Dhaka 2009 only - Dec 31 24:00 0 -
1799  {
1800  2009 /*fromYear*/,
1801  2009 /*toYear*/,
1802  12 /*inMonth*/,
1803  0 /*onDayOfWeek*/,
1804  31 /*onDayOfMonth*/,
1805  96 /*atTimeCode*/,
1806  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1807  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1808  '-' /*letter*/,
1809  },
1810 
1811 };
1812 
1813 
1814 
1815 const basic::ZonePolicy kZonePolicyDhaka ACE_TIME_PROGMEM = {
1816  kZoneRulesDhaka /*rules*/,
1817  nullptr /*letters*/,
1818  3 /*numRules*/,
1819  0 /*numLetters*/,
1820 };
1821 
1822 //---------------------------------------------------------------------------
1823 // Policy name: EU
1824 // Rules: 3
1825 // Memory (8-bit): 39
1826 // Memory (32-bit): 48
1827 //---------------------------------------------------------------------------
1828 
1829 static const basic::ZoneRule kZoneRulesEU[] ACE_TIME_PROGMEM = {
1830  // Rule EU 1979 1995 - Sep lastSun 1:00u 0 -
1831  {
1832  1979 /*fromYear*/,
1833  1995 /*toYear*/,
1834  9 /*inMonth*/,
1835  7 /*onDayOfWeek*/,
1836  0 /*onDayOfMonth*/,
1837  4 /*atTimeCode*/,
1838  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1839  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1840  '-' /*letter*/,
1841  },
1842  // Rule EU 1981 max - Mar lastSun 1:00u 1:00 S
1843  {
1844  1981 /*fromYear*/,
1845  9999 /*toYear*/,
1846  3 /*inMonth*/,
1847  7 /*onDayOfWeek*/,
1848  0 /*onDayOfMonth*/,
1849  4 /*atTimeCode*/,
1850  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1851  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1852  'S' /*letter*/,
1853  },
1854  // Rule EU 1996 max - Oct lastSun 1:00u 0 -
1855  {
1856  1996 /*fromYear*/,
1857  9999 /*toYear*/,
1858  10 /*inMonth*/,
1859  7 /*onDayOfWeek*/,
1860  0 /*onDayOfMonth*/,
1861  4 /*atTimeCode*/,
1862  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1863  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1864  '-' /*letter*/,
1865  },
1866 
1867 };
1868 
1869 
1870 
1871 const basic::ZonePolicy kZonePolicyEU ACE_TIME_PROGMEM = {
1872  kZoneRulesEU /*rules*/,
1873  nullptr /*letters*/,
1874  3 /*numRules*/,
1875  0 /*numLetters*/,
1876 };
1877 
1878 //---------------------------------------------------------------------------
1879 // Policy name: EUAsia
1880 // Rules: 3
1881 // Memory (8-bit): 39
1882 // Memory (32-bit): 48
1883 //---------------------------------------------------------------------------
1884 
1885 static const basic::ZoneRule kZoneRulesEUAsia[] ACE_TIME_PROGMEM = {
1886  // Rule EUAsia 1981 max - Mar lastSun 1:00u 1:00 S
1887  {
1888  1981 /*fromYear*/,
1889  9999 /*toYear*/,
1890  3 /*inMonth*/,
1891  7 /*onDayOfWeek*/,
1892  0 /*onDayOfMonth*/,
1893  4 /*atTimeCode*/,
1894  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1895  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1896  'S' /*letter*/,
1897  },
1898  // Rule EUAsia 1979 1995 - Sep lastSun 1:00u 0 -
1899  {
1900  1979 /*fromYear*/,
1901  1995 /*toYear*/,
1902  9 /*inMonth*/,
1903  7 /*onDayOfWeek*/,
1904  0 /*onDayOfMonth*/,
1905  4 /*atTimeCode*/,
1906  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1907  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1908  '-' /*letter*/,
1909  },
1910  // Rule EUAsia 1996 max - Oct lastSun 1:00u 0 -
1911  {
1912  1996 /*fromYear*/,
1913  9999 /*toYear*/,
1914  10 /*inMonth*/,
1915  7 /*onDayOfWeek*/,
1916  0 /*onDayOfMonth*/,
1917  4 /*atTimeCode*/,
1918  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1919  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1920  '-' /*letter*/,
1921  },
1922 
1923 };
1924 
1925 
1926 
1927 const basic::ZonePolicy kZonePolicyEUAsia ACE_TIME_PROGMEM = {
1928  kZoneRulesEUAsia /*rules*/,
1929  nullptr /*letters*/,
1930  3 /*numRules*/,
1931  0 /*numLetters*/,
1932 };
1933 
1934 //---------------------------------------------------------------------------
1935 // Policy name: Ecuador
1936 // Rules: 1
1937 // Memory (8-bit): 17
1938 // Memory (32-bit): 24
1939 //---------------------------------------------------------------------------
1940 
1941 static const basic::ZoneRule kZoneRulesEcuador[] ACE_TIME_PROGMEM = {
1942  // Rule Ecuador 1993 only - Feb 5 0:00 0 -
1943  {
1944  1993 /*fromYear*/,
1945  1993 /*toYear*/,
1946  2 /*inMonth*/,
1947  0 /*onDayOfWeek*/,
1948  5 /*onDayOfMonth*/,
1949  0 /*atTimeCode*/,
1950  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1951  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1952  '-' /*letter*/,
1953  },
1954 
1955 };
1956 
1957 
1958 
1959 const basic::ZonePolicy kZonePolicyEcuador ACE_TIME_PROGMEM = {
1960  kZoneRulesEcuador /*rules*/,
1961  nullptr /*letters*/,
1962  1 /*numRules*/,
1963  0 /*numLetters*/,
1964 };
1965 
1966 //---------------------------------------------------------------------------
1967 // Policy name: Eire
1968 // Rules: 3
1969 // Memory (8-bit): 39
1970 // Memory (32-bit): 48
1971 //---------------------------------------------------------------------------
1972 
1973 static const basic::ZoneRule kZoneRulesEire[] ACE_TIME_PROGMEM = {
1974  // Rule Eire 1981 max - Mar lastSun 1:00u 0 -
1975  {
1976  1981 /*fromYear*/,
1977  9999 /*toYear*/,
1978  3 /*inMonth*/,
1979  7 /*onDayOfWeek*/,
1980  0 /*onDayOfMonth*/,
1981  4 /*atTimeCode*/,
1982  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1983  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1984  '-' /*letter*/,
1985  },
1986  // Rule Eire 1990 1995 - Oct Sun>=22 1:00u -1:00 -
1987  {
1988  1990 /*fromYear*/,
1989  1995 /*toYear*/,
1990  10 /*inMonth*/,
1991  7 /*onDayOfWeek*/,
1992  22 /*onDayOfMonth*/,
1993  4 /*atTimeCode*/,
1994  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1995  -4 /*deltaCode ((deltaMinutes=-60)/15)*/,
1996  '-' /*letter*/,
1997  },
1998  // Rule Eire 1996 max - Oct lastSun 1:00u -1:00 -
1999  {
2000  1996 /*fromYear*/,
2001  9999 /*toYear*/,
2002  10 /*inMonth*/,
2003  7 /*onDayOfWeek*/,
2004  0 /*onDayOfMonth*/,
2005  4 /*atTimeCode*/,
2006  32 /*atTimeModifier (kSuffixU + minute=0)*/,
2007  -4 /*deltaCode ((deltaMinutes=-60)/15)*/,
2008  '-' /*letter*/,
2009  },
2010 
2011 };
2012 
2013 
2014 
2015 const basic::ZonePolicy kZonePolicyEire ACE_TIME_PROGMEM = {
2016  kZoneRulesEire /*rules*/,
2017  nullptr /*letters*/,
2018  3 /*numRules*/,
2019  0 /*numLetters*/,
2020 };
2021 
2022 //---------------------------------------------------------------------------
2023 // Policy name: Fiji
2024 // Rules: 12
2025 // Memory (8-bit): 138
2026 // Memory (32-bit): 156
2027 //---------------------------------------------------------------------------
2028 
2029 static const basic::ZoneRule kZoneRulesFiji[] ACE_TIME_PROGMEM = {
2030  // Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 -
2031  {
2032  1998 /*fromYear*/,
2033  1999 /*toYear*/,
2034  11 /*inMonth*/,
2035  7 /*onDayOfWeek*/,
2036  1 /*onDayOfMonth*/,
2037  8 /*atTimeCode*/,
2038  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2039  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2040  '-' /*letter*/,
2041  },
2042  // Rule Fiji 1999 2000 - Feb lastSun 3:00 0 -
2043  {
2044  1999 /*fromYear*/,
2045  2000 /*toYear*/,
2046  2 /*inMonth*/,
2047  7 /*onDayOfWeek*/,
2048  0 /*onDayOfMonth*/,
2049  12 /*atTimeCode*/,
2050  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2051  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2052  '-' /*letter*/,
2053  },
2054  // Rule Fiji 2009 only - Nov 29 2:00 1:00 -
2055  {
2056  2009 /*fromYear*/,
2057  2009 /*toYear*/,
2058  11 /*inMonth*/,
2059  0 /*onDayOfWeek*/,
2060  29 /*onDayOfMonth*/,
2061  8 /*atTimeCode*/,
2062  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2063  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2064  '-' /*letter*/,
2065  },
2066  // Rule Fiji 2010 only - Mar lastSun 3:00 0 -
2067  {
2068  2010 /*fromYear*/,
2069  2010 /*toYear*/,
2070  3 /*inMonth*/,
2071  7 /*onDayOfWeek*/,
2072  0 /*onDayOfMonth*/,
2073  12 /*atTimeCode*/,
2074  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2075  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2076  '-' /*letter*/,
2077  },
2078  // Rule Fiji 2010 2013 - Oct Sun>=21 2:00 1:00 -
2079  {
2080  2010 /*fromYear*/,
2081  2013 /*toYear*/,
2082  10 /*inMonth*/,
2083  7 /*onDayOfWeek*/,
2084  21 /*onDayOfMonth*/,
2085  8 /*atTimeCode*/,
2086  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2087  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2088  '-' /*letter*/,
2089  },
2090  // Rule Fiji 2011 only - Mar Sun>=1 3:00 0 -
2091  {
2092  2011 /*fromYear*/,
2093  2011 /*toYear*/,
2094  3 /*inMonth*/,
2095  7 /*onDayOfWeek*/,
2096  1 /*onDayOfMonth*/,
2097  12 /*atTimeCode*/,
2098  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2099  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2100  '-' /*letter*/,
2101  },
2102  // Rule Fiji 2012 2013 - Jan Sun>=18 3:00 0 -
2103  {
2104  2012 /*fromYear*/,
2105  2013 /*toYear*/,
2106  1 /*inMonth*/,
2107  7 /*onDayOfWeek*/,
2108  18 /*onDayOfMonth*/,
2109  12 /*atTimeCode*/,
2110  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2111  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2112  '-' /*letter*/,
2113  },
2114  // Rule Fiji 2014 only - Jan Sun>=18 2:00 0 -
2115  {
2116  2014 /*fromYear*/,
2117  2014 /*toYear*/,
2118  1 /*inMonth*/,
2119  7 /*onDayOfWeek*/,
2120  18 /*onDayOfMonth*/,
2121  8 /*atTimeCode*/,
2122  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2123  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2124  '-' /*letter*/,
2125  },
2126  // Rule Fiji 2014 2018 - Nov Sun>=1 2:00 1:00 -
2127  {
2128  2014 /*fromYear*/,
2129  2018 /*toYear*/,
2130  11 /*inMonth*/,
2131  7 /*onDayOfWeek*/,
2132  1 /*onDayOfMonth*/,
2133  8 /*atTimeCode*/,
2134  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2135  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2136  '-' /*letter*/,
2137  },
2138  // Rule Fiji 2015 2021 - Jan Sun>=12 3:00 0 -
2139  {
2140  2015 /*fromYear*/,
2141  2021 /*toYear*/,
2142  1 /*inMonth*/,
2143  7 /*onDayOfWeek*/,
2144  12 /*onDayOfMonth*/,
2145  12 /*atTimeCode*/,
2146  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2147  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2148  '-' /*letter*/,
2149  },
2150  // Rule Fiji 2019 only - Nov Sun>=8 2:00 1:00 -
2151  {
2152  2019 /*fromYear*/,
2153  2019 /*toYear*/,
2154  11 /*inMonth*/,
2155  7 /*onDayOfWeek*/,
2156  8 /*onDayOfMonth*/,
2157  8 /*atTimeCode*/,
2158  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2159  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2160  '-' /*letter*/,
2161  },
2162  // Rule Fiji 2020 only - Dec 20 2:00 1:00 -
2163  {
2164  2020 /*fromYear*/,
2165  2020 /*toYear*/,
2166  12 /*inMonth*/,
2167  0 /*onDayOfWeek*/,
2168  20 /*onDayOfMonth*/,
2169  8 /*atTimeCode*/,
2170  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2171  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2172  '-' /*letter*/,
2173  },
2174 
2175 };
2176 
2177 
2178 
2179 const basic::ZonePolicy kZonePolicyFiji ACE_TIME_PROGMEM = {
2180  kZoneRulesFiji /*rules*/,
2181  nullptr /*letters*/,
2182  12 /*numRules*/,
2183  0 /*numLetters*/,
2184 };
2185 
2186 //---------------------------------------------------------------------------
2187 // Policy name: Guat
2188 // Rules: 3
2189 // Memory (8-bit): 39
2190 // Memory (32-bit): 48
2191 //---------------------------------------------------------------------------
2192 
2193 static const basic::ZoneRule kZoneRulesGuat[] ACE_TIME_PROGMEM = {
2194  // Rule Guat 1991 only - Sep 7 0:00 0 S
2195  {
2196  1991 /*fromYear*/,
2197  1991 /*toYear*/,
2198  9 /*inMonth*/,
2199  0 /*onDayOfWeek*/,
2200  7 /*onDayOfMonth*/,
2201  0 /*atTimeCode*/,
2202  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2203  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2204  'S' /*letter*/,
2205  },
2206  // Rule Guat 2006 only - Apr 30 0:00 1:00 D
2207  {
2208  2006 /*fromYear*/,
2209  2006 /*toYear*/,
2210  4 /*inMonth*/,
2211  0 /*onDayOfWeek*/,
2212  30 /*onDayOfMonth*/,
2213  0 /*atTimeCode*/,
2214  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2215  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2216  'D' /*letter*/,
2217  },
2218  // Rule Guat 2006 only - Oct 1 0:00 0 S
2219  {
2220  2006 /*fromYear*/,
2221  2006 /*toYear*/,
2222  10 /*inMonth*/,
2223  0 /*onDayOfWeek*/,
2224  1 /*onDayOfMonth*/,
2225  0 /*atTimeCode*/,
2226  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2227  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2228  'S' /*letter*/,
2229  },
2230 
2231 };
2232 
2233 
2234 
2235 const basic::ZonePolicy kZonePolicyGuat ACE_TIME_PROGMEM = {
2236  kZoneRulesGuat /*rules*/,
2237  nullptr /*letters*/,
2238  3 /*numRules*/,
2239  0 /*numLetters*/,
2240 };
2241 
2242 //---------------------------------------------------------------------------
2243 // Policy name: HK
2244 // Rules: 1
2245 // Memory (8-bit): 17
2246 // Memory (32-bit): 24
2247 //---------------------------------------------------------------------------
2248 
2249 static const basic::ZoneRule kZoneRulesHK[] ACE_TIME_PROGMEM = {
2250  // Rule HK 1979 only - Oct 21 3:30 0 -
2251  {
2252  1979 /*fromYear*/,
2253  1979 /*toYear*/,
2254  10 /*inMonth*/,
2255  0 /*onDayOfWeek*/,
2256  21 /*onDayOfMonth*/,
2257  14 /*atTimeCode*/,
2258  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2259  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2260  '-' /*letter*/,
2261  },
2262 
2263 };
2264 
2265 
2266 
2267 const basic::ZonePolicy kZonePolicyHK ACE_TIME_PROGMEM = {
2268  kZoneRulesHK /*rules*/,
2269  nullptr /*letters*/,
2270  1 /*numRules*/,
2271  0 /*numLetters*/,
2272 };
2273 
2274 //---------------------------------------------------------------------------
2275 // Policy name: Haiti
2276 // Rules: 7
2277 // Memory (8-bit): 83
2278 // Memory (32-bit): 96
2279 //---------------------------------------------------------------------------
2280 
2281 static const basic::ZoneRule kZoneRulesHaiti[] ACE_TIME_PROGMEM = {
2282  // Rule Haiti 1988 1997 - Oct lastSun 1:00s 0 S
2283  {
2284  1988 /*fromYear*/,
2285  1997 /*toYear*/,
2286  10 /*inMonth*/,
2287  7 /*onDayOfWeek*/,
2288  0 /*onDayOfMonth*/,
2289  4 /*atTimeCode*/,
2290  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2291  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2292  'S' /*letter*/,
2293  },
2294  // Rule Haiti 2005 2006 - Apr Sun>=1 0:00 1:00 D
2295  {
2296  2005 /*fromYear*/,
2297  2006 /*toYear*/,
2298  4 /*inMonth*/,
2299  7 /*onDayOfWeek*/,
2300  1 /*onDayOfMonth*/,
2301  0 /*atTimeCode*/,
2302  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2303  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2304  'D' /*letter*/,
2305  },
2306  // Rule Haiti 2005 2006 - Oct lastSun 0:00 0 S
2307  {
2308  2005 /*fromYear*/,
2309  2006 /*toYear*/,
2310  10 /*inMonth*/,
2311  7 /*onDayOfWeek*/,
2312  0 /*onDayOfMonth*/,
2313  0 /*atTimeCode*/,
2314  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2315  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2316  'S' /*letter*/,
2317  },
2318  // Rule Haiti 2012 2015 - Mar Sun>=8 2:00 1:00 D
2319  {
2320  2012 /*fromYear*/,
2321  2015 /*toYear*/,
2322  3 /*inMonth*/,
2323  7 /*onDayOfWeek*/,
2324  8 /*onDayOfMonth*/,
2325  8 /*atTimeCode*/,
2326  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2327  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2328  'D' /*letter*/,
2329  },
2330  // Rule Haiti 2012 2015 - Nov Sun>=1 2:00 0 S
2331  {
2332  2012 /*fromYear*/,
2333  2015 /*toYear*/,
2334  11 /*inMonth*/,
2335  7 /*onDayOfWeek*/,
2336  1 /*onDayOfMonth*/,
2337  8 /*atTimeCode*/,
2338  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2339  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2340  'S' /*letter*/,
2341  },
2342  // Rule Haiti 2017 max - Mar Sun>=8 2:00 1:00 D
2343  {
2344  2017 /*fromYear*/,
2345  9999 /*toYear*/,
2346  3 /*inMonth*/,
2347  7 /*onDayOfWeek*/,
2348  8 /*onDayOfMonth*/,
2349  8 /*atTimeCode*/,
2350  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2351  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2352  'D' /*letter*/,
2353  },
2354  // Rule Haiti 2017 max - Nov Sun>=1 2:00 0 S
2355  {
2356  2017 /*fromYear*/,
2357  9999 /*toYear*/,
2358  11 /*inMonth*/,
2359  7 /*onDayOfWeek*/,
2360  1 /*onDayOfMonth*/,
2361  8 /*atTimeCode*/,
2362  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2363  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2364  'S' /*letter*/,
2365  },
2366 
2367 };
2368 
2369 
2370 
2371 const basic::ZonePolicy kZonePolicyHaiti ACE_TIME_PROGMEM = {
2372  kZoneRulesHaiti /*rules*/,
2373  nullptr /*letters*/,
2374  7 /*numRules*/,
2375  0 /*numLetters*/,
2376 };
2377 
2378 //---------------------------------------------------------------------------
2379 // Policy name: Holiday
2380 // Rules: 1
2381 // Memory (8-bit): 17
2382 // Memory (32-bit): 24
2383 //---------------------------------------------------------------------------
2384 
2385 static const basic::ZoneRule kZoneRulesHoliday[] ACE_TIME_PROGMEM = {
2386  // Rule Holiday 1993 1994 - Mar Sun>=1 2:00s 0 S
2387  {
2388  1993 /*fromYear*/,
2389  1994 /*toYear*/,
2390  3 /*inMonth*/,
2391  7 /*onDayOfWeek*/,
2392  1 /*onDayOfMonth*/,
2393  8 /*atTimeCode*/,
2394  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2395  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2396  'S' /*letter*/,
2397  },
2398 
2399 };
2400 
2401 
2402 
2403 const basic::ZonePolicy kZonePolicyHoliday ACE_TIME_PROGMEM = {
2404  kZoneRulesHoliday /*rules*/,
2405  nullptr /*letters*/,
2406  1 /*numRules*/,
2407  0 /*numLetters*/,
2408 };
2409 
2410 //---------------------------------------------------------------------------
2411 // Policy name: Hond
2412 // Rules: 3
2413 // Memory (8-bit): 39
2414 // Memory (32-bit): 48
2415 //---------------------------------------------------------------------------
2416 
2417 static const basic::ZoneRule kZoneRulesHond[] ACE_TIME_PROGMEM = {
2418  // Rule Hond 1987 1988 - Sep lastSun 0:00 0 S
2419  {
2420  1987 /*fromYear*/,
2421  1988 /*toYear*/,
2422  9 /*inMonth*/,
2423  7 /*onDayOfWeek*/,
2424  0 /*onDayOfMonth*/,
2425  0 /*atTimeCode*/,
2426  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2427  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2428  'S' /*letter*/,
2429  },
2430  // Rule Hond 2006 only - May Sun>=1 0:00 1:00 D
2431  {
2432  2006 /*fromYear*/,
2433  2006 /*toYear*/,
2434  5 /*inMonth*/,
2435  7 /*onDayOfWeek*/,
2436  1 /*onDayOfMonth*/,
2437  0 /*atTimeCode*/,
2438  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2439  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2440  'D' /*letter*/,
2441  },
2442  // Rule Hond 2006 only - Aug Mon>=1 0:00 0 S
2443  {
2444  2006 /*fromYear*/,
2445  2006 /*toYear*/,
2446  8 /*inMonth*/,
2447  1 /*onDayOfWeek*/,
2448  1 /*onDayOfMonth*/,
2449  0 /*atTimeCode*/,
2450  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2451  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2452  'S' /*letter*/,
2453  },
2454 
2455 };
2456 
2457 
2458 
2459 const basic::ZonePolicy kZonePolicyHond ACE_TIME_PROGMEM = {
2460  kZoneRulesHond /*rules*/,
2461  nullptr /*letters*/,
2462  3 /*numRules*/,
2463  0 /*numLetters*/,
2464 };
2465 
2466 //---------------------------------------------------------------------------
2467 // Policy name: Iran
2468 // Rules: 27
2469 // Memory (8-bit): 303
2470 // Memory (32-bit): 336
2471 //---------------------------------------------------------------------------
2472 
2473 static const basic::ZoneRule kZoneRulesIran[] ACE_TIME_PROGMEM = {
2474  // Rule Iran 1996 only - Sep 20 24:00 0 -
2475  {
2476  1996 /*fromYear*/,
2477  1996 /*toYear*/,
2478  9 /*inMonth*/,
2479  0 /*onDayOfWeek*/,
2480  20 /*onDayOfMonth*/,
2481  96 /*atTimeCode*/,
2482  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2483  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2484  '-' /*letter*/,
2485  },
2486  // Rule Iran 1997 1999 - Mar 21 24:00 1:00 -
2487  {
2488  1997 /*fromYear*/,
2489  1999 /*toYear*/,
2490  3 /*inMonth*/,
2491  0 /*onDayOfWeek*/,
2492  21 /*onDayOfMonth*/,
2493  96 /*atTimeCode*/,
2494  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2495  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2496  '-' /*letter*/,
2497  },
2498  // Rule Iran 1997 1999 - Sep 21 24:00 0 -
2499  {
2500  1997 /*fromYear*/,
2501  1999 /*toYear*/,
2502  9 /*inMonth*/,
2503  0 /*onDayOfWeek*/,
2504  21 /*onDayOfMonth*/,
2505  96 /*atTimeCode*/,
2506  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2507  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2508  '-' /*letter*/,
2509  },
2510  // Rule Iran 2000 only - Mar 20 24:00 1:00 -
2511  {
2512  2000 /*fromYear*/,
2513  2000 /*toYear*/,
2514  3 /*inMonth*/,
2515  0 /*onDayOfWeek*/,
2516  20 /*onDayOfMonth*/,
2517  96 /*atTimeCode*/,
2518  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2519  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2520  '-' /*letter*/,
2521  },
2522  // Rule Iran 2000 only - Sep 20 24:00 0 -
2523  {
2524  2000 /*fromYear*/,
2525  2000 /*toYear*/,
2526  9 /*inMonth*/,
2527  0 /*onDayOfWeek*/,
2528  20 /*onDayOfMonth*/,
2529  96 /*atTimeCode*/,
2530  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2531  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2532  '-' /*letter*/,
2533  },
2534  // Rule Iran 2001 2003 - Mar 21 24:00 1:00 -
2535  {
2536  2001 /*fromYear*/,
2537  2003 /*toYear*/,
2538  3 /*inMonth*/,
2539  0 /*onDayOfWeek*/,
2540  21 /*onDayOfMonth*/,
2541  96 /*atTimeCode*/,
2542  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2543  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2544  '-' /*letter*/,
2545  },
2546  // Rule Iran 2001 2003 - Sep 21 24:00 0 -
2547  {
2548  2001 /*fromYear*/,
2549  2003 /*toYear*/,
2550  9 /*inMonth*/,
2551  0 /*onDayOfWeek*/,
2552  21 /*onDayOfMonth*/,
2553  96 /*atTimeCode*/,
2554  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2555  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2556  '-' /*letter*/,
2557  },
2558  // Rule Iran 2004 only - Mar 20 24:00 1:00 -
2559  {
2560  2004 /*fromYear*/,
2561  2004 /*toYear*/,
2562  3 /*inMonth*/,
2563  0 /*onDayOfWeek*/,
2564  20 /*onDayOfMonth*/,
2565  96 /*atTimeCode*/,
2566  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2567  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2568  '-' /*letter*/,
2569  },
2570  // Rule Iran 2004 only - Sep 20 24:00 0 -
2571  {
2572  2004 /*fromYear*/,
2573  2004 /*toYear*/,
2574  9 /*inMonth*/,
2575  0 /*onDayOfWeek*/,
2576  20 /*onDayOfMonth*/,
2577  96 /*atTimeCode*/,
2578  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2579  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2580  '-' /*letter*/,
2581  },
2582  // Rule Iran 2005 only - Mar 21 24:00 1:00 -
2583  {
2584  2005 /*fromYear*/,
2585  2005 /*toYear*/,
2586  3 /*inMonth*/,
2587  0 /*onDayOfWeek*/,
2588  21 /*onDayOfMonth*/,
2589  96 /*atTimeCode*/,
2590  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2591  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2592  '-' /*letter*/,
2593  },
2594  // Rule Iran 2005 only - Sep 21 24:00 0 -
2595  {
2596  2005 /*fromYear*/,
2597  2005 /*toYear*/,
2598  9 /*inMonth*/,
2599  0 /*onDayOfWeek*/,
2600  21 /*onDayOfMonth*/,
2601  96 /*atTimeCode*/,
2602  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2603  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2604  '-' /*letter*/,
2605  },
2606  // Rule Iran 2008 only - Mar 20 24:00 1:00 -
2607  {
2608  2008 /*fromYear*/,
2609  2008 /*toYear*/,
2610  3 /*inMonth*/,
2611  0 /*onDayOfWeek*/,
2612  20 /*onDayOfMonth*/,
2613  96 /*atTimeCode*/,
2614  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2615  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2616  '-' /*letter*/,
2617  },
2618  // Rule Iran 2008 only - Sep 20 24:00 0 -
2619  {
2620  2008 /*fromYear*/,
2621  2008 /*toYear*/,
2622  9 /*inMonth*/,
2623  0 /*onDayOfWeek*/,
2624  20 /*onDayOfMonth*/,
2625  96 /*atTimeCode*/,
2626  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2627  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2628  '-' /*letter*/,
2629  },
2630  // Rule Iran 2009 2011 - Mar 21 24:00 1:00 -
2631  {
2632  2009 /*fromYear*/,
2633  2011 /*toYear*/,
2634  3 /*inMonth*/,
2635  0 /*onDayOfWeek*/,
2636  21 /*onDayOfMonth*/,
2637  96 /*atTimeCode*/,
2638  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2639  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2640  '-' /*letter*/,
2641  },
2642  // Rule Iran 2009 2011 - Sep 21 24:00 0 -
2643  {
2644  2009 /*fromYear*/,
2645  2011 /*toYear*/,
2646  9 /*inMonth*/,
2647  0 /*onDayOfWeek*/,
2648  21 /*onDayOfMonth*/,
2649  96 /*atTimeCode*/,
2650  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2651  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2652  '-' /*letter*/,
2653  },
2654  // Rule Iran 2012 only - Mar 20 24:00 1:00 -
2655  {
2656  2012 /*fromYear*/,
2657  2012 /*toYear*/,
2658  3 /*inMonth*/,
2659  0 /*onDayOfWeek*/,
2660  20 /*onDayOfMonth*/,
2661  96 /*atTimeCode*/,
2662  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2663  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2664  '-' /*letter*/,
2665  },
2666  // Rule Iran 2012 only - Sep 20 24:00 0 -
2667  {
2668  2012 /*fromYear*/,
2669  2012 /*toYear*/,
2670  9 /*inMonth*/,
2671  0 /*onDayOfWeek*/,
2672  20 /*onDayOfMonth*/,
2673  96 /*atTimeCode*/,
2674  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2675  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2676  '-' /*letter*/,
2677  },
2678  // Rule Iran 2013 2015 - Mar 21 24:00 1:00 -
2679  {
2680  2013 /*fromYear*/,
2681  2015 /*toYear*/,
2682  3 /*inMonth*/,
2683  0 /*onDayOfWeek*/,
2684  21 /*onDayOfMonth*/,
2685  96 /*atTimeCode*/,
2686  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2687  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2688  '-' /*letter*/,
2689  },
2690  // Rule Iran 2013 2015 - Sep 21 24:00 0 -
2691  {
2692  2013 /*fromYear*/,
2693  2015 /*toYear*/,
2694  9 /*inMonth*/,
2695  0 /*onDayOfWeek*/,
2696  21 /*onDayOfMonth*/,
2697  96 /*atTimeCode*/,
2698  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2699  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2700  '-' /*letter*/,
2701  },
2702  // Rule Iran 2016 only - Mar 20 24:00 1:00 -
2703  {
2704  2016 /*fromYear*/,
2705  2016 /*toYear*/,
2706  3 /*inMonth*/,
2707  0 /*onDayOfWeek*/,
2708  20 /*onDayOfMonth*/,
2709  96 /*atTimeCode*/,
2710  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2711  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2712  '-' /*letter*/,
2713  },
2714  // Rule Iran 2016 only - Sep 20 24:00 0 -
2715  {
2716  2016 /*fromYear*/,
2717  2016 /*toYear*/,
2718  9 /*inMonth*/,
2719  0 /*onDayOfWeek*/,
2720  20 /*onDayOfMonth*/,
2721  96 /*atTimeCode*/,
2722  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2723  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2724  '-' /*letter*/,
2725  },
2726  // Rule Iran 2017 2019 - Mar 21 24:00 1:00 -
2727  {
2728  2017 /*fromYear*/,
2729  2019 /*toYear*/,
2730  3 /*inMonth*/,
2731  0 /*onDayOfWeek*/,
2732  21 /*onDayOfMonth*/,
2733  96 /*atTimeCode*/,
2734  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2735  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2736  '-' /*letter*/,
2737  },
2738  // Rule Iran 2017 2019 - Sep 21 24:00 0 -
2739  {
2740  2017 /*fromYear*/,
2741  2019 /*toYear*/,
2742  9 /*inMonth*/,
2743  0 /*onDayOfWeek*/,
2744  21 /*onDayOfMonth*/,
2745  96 /*atTimeCode*/,
2746  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2747  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2748  '-' /*letter*/,
2749  },
2750  // Rule Iran 2020 only - Mar 20 24:00 1:00 -
2751  {
2752  2020 /*fromYear*/,
2753  2020 /*toYear*/,
2754  3 /*inMonth*/,
2755  0 /*onDayOfWeek*/,
2756  20 /*onDayOfMonth*/,
2757  96 /*atTimeCode*/,
2758  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2759  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2760  '-' /*letter*/,
2761  },
2762  // Rule Iran 2020 only - Sep 20 24:00 0 -
2763  {
2764  2020 /*fromYear*/,
2765  2020 /*toYear*/,
2766  9 /*inMonth*/,
2767  0 /*onDayOfWeek*/,
2768  20 /*onDayOfMonth*/,
2769  96 /*atTimeCode*/,
2770  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2771  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2772  '-' /*letter*/,
2773  },
2774  // Rule Iran 2021 2022 - Mar 21 24:00 1:00 -
2775  {
2776  2021 /*fromYear*/,
2777  2022 /*toYear*/,
2778  3 /*inMonth*/,
2779  0 /*onDayOfWeek*/,
2780  21 /*onDayOfMonth*/,
2781  96 /*atTimeCode*/,
2782  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2783  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2784  '-' /*letter*/,
2785  },
2786  // Rule Iran 2021 2022 - Sep 21 24:00 0 -
2787  {
2788  2021 /*fromYear*/,
2789  2022 /*toYear*/,
2790  9 /*inMonth*/,
2791  0 /*onDayOfWeek*/,
2792  21 /*onDayOfMonth*/,
2793  96 /*atTimeCode*/,
2794  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2795  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2796  '-' /*letter*/,
2797  },
2798 
2799 };
2800 
2801 
2802 
2803 const basic::ZonePolicy kZonePolicyIran ACE_TIME_PROGMEM = {
2804  kZoneRulesIran /*rules*/,
2805  nullptr /*letters*/,
2806  27 /*numRules*/,
2807  0 /*numLetters*/,
2808 };
2809 
2810 //---------------------------------------------------------------------------
2811 // Policy name: Iraq
2812 // Rules: 3
2813 // Memory (8-bit): 39
2814 // Memory (32-bit): 48
2815 //---------------------------------------------------------------------------
2816 
2817 static const basic::ZoneRule kZoneRulesIraq[] ACE_TIME_PROGMEM = {
2818  // Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 -
2819  {
2820  1985 /*fromYear*/,
2821  1990 /*toYear*/,
2822  9 /*inMonth*/,
2823  7 /*onDayOfWeek*/,
2824  0 /*onDayOfMonth*/,
2825  4 /*atTimeCode*/,
2826  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2827  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2828  '-' /*letter*/,
2829  },
2830  // Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 -
2831  {
2832  1991 /*fromYear*/,
2833  2007 /*toYear*/,
2834  4 /*inMonth*/,
2835  0 /*onDayOfWeek*/,
2836  1 /*onDayOfMonth*/,
2837  12 /*atTimeCode*/,
2838  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2839  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2840  '-' /*letter*/,
2841  },
2842  // Rule Iraq 1991 2007 - Oct 1 3:00s 0 -
2843  {
2844  1991 /*fromYear*/,
2845  2007 /*toYear*/,
2846  10 /*inMonth*/,
2847  0 /*onDayOfWeek*/,
2848  1 /*onDayOfMonth*/,
2849  12 /*atTimeCode*/,
2850  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2851  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2852  '-' /*letter*/,
2853  },
2854 
2855 };
2856 
2857 
2858 
2859 const basic::ZonePolicy kZonePolicyIraq ACE_TIME_PROGMEM = {
2860  kZoneRulesIraq /*rules*/,
2861  nullptr /*letters*/,
2862  3 /*numRules*/,
2863  0 /*numLetters*/,
2864 };
2865 
2866 //---------------------------------------------------------------------------
2867 // Policy name: Japan
2868 // Rules: 1
2869 // Memory (8-bit): 17
2870 // Memory (32-bit): 24
2871 //---------------------------------------------------------------------------
2872 
2873 static const basic::ZoneRule kZoneRulesJapan[] ACE_TIME_PROGMEM = {
2874  // Rule Japan 1948 1951 - Sep Sat>=8 25:00 0 S
2875  {
2876  1948 /*fromYear*/,
2877  1951 /*toYear*/,
2878  9 /*inMonth*/,
2879  6 /*onDayOfWeek*/,
2880  8 /*onDayOfMonth*/,
2881  100 /*atTimeCode*/,
2882  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2883  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2884  'S' /*letter*/,
2885  },
2886 
2887 };
2888 
2889 
2890 
2891 const basic::ZonePolicy kZonePolicyJapan ACE_TIME_PROGMEM = {
2892  kZoneRulesJapan /*rules*/,
2893  nullptr /*letters*/,
2894  1 /*numRules*/,
2895  0 /*numLetters*/,
2896 };
2897 
2898 //---------------------------------------------------------------------------
2899 // Policy name: Jordan
2900 // Rules: 4
2901 // Memory (8-bit): 50
2902 // Memory (32-bit): 60
2903 //---------------------------------------------------------------------------
2904 
2905 static const basic::ZoneRule kZoneRulesJordan[] ACE_TIME_PROGMEM = {
2906  // Rule Jordan 1995 1998 - Sep Fri>=15 0:00s 0 -
2907  {
2908  1995 /*fromYear*/,
2909  1998 /*toYear*/,
2910  9 /*inMonth*/,
2911  5 /*onDayOfWeek*/,
2912  15 /*onDayOfMonth*/,
2913  0 /*atTimeCode*/,
2914  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2915  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2916  '-' /*letter*/,
2917  },
2918  // Rule Jordan 1999 only - Jul 1 0:00s 1:00 S
2919  {
2920  1999 /*fromYear*/,
2921  1999 /*toYear*/,
2922  7 /*inMonth*/,
2923  0 /*onDayOfWeek*/,
2924  1 /*onDayOfMonth*/,
2925  0 /*atTimeCode*/,
2926  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2927  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2928  'S' /*letter*/,
2929  },
2930  // Rule Jordan 1999 2002 - Sep lastFri 0:00s 0 -
2931  {
2932  1999 /*fromYear*/,
2933  2002 /*toYear*/,
2934  9 /*inMonth*/,
2935  5 /*onDayOfWeek*/,
2936  0 /*onDayOfMonth*/,
2937  0 /*atTimeCode*/,
2938  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2939  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2940  '-' /*letter*/,
2941  },
2942  // Rule Jordan 2000 2001 - Mar lastThu 0:00s 1:00 S
2943  {
2944  2000 /*fromYear*/,
2945  2001 /*toYear*/,
2946  3 /*inMonth*/,
2947  4 /*onDayOfWeek*/,
2948  0 /*onDayOfMonth*/,
2949  0 /*atTimeCode*/,
2950  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2951  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2952  'S' /*letter*/,
2953  },
2954 
2955 };
2956 
2957 
2958 
2959 const basic::ZonePolicy kZonePolicyJordan ACE_TIME_PROGMEM = {
2960  kZoneRulesJordan /*rules*/,
2961  nullptr /*letters*/,
2962  4 /*numRules*/,
2963  0 /*numLetters*/,
2964 };
2965 
2966 //---------------------------------------------------------------------------
2967 // Policy name: LH
2968 // Rules: 9
2969 // Memory (8-bit): 105
2970 // Memory (32-bit): 120
2971 //---------------------------------------------------------------------------
2972 
2973 static const basic::ZoneRule kZoneRulesLH[] ACE_TIME_PROGMEM = {
2974  // Rule LH 1987 1999 - Oct lastSun 2:00 0:30 -
2975  {
2976  1987 /*fromYear*/,
2977  1999 /*toYear*/,
2978  10 /*inMonth*/,
2979  7 /*onDayOfWeek*/,
2980  0 /*onDayOfMonth*/,
2981  8 /*atTimeCode*/,
2982  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2983  2 /*deltaCode ((deltaMinutes=30)/15)*/,
2984  '-' /*letter*/,
2985  },
2986  // Rule LH 1990 1995 - Mar Sun>=1 2:00 0 -
2987  {
2988  1990 /*fromYear*/,
2989  1995 /*toYear*/,
2990  3 /*inMonth*/,
2991  7 /*onDayOfWeek*/,
2992  1 /*onDayOfMonth*/,
2993  8 /*atTimeCode*/,
2994  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2995  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2996  '-' /*letter*/,
2997  },
2998  // Rule LH 1996 2005 - Mar lastSun 2:00 0 -
2999  {
3000  1996 /*fromYear*/,
3001  2005 /*toYear*/,
3002  3 /*inMonth*/,
3003  7 /*onDayOfWeek*/,
3004  0 /*onDayOfMonth*/,
3005  8 /*atTimeCode*/,
3006  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3007  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3008  '-' /*letter*/,
3009  },
3010  // Rule LH 2000 only - Aug lastSun 2:00 0:30 -
3011  {
3012  2000 /*fromYear*/,
3013  2000 /*toYear*/,
3014  8 /*inMonth*/,
3015  7 /*onDayOfWeek*/,
3016  0 /*onDayOfMonth*/,
3017  8 /*atTimeCode*/,
3018  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3019  2 /*deltaCode ((deltaMinutes=30)/15)*/,
3020  '-' /*letter*/,
3021  },
3022  // Rule LH 2001 2007 - Oct lastSun 2:00 0:30 -
3023  {
3024  2001 /*fromYear*/,
3025  2007 /*toYear*/,
3026  10 /*inMonth*/,
3027  7 /*onDayOfWeek*/,
3028  0 /*onDayOfMonth*/,
3029  8 /*atTimeCode*/,
3030  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3031  2 /*deltaCode ((deltaMinutes=30)/15)*/,
3032  '-' /*letter*/,
3033  },
3034  // Rule LH 2006 only - Apr Sun>=1 2:00 0 -
3035  {
3036  2006 /*fromYear*/,
3037  2006 /*toYear*/,
3038  4 /*inMonth*/,
3039  7 /*onDayOfWeek*/,
3040  1 /*onDayOfMonth*/,
3041  8 /*atTimeCode*/,
3042  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3043  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3044  '-' /*letter*/,
3045  },
3046  // Rule LH 2007 only - Mar lastSun 2:00 0 -
3047  {
3048  2007 /*fromYear*/,
3049  2007 /*toYear*/,
3050  3 /*inMonth*/,
3051  7 /*onDayOfWeek*/,
3052  0 /*onDayOfMonth*/,
3053  8 /*atTimeCode*/,
3054  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3055  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3056  '-' /*letter*/,
3057  },
3058  // Rule LH 2008 max - Apr Sun>=1 2:00 0 -
3059  {
3060  2008 /*fromYear*/,
3061  9999 /*toYear*/,
3062  4 /*inMonth*/,
3063  7 /*onDayOfWeek*/,
3064  1 /*onDayOfMonth*/,
3065  8 /*atTimeCode*/,
3066  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3067  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3068  '-' /*letter*/,
3069  },
3070  // Rule LH 2008 max - Oct Sun>=1 2:00 0:30 -
3071  {
3072  2008 /*fromYear*/,
3073  9999 /*toYear*/,
3074  10 /*inMonth*/,
3075  7 /*onDayOfWeek*/,
3076  1 /*onDayOfMonth*/,
3077  8 /*atTimeCode*/,
3078  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3079  2 /*deltaCode ((deltaMinutes=30)/15)*/,
3080  '-' /*letter*/,
3081  },
3082 
3083 };
3084 
3085 
3086 
3087 const basic::ZonePolicy kZonePolicyLH ACE_TIME_PROGMEM = {
3088  kZoneRulesLH /*rules*/,
3089  nullptr /*letters*/,
3090  9 /*numRules*/,
3091  0 /*numLetters*/,
3092 };
3093 
3094 //---------------------------------------------------------------------------
3095 // Policy name: Lebanon
3096 // Rules: 3
3097 // Memory (8-bit): 39
3098 // Memory (32-bit): 48
3099 //---------------------------------------------------------------------------
3100 
3101 static const basic::ZoneRule kZoneRulesLebanon[] ACE_TIME_PROGMEM = {
3102  // Rule Lebanon 1993 max - Mar lastSun 0:00 1:00 S
3103  {
3104  1993 /*fromYear*/,
3105  9999 /*toYear*/,
3106  3 /*inMonth*/,
3107  7 /*onDayOfWeek*/,
3108  0 /*onDayOfMonth*/,
3109  0 /*atTimeCode*/,
3110  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3111  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3112  'S' /*letter*/,
3113  },
3114  // Rule Lebanon 1993 1998 - Sep lastSun 0:00 0 -
3115  {
3116  1993 /*fromYear*/,
3117  1998 /*toYear*/,
3118  9 /*inMonth*/,
3119  7 /*onDayOfWeek*/,
3120  0 /*onDayOfMonth*/,
3121  0 /*atTimeCode*/,
3122  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3123  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3124  '-' /*letter*/,
3125  },
3126  // Rule Lebanon 1999 max - Oct lastSun 0:00 0 -
3127  {
3128  1999 /*fromYear*/,
3129  9999 /*toYear*/,
3130  10 /*inMonth*/,
3131  7 /*onDayOfWeek*/,
3132  0 /*onDayOfMonth*/,
3133  0 /*atTimeCode*/,
3134  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3135  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3136  '-' /*letter*/,
3137  },
3138 
3139 };
3140 
3141 
3142 
3143 const basic::ZonePolicy kZonePolicyLebanon ACE_TIME_PROGMEM = {
3144  kZoneRulesLebanon /*rules*/,
3145  nullptr /*letters*/,
3146  3 /*numRules*/,
3147  0 /*numLetters*/,
3148 };
3149 
3150 //---------------------------------------------------------------------------
3151 // Policy name: Macau
3152 // Rules: 1
3153 // Memory (8-bit): 17
3154 // Memory (32-bit): 24
3155 //---------------------------------------------------------------------------
3156 
3157 static const basic::ZoneRule kZoneRulesMacau[] ACE_TIME_PROGMEM = {
3158  // Rule Macau 1979 only - Oct Sun>=16 03:30 0 S
3159  {
3160  1979 /*fromYear*/,
3161  1979 /*toYear*/,
3162  10 /*inMonth*/,
3163  7 /*onDayOfWeek*/,
3164  16 /*onDayOfMonth*/,
3165  14 /*atTimeCode*/,
3166  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3167  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3168  'S' /*letter*/,
3169  },
3170 
3171 };
3172 
3173 
3174 
3175 const basic::ZonePolicy kZonePolicyMacau ACE_TIME_PROGMEM = {
3176  kZoneRulesMacau /*rules*/,
3177  nullptr /*letters*/,
3178  1 /*numRules*/,
3179  0 /*numLetters*/,
3180 };
3181 
3182 //---------------------------------------------------------------------------
3183 // Policy name: Mauritius
3184 // Rules: 3
3185 // Memory (8-bit): 39
3186 // Memory (32-bit): 48
3187 //---------------------------------------------------------------------------
3188 
3189 static const basic::ZoneRule kZoneRulesMauritius[] ACE_TIME_PROGMEM = {
3190  // Rule Mauritius 1983 only - Mar 21 0:00 0 -
3191  {
3192  1983 /*fromYear*/,
3193  1983 /*toYear*/,
3194  3 /*inMonth*/,
3195  0 /*onDayOfWeek*/,
3196  21 /*onDayOfMonth*/,
3197  0 /*atTimeCode*/,
3198  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3199  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3200  '-' /*letter*/,
3201  },
3202  // Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 -
3203  {
3204  2008 /*fromYear*/,
3205  2008 /*toYear*/,
3206  10 /*inMonth*/,
3207  7 /*onDayOfWeek*/,
3208  0 /*onDayOfMonth*/,
3209  8 /*atTimeCode*/,
3210  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3211  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3212  '-' /*letter*/,
3213  },
3214  // Rule Mauritius 2009 only - Mar lastSun 2:00 0 -
3215  {
3216  2009 /*fromYear*/,
3217  2009 /*toYear*/,
3218  3 /*inMonth*/,
3219  7 /*onDayOfWeek*/,
3220  0 /*onDayOfMonth*/,
3221  8 /*atTimeCode*/,
3222  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3223  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3224  '-' /*letter*/,
3225  },
3226 
3227 };
3228 
3229 
3230 
3231 const basic::ZonePolicy kZonePolicyMauritius ACE_TIME_PROGMEM = {
3232  kZoneRulesMauritius /*rules*/,
3233  nullptr /*letters*/,
3234  3 /*numRules*/,
3235  0 /*numLetters*/,
3236 };
3237 
3238 //---------------------------------------------------------------------------
3239 // Policy name: Mexico
3240 // Rules: 7
3241 // Memory (8-bit): 83
3242 // Memory (32-bit): 96
3243 //---------------------------------------------------------------------------
3244 
3245 static const basic::ZoneRule kZoneRulesMexico[] ACE_TIME_PROGMEM = {
3246  // Rule Mexico 1950 only - Jul 30 0:00 0 S
3247  {
3248  1950 /*fromYear*/,
3249  1950 /*toYear*/,
3250  7 /*inMonth*/,
3251  0 /*onDayOfWeek*/,
3252  30 /*onDayOfMonth*/,
3253  0 /*atTimeCode*/,
3254  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3255  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3256  'S' /*letter*/,
3257  },
3258  // Rule Mexico 1996 2000 - Apr Sun>=1 2:00 1:00 D
3259  {
3260  1996 /*fromYear*/,
3261  2000 /*toYear*/,
3262  4 /*inMonth*/,
3263  7 /*onDayOfWeek*/,
3264  1 /*onDayOfMonth*/,
3265  8 /*atTimeCode*/,
3266  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3267  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3268  'D' /*letter*/,
3269  },
3270  // Rule Mexico 1996 2000 - Oct lastSun 2:00 0 S
3271  {
3272  1996 /*fromYear*/,
3273  2000 /*toYear*/,
3274  10 /*inMonth*/,
3275  7 /*onDayOfWeek*/,
3276  0 /*onDayOfMonth*/,
3277  8 /*atTimeCode*/,
3278  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3279  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3280  'S' /*letter*/,
3281  },
3282  // Rule Mexico 2001 only - May Sun>=1 2:00 1:00 D
3283  {
3284  2001 /*fromYear*/,
3285  2001 /*toYear*/,
3286  5 /*inMonth*/,
3287  7 /*onDayOfWeek*/,
3288  1 /*onDayOfMonth*/,
3289  8 /*atTimeCode*/,
3290  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3291  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3292  'D' /*letter*/,
3293  },
3294  // Rule Mexico 2001 only - Sep lastSun 2:00 0 S
3295  {
3296  2001 /*fromYear*/,
3297  2001 /*toYear*/,
3298  9 /*inMonth*/,
3299  7 /*onDayOfWeek*/,
3300  0 /*onDayOfMonth*/,
3301  8 /*atTimeCode*/,
3302  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3303  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3304  'S' /*letter*/,
3305  },
3306  // Rule Mexico 2002 2022 - Apr Sun>=1 2:00 1:00 D
3307  {
3308  2002 /*fromYear*/,
3309  2022 /*toYear*/,
3310  4 /*inMonth*/,
3311  7 /*onDayOfWeek*/,
3312  1 /*onDayOfMonth*/,
3313  8 /*atTimeCode*/,
3314  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3315  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3316  'D' /*letter*/,
3317  },
3318  // Rule Mexico 2002 2022 - Oct lastSun 2:00 0 S
3319  {
3320  2002 /*fromYear*/,
3321  2022 /*toYear*/,
3322  10 /*inMonth*/,
3323  7 /*onDayOfWeek*/,
3324  0 /*onDayOfMonth*/,
3325  8 /*atTimeCode*/,
3326  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3327  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3328  'S' /*letter*/,
3329  },
3330 
3331 };
3332 
3333 
3334 
3335 const basic::ZonePolicy kZonePolicyMexico ACE_TIME_PROGMEM = {
3336  kZoneRulesMexico /*rules*/,
3337  nullptr /*letters*/,
3338  7 /*numRules*/,
3339  0 /*numLetters*/,
3340 };
3341 
3342 //---------------------------------------------------------------------------
3343 // Policy name: Moldova
3344 // Rules: 2
3345 // Memory (8-bit): 28
3346 // Memory (32-bit): 36
3347 //---------------------------------------------------------------------------
3348 
3349 static const basic::ZoneRule kZoneRulesMoldova[] ACE_TIME_PROGMEM = {
3350  // Rule Moldova 1997 max - Mar lastSun 2:00 1:00 S
3351  {
3352  1997 /*fromYear*/,
3353  9999 /*toYear*/,
3354  3 /*inMonth*/,
3355  7 /*onDayOfWeek*/,
3356  0 /*onDayOfMonth*/,
3357  8 /*atTimeCode*/,
3358  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3359  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3360  'S' /*letter*/,
3361  },
3362  // Rule Moldova 1997 max - Oct lastSun 3:00 0 -
3363  {
3364  1997 /*fromYear*/,
3365  9999 /*toYear*/,
3366  10 /*inMonth*/,
3367  7 /*onDayOfWeek*/,
3368  0 /*onDayOfMonth*/,
3369  12 /*atTimeCode*/,
3370  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3371  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3372  '-' /*letter*/,
3373  },
3374 
3375 };
3376 
3377 
3378 
3379 const basic::ZonePolicy kZonePolicyMoldova ACE_TIME_PROGMEM = {
3380  kZoneRulesMoldova /*rules*/,
3381  nullptr /*letters*/,
3382  2 /*numRules*/,
3383  0 /*numLetters*/,
3384 };
3385 
3386 //---------------------------------------------------------------------------
3387 // Policy name: Moncton
3388 // Rules: 3
3389 // Memory (8-bit): 39
3390 // Memory (32-bit): 48
3391 //---------------------------------------------------------------------------
3392 
3393 static const basic::ZoneRule kZoneRulesMoncton[] ACE_TIME_PROGMEM = {
3394  // Rule Moncton 1957 1972 - Oct lastSun 2:00 0 S
3395  {
3396  1957 /*fromYear*/,
3397  1972 /*toYear*/,
3398  10 /*inMonth*/,
3399  7 /*onDayOfWeek*/,
3400  0 /*onDayOfMonth*/,
3401  8 /*atTimeCode*/,
3402  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3403  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3404  'S' /*letter*/,
3405  },
3406  // Rule Moncton 1993 2006 - Apr Sun>=1 0:01 1:00 D
3407  {
3408  1993 /*fromYear*/,
3409  2006 /*toYear*/,
3410  4 /*inMonth*/,
3411  7 /*onDayOfWeek*/,
3412  1 /*onDayOfMonth*/,
3413  0 /*atTimeCode*/,
3414  1 /*atTimeModifier (kSuffixW + minute=1)*/,
3415  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3416  'D' /*letter*/,
3417  },
3418  // Rule Moncton 1993 2006 - Oct lastSun 0:01 0 S
3419  {
3420  1993 /*fromYear*/,
3421  2006 /*toYear*/,
3422  10 /*inMonth*/,
3423  7 /*onDayOfWeek*/,
3424  0 /*onDayOfMonth*/,
3425  0 /*atTimeCode*/,
3426  1 /*atTimeModifier (kSuffixW + minute=1)*/,
3427  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3428  'S' /*letter*/,
3429  },
3430 
3431 };
3432 
3433 
3434 
3435 const basic::ZonePolicy kZonePolicyMoncton ACE_TIME_PROGMEM = {
3436  kZoneRulesMoncton /*rules*/,
3437  nullptr /*letters*/,
3438  3 /*numRules*/,
3439  0 /*numLetters*/,
3440 };
3441 
3442 //---------------------------------------------------------------------------
3443 // Policy name: Mongol
3444 // Rules: 6
3445 // Memory (8-bit): 72
3446 // Memory (32-bit): 84
3447 //---------------------------------------------------------------------------
3448 
3449 static const basic::ZoneRule kZoneRulesMongol[] ACE_TIME_PROGMEM = {
3450  // Rule Mongol 1984 1998 - Sep lastSun 0:00 0 -
3451  {
3452  1984 /*fromYear*/,
3453  1998 /*toYear*/,
3454  9 /*inMonth*/,
3455  7 /*onDayOfWeek*/,
3456  0 /*onDayOfMonth*/,
3457  0 /*atTimeCode*/,
3458  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3459  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3460  '-' /*letter*/,
3461  },
3462  // Rule Mongol 2001 only - Apr lastSat 2:00 1:00 -
3463  {
3464  2001 /*fromYear*/,
3465  2001 /*toYear*/,
3466  4 /*inMonth*/,
3467  6 /*onDayOfWeek*/,
3468  0 /*onDayOfMonth*/,
3469  8 /*atTimeCode*/,
3470  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3471  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3472  '-' /*letter*/,
3473  },
3474  // Rule Mongol 2001 2006 - Sep lastSat 2:00 0 -
3475  {
3476  2001 /*fromYear*/,
3477  2006 /*toYear*/,
3478  9 /*inMonth*/,
3479  6 /*onDayOfWeek*/,
3480  0 /*onDayOfMonth*/,
3481  8 /*atTimeCode*/,
3482  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3483  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3484  '-' /*letter*/,
3485  },
3486  // Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 -
3487  {
3488  2002 /*fromYear*/,
3489  2006 /*toYear*/,
3490  3 /*inMonth*/,
3491  6 /*onDayOfWeek*/,
3492  0 /*onDayOfMonth*/,
3493  8 /*atTimeCode*/,
3494  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3495  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3496  '-' /*letter*/,
3497  },
3498  // Rule Mongol 2015 2016 - Mar lastSat 2:00 1:00 -
3499  {
3500  2015 /*fromYear*/,
3501  2016 /*toYear*/,
3502  3 /*inMonth*/,
3503  6 /*onDayOfWeek*/,
3504  0 /*onDayOfMonth*/,
3505  8 /*atTimeCode*/,
3506  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3507  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3508  '-' /*letter*/,
3509  },
3510  // Rule Mongol 2015 2016 - Sep lastSat 0:00 0 -
3511  {
3512  2015 /*fromYear*/,
3513  2016 /*toYear*/,
3514  9 /*inMonth*/,
3515  6 /*onDayOfWeek*/,
3516  0 /*onDayOfMonth*/,
3517  0 /*atTimeCode*/,
3518  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3519  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3520  '-' /*letter*/,
3521  },
3522 
3523 };
3524 
3525 
3526 
3527 const basic::ZonePolicy kZonePolicyMongol ACE_TIME_PROGMEM = {
3528  kZoneRulesMongol /*rules*/,
3529  nullptr /*letters*/,
3530  6 /*numRules*/,
3531  0 /*numLetters*/,
3532 };
3533 
3534 //---------------------------------------------------------------------------
3535 // Policy name: NC
3536 // Rules: 1
3537 // Memory (8-bit): 17
3538 // Memory (32-bit): 24
3539 //---------------------------------------------------------------------------
3540 
3541 static const basic::ZoneRule kZoneRulesNC[] ACE_TIME_PROGMEM = {
3542  // Rule NC 1997 only - Mar 2 2:00s 0 -
3543  {
3544  1997 /*fromYear*/,
3545  1997 /*toYear*/,
3546  3 /*inMonth*/,
3547  0 /*onDayOfWeek*/,
3548  2 /*onDayOfMonth*/,
3549  8 /*atTimeCode*/,
3550  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3551  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3552  '-' /*letter*/,
3553  },
3554 
3555 };
3556 
3557 
3558 
3559 const basic::ZonePolicy kZonePolicyNC ACE_TIME_PROGMEM = {
3560  kZoneRulesNC /*rules*/,
3561  nullptr /*letters*/,
3562  1 /*numRules*/,
3563  0 /*numLetters*/,
3564 };
3565 
3566 //---------------------------------------------------------------------------
3567 // Policy name: NZ
3568 // Rules: 5
3569 // Memory (8-bit): 61
3570 // Memory (32-bit): 72
3571 //---------------------------------------------------------------------------
3572 
3573 static const basic::ZoneRule kZoneRulesNZ[] ACE_TIME_PROGMEM = {
3574  // Rule NZ 1989 only - Oct Sun>=8 2:00s 1:00 D
3575  {
3576  1989 /*fromYear*/,
3577  1989 /*toYear*/,
3578  10 /*inMonth*/,
3579  7 /*onDayOfWeek*/,
3580  8 /*onDayOfMonth*/,
3581  8 /*atTimeCode*/,
3582  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3583  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3584  'D' /*letter*/,
3585  },
3586  // Rule NZ 1990 2006 - Oct Sun>=1 2:00s 1:00 D
3587  {
3588  1990 /*fromYear*/,
3589  2006 /*toYear*/,
3590  10 /*inMonth*/,
3591  7 /*onDayOfWeek*/,
3592  1 /*onDayOfMonth*/,
3593  8 /*atTimeCode*/,
3594  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3595  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3596  'D' /*letter*/,
3597  },
3598  // Rule NZ 1990 2007 - Mar Sun>=15 2:00s 0 S
3599  {
3600  1990 /*fromYear*/,
3601  2007 /*toYear*/,
3602  3 /*inMonth*/,
3603  7 /*onDayOfWeek*/,
3604  15 /*onDayOfMonth*/,
3605  8 /*atTimeCode*/,
3606  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3607  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3608  'S' /*letter*/,
3609  },
3610  // Rule NZ 2007 max - Sep lastSun 2:00s 1:00 D
3611  {
3612  2007 /*fromYear*/,
3613  9999 /*toYear*/,
3614  9 /*inMonth*/,
3615  7 /*onDayOfWeek*/,
3616  0 /*onDayOfMonth*/,
3617  8 /*atTimeCode*/,
3618  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3619  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3620  'D' /*letter*/,
3621  },
3622  // Rule NZ 2008 max - Apr Sun>=1 2:00s 0 S
3623  {
3624  2008 /*fromYear*/,
3625  9999 /*toYear*/,
3626  4 /*inMonth*/,
3627  7 /*onDayOfWeek*/,
3628  1 /*onDayOfMonth*/,
3629  8 /*atTimeCode*/,
3630  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3631  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3632  'S' /*letter*/,
3633  },
3634 
3635 };
3636 
3637 
3638 
3639 const basic::ZonePolicy kZonePolicyNZ ACE_TIME_PROGMEM = {
3640  kZoneRulesNZ /*rules*/,
3641  nullptr /*letters*/,
3642  5 /*numRules*/,
3643  0 /*numLetters*/,
3644 };
3645 
3646 //---------------------------------------------------------------------------
3647 // Policy name: Nic
3648 // Rules: 5
3649 // Memory (8-bit): 61
3650 // Memory (32-bit): 72
3651 //---------------------------------------------------------------------------
3652 
3653 static const basic::ZoneRule kZoneRulesNic[] ACE_TIME_PROGMEM = {
3654  // Rule Nic 1979 1980 - Jun Mon>=23 0:00 0 S
3655  {
3656  1979 /*fromYear*/,
3657  1980 /*toYear*/,
3658  6 /*inMonth*/,
3659  1 /*onDayOfWeek*/,
3660  23 /*onDayOfMonth*/,
3661  0 /*atTimeCode*/,
3662  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3663  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3664  'S' /*letter*/,
3665  },
3666  // Rule Nic 2005 only - Apr 10 0:00 1:00 D
3667  {
3668  2005 /*fromYear*/,
3669  2005 /*toYear*/,
3670  4 /*inMonth*/,
3671  0 /*onDayOfWeek*/,
3672  10 /*onDayOfMonth*/,
3673  0 /*atTimeCode*/,
3674  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3675  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3676  'D' /*letter*/,
3677  },
3678  // Rule Nic 2005 only - Oct Sun>=1 0:00 0 S
3679  {
3680  2005 /*fromYear*/,
3681  2005 /*toYear*/,
3682  10 /*inMonth*/,
3683  7 /*onDayOfWeek*/,
3684  1 /*onDayOfMonth*/,
3685  0 /*atTimeCode*/,
3686  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3687  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3688  'S' /*letter*/,
3689  },
3690  // Rule Nic 2006 only - Apr 30 2:00 1:00 D
3691  {
3692  2006 /*fromYear*/,
3693  2006 /*toYear*/,
3694  4 /*inMonth*/,
3695  0 /*onDayOfWeek*/,
3696  30 /*onDayOfMonth*/,
3697  8 /*atTimeCode*/,
3698  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3699  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3700  'D' /*letter*/,
3701  },
3702  // Rule Nic 2006 only - Oct Sun>=1 1:00 0 S
3703  {
3704  2006 /*fromYear*/,
3705  2006 /*toYear*/,
3706  10 /*inMonth*/,
3707  7 /*onDayOfWeek*/,
3708  1 /*onDayOfMonth*/,
3709  4 /*atTimeCode*/,
3710  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3711  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3712  'S' /*letter*/,
3713  },
3714 
3715 };
3716 
3717 
3718 
3719 const basic::ZonePolicy kZonePolicyNic ACE_TIME_PROGMEM = {
3720  kZoneRulesNic /*rules*/,
3721  nullptr /*letters*/,
3722  5 /*numRules*/,
3723  0 /*numLetters*/,
3724 };
3725 
3726 //---------------------------------------------------------------------------
3727 // Policy name: PRC
3728 // Rules: 1
3729 // Memory (8-bit): 17
3730 // Memory (32-bit): 24
3731 //---------------------------------------------------------------------------
3732 
3733 static const basic::ZoneRule kZoneRulesPRC[] ACE_TIME_PROGMEM = {
3734  // Rule PRC 1986 1991 - Sep Sun>=11 2:00 0 S
3735  {
3736  1986 /*fromYear*/,
3737  1991 /*toYear*/,
3738  9 /*inMonth*/,
3739  7 /*onDayOfWeek*/,
3740  11 /*onDayOfMonth*/,
3741  8 /*atTimeCode*/,
3742  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3743  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3744  'S' /*letter*/,
3745  },
3746 
3747 };
3748 
3749 
3750 
3751 const basic::ZonePolicy kZonePolicyPRC ACE_TIME_PROGMEM = {
3752  kZoneRulesPRC /*rules*/,
3753  nullptr /*letters*/,
3754  1 /*numRules*/,
3755  0 /*numLetters*/,
3756 };
3757 
3758 //---------------------------------------------------------------------------
3759 // Policy name: Pakistan
3760 // Rules: 6
3761 // Memory (8-bit): 72
3762 // Memory (32-bit): 84
3763 //---------------------------------------------------------------------------
3764 
3765 static const basic::ZoneRule kZoneRulesPakistan[] ACE_TIME_PROGMEM = {
3766  // Anchor: Rule Pakistan 2002 only - Oct Sun>=2 0:00 0 -
3767  {
3768  0 /*fromYear*/,
3769  0 /*toYear*/,
3770  1 /*inMonth*/,
3771  0 /*onDayOfWeek*/,
3772  1 /*onDayOfMonth*/,
3773  0 /*atTimeCode*/,
3774  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3775  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3776  '-' /*letter*/,
3777  },
3778  // Rule Pakistan 2002 only - Apr Sun>=2 0:00 1:00 S
3779  {
3780  2002 /*fromYear*/,
3781  2002 /*toYear*/,
3782  4 /*inMonth*/,
3783  7 /*onDayOfWeek*/,
3784  2 /*onDayOfMonth*/,
3785  0 /*atTimeCode*/,
3786  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3787  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3788  'S' /*letter*/,
3789  },
3790  // Rule Pakistan 2002 only - Oct Sun>=2 0:00 0 -
3791  {
3792  2002 /*fromYear*/,
3793  2002 /*toYear*/,
3794  10 /*inMonth*/,
3795  7 /*onDayOfWeek*/,
3796  2 /*onDayOfMonth*/,
3797  0 /*atTimeCode*/,
3798  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3799  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3800  '-' /*letter*/,
3801  },
3802  // Rule Pakistan 2008 only - Jun 1 0:00 1:00 S
3803  {
3804  2008 /*fromYear*/,
3805  2008 /*toYear*/,
3806  6 /*inMonth*/,
3807  0 /*onDayOfWeek*/,
3808  1 /*onDayOfMonth*/,
3809  0 /*atTimeCode*/,
3810  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3811  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3812  'S' /*letter*/,
3813  },
3814  // Rule Pakistan 2008 2009 - Nov 1 0:00 0 -
3815  {
3816  2008 /*fromYear*/,
3817  2009 /*toYear*/,
3818  11 /*inMonth*/,
3819  0 /*onDayOfWeek*/,
3820  1 /*onDayOfMonth*/,
3821  0 /*atTimeCode*/,
3822  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3823  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3824  '-' /*letter*/,
3825  },
3826  // Rule Pakistan 2009 only - Apr 15 0:00 1:00 S
3827  {
3828  2009 /*fromYear*/,
3829  2009 /*toYear*/,
3830  4 /*inMonth*/,
3831  0 /*onDayOfWeek*/,
3832  15 /*onDayOfMonth*/,
3833  0 /*atTimeCode*/,
3834  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3835  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3836  'S' /*letter*/,
3837  },
3838 
3839 };
3840 
3841 
3842 
3843 const basic::ZonePolicy kZonePolicyPakistan ACE_TIME_PROGMEM = {
3844  kZoneRulesPakistan /*rules*/,
3845  nullptr /*letters*/,
3846  6 /*numRules*/,
3847  0 /*numLetters*/,
3848 };
3849 
3850 //---------------------------------------------------------------------------
3851 // Policy name: Para
3852 // Rules: 10
3853 // Memory (8-bit): 116
3854 // Memory (32-bit): 132
3855 //---------------------------------------------------------------------------
3856 
3857 static const basic::ZoneRule kZoneRulesPara[] ACE_TIME_PROGMEM = {
3858  // Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 -
3859  {
3860  1996 /*fromYear*/,
3861  2001 /*toYear*/,
3862  10 /*inMonth*/,
3863  7 /*onDayOfWeek*/,
3864  1 /*onDayOfMonth*/,
3865  0 /*atTimeCode*/,
3866  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3867  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3868  '-' /*letter*/,
3869  },
3870  // Rule Para 1997 only - Feb lastSun 0:00 0 -
3871  {
3872  1997 /*fromYear*/,
3873  1997 /*toYear*/,
3874  2 /*inMonth*/,
3875  7 /*onDayOfWeek*/,
3876  0 /*onDayOfMonth*/,
3877  0 /*atTimeCode*/,
3878  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3879  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3880  '-' /*letter*/,
3881  },
3882  // Rule Para 1998 2001 - Mar Sun>=1 0:00 0 -
3883  {
3884  1998 /*fromYear*/,
3885  2001 /*toYear*/,
3886  3 /*inMonth*/,
3887  7 /*onDayOfWeek*/,
3888  1 /*onDayOfMonth*/,
3889  0 /*atTimeCode*/,
3890  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3891  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3892  '-' /*letter*/,
3893  },
3894  // Rule Para 2002 2004 - Apr Sun>=1 0:00 0 -
3895  {
3896  2002 /*fromYear*/,
3897  2004 /*toYear*/,
3898  4 /*inMonth*/,
3899  7 /*onDayOfWeek*/,
3900  1 /*onDayOfMonth*/,
3901  0 /*atTimeCode*/,
3902  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3903  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3904  '-' /*letter*/,
3905  },
3906  // Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 -
3907  {
3908  2002 /*fromYear*/,
3909  2003 /*toYear*/,
3910  9 /*inMonth*/,
3911  7 /*onDayOfWeek*/,
3912  1 /*onDayOfMonth*/,
3913  0 /*atTimeCode*/,
3914  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3915  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3916  '-' /*letter*/,
3917  },
3918  // Rule Para 2004 2009 - Oct Sun>=15 0:00 1:00 -
3919  {
3920  2004 /*fromYear*/,
3921  2009 /*toYear*/,
3922  10 /*inMonth*/,
3923  7 /*onDayOfWeek*/,
3924  15 /*onDayOfMonth*/,
3925  0 /*atTimeCode*/,
3926  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3927  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3928  '-' /*letter*/,
3929  },
3930  // Rule Para 2005 2009 - Mar Sun>=8 0:00 0 -
3931  {
3932  2005 /*fromYear*/,
3933  2009 /*toYear*/,
3934  3 /*inMonth*/,
3935  7 /*onDayOfWeek*/,
3936  8 /*onDayOfMonth*/,
3937  0 /*atTimeCode*/,
3938  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3939  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3940  '-' /*letter*/,
3941  },
3942  // Rule Para 2010 max - Oct Sun>=1 0:00 1:00 -
3943  {
3944  2010 /*fromYear*/,
3945  9999 /*toYear*/,
3946  10 /*inMonth*/,
3947  7 /*onDayOfWeek*/,
3948  1 /*onDayOfMonth*/,
3949  0 /*atTimeCode*/,
3950  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3951  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3952  '-' /*letter*/,
3953  },
3954  // Rule Para 2010 2012 - Apr Sun>=8 0:00 0 -
3955  {
3956  2010 /*fromYear*/,
3957  2012 /*toYear*/,
3958  4 /*inMonth*/,
3959  7 /*onDayOfWeek*/,
3960  8 /*onDayOfMonth*/,
3961  0 /*atTimeCode*/,
3962  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3963  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3964  '-' /*letter*/,
3965  },
3966  // Rule Para 2013 max - Mar Sun>=22 0:00 0 -
3967  {
3968  2013 /*fromYear*/,
3969  9999 /*toYear*/,
3970  3 /*inMonth*/,
3971  7 /*onDayOfWeek*/,
3972  22 /*onDayOfMonth*/,
3973  0 /*atTimeCode*/,
3974  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3975  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3976  '-' /*letter*/,
3977  },
3978 
3979 };
3980 
3981 
3982 
3983 const basic::ZonePolicy kZonePolicyPara ACE_TIME_PROGMEM = {
3984  kZoneRulesPara /*rules*/,
3985  nullptr /*letters*/,
3986  10 /*numRules*/,
3987  0 /*numLetters*/,
3988 };
3989 
3990 //---------------------------------------------------------------------------
3991 // Policy name: Peru
3992 // Rules: 1
3993 // Memory (8-bit): 17
3994 // Memory (32-bit): 24
3995 //---------------------------------------------------------------------------
3996 
3997 static const basic::ZoneRule kZoneRulesPeru[] ACE_TIME_PROGMEM = {
3998  // Rule Peru 1994 only - Apr 1 0:00 0 -
3999  {
4000  1994 /*fromYear*/,
4001  1994 /*toYear*/,
4002  4 /*inMonth*/,
4003  0 /*onDayOfWeek*/,
4004  1 /*onDayOfMonth*/,
4005  0 /*atTimeCode*/,
4006  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4007  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4008  '-' /*letter*/,
4009  },
4010 
4011 };
4012 
4013 
4014 
4015 const basic::ZonePolicy kZonePolicyPeru ACE_TIME_PROGMEM = {
4016  kZoneRulesPeru /*rules*/,
4017  nullptr /*letters*/,
4018  1 /*numRules*/,
4019  0 /*numLetters*/,
4020 };
4021 
4022 //---------------------------------------------------------------------------
4023 // Policy name: Phil
4024 // Rules: 1
4025 // Memory (8-bit): 17
4026 // Memory (32-bit): 24
4027 //---------------------------------------------------------------------------
4028 
4029 static const basic::ZoneRule kZoneRulesPhil[] ACE_TIME_PROGMEM = {
4030  // Rule Phil 1978 only - Sep 21 0:00 0 S
4031  {
4032  1978 /*fromYear*/,
4033  1978 /*toYear*/,
4034  9 /*inMonth*/,
4035  0 /*onDayOfWeek*/,
4036  21 /*onDayOfMonth*/,
4037  0 /*atTimeCode*/,
4038  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4039  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4040  'S' /*letter*/,
4041  },
4042 
4043 };
4044 
4045 
4046 
4047 const basic::ZonePolicy kZonePolicyPhil ACE_TIME_PROGMEM = {
4048  kZoneRulesPhil /*rules*/,
4049  nullptr /*letters*/,
4050  1 /*numRules*/,
4051  0 /*numLetters*/,
4052 };
4053 
4054 //---------------------------------------------------------------------------
4055 // Policy name: ROK
4056 // Rules: 1
4057 // Memory (8-bit): 17
4058 // Memory (32-bit): 24
4059 //---------------------------------------------------------------------------
4060 
4061 static const basic::ZoneRule kZoneRulesROK[] ACE_TIME_PROGMEM = {
4062  // Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S
4063  {
4064  1987 /*fromYear*/,
4065  1988 /*toYear*/,
4066  10 /*inMonth*/,
4067  7 /*onDayOfWeek*/,
4068  8 /*onDayOfMonth*/,
4069  12 /*atTimeCode*/,
4070  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4071  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4072  'S' /*letter*/,
4073  },
4074 
4075 };
4076 
4077 
4078 
4079 const basic::ZonePolicy kZonePolicyROK ACE_TIME_PROGMEM = {
4080  kZoneRulesROK /*rules*/,
4081  nullptr /*letters*/,
4082  1 /*numRules*/,
4083  0 /*numLetters*/,
4084 };
4085 
4086 //---------------------------------------------------------------------------
4087 // Policy name: RussiaAsia
4088 // Rules: 3
4089 // Memory (8-bit): 39
4090 // Memory (32-bit): 48
4091 //---------------------------------------------------------------------------
4092 
4093 static const basic::ZoneRule kZoneRulesRussiaAsia[] ACE_TIME_PROGMEM = {
4094  // Rule RussiaAsia 1984 1995 - Sep lastSun 2:00s 0 -
4095  {
4096  1984 /*fromYear*/,
4097  1995 /*toYear*/,
4098  9 /*inMonth*/,
4099  7 /*onDayOfWeek*/,
4100  0 /*onDayOfMonth*/,
4101  8 /*atTimeCode*/,
4102  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4103  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4104  '-' /*letter*/,
4105  },
4106  // Rule RussiaAsia 1985 2010 - Mar lastSun 2:00s 1:00 -
4107  {
4108  1985 /*fromYear*/,
4109  2010 /*toYear*/,
4110  3 /*inMonth*/,
4111  7 /*onDayOfWeek*/,
4112  0 /*onDayOfMonth*/,
4113  8 /*atTimeCode*/,
4114  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4115  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4116  '-' /*letter*/,
4117  },
4118  // Rule RussiaAsia 1996 2010 - Oct lastSun 2:00s 0 -
4119  {
4120  1996 /*fromYear*/,
4121  2010 /*toYear*/,
4122  10 /*inMonth*/,
4123  7 /*onDayOfWeek*/,
4124  0 /*onDayOfMonth*/,
4125  8 /*atTimeCode*/,
4126  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4127  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4128  '-' /*letter*/,
4129  },
4130 
4131 };
4132 
4133 
4134 
4135 const basic::ZonePolicy kZonePolicyRussiaAsia ACE_TIME_PROGMEM = {
4136  kZoneRulesRussiaAsia /*rules*/,
4137  nullptr /*letters*/,
4138  3 /*numRules*/,
4139  0 /*numLetters*/,
4140 };
4141 
4142 //---------------------------------------------------------------------------
4143 // Policy name: SA
4144 // Rules: 1
4145 // Memory (8-bit): 17
4146 // Memory (32-bit): 24
4147 //---------------------------------------------------------------------------
4148 
4149 static const basic::ZoneRule kZoneRulesSA[] ACE_TIME_PROGMEM = {
4150  // Rule SA 1943 1944 - Mar Sun>=15 2:00 0 -
4151  {
4152  1943 /*fromYear*/,
4153  1944 /*toYear*/,
4154  3 /*inMonth*/,
4155  7 /*onDayOfWeek*/,
4156  15 /*onDayOfMonth*/,
4157  8 /*atTimeCode*/,
4158  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4159  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4160  '-' /*letter*/,
4161  },
4162 
4163 };
4164 
4165 
4166 
4167 const basic::ZonePolicy kZonePolicySA ACE_TIME_PROGMEM = {
4168  kZoneRulesSA /*rules*/,
4169  nullptr /*letters*/,
4170  1 /*numRules*/,
4171  0 /*numLetters*/,
4172 };
4173 
4174 //---------------------------------------------------------------------------
4175 // Policy name: Salv
4176 // Rules: 1
4177 // Memory (8-bit): 17
4178 // Memory (32-bit): 24
4179 //---------------------------------------------------------------------------
4180 
4181 static const basic::ZoneRule kZoneRulesSalv[] ACE_TIME_PROGMEM = {
4182  // Rule Salv 1987 1988 - Sep lastSun 0:00 0 S
4183  {
4184  1987 /*fromYear*/,
4185  1988 /*toYear*/,
4186  9 /*inMonth*/,
4187  7 /*onDayOfWeek*/,
4188  0 /*onDayOfMonth*/,
4189  0 /*atTimeCode*/,
4190  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4191  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4192  'S' /*letter*/,
4193  },
4194 
4195 };
4196 
4197 
4198 
4199 const basic::ZonePolicy kZonePolicySalv ACE_TIME_PROGMEM = {
4200  kZoneRulesSalv /*rules*/,
4201  nullptr /*letters*/,
4202  1 /*numRules*/,
4203  0 /*numLetters*/,
4204 };
4205 
4206 //---------------------------------------------------------------------------
4207 // Policy name: Taiwan
4208 // Rules: 1
4209 // Memory (8-bit): 17
4210 // Memory (32-bit): 24
4211 //---------------------------------------------------------------------------
4212 
4213 static const basic::ZoneRule kZoneRulesTaiwan[] ACE_TIME_PROGMEM = {
4214  // Rule Taiwan 1979 only - Oct 1 0:00 0 S
4215  {
4216  1979 /*fromYear*/,
4217  1979 /*toYear*/,
4218  10 /*inMonth*/,
4219  0 /*onDayOfWeek*/,
4220  1 /*onDayOfMonth*/,
4221  0 /*atTimeCode*/,
4222  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4223  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4224  'S' /*letter*/,
4225  },
4226 
4227 };
4228 
4229 
4230 
4231 const basic::ZonePolicy kZonePolicyTaiwan ACE_TIME_PROGMEM = {
4232  kZoneRulesTaiwan /*rules*/,
4233  nullptr /*letters*/,
4234  1 /*numRules*/,
4235  0 /*numLetters*/,
4236 };
4237 
4238 //---------------------------------------------------------------------------
4239 // Policy name: Thule
4240 // Rules: 5
4241 // Memory (8-bit): 61
4242 // Memory (32-bit): 72
4243 //---------------------------------------------------------------------------
4244 
4245 static const basic::ZoneRule kZoneRulesThule[] ACE_TIME_PROGMEM = {
4246  // Rule Thule 1991 1992 - Sep lastSun 2:00 0 S
4247  {
4248  1991 /*fromYear*/,
4249  1992 /*toYear*/,
4250  9 /*inMonth*/,
4251  7 /*onDayOfWeek*/,
4252  0 /*onDayOfMonth*/,
4253  8 /*atTimeCode*/,
4254  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4255  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4256  'S' /*letter*/,
4257  },
4258  // Rule Thule 1993 2006 - Apr Sun>=1 2:00 1:00 D
4259  {
4260  1993 /*fromYear*/,
4261  2006 /*toYear*/,
4262  4 /*inMonth*/,
4263  7 /*onDayOfWeek*/,
4264  1 /*onDayOfMonth*/,
4265  8 /*atTimeCode*/,
4266  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4267  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4268  'D' /*letter*/,
4269  },
4270  // Rule Thule 1993 2006 - Oct lastSun 2:00 0 S
4271  {
4272  1993 /*fromYear*/,
4273  2006 /*toYear*/,
4274  10 /*inMonth*/,
4275  7 /*onDayOfWeek*/,
4276  0 /*onDayOfMonth*/,
4277  8 /*atTimeCode*/,
4278  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4279  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4280  'S' /*letter*/,
4281  },
4282  // Rule Thule 2007 max - Mar Sun>=8 2:00 1:00 D
4283  {
4284  2007 /*fromYear*/,
4285  9999 /*toYear*/,
4286  3 /*inMonth*/,
4287  7 /*onDayOfWeek*/,
4288  8 /*onDayOfMonth*/,
4289  8 /*atTimeCode*/,
4290  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4291  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4292  'D' /*letter*/,
4293  },
4294  // Rule Thule 2007 max - Nov Sun>=1 2:00 0 S
4295  {
4296  2007 /*fromYear*/,
4297  9999 /*toYear*/,
4298  11 /*inMonth*/,
4299  7 /*onDayOfWeek*/,
4300  1 /*onDayOfMonth*/,
4301  8 /*atTimeCode*/,
4302  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4303  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4304  'S' /*letter*/,
4305  },
4306 
4307 };
4308 
4309 
4310 
4311 const basic::ZonePolicy kZonePolicyThule ACE_TIME_PROGMEM = {
4312  kZoneRulesThule /*rules*/,
4313  nullptr /*letters*/,
4314  5 /*numRules*/,
4315  0 /*numLetters*/,
4316 };
4317 
4318 //---------------------------------------------------------------------------
4319 // Policy name: Tonga
4320 // Rules: 7
4321 // Memory (8-bit): 83
4322 // Memory (32-bit): 96
4323 //---------------------------------------------------------------------------
4324 
4325 static const basic::ZoneRule kZoneRulesTonga[] ACE_TIME_PROGMEM = {
4326  // Anchor: Rule Tonga 2000 only - Mar 19 2:00s 0 -
4327  {
4328  0 /*fromYear*/,
4329  0 /*toYear*/,
4330  1 /*inMonth*/,
4331  0 /*onDayOfWeek*/,
4332  1 /*onDayOfMonth*/,
4333  0 /*atTimeCode*/,
4334  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4335  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4336  '-' /*letter*/,
4337  },
4338  // Rule Tonga 1999 only - Oct 7 2:00s 1:00 -
4339  {
4340  1999 /*fromYear*/,
4341  1999 /*toYear*/,
4342  10 /*inMonth*/,
4343  0 /*onDayOfWeek*/,
4344  7 /*onDayOfMonth*/,
4345  8 /*atTimeCode*/,
4346  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4347  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4348  '-' /*letter*/,
4349  },
4350  // Rule Tonga 2000 only - Mar 19 2:00s 0 -
4351  {
4352  2000 /*fromYear*/,
4353  2000 /*toYear*/,
4354  3 /*inMonth*/,
4355  0 /*onDayOfWeek*/,
4356  19 /*onDayOfMonth*/,
4357  8 /*atTimeCode*/,
4358  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4359  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4360  '-' /*letter*/,
4361  },
4362  // Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 -
4363  {
4364  2000 /*fromYear*/,
4365  2001 /*toYear*/,
4366  11 /*inMonth*/,
4367  7 /*onDayOfWeek*/,
4368  1 /*onDayOfMonth*/,
4369  8 /*atTimeCode*/,
4370  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4371  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4372  '-' /*letter*/,
4373  },
4374  // Rule Tonga 2001 2002 - Jan lastSun 2:00 0 -
4375  {
4376  2001 /*fromYear*/,
4377  2002 /*toYear*/,
4378  1 /*inMonth*/,
4379  7 /*onDayOfWeek*/,
4380  0 /*onDayOfMonth*/,
4381  8 /*atTimeCode*/,
4382  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4383  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4384  '-' /*letter*/,
4385  },
4386  // Rule Tonga 2016 only - Nov Sun>=1 2:00 1:00 -
4387  {
4388  2016 /*fromYear*/,
4389  2016 /*toYear*/,
4390  11 /*inMonth*/,
4391  7 /*onDayOfWeek*/,
4392  1 /*onDayOfMonth*/,
4393  8 /*atTimeCode*/,
4394  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4395  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4396  '-' /*letter*/,
4397  },
4398  // Rule Tonga 2017 only - Jan Sun>=15 3:00 0 -
4399  {
4400  2017 /*fromYear*/,
4401  2017 /*toYear*/,
4402  1 /*inMonth*/,
4403  7 /*onDayOfWeek*/,
4404  15 /*onDayOfMonth*/,
4405  12 /*atTimeCode*/,
4406  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4407  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4408  '-' /*letter*/,
4409  },
4410 
4411 };
4412 
4413 
4414 
4415 const basic::ZonePolicy kZonePolicyTonga ACE_TIME_PROGMEM = {
4416  kZoneRulesTonga /*rules*/,
4417  nullptr /*letters*/,
4418  7 /*numRules*/,
4419  0 /*numLetters*/,
4420 };
4421 
4422 //---------------------------------------------------------------------------
4423 // Policy name: Tunisia
4424 // Rules: 5
4425 // Memory (8-bit): 61
4426 // Memory (32-bit): 72
4427 //---------------------------------------------------------------------------
4428 
4429 static const basic::ZoneRule kZoneRulesTunisia[] ACE_TIME_PROGMEM = {
4430  // Rule Tunisia 1988 1990 - Sep lastSun 0:00s 0 -
4431  {
4432  1988 /*fromYear*/,
4433  1990 /*toYear*/,
4434  9 /*inMonth*/,
4435  7 /*onDayOfWeek*/,
4436  0 /*onDayOfMonth*/,
4437  0 /*atTimeCode*/,
4438  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4439  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4440  '-' /*letter*/,
4441  },
4442  // Rule Tunisia 2005 only - May 1 0:00s 1:00 S
4443  {
4444  2005 /*fromYear*/,
4445  2005 /*toYear*/,
4446  5 /*inMonth*/,
4447  0 /*onDayOfWeek*/,
4448  1 /*onDayOfMonth*/,
4449  0 /*atTimeCode*/,
4450  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4451  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4452  'S' /*letter*/,
4453  },
4454  // Rule Tunisia 2005 only - Sep 30 1:00s 0 -
4455  {
4456  2005 /*fromYear*/,
4457  2005 /*toYear*/,
4458  9 /*inMonth*/,
4459  0 /*onDayOfWeek*/,
4460  30 /*onDayOfMonth*/,
4461  4 /*atTimeCode*/,
4462  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4463  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4464  '-' /*letter*/,
4465  },
4466  // Rule Tunisia 2006 2008 - Mar lastSun 2:00s 1:00 S
4467  {
4468  2006 /*fromYear*/,
4469  2008 /*toYear*/,
4470  3 /*inMonth*/,
4471  7 /*onDayOfWeek*/,
4472  0 /*onDayOfMonth*/,
4473  8 /*atTimeCode*/,
4474  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4475  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4476  'S' /*letter*/,
4477  },
4478  // Rule Tunisia 2006 2008 - Oct lastSun 2:00s 0 -
4479  {
4480  2006 /*fromYear*/,
4481  2008 /*toYear*/,
4482  10 /*inMonth*/,
4483  7 /*onDayOfWeek*/,
4484  0 /*onDayOfMonth*/,
4485  8 /*atTimeCode*/,
4486  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4487  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4488  '-' /*letter*/,
4489  },
4490 
4491 };
4492 
4493 
4494 
4495 const basic::ZonePolicy kZonePolicyTunisia ACE_TIME_PROGMEM = {
4496  kZoneRulesTunisia /*rules*/,
4497  nullptr /*letters*/,
4498  5 /*numRules*/,
4499  0 /*numLetters*/,
4500 };
4501 
4502 //---------------------------------------------------------------------------
4503 // Policy name: US
4504 // Rules: 5
4505 // Memory (8-bit): 61
4506 // Memory (32-bit): 72
4507 //---------------------------------------------------------------------------
4508 
4509 static const basic::ZoneRule kZoneRulesUS[] ACE_TIME_PROGMEM = {
4510  // Rule US 1967 2006 - Oct lastSun 2:00 0 S
4511  {
4512  1967 /*fromYear*/,
4513  2006 /*toYear*/,
4514  10 /*inMonth*/,
4515  7 /*onDayOfWeek*/,
4516  0 /*onDayOfMonth*/,
4517  8 /*atTimeCode*/,
4518  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4519  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4520  'S' /*letter*/,
4521  },
4522  // Rule US 1976 1986 - Apr lastSun 2:00 1:00 D
4523  {
4524  1976 /*fromYear*/,
4525  1986 /*toYear*/,
4526  4 /*inMonth*/,
4527  7 /*onDayOfWeek*/,
4528  0 /*onDayOfMonth*/,
4529  8 /*atTimeCode*/,
4530  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4531  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4532  'D' /*letter*/,
4533  },
4534  // Rule US 1987 2006 - Apr Sun>=1 2:00 1:00 D
4535  {
4536  1987 /*fromYear*/,
4537  2006 /*toYear*/,
4538  4 /*inMonth*/,
4539  7 /*onDayOfWeek*/,
4540  1 /*onDayOfMonth*/,
4541  8 /*atTimeCode*/,
4542  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4543  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4544  'D' /*letter*/,
4545  },
4546  // Rule US 2007 max - Mar Sun>=8 2:00 1:00 D
4547  {
4548  2007 /*fromYear*/,
4549  9999 /*toYear*/,
4550  3 /*inMonth*/,
4551  7 /*onDayOfWeek*/,
4552  8 /*onDayOfMonth*/,
4553  8 /*atTimeCode*/,
4554  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4555  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4556  'D' /*letter*/,
4557  },
4558  // Rule US 2007 max - Nov Sun>=1 2:00 0 S
4559  {
4560  2007 /*fromYear*/,
4561  9999 /*toYear*/,
4562  11 /*inMonth*/,
4563  7 /*onDayOfWeek*/,
4564  1 /*onDayOfMonth*/,
4565  8 /*atTimeCode*/,
4566  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4567  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4568  'S' /*letter*/,
4569  },
4570 
4571 };
4572 
4573 
4574 
4575 const basic::ZonePolicy kZonePolicyUS ACE_TIME_PROGMEM = {
4576  kZoneRulesUS /*rules*/,
4577  nullptr /*letters*/,
4578  5 /*numRules*/,
4579  0 /*numLetters*/,
4580 };
4581 
4582 //---------------------------------------------------------------------------
4583 // Policy name: Uruguay
4584 // Rules: 6
4585 // Memory (8-bit): 72
4586 // Memory (32-bit): 84
4587 //---------------------------------------------------------------------------
4588 
4589 static const basic::ZoneRule kZoneRulesUruguay[] ACE_TIME_PROGMEM = {
4590  // Rule Uruguay 1993 only - Feb 28 0:00 0 -
4591  {
4592  1993 /*fromYear*/,
4593  1993 /*toYear*/,
4594  2 /*inMonth*/,
4595  0 /*onDayOfWeek*/,
4596  28 /*onDayOfMonth*/,
4597  0 /*atTimeCode*/,
4598  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4599  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4600  '-' /*letter*/,
4601  },
4602  // Rule Uruguay 2004 only - Sep 19 0:00 1:00 -
4603  {
4604  2004 /*fromYear*/,
4605  2004 /*toYear*/,
4606  9 /*inMonth*/,
4607  0 /*onDayOfWeek*/,
4608  19 /*onDayOfMonth*/,
4609  0 /*atTimeCode*/,
4610  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4611  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4612  '-' /*letter*/,
4613  },
4614  // Rule Uruguay 2005 only - Mar 27 2:00 0 -
4615  {
4616  2005 /*fromYear*/,
4617  2005 /*toYear*/,
4618  3 /*inMonth*/,
4619  0 /*onDayOfWeek*/,
4620  27 /*onDayOfMonth*/,
4621  8 /*atTimeCode*/,
4622  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4623  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4624  '-' /*letter*/,
4625  },
4626  // Rule Uruguay 2005 only - Oct 9 2:00 1:00 -
4627  {
4628  2005 /*fromYear*/,
4629  2005 /*toYear*/,
4630  10 /*inMonth*/,
4631  0 /*onDayOfWeek*/,
4632  9 /*onDayOfMonth*/,
4633  8 /*atTimeCode*/,
4634  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4635  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4636  '-' /*letter*/,
4637  },
4638  // Rule Uruguay 2006 2015 - Mar Sun>=8 2:00 0 -
4639  {
4640  2006 /*fromYear*/,
4641  2015 /*toYear*/,
4642  3 /*inMonth*/,
4643  7 /*onDayOfWeek*/,
4644  8 /*onDayOfMonth*/,
4645  8 /*atTimeCode*/,
4646  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4647  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4648  '-' /*letter*/,
4649  },
4650  // Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 -
4651  {
4652  2006 /*fromYear*/,
4653  2014 /*toYear*/,
4654  10 /*inMonth*/,
4655  7 /*onDayOfWeek*/,
4656  1 /*onDayOfMonth*/,
4657  8 /*atTimeCode*/,
4658  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4659  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4660  '-' /*letter*/,
4661  },
4662 
4663 };
4664 
4665 
4666 
4667 const basic::ZonePolicy kZonePolicyUruguay ACE_TIME_PROGMEM = {
4668  kZoneRulesUruguay /*rules*/,
4669  nullptr /*letters*/,
4670  6 /*numRules*/,
4671  0 /*numLetters*/,
4672 };
4673 
4674 //---------------------------------------------------------------------------
4675 // Policy name: Vanuatu
4676 // Rules: 1
4677 // Memory (8-bit): 17
4678 // Memory (32-bit): 24
4679 //---------------------------------------------------------------------------
4680 
4681 static const basic::ZoneRule kZoneRulesVanuatu[] ACE_TIME_PROGMEM = {
4682  // Rule Vanuatu 1992 1993 - Jan Sat>=22 24:00 0 -
4683  {
4684  1992 /*fromYear*/,
4685  1993 /*toYear*/,
4686  1 /*inMonth*/,
4687  6 /*onDayOfWeek*/,
4688  22 /*onDayOfMonth*/,
4689  96 /*atTimeCode*/,
4690  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4691  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4692  '-' /*letter*/,
4693  },
4694 
4695 };
4696 
4697 
4698 
4699 const basic::ZonePolicy kZonePolicyVanuatu ACE_TIME_PROGMEM = {
4700  kZoneRulesVanuatu /*rules*/,
4701  nullptr /*letters*/,
4702  1 /*numRules*/,
4703  0 /*numLetters*/,
4704 };
4705 
4706 //---------------------------------------------------------------------------
4707 // Policy name: Winn
4708 // Rules: 3
4709 // Memory (8-bit): 39
4710 // Memory (32-bit): 48
4711 //---------------------------------------------------------------------------
4712 
4713 static const basic::ZoneRule kZoneRulesWinn[] ACE_TIME_PROGMEM = {
4714  // Rule Winn 1966 1986 - Apr lastSun 2:00s 1:00 D
4715  {
4716  1966 /*fromYear*/,
4717  1986 /*toYear*/,
4718  4 /*inMonth*/,
4719  7 /*onDayOfWeek*/,
4720  0 /*onDayOfMonth*/,
4721  8 /*atTimeCode*/,
4722  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4723  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4724  'D' /*letter*/,
4725  },
4726  // Rule Winn 1966 2005 - Oct lastSun 2:00s 0 S
4727  {
4728  1966 /*fromYear*/,
4729  2005 /*toYear*/,
4730  10 /*inMonth*/,
4731  7 /*onDayOfWeek*/,
4732  0 /*onDayOfMonth*/,
4733  8 /*atTimeCode*/,
4734  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4735  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4736  'S' /*letter*/,
4737  },
4738  // Rule Winn 1987 2005 - Apr Sun>=1 2:00s 1:00 D
4739  {
4740  1987 /*fromYear*/,
4741  2005 /*toYear*/,
4742  4 /*inMonth*/,
4743  7 /*onDayOfWeek*/,
4744  1 /*onDayOfMonth*/,
4745  8 /*atTimeCode*/,
4746  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4747  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4748  'D' /*letter*/,
4749  },
4750 
4751 };
4752 
4753 
4754 
4755 const basic::ZonePolicy kZonePolicyWinn ACE_TIME_PROGMEM = {
4756  kZoneRulesWinn /*rules*/,
4757  nullptr /*letters*/,
4758  3 /*numRules*/,
4759  0 /*numLetters*/,
4760 };
4761 
4762 //---------------------------------------------------------------------------
4763 // Policy name: Zion
4764 // Rules: 24
4765 // Memory (8-bit): 270
4766 // Memory (32-bit): 300
4767 //---------------------------------------------------------------------------
4768 
4769 static const basic::ZoneRule kZoneRulesZion[] ACE_TIME_PROGMEM = {
4770  // Rule Zion 1998 only - Sep 6 0:00 0 S
4771  {
4772  1998 /*fromYear*/,
4773  1998 /*toYear*/,
4774  9 /*inMonth*/,
4775  0 /*onDayOfWeek*/,
4776  6 /*onDayOfMonth*/,
4777  0 /*atTimeCode*/,
4778  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4779  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4780  'S' /*letter*/,
4781  },
4782  // Rule Zion 1999 only - Apr 2 2:00 1:00 D
4783  {
4784  1999 /*fromYear*/,
4785  1999 /*toYear*/,
4786  4 /*inMonth*/,
4787  0 /*onDayOfWeek*/,
4788  2 /*onDayOfMonth*/,
4789  8 /*atTimeCode*/,
4790  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4791  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4792  'D' /*letter*/,
4793  },
4794  // Rule Zion 1999 only - Sep 3 2:00 0 S
4795  {
4796  1999 /*fromYear*/,
4797  1999 /*toYear*/,
4798  9 /*inMonth*/,
4799  0 /*onDayOfWeek*/,
4800  3 /*onDayOfMonth*/,
4801  8 /*atTimeCode*/,
4802  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4803  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4804  'S' /*letter*/,
4805  },
4806  // Rule Zion 2000 only - Apr 14 2:00 1:00 D
4807  {
4808  2000 /*fromYear*/,
4809  2000 /*toYear*/,
4810  4 /*inMonth*/,
4811  0 /*onDayOfWeek*/,
4812  14 /*onDayOfMonth*/,
4813  8 /*atTimeCode*/,
4814  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4815  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4816  'D' /*letter*/,
4817  },
4818  // Rule Zion 2000 only - Oct 6 1:00 0 S
4819  {
4820  2000 /*fromYear*/,
4821  2000 /*toYear*/,
4822  10 /*inMonth*/,
4823  0 /*onDayOfWeek*/,
4824  6 /*onDayOfMonth*/,
4825  4 /*atTimeCode*/,
4826  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4827  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4828  'S' /*letter*/,
4829  },
4830  // Rule Zion 2001 only - Apr 9 1:00 1:00 D
4831  {
4832  2001 /*fromYear*/,
4833  2001 /*toYear*/,
4834  4 /*inMonth*/,
4835  0 /*onDayOfWeek*/,
4836  9 /*onDayOfMonth*/,
4837  4 /*atTimeCode*/,
4838  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4839  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4840  'D' /*letter*/,
4841  },
4842  // Rule Zion 2001 only - Sep 24 1:00 0 S
4843  {
4844  2001 /*fromYear*/,
4845  2001 /*toYear*/,
4846  9 /*inMonth*/,
4847  0 /*onDayOfWeek*/,
4848  24 /*onDayOfMonth*/,
4849  4 /*atTimeCode*/,
4850  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4851  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4852  'S' /*letter*/,
4853  },
4854  // Rule Zion 2002 only - Mar 29 1:00 1:00 D
4855  {
4856  2002 /*fromYear*/,
4857  2002 /*toYear*/,
4858  3 /*inMonth*/,
4859  0 /*onDayOfWeek*/,
4860  29 /*onDayOfMonth*/,
4861  4 /*atTimeCode*/,
4862  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4863  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4864  'D' /*letter*/,
4865  },
4866  // Rule Zion 2002 only - Oct 7 1:00 0 S
4867  {
4868  2002 /*fromYear*/,
4869  2002 /*toYear*/,
4870  10 /*inMonth*/,
4871  0 /*onDayOfWeek*/,
4872  7 /*onDayOfMonth*/,
4873  4 /*atTimeCode*/,
4874  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4875  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4876  'S' /*letter*/,
4877  },
4878  // Rule Zion 2003 only - Mar 28 1:00 1:00 D
4879  {
4880  2003 /*fromYear*/,
4881  2003 /*toYear*/,
4882  3 /*inMonth*/,
4883  0 /*onDayOfWeek*/,
4884  28 /*onDayOfMonth*/,
4885  4 /*atTimeCode*/,
4886  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4887  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4888  'D' /*letter*/,
4889  },
4890  // Rule Zion 2003 only - Oct 3 1:00 0 S
4891  {
4892  2003 /*fromYear*/,
4893  2003 /*toYear*/,
4894  10 /*inMonth*/,
4895  0 /*onDayOfWeek*/,
4896  3 /*onDayOfMonth*/,
4897  4 /*atTimeCode*/,
4898  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4899  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4900  'S' /*letter*/,
4901  },
4902  // Rule Zion 2004 only - Apr 7 1:00 1:00 D
4903  {
4904  2004 /*fromYear*/,
4905  2004 /*toYear*/,
4906  4 /*inMonth*/,
4907  0 /*onDayOfWeek*/,
4908  7 /*onDayOfMonth*/,
4909  4 /*atTimeCode*/,
4910  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4911  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4912  'D' /*letter*/,
4913  },
4914  // Rule Zion 2004 only - Sep 22 1:00 0 S
4915  {
4916  2004 /*fromYear*/,
4917  2004 /*toYear*/,
4918  9 /*inMonth*/,
4919  0 /*onDayOfWeek*/,
4920  22 /*onDayOfMonth*/,
4921  4 /*atTimeCode*/,
4922  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4923  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4924  'S' /*letter*/,
4925  },
4926  // Rule Zion 2005 2012 - Apr Fri<=1 2:00 1:00 D
4927  {
4928  2005 /*fromYear*/,
4929  2012 /*toYear*/,
4930  4 /*inMonth*/,
4931  5 /*onDayOfWeek*/,
4932  -1 /*onDayOfMonth*/,
4933  8 /*atTimeCode*/,
4934  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4935  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4936  'D' /*letter*/,
4937  },
4938  // Rule Zion 2005 only - Oct 9 2:00 0 S
4939  {
4940  2005 /*fromYear*/,
4941  2005 /*toYear*/,
4942  10 /*inMonth*/,
4943  0 /*onDayOfWeek*/,
4944  9 /*onDayOfMonth*/,
4945  8 /*atTimeCode*/,
4946  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4947  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4948  'S' /*letter*/,
4949  },
4950  // Rule Zion 2006 only - Oct 1 2:00 0 S
4951  {
4952  2006 /*fromYear*/,
4953  2006 /*toYear*/,
4954  10 /*inMonth*/,
4955  0 /*onDayOfWeek*/,
4956  1 /*onDayOfMonth*/,
4957  8 /*atTimeCode*/,
4958  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4959  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4960  'S' /*letter*/,
4961  },
4962  // Rule Zion 2007 only - Sep 16 2:00 0 S
4963  {
4964  2007 /*fromYear*/,
4965  2007 /*toYear*/,
4966  9 /*inMonth*/,
4967  0 /*onDayOfWeek*/,
4968  16 /*onDayOfMonth*/,
4969  8 /*atTimeCode*/,
4970  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4971  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4972  'S' /*letter*/,
4973  },
4974  // Rule Zion 2008 only - Oct 5 2:00 0 S
4975  {
4976  2008 /*fromYear*/,
4977  2008 /*toYear*/,
4978  10 /*inMonth*/,
4979  0 /*onDayOfWeek*/,
4980  5 /*onDayOfMonth*/,
4981  8 /*atTimeCode*/,
4982  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4983  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4984  'S' /*letter*/,
4985  },
4986  // Rule Zion 2009 only - Sep 27 2:00 0 S
4987  {
4988  2009 /*fromYear*/,
4989  2009 /*toYear*/,
4990  9 /*inMonth*/,
4991  0 /*onDayOfWeek*/,
4992  27 /*onDayOfMonth*/,
4993  8 /*atTimeCode*/,
4994  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4995  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4996  'S' /*letter*/,
4997  },
4998  // Rule Zion 2010 only - Sep 12 2:00 0 S
4999  {
5000  2010 /*fromYear*/,
5001  2010 /*toYear*/,
5002  9 /*inMonth*/,
5003  0 /*onDayOfWeek*/,
5004  12 /*onDayOfMonth*/,
5005  8 /*atTimeCode*/,
5006  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5007  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5008  'S' /*letter*/,
5009  },
5010  // Rule Zion 2011 only - Oct 2 2:00 0 S
5011  {
5012  2011 /*fromYear*/,
5013  2011 /*toYear*/,
5014  10 /*inMonth*/,
5015  0 /*onDayOfWeek*/,
5016  2 /*onDayOfMonth*/,
5017  8 /*atTimeCode*/,
5018  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5019  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5020  'S' /*letter*/,
5021  },
5022  // Rule Zion 2012 only - Sep 23 2:00 0 S
5023  {
5024  2012 /*fromYear*/,
5025  2012 /*toYear*/,
5026  9 /*inMonth*/,
5027  0 /*onDayOfWeek*/,
5028  23 /*onDayOfMonth*/,
5029  8 /*atTimeCode*/,
5030  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5031  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5032  'S' /*letter*/,
5033  },
5034  // Rule Zion 2013 max - Mar Fri>=23 2:00 1:00 D
5035  {
5036  2013 /*fromYear*/,
5037  9999 /*toYear*/,
5038  3 /*inMonth*/,
5039  5 /*onDayOfWeek*/,
5040  23 /*onDayOfMonth*/,
5041  8 /*atTimeCode*/,
5042  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5043  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5044  'D' /*letter*/,
5045  },
5046  // Rule Zion 2013 max - Oct lastSun 2:00 0 S
5047  {
5048  2013 /*fromYear*/,
5049  9999 /*toYear*/,
5050  10 /*inMonth*/,
5051  7 /*onDayOfWeek*/,
5052  0 /*onDayOfMonth*/,
5053  8 /*atTimeCode*/,
5054  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5055  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5056  'S' /*letter*/,
5057  },
5058 
5059 };
5060 
5061 
5062 
5063 const basic::ZonePolicy kZonePolicyZion ACE_TIME_PROGMEM = {
5064  kZoneRulesZion /*rules*/,
5065  nullptr /*letters*/,
5066  24 /*numRules*/,
5067  0 /*numLetters*/,
5068 };
5069 
5070 
5071 
5072 }
5073 }
Macros and definitions that provide a consistency layer among the various Arduino boards for compatib...