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